diff options
8 files changed, 70 insertions, 11 deletions
diff --git a/components/script/dom/htmllinkelement.rs b/components/script/dom/htmllinkelement.rs index 1c84fbba784..773f1630489 100644 --- a/components/script/dom/htmllinkelement.rs +++ b/components/script/dom/htmllinkelement.rs @@ -154,7 +154,9 @@ impl VirtualMethods for HTMLLinkElement { }, &atom!("media") => { if string_is_stylesheet(&rel) { - self.handle_stylesheet_url(&attr.value()); + if let Some(href) = self.upcast::<Element>().get_attribute(&ns!(), &atom!("href")) { + self.handle_stylesheet_url(&href.value()); + } } }, _ => {}, diff --git a/docs/components/style.md b/docs/components/style.md index a4a83d4e8f2..8a1b4fac2d4 100644 --- a/docs/components/style.md +++ b/docs/components/style.md @@ -40,7 +40,7 @@ layout traits have the required traits implemented. The [`stylist`][stylist] structure is the one that holds all the selectors and device characteristics for a given document. -The stylesheets' CSS rules are converted into [`Rule`][selectors-rules]s, and +The stylesheets' CSS rules are converted into [`Rule`][selectors-rule]s, and introduced in a [`SelectorMap`][selectors-selectormap] depending on the pseudo-element (see [`PerPseudoElementSelectorMap`][per-pseudo-selectormap]), stylesheet origin (see [`PerOriginSelectorMap`][per-origin-selectormap]), and @@ -149,8 +149,8 @@ that you didn't find it here so it can be added :) [mdn-pseudo-after]: https://developer.mozilla.org/en/docs/Web/CSS/::after [mdn-pseudo-selection]: https://developer.mozilla.org/en/docs/Web/CSS/::selection [stylist]: http://doc.servo.org/style/selector_matching/struct.Stylist.html -[selectors-selectormap]: http://doc.servo.org/style/selector_matching/struct.SelectorMap.html -[selectors-rule]: http://doc.servo.org/style/selector_matching/struct.Rule.html +[selectors-selectormap]: http://doc.servo.org/selectors/matching/struct.SelectorMap.html +[selectors-rule]: http://doc.servo.org/selectors/matching/struct.Rule.html [per-pseudo-selectormap]: http://doc.servo.org/style/selector_matching/struct.PerPseudoElementSelectorMap.html [per-origin-selectormap]: http://doc.servo.org/style/selector_matching/struct.PerOriginSelectorMap.html [docs-pipeline]: https://github.com/servo/servo/blob/master/docs/glossary.md#pipeline diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json index 265c4e6ce34..ab77b057ea1 100644 --- a/tests/wpt/metadata/MANIFEST.json +++ b/tests/wpt/metadata/MANIFEST.json @@ -37714,6 +37714,20 @@ "deleted": [], "deleted_reftests": {}, "items": { + "reftest": { + "html/semantics/document-metadata/the-link-element/stylesheet-media.html": [ + { + "path": "html/semantics/document-metadata/the-link-element/stylesheet-media.html", + "references": [ + [ + "/html/semantics/document-metadata/the-link-element/stylesheet-media-ref.html", + "==" + ] + ], + "url": "/html/semantics/document-metadata/the-link-element/stylesheet-media.html" + } + ] + }, "testharness": { "html/semantics/forms/the-form-element/form-action-url.html": [ { @@ -37729,7 +37743,20 @@ ] } }, - "reftest_nodes": {} + "reftest_nodes": { + "html/semantics/document-metadata/the-link-element/stylesheet-media.html": [ + { + "path": "html/semantics/document-metadata/the-link-element/stylesheet-media.html", + "references": [ + [ + "/html/semantics/document-metadata/the-link-element/stylesheet-media-ref.html", + "==" + ] + ], + "url": "/html/semantics/document-metadata/the-link-element/stylesheet-media.html" + } + ] + } }, "reftest_nodes": { "2dcontext/building-paths/canvas_complexshapes_arcto_001.htm": [ diff --git a/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/all b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/all new file mode 100644 index 00000000000..60f1eab9713 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/all @@ -0,0 +1,3 @@ +body { + color: red; +} diff --git a/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/all.headers b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/all.headers new file mode 100644 index 00000000000..74e07a14e7c --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/all.headers @@ -0,0 +1 @@ +Content-Type: text/css diff --git a/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/stylesheet-media-ref.html b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/stylesheet-media-ref.html new file mode 100644 index 00000000000..63b75d0ae26 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/stylesheet-media-ref.html @@ -0,0 +1,9 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Test</title> +<style> +body { + color: green; +} +</style> +<p>This text should be green. diff --git a/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/stylesheet-media.html b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/stylesheet-media.html new file mode 100644 index 00000000000..9a72924cf40 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/stylesheet-media.html @@ -0,0 +1,17 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<title>Test</title> +<link rel=match href=stylesheet-media-ref.html> +<style> +body { + color: green; +} +</style> +<link rel=stylesheet id=link> +<script> +// This tests for a bug in Servo, where it would treat the media attribute as +// if it was the href attribute. +var link = document.getElementById("link"); +link.setAttribute("media", "all") +</script> +<p>This text should be green. diff --git a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/handlers.py b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/handlers.py index 9f60fd0d722..c40321dfeab 100644 --- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/handlers.py +++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/handlers.py @@ -147,9 +147,12 @@ class FileHandler(object): raise HTTPException(404) def get_headers(self, request, path): - rv = self.default_headers(path) - rv.extend(self.load_headers(request, os.path.join(os.path.split(path)[0], "__dir__"))) - rv.extend(self.load_headers(request, path)) + rv = (self.load_headers(request, os.path.join(os.path.split(path)[0], "__dir__")) + + self.load_headers(request, path)) + + if not any(key.lower() == "content-type" for (key, _) in rv): + rv.insert(0, ("Content-Type", guess_content_type(path))) + return rv def load_headers(self, request, path): @@ -206,9 +209,6 @@ class FileHandler(object): f.seek(byte_range.lower) return f.read(byte_range.upper - byte_range.lower) - def default_headers(self, path): - return [("Content-Type", guess_content_type(path))] - file_handler = FileHandler() |