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/promise.rs | |
parent | ae49473c25d61452d1cd02db03bc9760b6cd95c2 (diff) | |
download | servo-8a3bf880e98a946e45d4659b09a80b032b5d1734.tar.gz servo-8a3bf880e98a946e45d4659b09a80b032b5d1734.zip |
Add InRealm argument to Callback trait
Diffstat (limited to 'components/script/dom/promise.rs')
-rw-r--r-- | components/script/dom/promise.rs | 27 |
1 files changed, 17 insertions, 10 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"), }; |