script/dom/
testworklet.rs1use std::rc::Rc;
7
8use dom_struct::dom_struct;
9use js::rust::HandleObject;
10
11use crate::dom::bindings::codegen::Bindings::TestWorkletBinding::TestWorkletMethods;
12use crate::dom::bindings::codegen::Bindings::WorkletBinding::Worklet_Binding::WorkletMethods;
13use crate::dom::bindings::codegen::Bindings::WorkletBinding::WorkletOptions;
14use crate::dom::bindings::error::Fallible;
15use crate::dom::bindings::reflector::{DomGlobal, Reflector, reflect_dom_object_with_proto};
16use crate::dom::bindings::root::{Dom, DomRoot};
17use crate::dom::bindings::str::{DOMString, USVString};
18use crate::dom::promise::Promise;
19use crate::dom::window::Window;
20use crate::dom::worklet::Worklet;
21use crate::dom::workletglobalscope::WorkletGlobalScopeType;
22use crate::realms::InRealm;
23use crate::script_runtime::CanGc;
24use crate::script_thread::ScriptThread;
25
26#[dom_struct]
27pub(crate) struct TestWorklet {
28 reflector: Reflector,
29 worklet: Dom<Worklet>,
30}
31
32impl TestWorklet {
33 fn new_inherited(worklet: &Worklet) -> TestWorklet {
34 TestWorklet {
35 reflector: Reflector::new(),
36 worklet: Dom::from_ref(worklet),
37 }
38 }
39
40 fn new(window: &Window, proto: Option<HandleObject>, can_gc: CanGc) -> DomRoot<TestWorklet> {
41 let worklet = Worklet::new(window, WorkletGlobalScopeType::Test, can_gc);
42 reflect_dom_object_with_proto(
43 Box::new(TestWorklet::new_inherited(&worklet)),
44 window,
45 proto,
46 can_gc,
47 )
48 }
49}
50
51impl TestWorkletMethods<crate::DomTypeHolder> for TestWorklet {
52 fn Constructor(
53 window: &Window,
54 proto: Option<HandleObject>,
55 can_gc: CanGc,
56 ) -> Fallible<DomRoot<TestWorklet>> {
57 Ok(TestWorklet::new(window, proto, can_gc))
58 }
59
60 #[allow(non_snake_case)]
61 fn AddModule(
62 &self,
63 moduleURL: USVString,
64 options: &WorkletOptions,
65 comp: InRealm,
66 can_gc: CanGc,
67 ) -> Rc<Promise> {
68 self.worklet.AddModule(moduleURL, options, comp, can_gc)
69 }
70
71 fn Lookup(&self, key: DOMString) -> Option<DOMString> {
72 let id = self.worklet.worklet_id();
73 let pool = ScriptThread::worklet_thread_pool(self.global().image_cache());
74 pool.test_worklet_lookup(id, String::from(key))
75 .map(DOMString::from)
76 }
77}