mirror of
https://github.com/servo/servo.git
synced 2025-07-23 15:23:42 +01:00
Allow loading multiple stylesheets for the same link element.
This commit is contained in:
parent
ca3cd64d6b
commit
3c3311b16a
7 changed files with 76 additions and 6 deletions
|
@ -24,6 +24,7 @@ use dom::virtualmethods::VirtualMethods;
|
||||||
use dom_struct::dom_struct;
|
use dom_struct::dom_struct;
|
||||||
use html5ever_atoms::LocalName;
|
use html5ever_atoms::LocalName;
|
||||||
use net_traits::ReferrerPolicy;
|
use net_traits::ReferrerPolicy;
|
||||||
|
use script_layout_interface::message::Msg;
|
||||||
use script_traits::{MozBrowserEvent, ScriptMsg as ConstellationMsg};
|
use script_traits::{MozBrowserEvent, ScriptMsg as ConstellationMsg};
|
||||||
use std::ascii::AsciiExt;
|
use std::ascii::AsciiExt;
|
||||||
use std::borrow::ToOwned;
|
use std::borrow::ToOwned;
|
||||||
|
@ -96,8 +97,9 @@ impl HTMLLinkElement {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_stylesheet(&self, s: Arc<Stylesheet>) {
|
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.clone());
|
||||||
*self.stylesheet.borrow_mut() = Some(s);
|
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>> {
|
pub fn get_stylesheet(&self) -> Option<Arc<Stylesheet>> {
|
||||||
|
|
|
@ -22,7 +22,6 @@ use ipc_channel::router::ROUTER;
|
||||||
use net_traits::{FetchResponseListener, FetchMetadata, FilteredMetadata, Metadata, NetworkError, ReferrerPolicy};
|
use net_traits::{FetchResponseListener, FetchMetadata, FilteredMetadata, Metadata, NetworkError, ReferrerPolicy};
|
||||||
use net_traits::request::{CorsSettings, CredentialsMode, Destination, RequestInit, RequestMode, Type as RequestType};
|
use net_traits::request::{CorsSettings, CredentialsMode, Destination, RequestInit, RequestMode, Type as RequestType};
|
||||||
use network_listener::{NetworkListener, PreInvoke};
|
use network_listener::{NetworkListener, PreInvoke};
|
||||||
use script_layout_interface::message::Msg;
|
|
||||||
use servo_url::ServoUrl;
|
use servo_url::ServoUrl;
|
||||||
use std::mem;
|
use std::mem;
|
||||||
use std::sync::{Arc, Mutex};
|
use std::sync::{Arc, Mutex};
|
||||||
|
@ -151,9 +150,7 @@ impl FetchResponseListener for StylesheetContext {
|
||||||
sheet.set_disabled(true);
|
sheet.set_disabled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
link.set_stylesheet(sheet.clone());
|
link.set_stylesheet(sheet);
|
||||||
|
|
||||||
win.layout_chan().send(Msg::AddStylesheet(sheet)).unwrap();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
StylesheetContextSource::Import(ref stylesheet) => {
|
StylesheetContextSource::Import(ref stylesheet) => {
|
||||||
|
|
|
@ -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": [
|
||||||
[
|
[
|
||||||
"/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/empty-href.css": [
|
||||||
[
|
[
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"html/semantics/document-metadata/the-link-element/resources/good.css": [
|
||||||
|
[
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"html/semantics/document-metadata/the-link-element/resources/stylesheet.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": [
|
"html/semantics/document-metadata/the-link-element/stylesheet-empty-href-ref.html": [
|
||||||
[
|
[
|
||||||
{}
|
{}
|
||||||
|
@ -174506,10 +174533,18 @@
|
||||||
"285208d6cf3113ec16bedd107c0740b8c7c8a9d8",
|
"285208d6cf3113ec16bedd107c0740b8c7c8a9d8",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
|
"html/semantics/document-metadata/the-link-element/resources/bad.css": [
|
||||||
|
"b968e6422a283acc772561f8950171b3a5e00397",
|
||||||
|
"support"
|
||||||
|
],
|
||||||
"html/semantics/document-metadata/the-link-element/resources/empty-href.css": [
|
"html/semantics/document-metadata/the-link-element/resources/empty-href.css": [
|
||||||
"1dcc57d4f3363562322937979cb7828b0c298daa",
|
"1dcc57d4f3363562322937979cb7828b0c298daa",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
|
"html/semantics/document-metadata/the-link-element/resources/good.css": [
|
||||||
|
"04a3a89fe805fc930dc3adfa3a4134b950779697",
|
||||||
|
"support"
|
||||||
|
],
|
||||||
"html/semantics/document-metadata/the-link-element/resources/stylesheet.css": [
|
"html/semantics/document-metadata/the-link-element/resources/stylesheet.css": [
|
||||||
"2829167c82bafef6cfea06071007a231aa4277f6",
|
"2829167c82bafef6cfea06071007a231aa4277f6",
|
||||||
"support"
|
"support"
|
||||||
|
@ -174518,6 +174553,14 @@
|
||||||
"e4a66764ea94d51b42d485d75a3305ea2ab79226",
|
"e4a66764ea94d51b42d485d75a3305ea2ab79226",
|
||||||
"support"
|
"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": [
|
"html/semantics/document-metadata/the-link-element/stylesheet-empty-href-ref.html": [
|
||||||
"1ac8e070630e58df8489b779bdd75cb2b38c25ef",
|
"1ac8e070630e58df8489b779bdd75cb2b38c25ef",
|
||||||
"support"
|
"support"
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
p {
|
||||||
|
background-color: red;
|
||||||
|
color: black;
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
p {
|
||||||
|
color: green;
|
||||||
|
}
|
|
@ -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
|
|
@ -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
|
Loading…
Add table
Add a link
Reference in a new issue