diff options
Diffstat (limited to 'components/script/dom')
-rw-r--r-- | components/script/dom/htmliframeelement.rs | 18 | ||||
-rw-r--r-- | components/script/dom/urlhelper.rs | 14 | ||||
-rw-r--r-- | components/script/dom/webidls/HTMLIFrameElement.webidl | 2 |
3 files changed, 33 insertions, 1 deletions
diff --git a/components/script/dom/htmliframeelement.rs b/components/script/dom/htmliframeelement.rs index e9e1fae2e27..59c7011a9c7 100644 --- a/components/script/dom/htmliframeelement.rs +++ b/components/script/dom/htmliframeelement.rs @@ -6,6 +6,7 @@ use dom::attr::Attr; use dom::attr::AttrHelpers; use dom::bindings::codegen::Bindings::HTMLIFrameElementBinding; use dom::bindings::codegen::Bindings::HTMLIFrameElementBinding::HTMLIFrameElementMethods; +use dom::bindings::codegen::Bindings::WindowBinding::WindowMethods; use dom::bindings::codegen::InheritTypes::{NodeCast, ElementCast}; use dom::bindings::codegen::InheritTypes::{HTMLElementCast, HTMLIFrameElementDerived}; use dom::bindings::js::{JSRef, Temporary, OptionalRootable}; @@ -16,6 +17,7 @@ use dom::element::AttributeHandlers; use dom::eventtarget::{EventTarget, NodeTargetTypeId}; use dom::htmlelement::HTMLElement; use dom::node::{Node, NodeHelpers, ElementNodeTypeId, window_from_node}; +use dom::urlhelper::UrlHelper; use dom::virtualmethods::VirtualMethods; use dom::window::Window; use page::IterablePage; @@ -180,6 +182,22 @@ impl<'a> HTMLIFrameElementMethods for JSRef<'a, HTMLIFrameElement> { }) }) } + + fn GetContentDocument(self) -> Option<Temporary<Document>> { + self.GetContentWindow().root().and_then(|window| { + let self_url = match self.get_url() { + Some(self_url) => self_url, + None => return None, + }; + let win_url = window_from_node(self).root().page().get_url(); + + if UrlHelper::SameOrigin(&self_url, &win_url) { + Some(window.Document()) + } else { + None + } + }) + } } impl<'a> VirtualMethods for JSRef<'a, HTMLIFrameElement> { diff --git a/components/script/dom/urlhelper.rs b/components/script/dom/urlhelper.rs index f678e273876..251f8283e1e 100644 --- a/components/script/dom/urlhelper.rs +++ b/components/script/dom/urlhelper.rs @@ -27,4 +27,18 @@ impl UrlHelper { Some(ref hash) => format!("#{}", hash) } } + + /// https://html.spec.whatwg.org/multipage/browsers.html#same-origin + pub fn SameOrigin(urlA: &Url, urlB: &Url) -> bool { + if urlA.host() != urlB.host() { + return false + } + if urlA.scheme != urlB.scheme { + return false + } + if urlA.port() != urlB.port() { + return false + } + return true + } } diff --git a/components/script/dom/webidls/HTMLIFrameElement.webidl b/components/script/dom/webidls/HTMLIFrameElement.webidl index 201f8700ce4..7768065545c 100644 --- a/components/script/dom/webidls/HTMLIFrameElement.webidl +++ b/components/script/dom/webidls/HTMLIFrameElement.webidl @@ -14,7 +14,7 @@ interface HTMLIFrameElement : HTMLElement { // attribute boolean allowFullscreen; // attribute DOMString width; // attribute DOMString height; - //readonly attribute Document? contentDocument; + readonly attribute Document? contentDocument; //readonly attribute WindowProxy? contentWindow; readonly attribute Window? contentWindow; |