mirror of
https://github.com/servo/servo.git
synced 2025-07-19 13:23:46 +01:00
Use read_block in http_network_fetch
This commit is contained in:
parent
98863746ae
commit
7a72981d87
1 changed files with 18 additions and 27 deletions
|
@ -5,7 +5,7 @@
|
||||||
use connector::create_http_connector;
|
use connector::create_http_connector;
|
||||||
use data_loader::decode;
|
use data_loader::decode;
|
||||||
use fetch::cors_cache::CORSCache;
|
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::{Accept, AcceptLanguage, Authorization, AccessControlAllowCredentials};
|
||||||
use hyper::header::{AccessControlAllowOrigin, AccessControlAllowHeaders, AccessControlAllowMethods};
|
use hyper::header::{AccessControlAllowOrigin, AccessControlAllowHeaders, AccessControlAllowMethods};
|
||||||
use hyper::header::{AccessControlRequestHeaders, AccessControlMaxAge, AccessControlRequestMethod, Basic};
|
use hyper::header::{AccessControlRequestHeaders, AccessControlMaxAge, AccessControlRequestMethod, Basic};
|
||||||
|
@ -850,34 +850,25 @@ fn http_network_fetch(request: Rc<Request>,
|
||||||
thread::spawn(move || {
|
thread::spawn(move || {
|
||||||
|
|
||||||
*res_body.lock().unwrap() = ResponseBody::Receiving(vec![]);
|
*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();
|
loop {
|
||||||
assert!(*body != ResponseBody::Empty);
|
match read_block(&mut res.response) {
|
||||||
*body = ResponseBody::Done(new_body);
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 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());
|
|
||||||
// }
|
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
Err(_) =>
|
Err(_) =>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue