aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/bindings/utils.rs
diff options
context:
space:
mode:
authorJosh Matthews <josh@joshmatthews.net>2025-02-21 07:17:11 -0500
committerGitHub <noreply@github.com>2025-02-21 12:17:11 +0000
commita433b202595bb0e2208571b0680be396937e092f (patch)
tree85df5479edf76809570c93aa46c72cef69b51b8b /components/script/dom/bindings/utils.rs
parent2b0d2ecc7378f653e4755fd7d948dcc15914ffca (diff)
downloadservo-a433b202595bb0e2208571b0680be396937e092f.tar.gz
servo-a433b202595bb0e2208571b0680be396937e092f.zip
script: Make callbacks generic over DOM interfaces. (#35459)
Signed-off-by: Josh Matthews <josh@joshmatthews.net>
Diffstat (limited to 'components/script/dom/bindings/utils.rs')
-rw-r--r--components/script/dom/bindings/utils.rs9
1 files changed, 9 insertions, 0 deletions
diff --git a/components/script/dom/bindings/utils.rs b/components/script/dom/bindings/utils.rs
index 631ba43c4d5..b3f3219cf1a 100644
--- a/components/script/dom/bindings/utils.rs
+++ b/components/script/dom/bindings/utils.rs
@@ -4,10 +4,12 @@
//! Various utilities to glue JavaScript and the DOM implementation together.
+use std::cell::RefCell;
use std::ffi::CString;
use std::os::raw::c_char;
use std::ptr::NonNull;
use std::sync::OnceLock;
+use std::thread::LocalKey;
use std::{ptr, slice, str};
use js::conversions::ToJSValConvertible;
@@ -44,6 +46,7 @@ use crate::dom::bindings::conversions::{
};
use crate::dom::bindings::error::{throw_dom_exception, throw_invalid_this, Error};
use crate::dom::bindings::reflector::DomObject;
+use crate::dom::bindings::settings_stack::{self, StackEntry};
use crate::dom::bindings::str::DOMString;
use crate::dom::bindings::trace::trace_object;
use crate::dom::windowproxy::WindowProxyHandler;
@@ -676,6 +679,8 @@ pub(crate) trait DomHelpers<D: DomTypes> {
creator: unsafe fn(SafeJSContext, HandleObject, *mut ProtoOrIfaceArray),
can_gc: CanGc,
) -> bool;
+
+ fn settings_stack() -> &'static LocalKey<RefCell<Vec<StackEntry<D>>>>;
}
impl DomHelpers<crate::DomTypeHolder> for crate::DomTypeHolder {
@@ -699,4 +704,8 @@ impl DomHelpers<crate::DomTypeHolder> for crate::DomTypeHolder {
) -> bool {
call_html_constructor::<T>(cx, args, global, proto_id, creator, can_gc)
}
+
+ fn settings_stack() -> &'static LocalKey<RefCell<Vec<StackEntry<crate::DomTypeHolder>>>> {
+ &settings_stack::STACK
+ }
}