diff options
Diffstat (limited to 'components/script/dom/htmliframeelement.rs')
-rw-r--r-- | components/script/dom/htmliframeelement.rs | 57 |
1 files changed, 31 insertions, 26 deletions
diff --git a/components/script/dom/htmliframeelement.rs b/components/script/dom/htmliframeelement.rs index a731d0820b6..a5c83002327 100644 --- a/components/script/dom/htmliframeelement.rs +++ b/components/script/dom/htmliframeelement.rs @@ -76,36 +76,41 @@ impl<'a> HTMLIFrameElementHelpers for JSRef<'a, HTMLIFrameElement> { fn get_url(&self) -> Option<Url> { let element: &JSRef<Element> = ElementCast::from_ref(self); element.get_attribute(Null, "src").root().and_then(|src| { - let window = window_from_node(self).root(); - UrlParser::new().base_url(&window.deref().page().get_url()) - .parse(src.deref().value().as_slice()).ok() + let url = src.deref().value(); + if url.as_slice().is_empty() { + None + } else { + let window = window_from_node(self).root(); + UrlParser::new().base_url(&window.deref().page().get_url()) + .parse(url.as_slice()).ok() + } }) } fn process_the_iframe_attributes(&self) { - match self.get_url() { - Some(url) => { - let sandboxed = if self.is_sandboxed() { - IFrameSandboxed - } else { - IFrameUnsandboxed - }; - - // Subpage Id - let window = window_from_node(self).root(); - let page = window.deref().page(); - let subpage_id = page.get_next_subpage_id(); - - self.deref().size.deref().set(Some(IFrameSize { - pipeline_id: page.id, - subpage_id: subpage_id, - })); - - let ConstellationChan(ref chan) = *page.constellation_chan.deref(); - chan.send(LoadIframeUrlMsg(url, page.id, subpage_id, sandboxed)); - } - _ => () - } + let url = match self.get_url() { + Some(url) => url.clone(), + None => Url::parse("about:blank").unwrap(), + }; + + let sandboxed = if self.is_sandboxed() { + IFrameSandboxed + } else { + IFrameUnsandboxed + }; + + // Subpage Id + let window = window_from_node(self).root(); + let page = window.deref().page(); + let subpage_id = page.get_next_subpage_id(); + + self.deref().size.deref().set(Some(IFrameSize { + pipeline_id: page.id, + subpage_id: subpage_id, + })); + + let ConstellationChan(ref chan) = *page.constellation_chan.deref(); + chan.send(LoadIframeUrlMsg(url, page.id, subpage_id, sandboxed)); } } |