diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2016-05-02 05:32:25 -0700 |
---|---|---|
committer | bors-servo <lbergstrom+bors@mozilla.com> | 2016-05-02 05:32:25 -0700 |
commit | d32648172c711b5d95819c58bcedcee5f50f3018 (patch) | |
tree | d21dca35ab759a657d081693dac4ce8e754ec80c /components/script | |
parent | 5358df5a16d514d2d93a5959787af47e2f5f8452 (diff) | |
parent | eba74554f370c673b67085e55ce480652c52dfb6 (diff) | |
download | servo-d32648172c711b5d95819c58bcedcee5f50f3018.tar.gz servo-d32648172c711b5d95819c58bcedcee5f50f3018.zip |
Auto merge of #10969 - servo:iframe, r=KiChjang
Iframe improvements.
<!-- Reviewable:start -->
This change is [<img src="https://reviewable.io/review_button.svg" height="35" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/10969)
<!-- Reviewable:end -->
Diffstat (limited to 'components/script')
-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) |