diff options
Diffstat (limited to 'components/script/dom')
-rw-r--r-- | components/script/dom/document.rs | 7 | ||||
-rw-r--r-- | components/script/dom/htmlanchorelement.rs | 2 | ||||
-rw-r--r-- | components/script/dom/windowproxy.rs | 10 |
3 files changed, 12 insertions, 7 deletions
diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs index f548907d6a2..6f1656d1baf 100644 --- a/components/script/dom/document.rs +++ b/components/script/dom/document.rs @@ -579,6 +579,13 @@ impl Document { if let Some(browsing_context) = self.browsing_context() { // Step 1: If document is an iframe srcdoc document, then return the // document base URL of document's browsing context's container document. + let container_base_url = browsing_context + .parent() + .and_then(|parent| parent.document()) + .map(|document| document.base_url()); + if document_url.as_str() == "about:srcdoc" && container_base_url.is_some() { + return container_base_url.unwrap(); + } // Step 2: If document's URL is about:blank, and document's browsing // context's creator base URL is non-null, then return that creator base URL. diff --git a/components/script/dom/htmlanchorelement.rs b/components/script/dom/htmlanchorelement.rs index a0f939b93ad..f61d466afd5 100644 --- a/components/script/dom/htmlanchorelement.rs +++ b/components/script/dom/htmlanchorelement.rs @@ -637,7 +637,7 @@ pub fn follow_hyperlink(subject: &Element, hyperlink_suffix: Option<String>) { if let Some(suffix) = hyperlink_suffix { href.push_str(&suffix); } - let url = match document.url().join(&href) { + let url = match document.base_url().join(&href) { Ok(url) => url, Err(_) => return, }; diff --git a/components/script/dom/windowproxy.rs b/components/script/dom/windowproxy.rs index ba2797f6183..9aac99dc447 100644 --- a/components/script/dom/windowproxy.rs +++ b/components/script/dom/windowproxy.rs @@ -731,12 +731,10 @@ impl CreatorBrowsingContextInfo { parent: Option<&WindowProxy>, opener: Option<&WindowProxy>, ) -> CreatorBrowsingContextInfo { - let creator = if parent.is_some() { - parent.unwrap().document() - } else if opener.is_some() { - opener.unwrap().document() - } else { - None + let creator = match (parent, opener) { + (Some(parent), _) => parent.document(), + (None, Some(opener)) => opener.document(), + (None, None) => None, }; let base_url = creator.as_deref().map(|document| document.base_url()); |