diff options
author | bors-servo <release+servo@mozilla.com> | 2014-05-20 11:43:46 -0400 |
---|---|---|
committer | bors-servo <release+servo@mozilla.com> | 2014-05-20 11:43:46 -0400 |
commit | ca9396ff9c7ebeea48d881b421854168b9afb825 (patch) | |
tree | ac6081bf013c32d4b91cf15c2b202406e6412b82 /src/components/script/dom | |
parent | 90a0bcfa78ddf89031d54e4ed8ae84e2b171b4d0 (diff) | |
parent | 81821052040eab42e9b3ca72aeccbb17cd002197 (diff) | |
download | servo-ca9396ff9c7ebeea48d881b421854168b9afb825.tar.gz servo-ca9396ff9c7ebeea48d881b421854168b9afb825.zip |
auto merge of #2434 : Ms2ger/servo/contentWindow, r=jdm
Diffstat (limited to 'src/components/script/dom')
-rw-r--r-- | src/components/script/dom/bindings/utils.rs | 22 | ||||
-rw-r--r-- | src/components/script/dom/htmliframeelement.rs | 14 |
2 files changed, 22 insertions, 14 deletions
diff --git a/src/components/script/dom/bindings/utils.rs b/src/components/script/dom/bindings/utils.rs index f5b0f08849e..7c742efcbb2 100644 --- a/src/components/script/dom/bindings/utils.rs +++ b/src/components/script/dom/bindings/utils.rs @@ -37,6 +37,7 @@ use js::jsapi::{JSContext, JSObject, JSBool, jsid, JSClass, JSNative}; use js::jsapi::{JSFunctionSpec, JSPropertySpec}; use js::jsapi::{JS_NewGlobalObject, JS_InitStandardClasses}; use js::jsapi::{JSString}; +use js::jsfriendapi::JS_ObjectToOuterObject; use js::jsfriendapi::bindgen::JS_NewObjectWithUniqueType; use js::jsval::JSVal; use js::jsval::{PrivateValue, ObjectValue, NullValue, ObjectOrNullValue}; @@ -594,19 +595,14 @@ pub fn CreateDOMGlobal(cx: *JSContext, class: *JSClass) -> *JSObject { pub extern fn wrap_for_same_compartment(cx: *JSContext, obj: *JSObject) -> *JSObject { unsafe { - let clasp = JS_GetClass(obj); - let clasp = clasp as *js::Class; - match (*clasp).ext.outerObject { - Some(outerize) => { - debug!("found an outerize hook"); - let obj = JSHandleObject { unnamed: &obj }; - outerize(cx, obj) - } - None => { - debug!("no outerize hook found"); - obj - } - } + JS_ObjectToOuterObject(cx as *mut _, obj as *mut _) as *_ + } +} + +pub extern fn pre_wrap(cx: *mut JSContext, _scope: *mut JSObject, + obj: *mut JSObject, _flags: c_uint) -> *mut JSObject { + unsafe { + JS_ObjectToOuterObject(cx, obj) } } diff --git a/src/components/script/dom/htmliframeelement.rs b/src/components/script/dom/htmliframeelement.rs index f92fddabdaa..766d7a711f9 100644 --- a/src/components/script/dom/htmliframeelement.rs +++ b/src/components/script/dom/htmliframeelement.rs @@ -14,6 +14,7 @@ use dom::htmlelement::HTMLElement; use dom::node::{Node, ElementNodeTypeId, window_from_node}; use dom::virtualmethods::VirtualMethods; use dom::window::Window; +use script_task::IterablePage; use servo_msg::constellation_msg::{PipelineId, SubpageId}; use servo_msg::constellation_msg::{IFrameSandboxed, IFrameUnsandboxed}; use servo_msg::constellation_msg::{ConstellationChan, LoadIframeUrlMsg}; @@ -184,7 +185,18 @@ impl<'a> HTMLIFrameElementMethods for JSRef<'a, HTMLIFrameElement> { } fn GetContentWindow(&self) -> Option<Temporary<Window>> { - None + self.size.and_then(|size| { + let window = window_from_node(self).root(); + let children = &*window.deref().page.children.deref().borrow(); + let child = children.iter().find(|child| { + child.subpage_id.unwrap() == size.subpage_id + }); + child.and_then(|page| { + page.frame.deref().borrow().as_ref().map(|frame| { + Temporary::new(frame.window.clone()) + }) + }) + }) } fn Align(&self) -> DOMString { |