Allow wrapping worker runnables in cancellable runnables.

This commit is contained in:
Josh Matthews 2016-07-14 13:01:52 -04:00
parent 2cab846140
commit 0e4865ea1a
2 changed files with 17 additions and 1 deletions

View file

@ -23,7 +23,7 @@ use net_traits::filemanager_thread::FileManagerThreadMsg;
use net_traits::{ResourceThreads, CoreResourceThread, RequestSource, IpcSend};
use profile_traits::{mem, time};
use script_runtime::{CommonScriptMsg, ScriptChan, ScriptPort};
use script_thread::{MainThreadScriptChan, ScriptThread};
use script_thread::{MainThreadScriptChan, ScriptThread, RunnableWrapper};
use script_traits::{MsDuration, ScriptMsg as ConstellationMsg, TimerEventRequest};
use task_source::dom_manipulation::DOMManipulationTaskSource;
use timers::{OneshotTimerCallback, OneshotTimerHandle};
@ -297,6 +297,15 @@ impl<'a> GlobalRef<'a> {
GlobalRef::Worker(ref worker) => worker.panic_chan(),
}
}
/// Returns a wrapper for runnables to ensure they are cancelled if the global
/// is being destroyed.
pub fn get_runnable_wrapper(&self) -> RunnableWrapper {
match *self {
GlobalRef::Window(ref window) => window.get_runnable_wrapper(),
GlobalRef::Worker(ref worker) => worker.get_runnable_wrapper(),
}
}
}
impl GlobalRoot {

View file

@ -29,6 +29,7 @@ use net_traits::{LoadContext, ResourceThreads, load_whole_resource};
use net_traits::{RequestSource, LoadOrigin, CustomResponseSender, IpcSend};
use profile_traits::{mem, time};
use script_runtime::{CommonScriptMsg, ScriptChan, ScriptPort, maybe_take_panic_result};
use script_thread::RunnableWrapper;
use script_traits::ScriptMsg as ConstellationMsg;
use script_traits::{MsDuration, TimerEvent, TimerEventId, TimerEventRequest, TimerSource};
use std::cell::Cell;
@ -268,6 +269,12 @@ impl WorkerGlobalScope {
pub fn panic_chan(&self) -> &IpcSender<PanicMsg> {
&self.panic_chan
}
pub fn get_runnable_wrapper(&self) -> RunnableWrapper {
RunnableWrapper {
cancelled: self.closing.clone(),
}
}
}
impl LoadOrigin for WorkerGlobalScope {