diff options
author | Keith Yeung <kungfukeith11@gmail.com> | 2016-05-11 09:34:43 -0400 |
---|---|---|
committer | Keith Yeung <kungfukeith11@gmail.com> | 2016-05-11 09:34:43 -0400 |
commit | 7a72981d87c54017ae2cc0bc4c0af02a7d654f1c (patch) | |
tree | ebd2f39df22b322fb7636226d4a5b8bce78d9702 /components/net/fetch/methods.rs | |
parent | 98863746aecea688884ca5a0e3c2f6f139f6e787 (diff) | |
download | servo-7a72981d87c54017ae2cc0bc4c0af02a7d654f1c.tar.gz servo-7a72981d87c54017ae2cc0bc4c0af02a7d654f1c.zip |
Use read_block in http_network_fetch
Diffstat (limited to 'components/net/fetch/methods.rs')
-rw-r--r-- | components/net/fetch/methods.rs | 49 |
1 files changed, 20 insertions, 29 deletions
diff --git a/components/net/fetch/methods.rs b/components/net/fetch/methods.rs index 95f1f8e4094..db29995ff98 100644 --- a/components/net/fetch/methods.rs +++ b/components/net/fetch/methods.rs @@ -5,7 +5,7 @@ use connector::create_http_connector; use data_loader::decode; use fetch::cors_cache::CORSCache; -use http_loader::{NetworkHttpRequestFactory, obtain_response}; +use http_loader::{NetworkHttpRequestFactory, ReadResult, obtain_response, read_block}; use hyper::header::{Accept, AcceptLanguage, Authorization, AccessControlAllowCredentials}; use hyper::header::{AccessControlAllowOrigin, AccessControlAllowHeaders, AccessControlAllowMethods}; use hyper::header::{AccessControlRequestHeaders, AccessControlMaxAge, AccessControlRequestMethod, Basic}; @@ -850,34 +850,25 @@ fn http_network_fetch(request: Rc<Request>, thread::spawn(move || { *res_body.lock().unwrap() = ResponseBody::Receiving(vec![]); - let mut new_body = vec![]; - res.response.read_to_end(&mut new_body).unwrap(); - - let mut body = res_body.lock().unwrap(); - assert!(*body != ResponseBody::Empty); - *body = ResponseBody::Done(new_body); - - // TODO: the vec storage format is much too slow for these operations, - // response.body needs to use something else before this code can be used - // *res_body.lock().unwrap() = ResponseBody::Receiving(vec![]); - - // loop { - // match read_block(&mut res.response) { - // Ok(ReadResult::Payload(ref mut new_body)) => { - // if let ResponseBody::Receiving(ref mut body) = *res_body.lock().unwrap() { - // (body).append(new_body); - // } - // }, - // Ok(ReadResult::EOF) | Err(_) => break - // } - - // } - - // let mut completed_body = res_body.lock().unwrap(); - // if let ResponseBody::Receiving(ref body) = *completed_body { - // // TODO cloning seems sub-optimal, but I couldn't figure anything else out - // *res_body.lock().unwrap() = ResponseBody::Done((*body).clone()); - // } + + loop { + match read_block(&mut res.response) { + Ok(ReadResult::Payload(ref mut chunk)) => { + if let ResponseBody::Receiving(ref mut body) = *res_body.lock().unwrap() { + body.append(chunk); + } + }, + Ok(ReadResult::EOF) | Err(_) => { + let completed_body = match *res_body.lock().unwrap() { + ResponseBody::Receiving(ref body) => (*body).clone(), + _ => vec![] + }; + *res_body.lock().unwrap() = ResponseBody::Done(completed_body); + break; + } + } + + } }); }, Err(_) => |