diff options
author | Tipowol <void.indifferent@gmail.com> | 2020-04-05 19:54:30 +0200 |
---|---|---|
committer | Tipowol <void.indifferent@gmail.com> | 2020-04-05 19:54:30 +0200 |
commit | 8a3bf880e98a946e45d4659b09a80b032b5d1734 (patch) | |
tree | dc68aa5f7677816f36608fad6ab1a045710d988e /components/script/dom | |
parent | ae49473c25d61452d1cd02db03bc9760b6cd95c2 (diff) | |
download | servo-8a3bf880e98a946e45d4659b09a80b032b5d1734.tar.gz servo-8a3bf880e98a946e45d4659b09a80b032b5d1734.zip |
Add InRealm argument to Callback trait
Diffstat (limited to 'components/script/dom')
-rw-r--r-- | components/script/dom/promise.rs | 27 | ||||
-rw-r--r-- | components/script/dom/promisenativehandler.rs | 20 | ||||
-rw-r--r-- | components/script/dom/testbinding.rs | 9 |
3 files changed, 33 insertions, 23 deletions
diff --git a/components/script/dom/promise.rs b/components/script/dom/promise.rs index fae6421f622..78bbb03449c 100644 --- a/components/script/dom/promise.rs +++ b/components/script/dom/promise.rs @@ -17,7 +17,7 @@ use crate::dom::bindings::reflector::{DomObject, MutDomObject, Reflector}; use crate::dom::bindings::utils::AsCCharPtrPtr; use crate::dom::globalscope::GlobalScope; use crate::dom::promisenativehandler::PromiseNativeHandler; -use crate::realms::{enter_realm, InRealm}; +use crate::realms::{enter_realm, AlreadyInRealm, InRealm}; use crate::script_runtime::JSContext as SafeJSContext; use crate::script_thread::ScriptThread; use dom_struct::dom_struct; @@ -292,21 +292,28 @@ unsafe extern "C" fn native_handler_callback( argc: u32, vp: *mut JSVal, ) -> bool { + let cx = SafeJSContext::from_ptr(cx); + let in_realm_proof = AlreadyInRealm::assert_for_cx(cx); + let args = CallArgs::from_vp(vp, argc); - rooted!(in(cx) let v = *GetFunctionNativeReserved(args.callee(), SLOT_NATIVEHANDLER)); + rooted!(in(*cx) let v = *GetFunctionNativeReserved(args.callee(), SLOT_NATIVEHANDLER)); assert!(v.get().is_object()); - let handler = root_from_object::<PromiseNativeHandler>(v.to_object(), cx) + let handler = root_from_object::<PromiseNativeHandler>(v.to_object(), *cx) .expect("unexpected value for native handler in promise native handler callback"); - rooted!(in(cx) let v = *GetFunctionNativeReserved(args.callee(), SLOT_NATIVEHANDLER_TASK)); + rooted!(in(*cx) let v = *GetFunctionNativeReserved(args.callee(), SLOT_NATIVEHANDLER_TASK)); match v.to_int32() { - v if v == NativeHandlerTask::Resolve as i32 => { - handler.resolved_callback(cx, HandleValue::from_raw(args.get(0))) - }, - v if v == NativeHandlerTask::Reject as i32 => { - handler.rejected_callback(cx, HandleValue::from_raw(args.get(0))) - }, + v if v == NativeHandlerTask::Resolve as i32 => handler.resolved_callback( + *cx, + HandleValue::from_raw(args.get(0)), + InRealm::Already(&in_realm_proof), + ), + v if v == NativeHandlerTask::Reject as i32 => handler.rejected_callback( + *cx, + HandleValue::from_raw(args.get(0)), + InRealm::Already(&in_realm_proof), + ), _ => panic!("unexpected native handler task value"), }; diff --git a/components/script/dom/promisenativehandler.rs b/components/script/dom/promisenativehandler.rs index c7e0ded5b4d..217bcc851c2 100644 --- a/components/script/dom/promisenativehandler.rs +++ b/components/script/dom/promisenativehandler.rs @@ -6,13 +6,14 @@ use crate::dom::bindings::reflector::{reflect_dom_object, Reflector}; use crate::dom::bindings::root::DomRoot; use crate::dom::bindings::trace::JSTraceable; use crate::dom::globalscope::GlobalScope; +use crate::realms::InRealm; use dom_struct::dom_struct; use js::jsapi::JSContext; use js::rust::HandleValue; use malloc_size_of::MallocSizeOf; pub trait Callback: JSTraceable + MallocSizeOf { - fn callback(&self, cx: *mut JSContext, v: HandleValue); + fn callback(&self, cx: *mut JSContext, v: HandleValue, realm: InRealm); } #[dom_struct] @@ -38,17 +39,22 @@ impl PromiseNativeHandler { ) } - fn callback(callback: &Option<Box<dyn Callback>>, cx: *mut JSContext, v: HandleValue) { + fn callback( + callback: &Option<Box<dyn Callback>>, + cx: *mut JSContext, + v: HandleValue, + realm: InRealm, + ) { if let Some(ref callback) = *callback { - callback.callback(cx, v) + callback.callback(cx, v, realm) } } - pub fn resolved_callback(&self, cx: *mut JSContext, v: HandleValue) { - PromiseNativeHandler::callback(&self.resolve, cx, v) + pub fn resolved_callback(&self, cx: *mut JSContext, v: HandleValue, realm: InRealm) { + PromiseNativeHandler::callback(&self.resolve, cx, v, realm) } - pub fn rejected_callback(&self, cx: *mut JSContext, v: HandleValue) { - PromiseNativeHandler::callback(&self.reject, cx, v) + pub fn rejected_callback(&self, cx: *mut JSContext, v: HandleValue, realm: InRealm) { + PromiseNativeHandler::callback(&self.reject, cx, v, realm) } } diff --git a/components/script/dom/testbinding.rs b/components/script/dom/testbinding.rs index b14fb16fe4f..e44983ea3a3 100644 --- a/components/script/dom/testbinding.rs +++ b/components/script/dom/testbinding.rs @@ -48,7 +48,7 @@ use crate::dom::globalscope::GlobalScope; use crate::dom::promise::Promise; use crate::dom::promisenativehandler::{Callback, PromiseNativeHandler}; use crate::dom::url::URL; -use crate::realms::{AlreadyInRealm, InRealm}; +use crate::realms::InRealm; use crate::script_runtime::JSContext as SafeJSContext; use crate::timers::OneshotTimerCallback; use dom_struct::dom_struct; @@ -1010,11 +1010,8 @@ impl TestBindingMethods for TestBinding { } impl Callback for SimpleHandler { #[allow(unsafe_code)] - fn callback(&self, cx: *mut JSContext, v: HandleValue) { - let global = unsafe { - let in_realm_proof = AlreadyInRealm::assert_for_cx(SafeJSContext::from_ptr(cx)); - GlobalScope::from_context(cx, InRealm::Already(&in_realm_proof)) - }; + fn callback(&self, cx: *mut JSContext, v: HandleValue, realm: InRealm) { + let global = unsafe { GlobalScope::from_context(cx, realm) }; let _ = self.handler.Call_(&*global, v, ExceptionHandling::Report); } } |