From 765cea73d94f5b2a17272a895e0d99cf239e5b81 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Wed, 14 May 2014 17:58:40 +0200 Subject: [PATCH] Implement iframe.contentWindow. --- src/components/script/dom/htmliframeelement.rs | 14 +++++++++++++- src/components/script/script_task.rs | 2 +- 2 files changed, 14 insertions(+), 2 deletions(-) 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> { - 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 { diff --git a/src/components/script/script_task.rs b/src/components/script/script_task.rs index 02c19c52dd3..0ce993d5e19 100644 --- a/src/components/script/script_task.rs +++ b/src/components/script/script_task.rs @@ -173,7 +173,7 @@ pub struct PageIterator { stack: Vec>, } -trait IterablePage { +pub trait IterablePage { fn iter(&self) -> PageIterator; fn find(&self, id: PipelineId) -> Option>; }