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/canvasrenderingcontext2d.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/canvasrenderingcontext2d.rs')
-rw-r--r-- | components/script/dom/canvasrenderingcontext2d.rs | 21 |
1 files changed, 8 insertions, 13 deletions
diff --git a/components/script/dom/canvasrenderingcontext2d.rs b/components/script/dom/canvasrenderingcontext2d.rs index a5ec8d233b6..348ec08aced 100644 --- a/components/script/dom/canvasrenderingcontext2d.rs +++ b/components/script/dom/canvasrenderingcontext2d.rs @@ -32,7 +32,7 @@ use dom::htmlcanvaselement::HTMLCanvasElement; use dom::htmlcanvaselement::utils as canvas_utils; use dom::htmlimageelement::HTMLImageElement; use dom::imagedata::ImageData; -use dom::node::{Node, NodeDamage, window_from_node}; +use dom::node::{document_from_node, Node, NodeDamage, window_from_node}; use dom_struct::dom_struct; use euclid::matrix2d::Matrix2D; use euclid::point::Point2D; @@ -228,16 +228,11 @@ impl CanvasRenderingContext2D { } HTMLImageElementOrHTMLCanvasElementOrCanvasRenderingContext2D::CanvasRenderingContext2D(image) => image.origin_is_clean(), - HTMLImageElementOrHTMLCanvasElementOrCanvasRenderingContext2D::HTMLImageElement(image) => - match image.get_url() { - None => true, - Some(url) => { - // TODO(zbarsky): we should check the origin of the image against - // the entry settings object, but for now check it against the canvas' doc. - let node: &Node = &*self.canvas.upcast(); - url.origin() == node.owner_doc().url().origin() - } - } + HTMLImageElementOrHTMLCanvasElementOrCanvasRenderingContext2D::HTMLImageElement(image) => { + let image_origin = image.get_origin().expect("Image's origin is missing"); + let document = document_from_node(&*self.canvas); + document.url().clone().origin() == image_origin + } } } @@ -429,8 +424,8 @@ impl CanvasRenderingContext2D { }; let img = match self.request_image_from_cache(url) { - ImageResponse::Loaded(img) => img, - ImageResponse::PlaceholderLoaded(_) | + ImageResponse::Loaded(img, _) => img, + ImageResponse::PlaceholderLoaded(_, _) | ImageResponse::None | ImageResponse::MetadataLoaded(_) => { return None; |