aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/bindings/utils.rs
diff options
context:
space:
mode:
authoryvt <i@yvt.jp>2021-07-10 18:09:05 +0900
committeryvt <i@yvt.jp>2021-07-10 18:18:33 +0900
commit28c670d6c3bfa084fc99f913f3f1caa87e6d7dbd (patch)
tree6e18c3c43cdcd703022c7015bab13a66066357e1 /components/script/dom/bindings/utils.rs
parent01a7de50ab1843d85295f9dccad7f4c099e7208c (diff)
downloadservo-28c670d6c3bfa084fc99f913f3f1caa87e6d7dbd.tar.gz
servo-28c670d6c3bfa084fc99f913f3f1caa87e6d7dbd.zip
fix: accommodate to the modern age
Diffstat (limited to 'components/script/dom/bindings/utils.rs')
-rw-r--r--components/script/dom/bindings/utils.rs17
1 files changed, 13 insertions, 4 deletions
diff --git a/components/script/dom/bindings/utils.rs b/components/script/dom/bindings/utils.rs
index 17bbae95f1b..e5804779d3b 100644
--- a/components/script/dom/bindings/utils.rs
+++ b/components/script/dom/bindings/utils.rs
@@ -16,7 +16,10 @@ use crate::dom::bindings::error::{throw_dom_exception, throw_invalid_this, Error
use crate::dom::bindings::inheritance::TopTypeId;
use crate::dom::bindings::str::DOMString;
use crate::dom::bindings::trace::trace_object;
+use crate::dom::globalscope::GlobalScope;
use crate::dom::windowproxy;
+use crate::realms::AlreadyInRealm;
+use crate::realms::InRealm;
use crate::script_runtime::JSContext as SafeJSContext;
use js::conversions::ToJSValConvertible;
use js::glue::SetIsFrameIdCallback;
@@ -110,7 +113,7 @@ enum CrossOriginObjectType {
CrossOriginOpaque,
}
-unsafe fn identify_cross_origin_object(obj: HandleObject) -> CrossOriginObjectType {
+unsafe fn identify_cross_origin_object(obj: RawHandleObject) -> CrossOriginObjectType {
let obj = UncheckedUnwrapObject(obj.get(), /* stopAtWindowProxy = */ 0);
let obj_class = JS_GetClass(obj);
let name = str::from_utf8(CStr::from_ptr((*obj_class).name).to_bytes())
@@ -123,7 +126,7 @@ unsafe fn identify_cross_origin_object(obj: HandleObject) -> CrossOriginObjectTy
}
}
-unsafe fn target_subsumes_obj(cx: *mut JSContext, obj: HandleObject) -> bool {
+unsafe fn target_subsumes_obj(cx: *mut JSContext, obj: RawHandleObject) -> bool {
//step 1 get compartment
let obj_c = get_object_compartment(obj.get());
let ctx_c = get_context_compartment(cx);
@@ -166,7 +169,7 @@ pub unsafe extern "C" fn subsumes(obj: *mut JSPrincipals, other: *mut JSPrincipa
obj_origin.same_origin_domain(&other_origin)
}
-unsafe fn select_wrapper(cx: *mut JSContext, obj: HandleObject) -> *const libc::c_void {
+unsafe fn select_wrapper(cx: *mut JSContext, obj: RawHandleObject) -> *const libc::c_void {
let security_wrapper = !target_subsumes_obj(cx, obj);
if !security_wrapper {
return GetCrossCompartmentWrapper();
@@ -603,7 +606,13 @@ unsafe extern "C" fn wrap(
unsafe extern "C" fn throw_dom_exception_callback(cx: *mut JSContext) {
//TODO it might not always be a SecurityError?
- throw_dom_exception(cx, &GlobalScope::from_context(cx), Error::Security);
+ let cx = SafeJSContext::from_ptr(cx);
+ let in_realm_proof = AlreadyInRealm::assert_for_cx(cx);
+ throw_dom_exception(
+ cx,
+ &GlobalScope::from_context(*cx, InRealm::in_realm(&in_realm_proof)),
+ Error::Security,
+ );
}
unsafe extern "C" fn is_frame_id(cx: *mut JSContext, obj: *mut JSObject, id_arg: jsid) -> bool {