diff --git a/components/script/dom/htmllinkelement.rs b/components/script/dom/htmllinkelement.rs index d089caed3f5..0d5ae4ee179 100644 --- a/components/script/dom/htmllinkelement.rs +++ b/components/script/dom/htmllinkelement.rs @@ -22,6 +22,7 @@ use dom::virtualmethods::VirtualMethods; use encoding::EncodingRef; use encoding::all::UTF_8; use hyper::header::ContentType; +use hyper::http::RawStatus; use hyper::mime::{Mime, TopLevel, SubLevel}; use ipc_channel::ipc; use ipc_channel::router::ROUTER; @@ -296,15 +297,18 @@ impl AsyncResponseListener for StylesheetContext { fn response_complete(&mut self, status: Result<(), NetworkError>) { let elem = self.elem.root(); let document = document_from_node(&*elem); + let mut successful = false; - if status.is_err() { - self.elem.root().upcast::().fire_simple_event("error"); - } else { - let data = mem::replace(&mut self.data, vec!()); + if status.is_ok() { let metadata = match self.metadata.take() { Some(meta) => meta, None => return, }; + let is_css = metadata.content_type.map_or(false, |ContentType(Mime(top, sub, _))| + top == TopLevel::Text && sub == SubLevel::Css); + + let data = if is_css { mem::replace(&mut self.data, vec!()) } else { vec!() }; + // TODO: Get the actual value. http://dev.w3.org/csswg/css-syntax/#environment-encoding let environment_encoding = UTF_8 as EncodingRef; let protocol_encoding_label = metadata.charset.as_ref().map(|s| &**s); @@ -328,6 +332,9 @@ impl AsyncResponseListener for StylesheetContext { *elem.stylesheet.borrow_mut() = Some(sheet); document.invalidate_stylesheets(); + + // FIXME: Revisit once consensus is reached at: https://github.com/whatwg/html/issues/1142 + successful = metadata.status.map_or(false, |RawStatus(code, _)| code == 200); } if elem.parser_inserted.get() { @@ -335,6 +342,10 @@ impl AsyncResponseListener for StylesheetContext { } document.finish_load(LoadType::Stylesheet(self.url.clone())); + + let event = if successful { "load" } else { "error" }; + + elem.upcast::().fire_simple_event(event); } } diff --git a/tests/wpt/metadata-css/css21_dev/html4/content-type-001.htm.ini b/tests/wpt/metadata-css/css21_dev/html4/content-type-001.htm.ini deleted file mode 100644 index a0bcac82fd1..00000000000 --- a/tests/wpt/metadata-css/css21_dev/html4/content-type-001.htm.ini +++ /dev/null @@ -1,3 +0,0 @@ -[content-type-001.htm] - type: reftest - expected: FAIL diff --git a/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-load-event.html b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-load-event.html index afe86a4210c..6f6172a2d62 100644 --- a/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-load-event.html +++ b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-load-event.html @@ -10,12 +10,9 @@ var t = async_test("Check if the stylesheet's load event blocks the document loa document.getElementById('style_test').onload = t.step_func(function() { saw_link_onload = true; }); -window.addEventListener('load', function() { - t.step_func(function() { - assert_true(saw_link_onload); - }); - t.done(); -}, false); +window.addEventListener('load', t.step_func_done(function() { + assert_true(saw_link_onload); +})); diff --git a/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-style-error-01.html b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-style-error-01.html index 04608460b83..7a86a86381d 100644 --- a/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-style-error-01.html +++ b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-style-error-01.html @@ -40,6 +40,7 @@ tText.step(function() { assert_true(true, "Got error event for 404 error.") tText.done() }) + elt.onload = tText.unreached_func("load event should not be fired"); elt.rel = "stylesheet"; elt.href = "../../../../../common/css-red.txt"; document.getElementsByTagName("head")[0].appendChild(elt);