apply yvt/servo/fix-named-window-getter

This commit is contained in:
Delan Azabani 2023-03-23 18:02:35 +08:00
parent fd1de05592
commit 4c7f198ee2
9 changed files with 398 additions and 49 deletions

View file

@ -15,7 +15,9 @@ use js::error::throw_type_error;
use js::glue::RUST_JSID_TO_STRING;
use js::glue::{CreateProxyHandler, NewProxyObject, ProxyTraps, RUST_JSID_IS_STRING};
use js::jsapi::JS_SetImmutablePrototype;
use js::jsapi::{Handle, HandleObject, JSClass, JSContext, JSErrNum, UndefinedHandleValue};
use js::jsapi::{
Handle, HandleObject, JSClass, JSContext, JSErrNum, MutableHandleObject, UndefinedHandleValue,
};
use js::jsapi::{
HandleId, JSClass_NON_NATIVE, MutableHandle, MutableHandleIdVector, ObjectOpResult,
PropertyDescriptor, ProxyClassExtension, ProxyClassOps, ProxyObjectOps,
@ -42,7 +44,7 @@ lazy_static! {
ownPropertyKeys: Some(own_property_keys),
delete_: Some(delete),
enumerate: None,
getPrototypeIfOrdinary: None,
getPrototypeIfOrdinary: Some(get_prototype_if_ordinary),
getPrototype: None,
setPrototype: None,
setImmutablePrototype: None,
@ -153,6 +155,18 @@ unsafe extern "C" fn delete(
true
}
#[allow(unsafe_code)]
unsafe extern "C" fn get_prototype_if_ordinary(
_cx: *mut JSContext,
proxy: HandleObject,
is_ordinary: *mut bool,
proto: MutableHandleObject,
) -> bool {
*is_ordinary = true;
proto.set(js::jsapi::GetStaticPrototype(proxy.get()));
true
}
#[allow(unsafe_code)]
unsafe extern "C" fn prevent_extensions(
_cx: *mut JSContext,