diff options
author | Josh Matthews <josh@joshmatthews.net> | 2025-02-21 07:17:11 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-02-21 12:17:11 +0000 |
commit | a433b202595bb0e2208571b0680be396937e092f (patch) | |
tree | 85df5479edf76809570c93aa46c72cef69b51b8b /components/script/dom/bindings/utils.rs | |
parent | 2b0d2ecc7378f653e4755fd7d948dcc15914ffca (diff) | |
download | servo-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.rs | 9 |
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 + } } |