Allow loading multiple stylesheets for the same link element.

This commit is contained in:
Josh Matthews 2017-04-13 16:02:17 +10:00
parent ca3cd64d6b
commit 3c3311b16a
7 changed files with 76 additions and 6 deletions

View file

@ -24,6 +24,7 @@ use dom::virtualmethods::VirtualMethods;
use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
use net_traits::ReferrerPolicy;
use script_layout_interface::message::Msg;
use script_traits::{MozBrowserEvent, ScriptMsg as ConstellationMsg};
use std::ascii::AsciiExt;
use std::borrow::ToOwned;
@ -96,8 +97,9 @@ impl HTMLLinkElement {
}
pub fn set_stylesheet(&self, s: Arc<Stylesheet>) {
assert!(self.stylesheet.borrow().is_none()); // Useful for catching timing issues.
*self.stylesheet.borrow_mut() = Some(s);
*self.stylesheet.borrow_mut() = Some(s.clone());
window_from_node(self).layout_chan().send(Msg::AddStylesheet(s)).unwrap();
document_from_node(self).invalidate_stylesheets();
}
pub fn get_stylesheet(&self) -> Option<Arc<Stylesheet>> {

View file

@ -22,7 +22,6 @@ use ipc_channel::router::ROUTER;
use net_traits::{FetchResponseListener, FetchMetadata, FilteredMetadata, Metadata, NetworkError, ReferrerPolicy};
use net_traits::request::{CorsSettings, CredentialsMode, Destination, RequestInit, RequestMode, Type as RequestType};
use network_listener::{NetworkListener, PreInvoke};
use script_layout_interface::message::Msg;
use servo_url::ServoUrl;
use std::mem;
use std::sync::{Arc, Mutex};
@ -151,9 +150,7 @@ impl FetchResponseListener for StylesheetContext {
sheet.set_disabled(true);
}
link.set_stylesheet(sheet.clone());
win.layout_chan().send(Msg::AddStylesheet(sheet)).unwrap();
link.set_stylesheet(sheet);
}
}
StylesheetContextSource::Import(ref stylesheet) => {

View file

@ -8229,6 +8229,18 @@
{}
]
],
"html/semantics/document-metadata/the-link-element/stylesheet-change-href.html": [
[
"/html/semantics/document-metadata/the-link-element/stylesheet-change-href.html",
[
[
"/html/semantics/document-metadata/the-link-element/stylesheet-change-href-ref.html",
"=="
]
],
{}
]
],
"html/semantics/document-metadata/the-link-element/stylesheet-empty-href.html": [
[
"/html/semantics/document-metadata/the-link-element/stylesheet-empty-href.html",
@ -51859,11 +51871,21 @@
{}
]
],
"html/semantics/document-metadata/the-link-element/resources/bad.css": [
[
{}
]
],
"html/semantics/document-metadata/the-link-element/resources/empty-href.css": [
[
{}
]
],
"html/semantics/document-metadata/the-link-element/resources/good.css": [
[
{}
]
],
"html/semantics/document-metadata/the-link-element/resources/stylesheet.css": [
[
{}
@ -51874,6 +51896,11 @@
{}
]
],
"html/semantics/document-metadata/the-link-element/stylesheet-change-href-ref.html": [
[
{}
]
],
"html/semantics/document-metadata/the-link-element/stylesheet-empty-href-ref.html": [
[
{}
@ -174506,10 +174533,18 @@
"285208d6cf3113ec16bedd107c0740b8c7c8a9d8",
"testharness"
],
"html/semantics/document-metadata/the-link-element/resources/bad.css": [
"b968e6422a283acc772561f8950171b3a5e00397",
"support"
],
"html/semantics/document-metadata/the-link-element/resources/empty-href.css": [
"1dcc57d4f3363562322937979cb7828b0c298daa",
"support"
],
"html/semantics/document-metadata/the-link-element/resources/good.css": [
"04a3a89fe805fc930dc3adfa3a4134b950779697",
"support"
],
"html/semantics/document-metadata/the-link-element/resources/stylesheet.css": [
"2829167c82bafef6cfea06071007a231aa4277f6",
"support"
@ -174518,6 +174553,14 @@
"e4a66764ea94d51b42d485d75a3305ea2ab79226",
"support"
],
"html/semantics/document-metadata/the-link-element/stylesheet-change-href-ref.html": [
"cca943d35bd18e99249d50c6d40cc6fe2e328354",
"support"
],
"html/semantics/document-metadata/the-link-element/stylesheet-change-href.html": [
"6083446e9ef1b70f044a353ef96b459956afb1ef",
"reftest"
],
"html/semantics/document-metadata/the-link-element/stylesheet-empty-href-ref.html": [
"1ac8e070630e58df8489b779bdd75cb2b38c25ef",
"support"

View file

@ -0,0 +1,4 @@
p {
background-color: red;
color: black;
}

View file

@ -0,0 +1,8 @@
<!doctype html>
<meta charset="utf-8">
<style>
p {
color: green;
}
</style>
<p>This text should be green on a white background

View file

@ -0,0 +1,13 @@
<!doctype html>
<meta charset="utf-8">
<title>Obtaining a new stylesheet removes styles from the previous stylesheet.</title>
<link rel=match href=stylesheet-change-href-ref.html>
<script>
function changeHref() {
var elem = document.getElementById('stylesheet');
elem.href = 'resources/good.css';
elem.onload = null;
}
</script>
<link id=stylesheet rel=stylesheet href="resources/bad.css" onload="changeHref()">
<p>This text should be green on a white background