diff options
-rw-r--r-- | components/script/dom/bindings/global.rs | 11 | ||||
-rw-r--r-- | components/script/dom/workerglobalscope.rs | 7 |
2 files changed, 17 insertions, 1 deletions
diff --git a/components/script/dom/bindings/global.rs b/components/script/dom/bindings/global.rs index 1040e7b5965..6593fc36b8f 100644 --- a/components/script/dom/bindings/global.rs +++ b/components/script/dom/bindings/global.rs @@ -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 { diff --git a/components/script/dom/workerglobalscope.rs b/components/script/dom/workerglobalscope.rs index 2e1c983bfd4..b04663bbd08 100644 --- a/components/script/dom/workerglobalscope.rs +++ b/components/script/dom/workerglobalscope.rs @@ -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 { |