diff options
-rw-r--r-- | components/script/dom/bindings/codegen/CodegenRust.py | 1 | ||||
-rw-r--r-- | components/script/dom/bindings/interface.rs | 2 | ||||
-rw-r--r-- | components/script/dom/bindings/proxyhandler.rs | 54 |
3 files changed, 24 insertions, 33 deletions
diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py index 8657bbf2253..8b94cc1b5d1 100644 --- a/components/script/dom/bindings/codegen/CodegenRust.py +++ b/components/script/dom/bindings/codegen/CodegenRust.py @@ -6694,7 +6694,6 @@ class CGDescriptor(CGThing): if descriptor.isMaybeCrossOriginObject(): cgThings.append(CGDOMJSProxyHandler_getPrototype(descriptor)) cgThings.append(CGDOMJSProxyHandler_set(descriptor)) - pass # cgThings.append(CGDOMJSProxyHandler(descriptor)) # cgThings.append(CGIsMethod(descriptor)) diff --git a/components/script/dom/bindings/interface.rs b/components/script/dom/bindings/interface.rs index e22b897ac6e..f73152c9df7 100644 --- a/components/script/dom/bindings/interface.rs +++ b/components/script/dom/bindings/interface.rs @@ -11,7 +11,6 @@ use crate::dom::bindings::conversions::{get_dom_class, DOM_OBJECT_SLOT}; use crate::dom::bindings::guard::Guard; use crate::dom::bindings::principals::ServoJSPrincipals; use crate::dom::bindings::utils::{ProtoOrIfaceArray, DOM_PROTOTYPE_SLOT}; -use crate::dom::window::Window; use crate::script_runtime::JSContext as SafeJSContext; use js::error::throw_type_error; use js::glue::UncheckedUnwrapObject; @@ -38,7 +37,6 @@ use js::rust::wrappers::{JS_DefineProperty3, JS_DefineProperty4, JS_DefineProper use js::rust::wrappers::{JS_LinkConstructorAndPrototype, JS_NewObjectWithGivenProto}; use js::rust::{define_methods, define_properties, get_object_class}; use js::rust::{HandleObject, HandleValue, MutableHandleObject, RealmOptions}; -use libc; use servo_url::MutableOrigin; use std::convert::TryFrom; use std::ptr; diff --git a/components/script/dom/bindings/proxyhandler.rs b/components/script/dom/bindings/proxyhandler.rs index 202dc9b0f82..12e4f04d68b 100644 --- a/components/script/dom/bindings/proxyhandler.rs +++ b/components/script/dom/bindings/proxyhandler.rs @@ -6,7 +6,7 @@ #![deny(missing_docs)] -use crate::dom::bindings::conversions::is_dom_proxy; +use crate::dom::bindings::conversions::{is_dom_proxy, jsid_to_string, jsstring_to_str}; use crate::dom::bindings::error::{throw_dom_exception, Error}; use crate::dom::bindings::principals::ServoJSPrincipalsRef; use crate::dom::bindings::reflector::DomObject; @@ -261,7 +261,7 @@ unsafe fn id_to_source(cx: SafeJSContext, id: RawHandleId) -> Option<DOMString> jsstr.get() }) .filter(|jsstr| !jsstr.is_null()) - .map(|jsstr| crate::dom::bindings::conversions::jsstring_to_str(*cx, jsstr)) + .map(|jsstr| jsstring_to_str(*cx, jsstr)) } /// Property and method specs that correspond to the elements of @@ -275,7 +275,7 @@ pub struct CrossOriginProperties { impl CrossOriginProperties { /// Enumerate the property keys defined by `self`. - fn keys(&self) -> impl Iterator<Item = *const std::os::raw::c_char> + '_ { + fn keys(&self) -> impl Iterator<Item = *const c_char> + '_ { // Safety: All cross-origin property keys are strings, not symbols self.attributes .iter() @@ -552,16 +552,12 @@ pub unsafe fn cross_origin_has_own( // TODO: Once we have the slot for the holder, it'd be more efficient to // use `ensure_cross_origin_property_holder`. - *bp = if let Some(key) = - crate::dom::bindings::conversions::jsid_to_string(*cx, Handle::from_raw(id)) - { + *bp = jsid_to_string(*cx, Handle::from_raw(id)).map_or(false, |key| { cross_origin_properties.keys().any(|defined_key| { let defined_key = CStr::from_ptr(defined_key); defined_key.to_bytes() == key.as_bytes() }) - } else { - false - }; + }); true } @@ -639,21 +635,20 @@ const ALLOWLISTED_SYMBOL_CODES: &[SymbolCode] = &[ ]; unsafe fn is_cross_origin_allowlisted_prop(cx: SafeJSContext, id: RawHandleId) -> bool { - crate::dom::bindings::conversions::jsid_to_string(*cx, Handle::from_raw(id)) - .filter(|st| st == "then") - .is_some() || - { - rooted!(in(*cx) let mut allowed_id: jsid); - ALLOWLISTED_SYMBOL_CODES.iter().any(|&allowed_code| { - RUST_SYMBOL_TO_JSID( - GetWellKnownSymbol(*cx, allowed_code), - allowed_id.handle_mut().into(), - ); - // `jsid`s containing `JS::Symbol *` can be compared by - // referential equality - allowed_id.get().asBits == id.asBits - }) - } + if jsid_to_string(*cx, Handle::from_raw(id)).map_or(false, |st| st == "then") { + return true; + } + + rooted!(in(*cx) let mut allowed_id: jsid); + ALLOWLISTED_SYMBOL_CODES.iter().any(|&allowed_code| { + RUST_SYMBOL_TO_JSID( + GetWellKnownSymbol(*cx, allowed_code), + allowed_id.handle_mut().into(), + ); + // `jsid`s containing `JS::Symbol *` can be compared by + // referential equality + allowed_id.get().asBits == id.asBits + }) } /// Append `« "then", @@toStringTag, @@hasInstance, @@isConcatSpreadable »` to @@ -665,12 +660,11 @@ unsafe fn append_cross_origin_allowlisted_prop_keys( props: RawMutableHandleIdVector, ) { rooted!(in(*cx) let mut id: jsid); - { - let jsstring = JS_AtomizeAndPinString(*cx, b"then\0".as_ptr() as *const c_char); - rooted!(in(*cx) let rooted = jsstring); - RUST_INTERNED_STRING_TO_JSID(*cx, rooted.handle().get(), id.handle_mut()); - AppendToIdVector(props, id.handle()); - } + + let jsstring = JS_AtomizeAndPinString(*cx, b"then\0".as_ptr() as *const c_char); + rooted!(in(*cx) let rooted = jsstring); + RUST_INTERNED_STRING_TO_JSID(*cx, rooted.handle().get(), id.handle_mut()); + AppendToIdVector(props, id.handle()); for &allowed_code in ALLOWLISTED_SYMBOL_CODES.iter() { RUST_SYMBOL_TO_JSID( |