mirror of
https://github.com/servo/servo.git
synced 2025-08-05 05:30:08 +01:00
Auto merge of #14106 - servo:deindent-http-network-fetch, r=nox
Deindent some of the code in http_network_fetch. <!-- Reviewable:start --> This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/14106) <!-- Reviewable:end -->
This commit is contained in:
commit
32a953f0ba
1 changed files with 82 additions and 82 deletions
|
@ -1015,88 +1015,8 @@ fn http_network_fetch<UI: 'static + UIProvider>(request: Rc<Request>,
|
||||||
request_id.as_ref().map(Deref::deref), is_xhr);
|
request_id.as_ref().map(Deref::deref), is_xhr);
|
||||||
|
|
||||||
let pipeline_id = request.pipeline_id.get();
|
let pipeline_id = request.pipeline_id.get();
|
||||||
let mut response = Response::new();
|
let (res, msg) = match wrapped_response {
|
||||||
match wrapped_response {
|
Ok(wrapped_response) => wrapped_response,
|
||||||
Ok((res, msg)) => {
|
|
||||||
response.url = Some(url.clone());
|
|
||||||
response.status = Some(res.response.status);
|
|
||||||
response.raw_status = Some((res.response.status_raw().0,
|
|
||||||
res.response.status_raw().1.as_bytes().to_vec()));
|
|
||||||
response.headers = res.response.headers.clone();
|
|
||||||
response.referrer = request.referrer.borrow().to_url().cloned();
|
|
||||||
|
|
||||||
let res_body = response.body.clone();
|
|
||||||
|
|
||||||
// We're about to spawn a thread to be waited on here
|
|
||||||
*done_chan = Some(channel());
|
|
||||||
let meta = match response.metadata().expect("Response metadata should exist at this stage") {
|
|
||||||
FetchMetadata::Unfiltered(m) => m,
|
|
||||||
FetchMetadata::Filtered { unsafe_, .. } => unsafe_
|
|
||||||
};
|
|
||||||
let done_sender = done_chan.as_ref().map(|ch| ch.0.clone());
|
|
||||||
let devtools_sender = context.devtools_chan.clone();
|
|
||||||
let meta_status = meta.status.clone();
|
|
||||||
let meta_headers = meta.headers.clone();
|
|
||||||
spawn_named(format!("fetch worker thread"), move || {
|
|
||||||
match StreamedResponse::from_http_response(box res, meta) {
|
|
||||||
Ok(mut res) => {
|
|
||||||
*res_body.lock().unwrap() = ResponseBody::Receiving(vec![]);
|
|
||||||
|
|
||||||
if let Some(ref sender) = devtools_sender {
|
|
||||||
if let Some(m) = msg {
|
|
||||||
send_request_to_devtools(m, &sender);
|
|
||||||
}
|
|
||||||
|
|
||||||
// --- Tell devtools that we got a response
|
|
||||||
// Send an HttpResponse message to devtools with the corresponding request_id
|
|
||||||
if let Some(pipeline_id) = pipeline_id {
|
|
||||||
send_response_to_devtools(
|
|
||||||
&sender, request_id.unwrap(),
|
|
||||||
meta_headers.map(Serde::into_inner),
|
|
||||||
meta_status,
|
|
||||||
pipeline_id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
loop {
|
|
||||||
match read_block(&mut res) {
|
|
||||||
Ok(ReadResult::Payload(chunk)) => {
|
|
||||||
if let ResponseBody::Receiving(ref mut body) = *res_body.lock().unwrap() {
|
|
||||||
body.extend_from_slice(&chunk);
|
|
||||||
if let Some(ref sender) = done_sender {
|
|
||||||
let _ = sender.send(Data::Payload(chunk));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
Ok(ReadResult::EOF) | Err(_) => {
|
|
||||||
let mut empty_vec = Vec::new();
|
|
||||||
let completed_body = match *res_body.lock().unwrap() {
|
|
||||||
ResponseBody::Receiving(ref mut body) => {
|
|
||||||
// avoid cloning the body
|
|
||||||
swap(body, &mut empty_vec);
|
|
||||||
empty_vec
|
|
||||||
},
|
|
||||||
_ => empty_vec,
|
|
||||||
};
|
|
||||||
*res_body.lock().unwrap() = ResponseBody::Done(completed_body);
|
|
||||||
if let Some(ref sender) = done_sender {
|
|
||||||
let _ = sender.send(Data::Done);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Err(_) => {
|
|
||||||
// XXXManishearth we should propagate this error somehow
|
|
||||||
*res_body.lock().unwrap() = ResponseBody::Done(vec![]);
|
|
||||||
if let Some(ref sender) = done_sender {
|
|
||||||
let _ = sender.send(Data::Done);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
Err(error) => {
|
Err(error) => {
|
||||||
let error = match error.error {
|
let error = match error.error {
|
||||||
LoadErrorType::ConnectionAborted { .. } => unreachable!(),
|
LoadErrorType::ConnectionAborted { .. } => unreachable!(),
|
||||||
|
@ -1108,6 +1028,86 @@ fn http_network_fetch<UI: 'static + UIProvider>(request: Rc<Request>,
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let mut response = Response::new();
|
||||||
|
response.url = Some(url.clone());
|
||||||
|
response.status = Some(res.response.status);
|
||||||
|
response.raw_status = Some((res.response.status_raw().0,
|
||||||
|
res.response.status_raw().1.as_bytes().to_vec()));
|
||||||
|
response.headers = res.response.headers.clone();
|
||||||
|
response.referrer = request.referrer.borrow().to_url().cloned();
|
||||||
|
|
||||||
|
let res_body = response.body.clone();
|
||||||
|
|
||||||
|
// We're about to spawn a thread to be waited on here
|
||||||
|
*done_chan = Some(channel());
|
||||||
|
let meta = match response.metadata().expect("Response metadata should exist at this stage") {
|
||||||
|
FetchMetadata::Unfiltered(m) => m,
|
||||||
|
FetchMetadata::Filtered { unsafe_, .. } => unsafe_
|
||||||
|
};
|
||||||
|
let done_sender = done_chan.as_ref().map(|ch| ch.0.clone());
|
||||||
|
let devtools_sender = context.devtools_chan.clone();
|
||||||
|
let meta_status = meta.status.clone();
|
||||||
|
let meta_headers = meta.headers.clone();
|
||||||
|
spawn_named(format!("fetch worker thread"), move || {
|
||||||
|
match StreamedResponse::from_http_response(box res, meta) {
|
||||||
|
Ok(mut res) => {
|
||||||
|
*res_body.lock().unwrap() = ResponseBody::Receiving(vec![]);
|
||||||
|
|
||||||
|
if let Some(ref sender) = devtools_sender {
|
||||||
|
if let Some(m) = msg {
|
||||||
|
send_request_to_devtools(m, &sender);
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- Tell devtools that we got a response
|
||||||
|
// Send an HttpResponse message to devtools with the corresponding request_id
|
||||||
|
if let Some(pipeline_id) = pipeline_id {
|
||||||
|
send_response_to_devtools(
|
||||||
|
&sender, request_id.unwrap(),
|
||||||
|
meta_headers.map(Serde::into_inner),
|
||||||
|
meta_status,
|
||||||
|
pipeline_id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
loop {
|
||||||
|
match read_block(&mut res) {
|
||||||
|
Ok(ReadResult::Payload(chunk)) => {
|
||||||
|
if let ResponseBody::Receiving(ref mut body) = *res_body.lock().unwrap() {
|
||||||
|
body.extend_from_slice(&chunk);
|
||||||
|
if let Some(ref sender) = done_sender {
|
||||||
|
let _ = sender.send(Data::Payload(chunk));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Ok(ReadResult::EOF) | Err(_) => {
|
||||||
|
let mut empty_vec = Vec::new();
|
||||||
|
let completed_body = match *res_body.lock().unwrap() {
|
||||||
|
ResponseBody::Receiving(ref mut body) => {
|
||||||
|
// avoid cloning the body
|
||||||
|
swap(body, &mut empty_vec);
|
||||||
|
empty_vec
|
||||||
|
},
|
||||||
|
_ => empty_vec,
|
||||||
|
};
|
||||||
|
*res_body.lock().unwrap() = ResponseBody::Done(completed_body);
|
||||||
|
if let Some(ref sender) = done_sender {
|
||||||
|
let _ = sender.send(Data::Done);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Err(_) => {
|
||||||
|
// XXXManishearth we should propagate this error somehow
|
||||||
|
*res_body.lock().unwrap() = ResponseBody::Done(vec![]);
|
||||||
|
if let Some(ref sender) = done_sender {
|
||||||
|
let _ = sender.send(Data::Done);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// TODO these substeps aren't possible yet
|
// TODO these substeps aren't possible yet
|
||||||
// Substep 1
|
// Substep 1
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue