diff --git a/src/components/script/dom/bindings/utils.rs b/src/components/script/dom/bindings/utils.rs index f5b0f08849e..507f024c5d6 100644 --- a/src/components/script/dom/bindings/utils.rs +++ b/src/components/script/dom/bindings/utils.rs @@ -610,6 +610,25 @@ pub extern fn wrap_for_same_compartment(cx: *JSContext, obj: *JSObject) -> *JSOb } } +pub extern fn pre_wrap(cx: *mut JSContext, _scope: *mut JSObject, + obj: *mut JSObject, flags: c_uint) -> *mut JSObject { + unsafe { + let clasp = JS_GetClass(obj as *_); + let clasp = clasp as *js::Class; + match (*clasp).ext.outerObject { + Some(outerize) => { + debug!("found an outerize hook"); + let obj = JSHandleObject { unnamed: &(obj as *_) }; + outerize(cx as *_, obj) as *mut _ + } + None => { + debug!("no outerize hook found"); + obj + } + } + } +} + pub extern fn outerize_global(_cx: *JSContext, obj: JSHandleObject) -> *JSObject { unsafe { debug!("outerizing"); diff --git a/src/components/script/script_task.rs b/src/components/script/script_task.rs index 82f4ab0bb5f..02c19c52dd3 100644 --- a/src/components/script/script_task.rs +++ b/src/components/script/script_task.rs @@ -11,7 +11,8 @@ use dom::bindings::codegen::InheritTypes::{EventTargetCast, NodeCast, ElementCas use dom::bindings::js::{JS, JSRef, RootCollection, Temporary, OptionalSettable}; use dom::bindings::js::OptionalRootable; use dom::bindings::trace::{Traceable, Untraceable}; -use dom::bindings::utils::{Reflectable, GlobalStaticData, wrap_for_same_compartment}; +use dom::bindings::utils::{Reflectable, GlobalStaticData}; +use dom::bindings::utils::{wrap_for_same_compartment, pre_wrap}; use dom::document::{Document, HTMLDocument, DocumentMethods, DocumentHelpers}; use dom::element::{Element, AttributeHandlers}; use dom::event::{Event_, ResizeEvent, ReflowEvent, ClickEvent, MouseDownEvent, MouseMoveEvent, MouseUpEvent}; @@ -647,11 +648,11 @@ impl ScriptTask { let callback = JS_SetWrapObjectCallbacks((*js_runtime).ptr, ptr::null(), wrap_for_same_compartment, - ptr::null()); + None); JS_SetWrapObjectCallbacks((*js_runtime).ptr, callback, wrap_for_same_compartment, - ptr::null()); + Some(pre_wrap)); } let js_context = js_runtime.cx(); diff --git a/src/support/spidermonkey/rust-mozjs b/src/support/spidermonkey/rust-mozjs index 07acb44df9b..07f19496bd7 160000 --- a/src/support/spidermonkey/rust-mozjs +++ b/src/support/spidermonkey/rust-mozjs @@ -1 +1 @@ -Subproject commit 07acb44df9b3f638743931f392c0ebe7040a7bab +Subproject commit 07f19496bd7703b502812a6b4228f08dec59ec0b