Re-add support for fetching chunks (and thus xhr download progress)

This commit is contained in:
Manish Goregaokar 2016-06-03 18:37:26 +05:30
parent 6e29b872d7
commit bf99e73cb0
5 changed files with 96 additions and 87 deletions

View file

@ -47,7 +47,7 @@ use net_traits::CoreResourceMsg::Fetch;
use net_traits::trim_http_whitespace;
use net_traits::{FetchResponseListener, Metadata, NetworkError, RequestSource};
use net_traits::{CoreResourceThread, LoadOrigin};
use net_traits::request::{CredentialsMode, Destination, RequestInit, RequestMode, Origin};
use net_traits::request::{CredentialsMode, Destination, RequestInit, RequestMode};
use network_listener::{NetworkListener, PreInvoke};
use parse::html::{ParseContext, parse_html};
use parse::xml::{self, parse_xml};
@ -230,14 +230,13 @@ impl XMLHttpRequest {
*self.sync_status.borrow_mut() = Some(rv);
}
}
fn process_response_eof(&mut self, response: Result<Option<Vec<u8>>, NetworkError>) {
fn process_response_chunk(&mut self, mut chunk: Vec<u8>) {
self.buf.borrow_mut().append(&mut chunk);
self.xhr.root().process_data_available(self.gen_id, self.buf.borrow().clone());
}
fn process_response_eof(&mut self, response: Result<(), NetworkError>) {
match response {
Ok(buf) => {
if let Some(buf) = buf {
*self.buf.borrow_mut() = buf;
// todo move to a process_chunk
self.xhr.root().process_data_available(self.gen_id, self.buf.borrow().clone());
}
Ok(()) => {
let rv = self.xhr.root().process_response_complete(self.gen_id, Ok(()));
*self.sync_status.borrow_mut() = Some(rv);
}
@ -247,17 +246,6 @@ impl XMLHttpRequest {
}
}
}
fn fetch_done(&mut self, response: Result<(Metadata, Option<Vec<u8>>), NetworkError>) {
match response {
Ok(response) => {
self.process_response(Ok(response.0));
self.process_response_eof(Ok(response.1));
}
Err(err) => {
self.process_response_eof(Err(err));
}
}
}
}
impl PreInvoke for XHRContext {