/
githubmirror
/
servo
Обзор
Документация
Войти
/
githubmirror
/
servo
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
components/script/dom/testing/testworklet.rs
87 строк
3 KB
niya
script: init `WorkletThreadPool` in `Window` (#47064)
10 авг 2026, 08:12
Не верифицирован
10 авг 2026, 08:12
c383292
Код
Авторство
О чём код?
/* 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 https://mozilla.org/MPL/2.0/. */ // check-tidy: no specs after this line use std::rc::Rc; use dom_struct::dom_struct; use js::context::JSContext; use js::realm::CurrentRealm; use js::rust::HandleObject; use script_bindings::reflector::{Reflector, reflect_dom_object_with_proto}; use crate::dom::WorkletThreadPool; use crate::dom::bindings::codegen::Bindings::TestWorkletBinding::TestWorkletMethods; use crate::dom::bindings::codegen::Bindings::WorkletBinding::Worklet_Binding::WorkletMethods; use crate::dom::bindings::codegen::Bindings::WorkletBinding::WorkletOptions; use crate::dom::bindings::error::Fallible; use crate::dom::bindings::root::{Dom, DomRoot}; use crate::dom::bindings::str::{DOMString, USVString}; use crate::dom::promise::Promise; use crate::dom::window::Window; use crate::dom::worklet::Worklet; use crate::dom::workletglobalscope::WorkletGlobalScopeType; #[dom_struct] pub(crate) struct TestWorklet { reflector: Reflector, worklet: Dom<Worklet>, } impl TestWorklet { fn new_inherited(worklet: &Worklet) -> TestWorklet { TestWorklet { reflector: Reflector::new(), worklet: Dom::from_ref(worklet), } } fn new( cx: &mut JSContext, window: &Window, proto: Option<HandleObject>, ) -> DomRoot<TestWorklet> { let worklet_global_scope_init = window.into(); let worklet = Worklet::new( cx, window, WorkletGlobalScopeType::Test, Box::new(|| Rc::new(WorkletThreadPool::spawn(worklet_global_scope_init))), ); reflect_dom_object_with_proto( cx, Box::new(TestWorklet::new_inherited(&worklet)), window, proto, ) } } impl TestWorkletMethods<crate::DomTypeHolder> for TestWorklet { fn Constructor( cx: &mut JSContext, window: &Window, proto: Option<HandleObject>, ) -> Fallible<DomRoot<TestWorklet>> { Ok(TestWorklet::new(cx, window, proto)) } fn AddModule( &self, realm: &mut CurrentRealm, module_url: USVString, options: &WorkletOptions, ) -> Rc<Promise> { self.worklet.AddModule(realm, module_url, options) } fn Lookup(&self, key: DOMString) -> Option<DOMString> { let id = self.worklet.worklet_id(); self.worklet .worklet_thread_pool() .test_worklet_lookup(id, String::from(key)) .map(DOMString::from) } }