From ffd7960ad8abc8692425d8c27313dcc8889e58f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Naz=C4=B1m=20Can=20Alt=C4=B1nova?= Date: Sun, 17 Apr 2016 00:48:29 +0300 Subject: [PATCH] Use the document base url when resolving stylesheets --- components/script/dom/htmllinkelement.rs | 21 +++++++--------- tests/wpt/metadata/MANIFEST.json | 24 +++++++++++++++++++ .../the-link-element/resources/stylesheet.css | 3 +++ .../stylesheet-with-base-ref.html | 11 +++++++++ .../stylesheet-with-base.html | 11 +++++++++ .../the-link-element/stylesheet.css | 3 +++ 6 files changed, 61 insertions(+), 12 deletions(-) create mode 100644 tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/resources/stylesheet.css create mode 100644 tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/stylesheet-with-base-ref.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/stylesheet-with-base.html create mode 100644 tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/stylesheet.css diff --git a/components/script/dom/htmllinkelement.rs b/components/script/dom/htmllinkelement.rs index e7af4f537be0..1b058b4c6715 100644 --- a/components/script/dom/htmllinkelement.rs +++ b/components/script/dom/htmllinkelement.rs @@ -190,9 +190,8 @@ impl VirtualMethods for HTMLLinkElement { impl HTMLLinkElement { fn handle_stylesheet_url(&self, href: &str) { - let window = window_from_node(self); - let window = window.r(); - match window.get_url().join(href) { + let document = document_from_node(self); + match document.base_url().join(href) { Ok(url) => { let element = self.upcast::(); @@ -206,8 +205,7 @@ impl HTMLLinkElement { let media = parse_media_query_list(&mut css_parser); // TODO: #8085 - Don't load external stylesheets if the node's mq doesn't match. - let doc = window.Document(); - let script_chan = window.networking_task_source(); + let script_chan = document.window().networking_task_source(); let elem = Trusted::new(self, script_chan.clone()); let context = Arc::new(Mutex::new(StylesheetContext { @@ -231,20 +229,19 @@ impl HTMLLinkElement { }); if self.parser_inserted.get() { - doc.increment_script_blocking_stylesheet_count(); + document.increment_script_blocking_stylesheet_count(); } - doc.load_async(LoadType::Stylesheet(url), response_target); + document.load_async(LoadType::Stylesheet(url), response_target); } Err(e) => debug!("Parsing url {} failed: {}", href, e) } } fn handle_favicon_url(&self, rel: &str, href: &str, sizes: &Option) { - let window = window_from_node(self); - let window = window.r(); - match window.get_url().join(href) { + let document = document_from_node(self); + match document.base_url().join(href) { Ok(url) => { - let ConstellationChan(ref chan) = window.constellation_chan(); + let ConstellationChan(ref chan) = document.window().constellation_chan(); let event = ConstellationMsg::NewFavicon(url.clone()); chan.send(event).unwrap(); @@ -252,7 +249,7 @@ impl HTMLLinkElement { Some(ref sizes) => MozBrowserEvent::IconChange(rel.to_owned(), url.to_string(), sizes.to_owned()), None => MozBrowserEvent::IconChange(rel.to_owned(), url.to_string(), "".to_owned()) }; - window.Document().trigger_mozbrowser_event(mozbrowser_event); + document.trigger_mozbrowser_event(mozbrowser_event); } Err(e) => debug!("Parsing url {} failed: {}", href, e) } diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json index 31ec16b06d5e..01948a5853eb 100644 --- a/tests/wpt/metadata/MANIFEST.json +++ b/tests/wpt/metadata/MANIFEST.json @@ -37233,6 +37233,18 @@ "url": "/html/rendering/replaced-elements/images/space.html" } ], + "html/semantics/document-metadata/the-link-element/stylesheet-with-base.html": [ + { + "path": "html/semantics/document-metadata/the-link-element/stylesheet-with-base.html", + "references": [ + [ + "/html/semantics/document-metadata/the-link-element/stylesheet-with-base-ref.html", + "==" + ] + ], + "url": "/html/semantics/document-metadata/the-link-element/stylesheet-with-base.html" + } + ], "html/semantics/document-metadata/the-style-element/html_style_in_comment.xhtml": [ { "path": "html/semantics/document-metadata/the-style-element/html_style_in_comment.xhtml", @@ -40514,6 +40526,18 @@ } }, "reftest_nodes": { + "html/semantics/document-metadata/the-link-element/stylesheet-with-base.html": [ + { + "path": "html/semantics/document-metadata/the-link-element/stylesheet-with-base.html", + "references": [ + [ + "/html/semantics/document-metadata/the-link-element/stylesheet-with-base-ref.html", + "==" + ] + ], + "url": "/html/semantics/document-metadata/the-link-element/stylesheet-with-base.html" + } + ], "html/semantics/embedded-content/the-iframe-element/iframe-with-base.html": [ { "path": "html/semantics/embedded-content/the-iframe-element/iframe-with-base.html", diff --git a/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/resources/stylesheet.css b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/resources/stylesheet.css new file mode 100644 index 000000000000..e1b2552ffea7 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/resources/stylesheet.css @@ -0,0 +1,3 @@ +body { + background-color: green; +} diff --git a/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/stylesheet-with-base-ref.html b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/stylesheet-with-base-ref.html new file mode 100644 index 000000000000..83f0d067720b --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/stylesheet-with-base-ref.html @@ -0,0 +1,11 @@ + + + + Stylesheet Without Base Tag + + + + + diff --git a/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/stylesheet-with-base.html b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/stylesheet-with-base.html new file mode 100644 index 000000000000..a9f2a8bce08c --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/stylesheet-with-base.html @@ -0,0 +1,11 @@ + + + + Stylesheet With Base Tag + + + + + + + diff --git a/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/stylesheet.css b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/stylesheet.css new file mode 100644 index 000000000000..e8f24f94a361 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/stylesheet.css @@ -0,0 +1,3 @@ +body { + background-color: red; +}