From 7539eb496b05efcde5a1d2dc3e4d0baa27998580 Mon Sep 17 00:00:00 2001 From: Josh Matthews Date: Mon, 11 Jul 2016 16:56:04 -0400 Subject: [PATCH 1/2] Avoid unnecessary JS_WrapValue calls for DOM reflectors. --- components/script/dom/bindings/conversions.rs | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/components/script/dom/bindings/conversions.rs b/components/script/dom/bindings/conversions.rs index 80911b65e74..01282ea3b1f 100644 --- a/components/script/dom/bindings/conversions.rs +++ b/components/script/dom/bindings/conversions.rs @@ -47,9 +47,9 @@ use js::glue::{RUST_JSID_IS_STRING, RUST_JSID_TO_STRING, UnwrapObject}; use js::jsapi::{HandleId, HandleObject, HandleValue, JSClass, JSContext}; use js::jsapi::{JSObject, JSString, JS_GetArrayBufferViewType, JS_GetClass}; use js::jsapi::{JS_GetLatin1StringCharsAndLength, JS_GetObjectAsArrayBufferView}; -use js::jsapi::{JS_GetReservedSlot, JS_GetTwoByteStringCharsAndLength}; +use js::jsapi::{JS_GetReservedSlot, JS_GetTwoByteStringCharsAndLength, ToWindowProxyIfWindow}; use js::jsapi::{JS_IsArrayObject, JS_NewStringCopyN, JS_StringHasLatin1Chars}; -use js::jsapi::{JS_WrapValue, MutableHandleValue, Type}; +use js::jsapi::{JS_WrapValue, MutableHandleValue, Type, IsObjectInContextCompartment}; use js::jsval::{ObjectValue, StringValue}; use js::rust::ToString; use libc; @@ -276,9 +276,15 @@ impl ToJSValConvertible for Reflector { unsafe fn to_jsval(&self, cx: *mut JSContext, rval: MutableHandleValue) { let obj = self.get_jsobject().get(); assert!(!obj.is_null()); - rval.set(ObjectValue(&*obj)); - if !JS_WrapValue(cx, rval) { - panic!("JS_WrapValue failed."); + let same_compartment = IsObjectInContextCompartment(obj, cx); + if same_compartment { + rval.set(ObjectValue(&*ToWindowProxyIfWindow(obj))); + } else { + rval.set(ObjectValue(&*obj)); + + if !JS_WrapValue(cx, rval) { + panic!("JS_WrapValue failed."); + } } } } From fc3b785af1c4e6c96b5c9d0646ac22e92a327787 Mon Sep 17 00:00:00 2001 From: Josh Matthews Date: Mon, 11 Jul 2016 17:00:51 -0400 Subject: [PATCH 2/2] Remove unused imports from codegen. --- .../script/dom/bindings/codegen/CodegenRust.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py index e6e95ab1cb8..fbd024a4d08 100644 --- a/components/script/dom/bindings/codegen/CodegenRust.py +++ b/components/script/dom/bindings/codegen/CodegenRust.py @@ -5534,17 +5534,17 @@ class CGBindingRoot(CGThing): 'js::jsapi::{JSJitInfo_AliasSet, JSJitInfo_ArgType, AutoIdVector, CallArgs, FreeOp}', 'js::jsapi::{JSITER_SYMBOLS, JSPROP_ENUMERATE, JSPROP_PERMANENT, JSPROP_READONLY, JSPROP_SHARED}', 'js::jsapi::{JSCLASS_RESERVED_SLOTS_SHIFT, JSITER_HIDDEN, JSITER_OWNONLY}', - 'js::jsapi::{GetGlobalForObjectCrossCompartment , GetPropertyKeys, Handle}', + 'js::jsapi::{GetPropertyKeys, Handle}', 'js::jsapi::{HandleId, HandleObject, HandleValue, HandleValueArray}', 'js::jsapi::{INTERNED_STRING_TO_JSID, IsCallable, JS_CallFunctionValue}', - 'js::jsapi::{JS_ComputeThis, JS_CopyPropertiesFrom, JS_ForwardGetPropertyTo}', + 'js::jsapi::{JS_CopyPropertiesFrom, JS_ForwardGetPropertyTo}', 'js::jsapi::{JS_GetClass, JS_GetErrorPrototype, JS_GetFunctionPrototype}', 'js::jsapi::{JS_GetGlobalForObject, JS_GetObjectPrototype, JS_GetProperty}', 'js::jsapi::{JS_GetPropertyById, JS_GetPropertyDescriptorById, JS_GetReservedSlot}', 'js::jsapi::{JS_HasProperty, JS_HasPropertyById, JS_InitializePropertiesFromCompatibleNativeObject}', - 'js::jsapi::{JS_AtomizeAndPinString, JS_IsExceptionPending, JS_NewObject, JS_NewObjectWithGivenProto}', - 'js::jsapi::{JS_NewObjectWithoutMetadata, JS_NewStringCopyZ, JS_SetProperty}', - 'js::jsapi::{JS_SetPrototype, JS_SetReservedSlot, JS_WrapValue, JSAutoCompartment}', + 'js::jsapi::{JS_AtomizeAndPinString, JS_NewObject, JS_NewObjectWithGivenProto}', + 'js::jsapi::{JS_NewObjectWithoutMetadata, JS_SetProperty}', + 'js::jsapi::{JS_SetPrototype, JS_SetReservedSlot, JSAutoCompartment}', 'js::jsapi::{JSContext, JSClass, JSFreeOp, JSFunctionSpec}', 'js::jsapi::{JSJitGetterCallArgs, JSJitInfo, JSJitMethodCallArgs, JSJitSetterCallArgs}', 'js::jsapi::{JSNative, JSObject, JSNativeWrapper, JSPropertySpec}', @@ -5557,8 +5557,7 @@ class CGBindingRoot(CGThing): 'js::jsval::{NullValue, UndefinedValue}', 'js::glue::{CallJitMethodOp, CallJitGetterOp, CallJitSetterOp, CreateProxyHandler}', 'js::glue::{GetProxyPrivate, NewProxyObject, ProxyTraps}', - 'js::glue::{RUST_FUNCTION_VALUE_TO_JITINFO}', - 'js::glue::{RUST_JS_NumberValue, RUST_JSID_IS_STRING, int_to_jsid}', + 'js::glue::{RUST_JSID_IS_STRING, int_to_jsid}', 'js::glue::AppendToAutoIdVector', 'js::rust::{GCMethods, define_methods, define_properties}', 'dom::bindings',