From 7249fd6bd82b70fa097ce2c66dc8bdb4bf023da8 Mon Sep 17 00:00:00 2001 From: Manish Goregaokar Date: Fri, 17 Nov 2017 14:59:30 -0800 Subject: Fetch cancellation: Listen for cancellation and prematurely abort if cancelled --- components/net/http_loader.rs | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'components/net') diff --git a/components/net/http_loader.rs b/components/net/http_loader.rs index 932318ce1ae..8eb1a901203 100644 --- a/components/net/http_loader.rs +++ b/components/net/http_loader.rs @@ -1087,6 +1087,7 @@ fn http_network_fetch(request: &Request, let devtools_sender = context.devtools_chan.clone(); let meta_status = meta.status.clone(); let meta_headers = meta.headers.clone(); + let cancellation_listener = context.cancellation_listener.clone(); thread::Builder::new().name(format!("fetch worker thread")).spawn(move || { match StreamedResponse::from_http_response(res) { Ok(mut res) => { @@ -1109,6 +1110,11 @@ fn http_network_fetch(request: &Request, } loop { + if cancellation_listener.lock().unwrap().cancelled() { + *res_body.lock().unwrap() = ResponseBody::Done(vec![]); + let _ = done_sender.send(Data::Done); + return; + } match read_block(&mut res) { Ok(Data::Payload(chunk)) => { if let ResponseBody::Receiving(ref mut body) = *res_body.lock().unwrap() { -- cgit v1.2.3