auto merge of #2527 : Manishearth/servo/xhr-wpt-ready-state, r=Ms2ger

For the wpt test [open-open-send.htm](https://github.com/w3c/web-platform-tests/blob/master/XMLHttpRequest/open-open-send.htm)


Blocks #2525
This commit is contained in:
bors-servo 2014-06-02 11:37:29 -04:00
commit 05a57848ad

View file

@ -285,7 +285,9 @@ impl<'a> XMLHttpRequestMethods<'a> for JSRef<'a, XMLHttpRequest> {
// XXXManishearth Set response to a NetworkError // XXXManishearth Set response to a NetworkError
// Step 13 // Step 13
self.change_ready_state(Opened); if self.ready_state != Opened {
self.change_ready_state(Opened);
}
//XXXManishearth fire a progressevent //XXXManishearth fire a progressevent
Ok(()) Ok(())
}, },
@ -562,6 +564,7 @@ impl<'a> PrivateXMLHttpRequestHelpers for JSRef<'a, XMLHttpRequest> {
} }
fn change_ready_state(&mut self, rs: XMLHttpRequestState) { fn change_ready_state(&mut self, rs: XMLHttpRequestState) {
assert!(self.ready_state != rs)
self.ready_state = rs; self.ready_state = rs;
let win = &*self.global.root(); let win = &*self.global.root();
let mut event = let mut event =
@ -583,7 +586,9 @@ impl<'a> PrivateXMLHttpRequestHelpers for JSRef<'a, XMLHttpRequest> {
Some(ref h) => *self.response_headers = h.clone(), Some(ref h) => *self.response_headers = h.clone(),
None => {} None => {}
}; };
self.change_ready_state(HeadersReceived); if self.ready_state == Opened {
self.change_ready_state(HeadersReceived);
}
}, },
LoadingMsg(partial_response) => { LoadingMsg(partial_response) => {
self.response = partial_response; self.response = partial_response;
@ -593,12 +598,14 @@ impl<'a> PrivateXMLHttpRequestHelpers for JSRef<'a, XMLHttpRequest> {
} }
}, },
DoneMsg => { DoneMsg => {
let len = self.response.len() as u64; if self.ready_state == Loading {
self.dispatch_response_progress_event("progress".to_owned()); let len = self.response.len() as u64;
self.dispatch_response_progress_event("load".to_owned()); self.dispatch_response_progress_event("progress".to_owned());
self.dispatch_response_progress_event("loadend".to_owned()); self.dispatch_response_progress_event("load".to_owned());
self.send_flag = false; self.dispatch_response_progress_event("loadend".to_owned());
self.change_ready_state(XHRDone); self.send_flag = false;
self.change_ready_state(XHRDone);
}
}, },
ErroredMsg => { ErroredMsg => {
self.send_flag = false; self.send_flag = false;