diff --git a/components/script/dom/htmllinkelement.rs b/components/script/dom/htmllinkelement.rs index fd41329a9a9..4db3949d4f9 100644 --- a/components/script/dom/htmllinkelement.rs +++ b/components/script/dom/htmllinkelement.rs @@ -18,7 +18,7 @@ use dom::element::{AttributeMutation, Element, ElementCreator}; use dom::element::{cors_setting_for_element, reflect_cross_origin_attribute, set_cross_origin_attribute}; use dom::globalscope::GlobalScope; use dom::htmlelement::HTMLElement; -use dom::node::{Node, document_from_node, window_from_node}; +use dom::node::{Node, UnbindContext, document_from_node, window_from_node}; use dom::stylesheet::StyleSheet as DOMStyleSheet; use dom::virtualmethods::VirtualMethods; use html5ever_atoms::LocalName; @@ -228,6 +228,15 @@ impl VirtualMethods for HTMLLinkElement { } } } + + fn unbind_from_tree(&self, context: &UnbindContext) { + if let Some(ref s) = self.super_type() { + s.unbind_from_tree(context); + } + + let document = document_from_node(self); + document.invalidate_stylesheets(); + } } diff --git a/components/script/dom/htmlstyleelement.rs b/components/script/dom/htmlstyleelement.rs index 7401c67aa95..285c8af3087 100644 --- a/components/script/dom/htmlstyleelement.rs +++ b/components/script/dom/htmlstyleelement.rs @@ -15,7 +15,7 @@ use dom::document::Document; use dom::element::{Element, ElementCreator}; use dom::eventtarget::EventTarget; use dom::htmlelement::HTMLElement; -use dom::node::{ChildrenMutation, Node, document_from_node, window_from_node}; +use dom::node::{ChildrenMutation, Node, UnbindContext, document_from_node, window_from_node}; use dom::stylesheet::StyleSheet as DOMStyleSheet; use dom::virtualmethods::VirtualMethods; use html5ever_atoms::LocalName; @@ -161,6 +161,15 @@ impl VirtualMethods for HTMLStyleElement { self.parse_own_css(); } } + + fn unbind_from_tree(&self, context: &UnbindContext) { + if let Some(ref s) = self.super_type() { + s.unbind_from_tree(context); + } + + let doc = document_from_node(self); + doc.invalidate_stylesheets(); + } } impl StylesheetOwner for HTMLStyleElement { diff --git a/tests/wpt/metadata/subresource-integrity/subresource-integrity.sub.html.ini b/tests/wpt/metadata/subresource-integrity/subresource-integrity.sub.html.ini index 127ce07edb5..ada4d550044 100644 --- a/tests/wpt/metadata/subresource-integrity/subresource-integrity.sub.html.ini +++ b/tests/wpt/metadata/subresource-integrity/subresource-integrity.sub.html.ini @@ -3,25 +3,3 @@ expected: OK [Style: Same-origin with correct sha256 and sha512 hash, rel='alternate stylesheet' enabled] expected: FAIL - - [Style: Same-origin with incorrect hash.] - expected: FAIL - - [Style: Same-origin with sha256 match, sha512 mismatch] - expected: FAIL - - [Style: with CORS-ineligible resource] - expected: FAIL - - [Style: Cross-origin, not CORS request, with correct hash] - expected: FAIL - - [Style: Cross-origin, not CORS request, with hash mismatch] - expected: FAIL - - [Style: with incorrect hash CORS-eligible] - expected: FAIL - - [Style: with incorrect hash, ACAO: *] - expected: FAIL - diff --git a/tests/wpt/mozilla/meta/MANIFEST.json b/tests/wpt/mozilla/meta/MANIFEST.json index 055175f7f36..bdff5ad1ed3 100644 --- a/tests/wpt/mozilla/meta/MANIFEST.json +++ b/tests/wpt/mozilla/meta/MANIFEST.json @@ -6474,6 +6474,42 @@ "url": "/_mozilla/mozilla/iframe/resize_after_load.html" } ], + "mozilla/remove_link_styles.html": [ + { + "path": "mozilla/remove_link_styles.html", + "references": [ + [ + "/_mozilla/mozilla/remove_link_styles_ref.html", + "==" + ] + ], + "url": "/_mozilla/mozilla/remove_link_styles.html" + } + ], + "mozilla/remove_style_styles.html": [ + { + "path": "mozilla/remove_style_styles.html", + "references": [ + [ + "/_mozilla/mozilla/remove_style_styles_ref.html", + "==" + ] + ], + "url": "/_mozilla/mozilla/remove_style_styles.html" + } + ], + "mozilla/reparse_style_elements.html": [ + { + "path": "mozilla/reparse_style_elements.html", + "references": [ + [ + "/_mozilla/mozilla/reparse_style_elements_ref.html", + "==" + ] + ], + "url": "/_mozilla/mozilla/reparse_style_elements.html" + } + ], "mozilla/restyle-out-of-document.html": [ { "path": "mozilla/restyle-out-of-document.html", @@ -21876,6 +21912,42 @@ "url": "/_mozilla/mozilla/iframe/resize_after_load.html" } ], + "mozilla/remove_link_styles.html": [ + { + "path": "mozilla/remove_link_styles.html", + "references": [ + [ + "/_mozilla/mozilla/remove_link_styles_ref.html", + "==" + ] + ], + "url": "/_mozilla/mozilla/remove_link_styles.html" + } + ], + "mozilla/remove_style_styles.html": [ + { + "path": "mozilla/remove_style_styles.html", + "references": [ + [ + "/_mozilla/mozilla/remove_style_styles_ref.html", + "==" + ] + ], + "url": "/_mozilla/mozilla/remove_style_styles.html" + } + ], + "mozilla/reparse_style_elements.html": [ + { + "path": "mozilla/reparse_style_elements.html", + "references": [ + [ + "/_mozilla/mozilla/reparse_style_elements_ref.html", + "==" + ] + ], + "url": "/_mozilla/mozilla/reparse_style_elements.html" + } + ], "mozilla/restyle-out-of-document.html": [ { "path": "mozilla/restyle-out-of-document.html", diff --git a/tests/wpt/mozilla/tests/mozilla/remove_link_styles.css b/tests/wpt/mozilla/tests/mozilla/remove_link_styles.css new file mode 100644 index 00000000000..1984cf7df21 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/remove_link_styles.css @@ -0,0 +1,4 @@ +body { + background-color: red; + color: white !important; +} diff --git a/tests/wpt/mozilla/tests/mozilla/remove_link_styles.html b/tests/wpt/mozilla/tests/mozilla/remove_link_styles.html new file mode 100644 index 00000000000..6a1e592d096 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/remove_link_styles.html @@ -0,0 +1,19 @@ + + +Removing link tag should remove associated styles + + + + + + This text should be green and the background should not be red. + + + diff --git a/tests/wpt/mozilla/tests/mozilla/remove_link_styles_ref.html b/tests/wpt/mozilla/tests/mozilla/remove_link_styles_ref.html new file mode 100644 index 00000000000..e9fd0816b9b --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/remove_link_styles_ref.html @@ -0,0 +1,11 @@ + + + + + + This text should be green and the background should not be red. + diff --git a/tests/wpt/mozilla/tests/mozilla/remove_style_styles.html b/tests/wpt/mozilla/tests/mozilla/remove_style_styles.html new file mode 100644 index 00000000000..f8a94bb7350 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/remove_style_styles.html @@ -0,0 +1,20 @@ + + +Removing style element should remove all associated styles + + + + + This text should be black and the background should not be red. + + + diff --git a/tests/wpt/mozilla/tests/mozilla/remove_style_styles_ref.html b/tests/wpt/mozilla/tests/mozilla/remove_style_styles_ref.html new file mode 100644 index 00000000000..d562e127203 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/remove_style_styles_ref.html @@ -0,0 +1,5 @@ + + + + This text should be black and the background should not be red. + diff --git a/tests/wpt/mozilla/tests/mozilla/reparse_style_elements.html b/tests/wpt/mozilla/tests/mozilla/reparse_style_elements.html new file mode 100644 index 00000000000..e54f5a28d13 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/reparse_style_elements.html @@ -0,0 +1,18 @@ + + +Style elements should be reparsed on change + + + + + This text should be green and the background should not be red. + + + diff --git a/tests/wpt/mozilla/tests/mozilla/reparse_style_elements_ref.html b/tests/wpt/mozilla/tests/mozilla/reparse_style_elements_ref.html new file mode 100644 index 00000000000..e9fd0816b9b --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/reparse_style_elements_ref.html @@ -0,0 +1,11 @@ + + + + + + This text should be green and the background should not be red. +