diff options
author | Alan Jeffrey <ajeffrey@mozilla.com> | 2017-04-03 14:35:57 -0500 |
---|---|---|
committer | Alan Jeffrey <ajeffrey@mozilla.com> | 2017-05-17 09:01:05 -0500 |
commit | af8436c9be4c69c07265ab1095f89982b48cdd00 (patch) | |
tree | 0a4dbfaeb69c7a1741840e94ffb88139317ef295 /components/script/dom/testworklet.rs | |
parent | abb2985ffe96485b58f6b9e5f8b2dd3641d987b7 (diff) | |
download | servo-af8436c9be4c69c07265ab1095f89982b48cdd00.tar.gz servo-af8436c9be4c69c07265ab1095f89982b48cdd00.zip |
Implemented Houdini worklets.
Diffstat (limited to 'components/script/dom/testworklet.rs')
-rw-r--r-- | components/script/dom/testworklet.rs | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/components/script/dom/testworklet.rs b/components/script/dom/testworklet.rs new file mode 100644 index 00000000000..ea032e66faa --- /dev/null +++ b/components/script/dom/testworklet.rs @@ -0,0 +1,61 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +// check-tidy: no specs after this line + +use dom::bindings::codegen::Bindings::TestWorkletBinding::TestWorkletMethods; +use dom::bindings::codegen::Bindings::TestWorkletBinding::Wrap; +use dom::bindings::codegen::Bindings::WorkletBinding::WorkletBinding::WorkletMethods; +use dom::bindings::codegen::Bindings::WorkletBinding::WorkletOptions; +use dom::bindings::error::Fallible; +use dom::bindings::js::JS; +use dom::bindings::js::Root; +use dom::bindings::reflector::Reflector; +use dom::bindings::reflector::reflect_dom_object; +use dom::bindings::str::DOMString; +use dom::bindings::str::USVString; +use dom::promise::Promise; +use dom::window::Window; +use dom::worklet::Worklet; +use dom::workletglobalscope::WorkletGlobalScopeType; +use dom_struct::dom_struct; +use script_thread::ScriptThread; +use std::rc::Rc; + +#[dom_struct] +pub struct TestWorklet { + reflector: Reflector, + worklet: JS<Worklet>, +} + +impl TestWorklet { + fn new_inherited(worklet: &Worklet) -> TestWorklet { + TestWorklet { + reflector: Reflector::new(), + worklet: JS::from_ref(worklet), + } + } + + fn new(window: &Window) -> Root<TestWorklet> { + let worklet = Worklet::new(window, WorkletGlobalScopeType::Test); + reflect_dom_object(box TestWorklet::new_inherited(&*worklet), window, Wrap) + } + + pub fn Constructor(window: &Window) -> Fallible<Root<TestWorklet>> { + Ok(TestWorklet::new(window)) + } +} + +impl TestWorkletMethods for TestWorklet { + #[allow(unrooted_must_root)] + fn AddModule(&self, moduleURL: USVString, options: &WorkletOptions) -> Rc<Promise> { + self.worklet.AddModule(moduleURL, options) + } + + fn Lookup(&self, key: DOMString) -> Option<DOMString> { + let id = self.worklet.worklet_id(); + let pool = ScriptThread::worklet_thread_pool(); + pool.test_worklet_lookup(id, String::from(key)).map(DOMString::from) + } +} |