refactor(script): apply suggestions

This commit is contained in:
yvt 2021-07-25 18:45:22 +09:00
parent df5e2911fd
commit 690d8462a5
3 changed files with 24 additions and 33 deletions

View file

@ -6694,7 +6694,6 @@ class CGDescriptor(CGThing):
if descriptor.isMaybeCrossOriginObject(): if descriptor.isMaybeCrossOriginObject():
cgThings.append(CGDOMJSProxyHandler_getPrototype(descriptor)) cgThings.append(CGDOMJSProxyHandler_getPrototype(descriptor))
cgThings.append(CGDOMJSProxyHandler_set(descriptor)) cgThings.append(CGDOMJSProxyHandler_set(descriptor))
pass
# cgThings.append(CGDOMJSProxyHandler(descriptor)) # cgThings.append(CGDOMJSProxyHandler(descriptor))
# cgThings.append(CGIsMethod(descriptor)) # cgThings.append(CGIsMethod(descriptor))

View file

@ -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::guard::Guard;
use crate::dom::bindings::principals::ServoJSPrincipals; use crate::dom::bindings::principals::ServoJSPrincipals;
use crate::dom::bindings::utils::{ProtoOrIfaceArray, DOM_PROTOTYPE_SLOT}; use crate::dom::bindings::utils::{ProtoOrIfaceArray, DOM_PROTOTYPE_SLOT};
use crate::dom::window::Window;
use crate::script_runtime::JSContext as SafeJSContext; use crate::script_runtime::JSContext as SafeJSContext;
use js::error::throw_type_error; use js::error::throw_type_error;
use js::glue::UncheckedUnwrapObject; 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::wrappers::{JS_LinkConstructorAndPrototype, JS_NewObjectWithGivenProto};
use js::rust::{define_methods, define_properties, get_object_class}; use js::rust::{define_methods, define_properties, get_object_class};
use js::rust::{HandleObject, HandleValue, MutableHandleObject, RealmOptions}; use js::rust::{HandleObject, HandleValue, MutableHandleObject, RealmOptions};
use libc;
use servo_url::MutableOrigin; use servo_url::MutableOrigin;
use std::convert::TryFrom; use std::convert::TryFrom;
use std::ptr; use std::ptr;

View file

@ -6,7 +6,7 @@
#![deny(missing_docs)] #![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::error::{throw_dom_exception, Error};
use crate::dom::bindings::principals::ServoJSPrincipalsRef; use crate::dom::bindings::principals::ServoJSPrincipalsRef;
use crate::dom::bindings::reflector::DomObject; use crate::dom::bindings::reflector::DomObject;
@ -261,7 +261,7 @@ unsafe fn id_to_source(cx: SafeJSContext, id: RawHandleId) -> Option<DOMString>
jsstr.get() jsstr.get()
}) })
.filter(|jsstr| !jsstr.is_null()) .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 /// Property and method specs that correspond to the elements of
@ -275,7 +275,7 @@ pub struct CrossOriginProperties {
impl CrossOriginProperties { impl CrossOriginProperties {
/// Enumerate the property keys defined by `self`. /// 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 // Safety: All cross-origin property keys are strings, not symbols
self.attributes self.attributes
.iter() .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 // TODO: Once we have the slot for the holder, it'd be more efficient to
// use `ensure_cross_origin_property_holder`. // use `ensure_cross_origin_property_holder`.
*bp = if let Some(key) = *bp = jsid_to_string(*cx, Handle::from_raw(id)).map_or(false, |key| {
crate::dom::bindings::conversions::jsid_to_string(*cx, Handle::from_raw(id))
{
cross_origin_properties.keys().any(|defined_key| { cross_origin_properties.keys().any(|defined_key| {
let defined_key = CStr::from_ptr(defined_key); let defined_key = CStr::from_ptr(defined_key);
defined_key.to_bytes() == key.as_bytes() defined_key.to_bytes() == key.as_bytes()
}) })
} else { });
false
};
true true
} }
@ -639,21 +635,20 @@ const ALLOWLISTED_SYMBOL_CODES: &[SymbolCode] = &[
]; ];
unsafe fn is_cross_origin_allowlisted_prop(cx: SafeJSContext, id: RawHandleId) -> bool { unsafe fn is_cross_origin_allowlisted_prop(cx: SafeJSContext, id: RawHandleId) -> bool {
crate::dom::bindings::conversions::jsid_to_string(*cx, Handle::from_raw(id)) if jsid_to_string(*cx, Handle::from_raw(id)).map_or(false, |st| st == "then") {
.filter(|st| st == "then") return true;
.is_some() || }
{
rooted!(in(*cx) let mut allowed_id: jsid); rooted!(in(*cx) let mut allowed_id: jsid);
ALLOWLISTED_SYMBOL_CODES.iter().any(|&allowed_code| { ALLOWLISTED_SYMBOL_CODES.iter().any(|&allowed_code| {
RUST_SYMBOL_TO_JSID( RUST_SYMBOL_TO_JSID(
GetWellKnownSymbol(*cx, allowed_code), GetWellKnownSymbol(*cx, allowed_code),
allowed_id.handle_mut().into(), allowed_id.handle_mut().into(),
); );
// `jsid`s containing `JS::Symbol *` can be compared by // `jsid`s containing `JS::Symbol *` can be compared by
// referential equality // referential equality
allowed_id.get().asBits == id.asBits allowed_id.get().asBits == id.asBits
}) })
}
} }
/// Append `« "then", @@toStringTag, @@hasInstance, @@isConcatSpreadable »` to /// Append `« "then", @@toStringTag, @@hasInstance, @@isConcatSpreadable »` to
@ -665,12 +660,11 @@ unsafe fn append_cross_origin_allowlisted_prop_keys(
props: RawMutableHandleIdVector, props: RawMutableHandleIdVector,
) { ) {
rooted!(in(*cx) let mut id: jsid); rooted!(in(*cx) let mut id: jsid);
{
let jsstring = JS_AtomizeAndPinString(*cx, b"then\0".as_ptr() as *const c_char); let jsstring = JS_AtomizeAndPinString(*cx, b"then\0".as_ptr() as *const c_char);
rooted!(in(*cx) let rooted = jsstring); rooted!(in(*cx) let rooted = jsstring);
RUST_INTERNED_STRING_TO_JSID(*cx, rooted.handle().get(), id.handle_mut()); RUST_INTERNED_STRING_TO_JSID(*cx, rooted.handle().get(), id.handle_mut());
AppendToIdVector(props, id.handle()); AppendToIdVector(props, id.handle());
}
for &allowed_code in ALLOWLISTED_SYMBOL_CODES.iter() { for &allowed_code in ALLOWLISTED_SYMBOL_CODES.iter() {
RUST_SYMBOL_TO_JSID( RUST_SYMBOL_TO_JSID(