diff options
author | Manish Goregaokar <manishsmail@gmail.com> | 2017-11-20 17:02:31 -0800 |
---|---|---|
committer | Manish Goregaokar <manishsmail@gmail.com> | 2017-11-20 17:04:55 -0800 |
commit | 6f59b152f1738ddecfbc1891bafd6f55c34992bc (patch) | |
tree | 1ffacc1e0e5413bc30b528debe4582dfc4261926 /components/net/fetch | |
parent | 7249fd6bd82b70fa097ce2c66dc8bdb4bf023da8 (diff) | |
download | servo-6f59b152f1738ddecfbc1891bafd6f55c34992bc.tar.gz servo-6f59b152f1738ddecfbc1891bafd6f55c34992bc.zip |
Add aborted flag to response, set when fetch is aborted
Diffstat (limited to 'components/net/fetch')
-rw-r--r-- | components/net/fetch/methods.rs | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/components/net/fetch/methods.rs b/components/net/fetch/methods.rs index f65c6c196f2..729435020a3 100644 --- a/components/net/fetch/methods.rs +++ b/components/net/fetch/methods.rs @@ -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 { |