1use std::rc::Rc;
6
7use dom_struct::dom_struct;
8use js::jsapi::{GCReason, JS_GC};
9use script_bindings::reflector::Reflector;
10use script_bindings::script_runtime::CanGc;
11
12use super::globalscope::GlobalScope;
13use crate::dom::bindings::codegen::Bindings::TestUtilsBinding::TestUtilsMethods;
14use crate::dom::promise::Promise;
15use crate::test::TrustedPromise;
16
17#[dom_struct]
18pub(crate) struct TestUtils {
19 reflector_: Reflector,
20}
21
22impl TestUtilsMethods<crate::DomTypeHolder> for TestUtils {
23 #[allow(unsafe_code)]
25 fn Gc(global: &GlobalScope) -> Rc<Promise> {
26 let promise = Promise::new(global, CanGc::note());
28 let trusted = TrustedPromise::new(promise.clone());
29 let task = task!(testutils_gc: move || {
35 unsafe {
36 JS_GC(*GlobalScope::get_cx(), GCReason::DOM_TESTUTILS);
37 }
38 let promise = trusted.root();
39 promise.resolve_native(&(), CanGc::note());
40 });
41
42 global
43 .task_manager()
44 .dom_manipulation_task_source()
45 .queue(task);
46
47 promise
48 }
49}