diff options
author | SendilKumar N <sendilkumarn@live.com> | 2017-03-09 20:30:01 +0800 |
---|---|---|
committer | Josh Matthews <josh@joshmatthews.net> | 2017-05-19 09:38:50 -0400 |
commit | 5acee23f5d46b40c35491de22592a58a9ef5a45b (patch) | |
tree | 960083d54ce4929c486cff1e04713ca16cf99a6a /components/script/dom/htmlimageelement.rs | |
parent | d855c929ef32e8f7d4bc15ba726e8eb5f8ad8e05 (diff) | |
download | servo-5acee23f5d46b40c35491de22592a58a9ef5a45b.tar.gz servo-5acee23f5d46b40c35491de22592a58a9ef5a45b.zip |
Use the origin of the actual image response when determining if a canvas is origin clean.
Diffstat (limited to 'components/script/dom/htmlimageelement.rs')
-rw-r--r-- | components/script/dom/htmlimageelement.rs | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/components/script/dom/htmlimageelement.rs b/components/script/dom/htmlimageelement.rs index b706288a2cf..e38b615f9ad 100644 --- a/components/script/dom/htmlimageelement.rs +++ b/components/script/dom/htmlimageelement.rs @@ -48,6 +48,7 @@ use network_listener::{NetworkListener, PreInvoke}; use num_traits::ToPrimitive; use script_thread::Runnable; use servo_url::ServoUrl; +use servo_url::origin::ImmutableOrigin; use std::cell::Cell; use std::default::Default; use std::i32; @@ -73,6 +74,7 @@ struct ImageRequest { #[ignore_heap_size_of = "Arc"] image: Option<Arc<Image>>, metadata: Option<ImageMetadata>, + final_url: Option<ServoUrl>, } #[dom_struct] pub struct HTMLImageElement { @@ -215,8 +217,8 @@ impl HTMLImageElement { UsePlaceholder::Yes, CanRequestImages::Yes); match response { - Ok(ImageOrMetadataAvailable::ImageAvailable(image)) => { - self.process_image_response(ImageResponse::Loaded(image)); + Ok(ImageOrMetadataAvailable::ImageAvailable(image, url)) => { + self.process_image_response(ImageResponse::Loaded(image, url)); } Ok(ImageOrMetadataAvailable::MetadataAvailable(m)) => { @@ -273,7 +275,8 @@ impl HTMLImageElement { fn process_image_response(&self, image: ImageResponse) { let (image, metadata, trigger_image_load, trigger_image_error) = match image { - ImageResponse::Loaded(image) | ImageResponse::PlaceholderLoaded(image) => { + ImageResponse::Loaded(image, url) | ImageResponse::PlaceholderLoaded(image, url) => { + self.current_request.borrow_mut().final_url = Some(url); (Some(image.clone()), Some(ImageMetadata { height: image.height, width: image.width }), true, @@ -378,6 +381,7 @@ impl HTMLImageElement { image: None, metadata: None, blocker: None, + final_url: None, }), pending_request: DOMRefCell::new(ImageRequest { state: State::Unavailable, @@ -386,6 +390,7 @@ impl HTMLImageElement { image: None, metadata: None, blocker: None, + final_url: None, }), form_owner: Default::default(), generation: Default::default(), @@ -441,6 +446,14 @@ impl HTMLImageElement { useMapElements.map(|mapElem| mapElem.get_area_elements()) } + + pub fn get_origin(&self) -> Option<ImmutableOrigin> { + match self.current_request.borrow_mut().final_url { + Some(ref url) => Some(url.origin()), + None => None + } + } + } pub trait LayoutHTMLImageElementHelpers { |