aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/htmlimageelement.rs
diff options
context:
space:
mode:
authorSendilKumar N <sendilkumarn@live.com>2017-03-09 20:30:01 +0800
committerJosh Matthews <josh@joshmatthews.net>2017-05-19 09:38:50 -0400
commit5acee23f5d46b40c35491de22592a58a9ef5a45b (patch)
tree960083d54ce4929c486cff1e04713ca16cf99a6a /components/script/dom/htmlimageelement.rs
parentd855c929ef32e8f7d4bc15ba726e8eb5f8ad8e05 (diff)
downloadservo-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.rs19
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 {