From f938c955a3d5247e7b5d12cde866ca0daa8658f9 Mon Sep 17 00:00:00 2001 From: Charles Vandevoorde Date: Tue, 7 Feb 2017 21:51:07 +0100 Subject: [PATCH] Implement XHR progress event changes --- components/script/dom/xmlhttprequest.rs | 21 +++++++++---------- ...progress-events-response-data-gzip.htm.ini | 5 ----- 2 files changed, 10 insertions(+), 16 deletions(-) delete mode 100644 tests/wpt/metadata/XMLHttpRequest/progress-events-response-data-gzip.htm.ini diff --git a/components/script/dom/xmlhttprequest.rs b/components/script/dom/xmlhttprequest.rs index 6fe89476994b..37aaaf256315 100644 --- a/components/script/dom/xmlhttprequest.rs +++ b/components/script/dom/xmlhttprequest.rs @@ -42,7 +42,7 @@ use encoding::types::{DecoderTrap, EncoderTrap, Encoding, EncodingRef}; use euclid::length::Length; use html5ever::serialize; use html5ever::serialize::SerializeOpts; -use hyper::header::{ContentLength, ContentType}; +use hyper::header::{ContentLength, ContentType, ContentEncoding}; use hyper::header::Headers; use hyper::method::Method; use hyper::mime::{self, Attr as MimeAttr, Mime, Value as MimeValue}; @@ -979,14 +979,12 @@ impl XMLHttpRequest { // Part of step 11, send() (processing response end of file) // XXXManishearth handle errors, if any (substep 2) - // Subsubsteps 5-7 + // Subsubsteps 6-8 self.send_flag.set(false); self.change_ready_state(XMLHttpRequestState::Done); return_if_fetch_was_terminated!(); - // Subsubsteps 10-12 - self.dispatch_response_progress_event(atom!("progress")); - return_if_fetch_was_terminated!(); + // Subsubsteps 11-12 self.dispatch_response_progress_event(atom!("load")); return_if_fetch_was_terminated!(); self.dispatch_response_progress_event(atom!("loadend")); @@ -1009,15 +1007,11 @@ impl XMLHttpRequest { let upload_complete = &self.upload_complete; if !upload_complete.get() { upload_complete.set(true); - self.dispatch_upload_progress_event(atom!("progress"), None); - return_if_fetch_was_terminated!(); self.dispatch_upload_progress_event(Atom::from(errormsg), None); return_if_fetch_was_terminated!(); self.dispatch_upload_progress_event(atom!("loadend"), None); return_if_fetch_was_terminated!(); } - self.dispatch_response_progress_event(atom!("progress")); - return_if_fetch_was_terminated!(); self.dispatch_response_progress_event(Atom::from(errormsg)); return_if_fetch_was_terminated!(); self.dispatch_response_progress_event(atom!("loadend")); @@ -1032,12 +1026,17 @@ impl XMLHttpRequest { } fn dispatch_progress_event(&self, upload: bool, type_: Atom, loaded: u64, total: Option) { + let (total_length, length_computable) = if self.response_headers.borrow().has::() { + (0, false) + } else { + (total.unwrap_or(0), total.is_some()) + }; let progressevent = ProgressEvent::new(&self.global(), type_, EventBubbles::DoesNotBubble, EventCancelable::NotCancelable, - total.is_some(), loaded, - total.unwrap_or(0)); + length_computable, loaded, + total_length); let target = if upload { self.upload.upcast() } else { diff --git a/tests/wpt/metadata/XMLHttpRequest/progress-events-response-data-gzip.htm.ini b/tests/wpt/metadata/XMLHttpRequest/progress-events-response-data-gzip.htm.ini deleted file mode 100644 index 5adf572e37d3..000000000000 --- a/tests/wpt/metadata/XMLHttpRequest/progress-events-response-data-gzip.htm.ini +++ /dev/null @@ -1,5 +0,0 @@ -[progress-events-response-data-gzip.htm] - type: testharness - [XMLHttpRequest: progress events and GZIP encoding] - expected: FAIL -