Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement support for removing stylesheets from their document #14930

Merged
merged 4 commits into from Jan 24, 2017
Merged
Changes from 1 commit
Commits
File filter...
Filter file types
Jump to…
Jump to file
Failed to load files.

Always

Just for now

Remove styles when link node is removed from document

  • Loading branch information
Roman Zaynetdinov
Roman Zaynetdinov committed Jan 22, 2017
commit b3ce08f1b509ddfb2325427ddc348e3863a9aa38
@@ -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;
@@ -213,6 +213,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();
}
}


@@ -6462,6 +6462,18 @@
"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/reparse_style_elements.html": [
{
"path": "mozilla/reparse_style_elements.html",
"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/reparse_style_elements.html": [
{
"path": "mozilla/reparse_style_elements.html",
@@ -0,0 +1,4 @@
body {
background-color: red;
color: white !important;
}
@@ -0,0 +1,19 @@
<!doctype html>
<meta charset="utf-8">
<title>Removing link tag should remove associated styles</title>
<link rel="stylesheet" type="text/css" href="remove_link_styles.css">
<link rel="match" href="remove_link_styles_ref.html">
<body>
<style>
body {
color: green;
}
</style>

This text should be green and the background should not be red.

<script>
var l = document.querySelector('link[rel="stylesheet"]');
l.parentNode.removeChild(l);

This comment has been minimized.

Copy link
@emilio

emilio Jan 21, 2017

Member

The color part of this tests is useless because the second <style> element will override it no matter what.

Could you instead use color: white !important?

This comment has been minimized.

Copy link
@emilio

emilio Jan 21, 2017

Member

In the loaded stylesheet I mean, of course.

This comment has been minimized.

Copy link
@zaynetro
</script>
</body>
@@ -0,0 +1,11 @@
<!doctype html>
<meta charset="utf-8">
<body>
<style>
body {
color: green;
}
</style>

This text should be green and the background should not be red.
</body>
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.