mirror of
https://github.com/servo/servo.git
synced 2025-07-23 07:13:52 +01:00
Fetch cancellation: Add CancellationListener
This commit is contained in:
parent
27457e4d84
commit
6dd7af2bda
4 changed files with 38 additions and 10 deletions
|
@ -28,7 +28,7 @@ use std::fs::File;
|
|||
use std::io::Read;
|
||||
use std::mem;
|
||||
use std::str;
|
||||
use std::sync::Arc;
|
||||
use std::sync::{Arc, Mutex};
|
||||
use std::sync::mpsc::{Sender, Receiver};
|
||||
use subresource_integrity::is_response_integrity_valid;
|
||||
|
||||
|
@ -44,9 +44,37 @@ pub struct FetchContext {
|
|||
pub user_agent: Cow<'static, str>,
|
||||
pub devtools_chan: Option<Sender<DevtoolsControlMsg>>,
|
||||
pub filemanager: FileManager,
|
||||
pub cancel_chan: Option<IpcReceiver<()>>,
|
||||
pub cancellation_listener: Arc<Mutex<CancellationListener>>,
|
||||
}
|
||||
|
||||
pub struct CancellationListener {
|
||||
cancel_chan: Option<IpcReceiver<()>>,
|
||||
cancelled: bool,
|
||||
}
|
||||
|
||||
impl CancellationListener {
|
||||
pub fn new(cancel_chan: Option<IpcReceiver<()>>) -> Self {
|
||||
Self {
|
||||
cancel_chan: cancel_chan,
|
||||
cancelled: false,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn cancelled(&mut self) -> bool {
|
||||
if let Some(ref cancel_chan) = self.cancel_chan {
|
||||
if self.cancelled {
|
||||
true
|
||||
} else if cancel_chan.try_recv().is_ok() {
|
||||
self.cancelled = true;
|
||||
true
|
||||
} else {
|
||||
false
|
||||
}
|
||||
} else {
|
||||
false
|
||||
}
|
||||
}
|
||||
}
|
||||
pub type DoneChannel = Option<(Sender<Data>, Receiver<Data>)>;
|
||||
|
||||
/// [Fetch](https://fetch.spec.whatwg.org#concept-fetch)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue