mirror of
https://github.com/servo/servo.git
synced 2025-08-04 21:20:23 +01:00
Auto merge of #19274 - Manishearth:xhr-cancel, r=jdm
Fetch cancellation This PR implements cancellation for fetch, and uses it for XHR. This means that fetch clients can now send a message to the fetch task asking for the network request to be aborted. Previously, clients like XHR had abort functionality but would implement it by simply ignoring future messages from the network task; and would not actually cancel the 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/19274) <!-- Reviewable:end -->
This commit is contained in:
commit
00b3612fe9
12 changed files with 98 additions and 31 deletions
|
@ -9,7 +9,7 @@ use cookie_rs;
|
|||
use cookie_storage::CookieStorage;
|
||||
use devtools_traits::DevtoolsControlMsg;
|
||||
use fetch::cors_cache::CorsCache;
|
||||
use fetch::methods::{FetchContext, fetch};
|
||||
use fetch::methods::{CancellationListener, FetchContext, fetch};
|
||||
use filemanager_thread::{FileManager, TFDProvider};
|
||||
use hsts::HstsList;
|
||||
use http_cache::HttpCache;
|
||||
|
@ -36,7 +36,7 @@ use std::fs::File;
|
|||
use std::io::prelude::*;
|
||||
use std::ops::Deref;
|
||||
use std::path::{Path, PathBuf};
|
||||
use std::sync::{Arc, RwLock};
|
||||
use std::sync::{Arc, Mutex, RwLock};
|
||||
use std::sync::mpsc::Sender;
|
||||
use std::thread;
|
||||
use storage_thread::StorageThreadFactory;
|
||||
|
@ -160,14 +160,14 @@ impl ResourceChannelManager {
|
|||
match msg {
|
||||
CoreResourceMsg::Fetch(req_init, channels) => {
|
||||
match channels {
|
||||
FetchChannels::ResponseMsg(sender) =>
|
||||
self.resource_manager.fetch(req_init, None, sender, http_state),
|
||||
FetchChannels::ResponseMsg(sender, cancel_chan) =>
|
||||
self.resource_manager.fetch(req_init, None, sender, http_state, cancel_chan),
|
||||
FetchChannels::WebSocket { event_sender, action_receiver } =>
|
||||
self.resource_manager.websocket_connect(req_init, event_sender, action_receiver, http_state),
|
||||
}
|
||||
}
|
||||
CoreResourceMsg::FetchRedirect(req_init, res_init, sender) =>
|
||||
self.resource_manager.fetch(req_init, Some(res_init), sender, http_state),
|
||||
CoreResourceMsg::FetchRedirect(req_init, res_init, sender, cancel_chan) =>
|
||||
self.resource_manager.fetch(req_init, Some(res_init), sender, http_state, cancel_chan),
|
||||
CoreResourceMsg::SetCookieForUrl(request, cookie, source) =>
|
||||
self.resource_manager.set_cookie_for_url(&request, cookie.into_inner(), source, http_state),
|
||||
CoreResourceMsg::SetCookiesForUrl(request, cookies, source) => {
|
||||
|
@ -332,7 +332,8 @@ impl CoreResourceManager {
|
|||
req_init: RequestInit,
|
||||
res_init_: Option<ResponseInit>,
|
||||
mut sender: IpcSender<FetchResponseMsg>,
|
||||
http_state: &Arc<HttpState>) {
|
||||
http_state: &Arc<HttpState>,
|
||||
cancel_chan: Option<IpcReceiver<()>>) {
|
||||
let http_state = http_state.clone();
|
||||
let ua = self.user_agent.clone();
|
||||
let dc = self.devtools_chan.clone();
|
||||
|
@ -349,6 +350,7 @@ impl CoreResourceManager {
|
|||
user_agent: ua,
|
||||
devtools_chan: dc,
|
||||
filemanager: filemanager,
|
||||
cancellation_listener: Arc::new(Mutex::new(CancellationListener::new(cancel_chan))),
|
||||
};
|
||||
|
||||
match res_init_ {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue