aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCharles Vandevoorde <charles.vandevoorde@hotmail.be>2017-02-07 21:51:07 +0100
committerCharles Vandevoorde <charles.vandevoorde@hotmail.be>2017-02-18 09:26:55 +0100
commitf938c955a3d5247e7b5d12cde866ca0daa8658f9 (patch)
tree87e96d71dccf1e71eedd531a8bf159638bfd8405
parent05623b36a15b594bbc690fcd8e3b642995618de1 (diff)
downloadservo-f938c955a3d5247e7b5d12cde866ca0daa8658f9.tar.gz
servo-f938c955a3d5247e7b5d12cde866ca0daa8658f9.zip
Implement XHR progress event changes
-rw-r--r--components/script/dom/xmlhttprequest.rs21
-rw-r--r--tests/wpt/metadata/XMLHttpRequest/progress-events-response-data-gzip.htm.ini5
2 files changed, 10 insertions, 16 deletions
diff --git a/components/script/dom/xmlhttprequest.rs b/components/script/dom/xmlhttprequest.rs
index 6fe89476994..37aaaf25631 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<u64>) {
+ let (total_length, length_computable) = if self.response_headers.borrow().has::<ContentEncoding>() {
+ (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 5adf572e37d..00000000000
--- 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
-