diff options
Diffstat (limited to 'components/script/dom')
-rw-r--r-- | components/script/dom/htmliframeelement.rs | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/components/script/dom/htmliframeelement.rs b/components/script/dom/htmliframeelement.rs index bf3ff02487c..42f5a8e17e7 100644 --- a/components/script/dom/htmliframeelement.rs +++ b/components/script/dom/htmliframeelement.rs @@ -76,7 +76,9 @@ impl HTMLIFrameElement { self.sandbox.get().is_some() } - pub fn get_url(&self) -> Option<Url> { + /// <https://html.spec.whatwg.org/multipage/#otherwise-steps-for-iframe-or-frame-elements>, + /// step 1. + fn get_url(&self) -> Url { let element = self.upcast::<Element>(); element.get_attribute(&ns!(), &atom!("src")).and_then(|src| { let url = src.value(); @@ -85,7 +87,7 @@ impl HTMLIFrameElement { } else { document_from_node(self).base_url().join(&url).ok() } - }) + }).unwrap_or_else(|| Url::parse("about:blank").unwrap()) } pub fn generate_new_subpage_id(&self) -> (SubpageId, Option<SubpageId>) { @@ -144,10 +146,7 @@ impl HTMLIFrameElement { } pub fn process_the_iframe_attributes(&self) { - let url = match self.get_url() { - Some(url) => url, - None => Url::parse("about:blank").unwrap(), - }; + let url = self.get_url(); // TODO - loaddata here should have referrer info (not None, None) self.navigate_or_reload_child_browsing_context(Some(LoadData::new(url, None, None))); @@ -430,10 +429,9 @@ impl HTMLIFrameElementMethods for HTMLIFrameElement { // https://html.spec.whatwg.org/multipage/#dom-iframe-contentdocument fn GetContentDocument(&self) -> Option<Root<Document>> { self.GetContentWindow().and_then(|window| { - let self_url = match self.get_url() { - Some(self_url) => self_url, - None => return None, - }; + // FIXME(#10964): this should use the Document's origin and the + // origin of the incumbent settings object. + let self_url = self.get_url(); let win_url = window_from_node(self).get_url(); if UrlHelper::SameOrigin(&self_url, &win_url) { @@ -585,11 +583,12 @@ impl VirtualMethods for HTMLIFrameElement { // Since most of this cleanup doesn't happen on same-origin // iframes, and since that would cause a deadlock, don't do it. let ConstellationChan(ref chan) = *window.constellation_chan(); - let same_origin = if let Some(self_url) = self.get_url() { + let same_origin = { + // FIXME(#10968): this should probably match the origin check in + // HTMLIFrameElement::contentDocument. + let self_url = self.get_url(); let win_url = window_from_node(self).get_url(); UrlHelper::SameOrigin(&self_url, &win_url) - } else { - false }; let (sender, receiver) = if same_origin { (None, None) |