mirror of
https://github.com/servo/servo.git
synced 2025-07-23 07:13:52 +01:00
Add aborted flag to response, set when fetch is aborted
This commit is contained in:
parent
7249fd6bd8
commit
6f59b152f1
3 changed files with 21 additions and 8 deletions
|
@ -37,6 +37,7 @@ pub type Target<'a> = &'a mut (FetchTaskTarget + Send);
|
|||
pub enum Data {
|
||||
Payload(Vec<u8>),
|
||||
Done,
|
||||
Cancelled,
|
||||
}
|
||||
|
||||
pub struct FetchContext {
|
||||
|
@ -347,7 +348,7 @@ pub fn main_fetch(request: &mut Request,
|
|||
};
|
||||
|
||||
// Execute deferred rebinding of response.
|
||||
let response = if let Some(error) = internal_error {
|
||||
let mut response = if let Some(error) = internal_error {
|
||||
Response::network_error(error)
|
||||
} else {
|
||||
response
|
||||
|
@ -355,9 +356,9 @@ pub fn main_fetch(request: &mut Request,
|
|||
|
||||
// Step 19.
|
||||
let mut response_loaded = false;
|
||||
let response = if !response.is_network_error() && !request.integrity_metadata.is_empty() {
|
||||
let mut response = if !response.is_network_error() && !request.integrity_metadata.is_empty() {
|
||||
// Step 19.1.
|
||||
wait_for_response(&response, target, done_chan);
|
||||
wait_for_response(&mut response, target, done_chan);
|
||||
response_loaded = true;
|
||||
|
||||
// Step 19.2.
|
||||
|
@ -376,9 +377,9 @@ pub fn main_fetch(request: &mut Request,
|
|||
if request.synchronous {
|
||||
// process_response is not supposed to be used
|
||||
// by sync fetch, but we overload it here for simplicity
|
||||
target.process_response(&response);
|
||||
target.process_response(&mut response);
|
||||
if !response_loaded {
|
||||
wait_for_response(&response, target, done_chan);
|
||||
wait_for_response(&mut response, target, done_chan);
|
||||
}
|
||||
// overloaded similarly to process_response
|
||||
target.process_response_eof(&response);
|
||||
|
@ -400,7 +401,7 @@ pub fn main_fetch(request: &mut Request,
|
|||
|
||||
// Step 23.
|
||||
if !response_loaded {
|
||||
wait_for_response(&response, target, done_chan);
|
||||
wait_for_response(&mut response, target, done_chan);
|
||||
}
|
||||
|
||||
// Step 24.
|
||||
|
@ -411,7 +412,7 @@ pub fn main_fetch(request: &mut Request,
|
|||
response
|
||||
}
|
||||
|
||||
fn wait_for_response(response: &Response, target: Target, done_chan: &mut DoneChannel) {
|
||||
fn wait_for_response(response: &mut Response, target: Target, done_chan: &mut DoneChannel) {
|
||||
if let Some(ref ch) = *done_chan {
|
||||
loop {
|
||||
match ch.1.recv()
|
||||
|
@ -420,6 +421,10 @@ fn wait_for_response(response: &Response, target: Target, done_chan: &mut DoneCh
|
|||
target.process_response_chunk(vec);
|
||||
},
|
||||
Data::Done => break,
|
||||
Data::Cancelled => {
|
||||
response.aborted = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue