diff --git a/components/script/dom/css.rs b/components/script/dom/css.rs index c78627b2e64..4b67f516e83 100644 --- a/components/script/dom/css.rs +++ b/components/script/dom/css.rs @@ -6,8 +6,10 @@ use cssparser::{Parser, ParserInput, serialize_identifier}; use dom::bindings::codegen::Bindings::WindowBinding::WindowBinding::WindowMethods; use dom::bindings::error::Fallible; use dom::bindings::reflector::Reflector; +use dom::bindings::root::DomRoot; use dom::bindings::str::DOMString; use dom::window::Window; +use dom::worklet::Worklet; use dom_struct::dom_struct; use style::context::QuirksMode; use style::parser::ParserContext; @@ -63,4 +65,9 @@ impl CSS { false } } + + /// + pub fn PaintWorklet(win: &Window) -> DomRoot { + win.paint_worklet() + } } diff --git a/components/script/dom/webidls/CSS.webidl b/components/script/dom/webidls/CSS.webidl index 5f4aa4f0bef..02ed6b5074a 100644 --- a/components/script/dom/webidls/CSS.webidl +++ b/components/script/dom/webidls/CSS.webidl @@ -17,3 +17,8 @@ partial interface CSS { static boolean supports(DOMString property, DOMString value); static boolean supports(DOMString conditionText); }; + +// https://drafts.css-houdini.org/css-paint-api-1/#paint-worklet +partial interface CSS { + [SameObject, Pref="dom.worklet.enabled"] static readonly attribute Worklet paintWorklet; +}; diff --git a/components/script/dom/webidls/Window.webidl b/components/script/dom/webidls/Window.webidl index d6da05480cf..df20b6ced82 100644 --- a/components/script/dom/webidls/Window.webidl +++ b/components/script/dom/webidls/Window.webidl @@ -196,8 +196,3 @@ partial interface Window { readonly attribute TestRunner testRunner; //readonly attribute EventSender eventSender; }; - -// https://drafts.css-houdini.org/css-paint-api-1/#paint-worklet -partial interface Window { - [SameObject, Pref="dom.worklet.enabled"] readonly attribute Worklet paintWorklet; -}; diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs index 2e6fb487790..145b74ae8e3 100644 --- a/components/script/dom/window.rs +++ b/components/script/dom/window.rs @@ -1022,17 +1022,17 @@ impl WindowMethods for Window { fetch::Fetch(&self.upcast(), input, init) } - // https://drafts.css-houdini.org/css-paint-api-1/#paint-worklet - fn PaintWorklet(&self) -> DomRoot { - self.paint_worklet.or_init(|| self.new_paint_worklet()) - } - fn TestRunner(&self) -> DomRoot { self.test_runner.or_init(|| TestRunner::new(self.upcast())) } } impl Window { + // https://drafts.css-houdini.org/css-paint-api-1/#paint-worklet + pub fn paint_worklet(&self) -> DomRoot { + self.paint_worklet.or_init(|| self.new_paint_worklet()) + } + pub fn task_canceller(&self) -> TaskCanceller { TaskCanceller { cancelled: Some(self.ignore_further_async_events.borrow().clone()), diff --git a/tests/wpt/mozilla/tests/mozilla/css-paint-api/css-paint-tests.js b/tests/wpt/mozilla/tests/mozilla/css-paint-api/css-paint-tests.js index 58a8e649ee1..cd57332758e 100644 --- a/tests/wpt/mozilla/tests/mozilla/css-paint-api/css-paint-tests.js +++ b/tests/wpt/mozilla/tests/mozilla/css-paint-api/css-paint-tests.js @@ -2,11 +2,11 @@ // requestAnimationFrame. In the second frame, we take a screenshot, that makes // sure that we already have a full frame. function importPaintWorkletAndTerminateTestAfterAsyncPaint(code) { - if (typeof paintWorklet == "undefined") { + if (typeof CSS.paintWorklet == "undefined") { takeScreenshot(); } else { var blob = new Blob([code], {type: 'text/javascript'}); - paintWorklet.addModule(URL.createObjectURL(blob)).then(function() { + CSS.paintWorklet.addModule(URL.createObjectURL(blob)).then(function() { requestAnimationFrame(function() { requestAnimationFrame(function() { takeScreenshot(); diff --git a/tests/wpt/mozilla/tests/mozilla/css-paint-api/valid-image-after-load.html b/tests/wpt/mozilla/tests/mozilla/css-paint-api/valid-image-after-load.html index b1ad0d2d73a..1fe24078b1e 100644 --- a/tests/wpt/mozilla/tests/mozilla/css-paint-api/valid-image-after-load.html +++ b/tests/wpt/mozilla/tests/mozilla/css-paint-api/valid-image-after-load.html @@ -30,7 +30,7 @@ if (window.testRunner) { var blob = new Blob([document.getElementById('code').textContent], {type: 'text/javascript'}); var frame_cnt = 0; -paintWorklet.addModule(URL.createObjectURL(blob)).then(function() { +CSS.paintWorklet.addModule(URL.createObjectURL(blob)).then(function() { var el = document.getElementById('output'); el.style.backgroundImage = 'paint(green)'; requestAnimationFrame(function() { diff --git a/tests/wpt/mozilla/tests/mozilla/css-paint-api/valid-image-before-load.html b/tests/wpt/mozilla/tests/mozilla/css-paint-api/valid-image-before-load.html index b4e6b0e1720..2232cd48db1 100644 --- a/tests/wpt/mozilla/tests/mozilla/css-paint-api/valid-image-before-load.html +++ b/tests/wpt/mozilla/tests/mozilla/css-paint-api/valid-image-before-load.html @@ -33,7 +33,7 @@ el.style.backgroundImage = 'paint(green)'; var blob = new Blob([document.getElementById('code').textContent], {type: 'text/javascript'}); var frame_cnt = 0; -paintWorklet.addModule(URL.createObjectURL(blob)).then(function() { +CSS.paintWorklet.addModule(URL.createObjectURL(blob)).then(function() { requestAnimationFrame(function() { takeScreenshot(frame_cnt); });