aboutsummaryrefslogtreecommitdiffstats
path: root/components/script
diff options
context:
space:
mode:
authorSean Joseph <sean.joseph@cengage.com>2020-11-26 18:30:52 -0500
committerSean Joseph <sean.joseph@cengage.com>2020-11-26 18:30:52 -0500
commit823cca30d65f58eaa80085ff2e40e99ba7bcb8ba (patch)
tree35d6206d481e9d8c4cea40cec1fe3ad94558cfec /components/script
parent3c8680f273760d88ef15ae6c1cece94539753337 (diff)
downloadservo-823cca30d65f58eaa80085ff2e40e99ba7bcb8ba.tar.gz
servo-823cca30d65f58eaa80085ff2e40e99ba7bcb8ba.zip
Added is_platform_obj_static
Diffstat (limited to 'components/script')
-rw-r--r--components/script/dom/bindings/codegen/CodegenRust.py3
-rw-r--r--components/script/dom/bindings/utils.rs23
2 files changed, 21 insertions, 5 deletions
diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py
index 13c295ef1a2..7d2cfcdd31e 100644
--- a/components/script/dom/bindings/codegen/CodegenRust.py
+++ b/components/script/dom/bindings/codegen/CodegenRust.py
@@ -6182,7 +6182,8 @@ def generate_imports(config, cgthings, descriptors, callbacks=None, dictionaries
'crate::dom::bindings::utils::get_property_on_prototype',
'crate::dom::bindings::utils::get_proto_or_iface_array',
'crate::dom::bindings::utils::has_property_on_prototype',
- 'crate::dom::bindings::utils::is_platform_object',
+ 'crate::dom::bindings::utils::is_platform_object_dynamic',
+ 'crate::dom::bindings::utils::is_platform_object_static',
'crate::dom::bindings::utils::resolve_global',
'crate::dom::bindings::utils::set_dictionary_property',
'crate::dom::bindings::utils::trace_global',
diff --git a/components/script/dom/bindings/utils.rs b/components/script/dom/bindings/utils.rs
index be513aa0244..8ca51c2189d 100644
--- a/components/script/dom/bindings/utils.rs
+++ b/components/script/dom/bindings/utils.rs
@@ -19,7 +19,7 @@ use crate::script_runtime::JSContext as SafeJSContext;
use js::conversions::{jsstr_to_string, ToJSValConvertible};
use js::glue::{CallJitGetterOp, CallJitMethodOp, CallJitSetterOp, IsWrapper};
use js::glue::{GetCrossCompartmentWrapper, JS_GetReservedSlot, WrapperNew};
-use js::glue::{UnwrapObjectDynamic, RUST_JSID_TO_INT, RUST_JSID_TO_STRING};
+use js::glue::{UnwrapObjectDynamic, UnwrapObjectStatic, RUST_JSID_TO_INT, RUST_JSID_TO_STRING};
use js::glue::{
RUST_FUNCTION_VALUE_TO_JITINFO, RUST_JSID_IS_INT, RUST_JSID_IS_STRING, RUST_JSID_IS_VOID,
};
@@ -251,9 +251,24 @@ pub unsafe fn find_enum_value<'a, T>(
))
}
-/// Returns wether `obj` is a platform object
+/// Returns wether `obj` is a platform object using dynamic unwrap
/// <https://heycam.github.io/webidl/#dfn-platform-object>
-pub fn is_platform_object(obj: *mut JSObject, cx: *mut JSContext) -> bool {
+pub fn is_platform_object_dynamic(obj: *mut JSObject, cx: *mut JSContext) -> bool {
+ is_platform_object(obj, &|o| unsafe {
+ UnwrapObjectDynamic(o, cx, /* stopAtWindowProxy = */ 0)
+ })
+}
+
+/// Returns wether `obj` is a platform object using static unwrap
+/// <https://heycam.github.io/webidl/#dfn-platform-object>
+pub fn is_platform_object_static(obj: *mut JSObject) -> bool {
+ is_platform_object(obj, &|o| unsafe { UnwrapObjectStatic(o) })
+}
+
+fn is_platform_object(
+ obj: *mut JSObject,
+ unwrap_obj: &dyn Fn(*mut JSObject) -> *mut JSObject,
+) -> bool {
unsafe {
// Fast-path the common case
let mut clasp = get_object_class(obj);
@@ -262,7 +277,7 @@ pub fn is_platform_object(obj: *mut JSObject, cx: *mut JSContext) -> bool {
}
// Now for simplicity check for security wrappers before anything else
if IsWrapper(obj) {
- let unwrapped_obj = UnwrapObjectDynamic(obj, cx, /* stopAtWindowProxy = */ 0);
+ let unwrapped_obj = unwrap_obj(obj);
if unwrapped_obj.is_null() {
return false;
}