diff options
author | Josh Matthews <josh@joshmatthews.net> | 2019-10-01 17:54:43 -0400 |
---|---|---|
committer | Josh Matthews <josh@joshmatthews.net> | 2019-10-04 09:22:21 -0400 |
commit | 583536c9406e685405d5b28da99dd8cab94c7d66 (patch) | |
tree | f7e62e5363d54a45ae09c9e9537090b7906f0354 | |
parent | 81a67aed9e0cc866f4689e8d7a5541198d75e445 (diff) | |
download | servo-583536c9406e685405d5b28da99dd8cab94c7d66.tar.gz servo-583536c9406e685405d5b28da99dd8cab94c7d66.zip |
Use the paint worklet's base URL for the 2d canvas' origin checks.
-rw-r--r-- | components/script/dom/canvasrenderingcontext2d.rs | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/components/script/dom/canvasrenderingcontext2d.rs b/components/script/dom/canvasrenderingcontext2d.rs index e2495816408..380b9a8312a 100644 --- a/components/script/dom/canvasrenderingcontext2d.rs +++ b/components/script/dom/canvasrenderingcontext2d.rs @@ -24,6 +24,7 @@ use crate::dom::globalscope::GlobalScope; use crate::dom::htmlcanvaselement::{CanvasContext, HTMLCanvasElement}; use crate::dom::imagedata::ImageData; use crate::dom::node::{Node, NodeDamage}; +use crate::dom::paintworkletglobalscope::PaintWorkletGlobalScope; use crate::dom::textmetrics::TextMetrics; use crate::unpremultiplytable::UNPREMULTIPLY_TABLE; use canvas_traits::canvas::{Canvas2dMsg, CanvasId, CanvasMsg}; @@ -144,6 +145,14 @@ impl CanvasState { .unwrap(); let (ipc_renderer, canvas_id) = receiver.recv().unwrap(); debug!("Done."); + // Worklets always receive a unique origin. This messes with fetching + // cached images in the case of paint worklets, since the image cache + // is keyed on the origin requesting the image data. + let origin = if global.is::<PaintWorkletGlobalScope>() { + global.api_base_url().origin() + } else { + global.origin().immutable().clone() + }; CanvasState { ipc_renderer: ipc_renderer, canvas_id: canvas_id, @@ -153,7 +162,7 @@ impl CanvasState { base_url: global.api_base_url(), missing_image_urls: DomRefCell::new(Vec::new()), saved_states: DomRefCell::new(Vec::new()), - origin: global.origin().immutable().clone(), + origin, } } |