aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/script/stylesheet_loader.rs9
-rw-r--r--tests/wpt/mozilla/meta/MANIFEST.json24
-rw-r--r--tests/wpt/mozilla/tests/mozilla/adopt-panic.css3
-rw-r--r--tests/wpt/mozilla/tests/mozilla/blank.html2
-rw-r--r--tests/wpt/mozilla/tests/mozilla/stylesheet-adopt-panic-ref.html8
-rw-r--r--tests/wpt/mozilla/tests/mozilla/stylesheet-adopt-panic.html13
6 files changed, 56 insertions, 3 deletions
diff --git a/components/script/stylesheet_loader.rs b/components/script/stylesheet_loader.rs
index 427593c8500..28c5e86b6b5 100644
--- a/components/script/stylesheet_loader.rs
+++ b/components/script/stylesheet_loader.rs
@@ -6,6 +6,7 @@ use document_loader::LoadType;
use dom::bindings::inheritance::Castable;
use dom::bindings::refcounted::Trusted;
use dom::bindings::reflector::DomObject;
+use dom::document::Document;
use dom::element::Element;
use dom::eventtarget::EventTarget;
use dom::htmlelement::HTMLElement;
@@ -78,6 +79,8 @@ pub struct StylesheetContext {
metadata: Option<Metadata>,
/// The response body received to date.
data: Vec<u8>,
+ /// The node document for elem when the load was initiated.
+ document: Trusted<Document>,
}
impl PreInvoke for StylesheetContext {}
@@ -103,7 +106,7 @@ impl FetchResponseListener for StylesheetContext {
fn process_response_eof(&mut self, status: Result<(), NetworkError>) {
let elem = self.elem.root();
- let document = document_from_node(&*elem);
+ let document = self.document.root();
let mut successful = false;
if status.is_ok() {
@@ -192,15 +195,15 @@ impl<'a> StylesheetLoader<'a> {
impl<'a> StylesheetLoader<'a> {
pub fn load(&self, source: StylesheetContextSource) {
let url = source.url();
+ let document = document_from_node(self.elem);
let context = Arc::new(Mutex::new(StylesheetContext {
elem: Trusted::new(&*self.elem),
source: source,
metadata: None,
data: vec![],
+ document: Trusted::new(&*document),
}));
- let document = document_from_node(self.elem);
-
let (action_sender, action_receiver) = ipc::channel().unwrap();
let listener = NetworkListener {
context: context,
diff --git a/tests/wpt/mozilla/meta/MANIFEST.json b/tests/wpt/mozilla/meta/MANIFEST.json
index 36abb2d5adb..c77dd130e6b 100644
--- a/tests/wpt/mozilla/meta/MANIFEST.json
+++ b/tests/wpt/mozilla/meta/MANIFEST.json
@@ -6474,6 +6474,18 @@
"url": "/_mozilla/mozilla/sslfail.html"
}
],
+ "mozilla/stylesheet-adopt-panic.html": [
+ {
+ "path": "mozilla/stylesheet-adopt-panic.html",
+ "references": [
+ [
+ "/_mozilla/mozilla/stylesheet-adopt-panic-ref.html",
+ "=="
+ ]
+ ],
+ "url": "/_mozilla/mozilla/stylesheet-adopt-panic.html"
+ }
+ ],
"mozilla/svg/svg.html": [
{
"path": "mozilla/svg/svg.html",
@@ -21756,6 +21768,18 @@
"url": "/_mozilla/mozilla/sslfail.html"
}
],
+ "mozilla/stylesheet-adopt-panic.html": [
+ {
+ "path": "mozilla/stylesheet-adopt-panic.html",
+ "references": [
+ [
+ "/_mozilla/mozilla/stylesheet-adopt-panic-ref.html",
+ "=="
+ ]
+ ],
+ "url": "/_mozilla/mozilla/stylesheet-adopt-panic.html"
+ }
+ ],
"mozilla/svg/svg.html": [
{
"path": "mozilla/svg/svg.html",
diff --git a/tests/wpt/mozilla/tests/mozilla/adopt-panic.css b/tests/wpt/mozilla/tests/mozilla/adopt-panic.css
new file mode 100644
index 00000000000..182d72fa7fd
--- /dev/null
+++ b/tests/wpt/mozilla/tests/mozilla/adopt-panic.css
@@ -0,0 +1,3 @@
+body {
+ background-color: green;
+} \ No newline at end of file
diff --git a/tests/wpt/mozilla/tests/mozilla/blank.html b/tests/wpt/mozilla/tests/mozilla/blank.html
new file mode 100644
index 00000000000..39654855a82
--- /dev/null
+++ b/tests/wpt/mozilla/tests/mozilla/blank.html
@@ -0,0 +1,2 @@
+<!doctype html>
+<title>Blank document</title>
diff --git a/tests/wpt/mozilla/tests/mozilla/stylesheet-adopt-panic-ref.html b/tests/wpt/mozilla/tests/mozilla/stylesheet-adopt-panic-ref.html
new file mode 100644
index 00000000000..b47617e4249
--- /dev/null
+++ b/tests/wpt/mozilla/tests/mozilla/stylesheet-adopt-panic-ref.html
@@ -0,0 +1,8 @@
+<!doctype html>
+<meta charset="utf-8">
+<iframe src="blank.html"></iframe>
+<style>
+ body {
+ background-color: green;
+ }
+</style>
diff --git a/tests/wpt/mozilla/tests/mozilla/stylesheet-adopt-panic.html b/tests/wpt/mozilla/tests/mozilla/stylesheet-adopt-panic.html
new file mode 100644
index 00000000000..df3b48291e0
--- /dev/null
+++ b/tests/wpt/mozilla/tests/mozilla/stylesheet-adopt-panic.html
@@ -0,0 +1,13 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>Verify that adopting a stylesheet with an import applies its styles and doesn't panic</title>
+<link rel="match" href="stylesheet-adopt-panic-ref.html">
+<iframe src="blank.html" onload="foo()"></iframe>
+<script>
+ function foo() {
+ var i = document.querySelector('iframe');
+ i.contentDocument.documentElement.innerHTML = "<style>@import 'adopt-panic.css';</style>";
+ var e = i.contentDocument.querySelector('style');
+ document.body.appendChild(e);
+ }
+</script>