From 80fd18676fe611879c9f0a9ca8eeebb40f533d89 Mon Sep 17 00:00:00 2001 From: askeing Date: Wed, 27 Apr 2016 01:15:48 +0900 Subject: [PATCH 1/3] Dispatch error event when link elements get invalid response --- components/script/dom/htmllinkelement.rs | 17 +++++++++++++++++ .../link-style-error-01.html.ini | 4 ++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/components/script/dom/htmllinkelement.rs b/components/script/dom/htmllinkelement.rs index a971a90ecbf..c27944cc306 100644 --- a/components/script/dom/htmllinkelement.rs +++ b/components/script/dom/htmllinkelement.rs @@ -15,11 +15,14 @@ use dom::bindings::refcounted::Trusted; use dom::document::Document; use dom::domtokenlist::DOMTokenList; use dom::element::{AttributeMutation, Element, ElementCreator}; +use dom::eventtarget::EventTarget; use dom::htmlelement::HTMLElement; use dom::node::{Node, document_from_node, window_from_node}; use dom::virtualmethods::VirtualMethods; use encoding::EncodingRef; use encoding::all::UTF_8; +use hyper::header::ContentType; +use hyper::mime::{Mime, TopLevel, SubLevel}; use ipc_channel::ipc; use ipc_channel::router::ROUTER; use layout_interface::{LayoutChan, Msg}; @@ -273,6 +276,13 @@ impl PreInvoke for StylesheetContext {} impl AsyncResponseListener for StylesheetContext { fn headers_available(&mut self, metadata: Result) { self.metadata = metadata.ok(); + let content_type = self.metadata.clone().and_then(|meta| meta.content_type); + match content_type { + Some(ContentType(Mime(TopLevel::Text, SubLevel::Css, _))) => {}, + _ => { + self.elem.root().upcast::().fire_simple_event("error"); + } + } } fn data_available(&mut self, payload: Vec) { @@ -281,6 +291,13 @@ impl AsyncResponseListener for StylesheetContext { } fn response_complete(&mut self, _status: Result<(), NetworkError>) { + match _status { + Err(_) => { + self.elem.root().upcast::().fire_simple_event("error"); + return; + }, + _ => {} + }; let data = mem::replace(&mut self.data, vec!()); let metadata = match self.metadata.take() { Some(meta) => meta, diff --git a/tests/wpt/metadata/html/semantics/document-metadata/the-link-element/link-style-error-01.html.ini b/tests/wpt/metadata/html/semantics/document-metadata/the-link-element/link-style-error-01.html.ini index 1ab57decdcb..1e00f042b8b 100644 --- a/tests/wpt/metadata/html/semantics/document-metadata/the-link-element/link-style-error-01.html.ini +++ b/tests/wpt/metadata/html/semantics/document-metadata/the-link-element/link-style-error-01.html.ini @@ -1,6 +1,6 @@ [link-style-error-01.html] type: testharness - expected: TIMEOUT + expected: OK [Should get an error event for a text/plain response.] - expected: TIMEOUT + expected: PASS From 71829c787d13dbe13fb1a2e749c90b7e28c532e9 Mon Sep 17 00:00:00 2001 From: askeing Date: Thu, 28 Apr 2016 15:05:54 +0800 Subject: [PATCH 2/3] remove ini file due to test are expected to pass --- .../the-link-element/link-style-error-01.html.ini | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 tests/wpt/metadata/html/semantics/document-metadata/the-link-element/link-style-error-01.html.ini diff --git a/tests/wpt/metadata/html/semantics/document-metadata/the-link-element/link-style-error-01.html.ini b/tests/wpt/metadata/html/semantics/document-metadata/the-link-element/link-style-error-01.html.ini deleted file mode 100644 index 1e00f042b8b..00000000000 --- a/tests/wpt/metadata/html/semantics/document-metadata/the-link-element/link-style-error-01.html.ini +++ /dev/null @@ -1,6 +0,0 @@ -[link-style-error-01.html] - type: testharness - expected: OK - [Should get an error event for a text/plain response.] - expected: PASS - From d6863e680033145f33179c059c1ac470f7e46425 Mon Sep 17 00:00:00 2001 From: askeing Date: Thu, 28 Apr 2016 15:06:01 +0800 Subject: [PATCH 3/3] modified the code, following the suggestions from reviewer --- components/script/dom/htmllinkelement.rs | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/components/script/dom/htmllinkelement.rs b/components/script/dom/htmllinkelement.rs index c27944cc306..44d0e146ec7 100644 --- a/components/script/dom/htmllinkelement.rs +++ b/components/script/dom/htmllinkelement.rs @@ -276,10 +276,9 @@ impl PreInvoke for StylesheetContext {} impl AsyncResponseListener for StylesheetContext { fn headers_available(&mut self, metadata: Result) { self.metadata = metadata.ok(); - let content_type = self.metadata.clone().and_then(|meta| meta.content_type); - match content_type { - Some(ContentType(Mime(TopLevel::Text, SubLevel::Css, _))) => {}, - _ => { + if let Some(ref meta) = self.metadata { + if let Some(ContentType(Mime(TopLevel::Text, SubLevel::Css, _))) = meta.content_type { + } else { self.elem.root().upcast::().fire_simple_event("error"); } } @@ -290,14 +289,11 @@ impl AsyncResponseListener for StylesheetContext { self.data.append(&mut payload); } - fn response_complete(&mut self, _status: Result<(), NetworkError>) { - match _status { - Err(_) => { - self.elem.root().upcast::().fire_simple_event("error"); - return; - }, - _ => {} - }; + fn response_complete(&mut self, status: Result<(), NetworkError>) { + if status.is_err() { + self.elem.root().upcast::().fire_simple_event("error"); + return; + } let data = mem::replace(&mut self.data, vec!()); let metadata = match self.metadata.take() { Some(meta) => meta,