diff options
author | Josh Matthews <josh@joshmatthews.net> | 2015-03-05 09:22:58 -0500 |
---|---|---|
committer | Josh Matthews <josh@joshmatthews.net> | 2015-04-16 11:46:40 -0400 |
commit | 01e66035ffb621e57466f0a2ff73d0cbd795eb1c (patch) | |
tree | 72f135418a030770a5a8ed067a8947a623d36490 /components/script/dom/workerglobalscope.rs | |
parent | 2ee21ddbe79fa3a3b01f446ad1e6d23e67c68e46 (diff) | |
download | servo-01e66035ffb621e57466f0a2ff73d0cbd795eb1c.tar.gz servo-01e66035ffb621e57466f0a2ff73d0cbd795eb1c.zip |
Implement sync XHR by creating and spinning on-demand event loops.
Diffstat (limited to 'components/script/dom/workerglobalscope.rs')
-rw-r--r-- | components/script/dom/workerglobalscope.rs | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/components/script/dom/workerglobalscope.rs b/components/script/dom/workerglobalscope.rs index 76fd85e0603..d22f45c971a 100644 --- a/components/script/dom/workerglobalscope.rs +++ b/components/script/dom/workerglobalscope.rs @@ -16,7 +16,7 @@ use dom::eventtarget::{EventTarget, EventTargetTypeId}; use dom::workerlocation::WorkerLocation; use dom::workernavigator::WorkerNavigator; use dom::window::{base64_atob, base64_btoa}; -use script_task::{ScriptChan, TimerSource}; +use script_task::{ScriptChan, TimerSource, ScriptPort, ScriptMsg}; use timers::{IsInterval, TimerId, TimerManager, TimerCallback}; use devtools_traits::DevtoolsControlChan; @@ -216,6 +216,8 @@ pub trait WorkerGlobalScopeHelpers { fn handle_fire_timer(self, timer_id: TimerId); fn script_chan(self) -> Box<ScriptChan+Send>; fn pipeline(self) -> PipelineId; + fn new_script_pair(self) -> (Box<ScriptChan+Send>, Box<ScriptPort+Send>); + fn process_event(self, msg: ScriptMsg); fn get_cx(self) -> *mut JSContext; } @@ -238,6 +240,24 @@ impl<'a> WorkerGlobalScopeHelpers for JSRef<'a, WorkerGlobalScope> { } } + fn new_script_pair(self) -> (Box<ScriptChan+Send>, Box<ScriptPort+Send>) { + let dedicated: Option<JSRef<DedicatedWorkerGlobalScope>> = + DedicatedWorkerGlobalScopeCast::to_ref(self); + match dedicated { + Some(dedicated) => dedicated.new_script_pair(), + None => panic!("need to implement creating isolated event loops for SharedWorker"), + } + } + + fn process_event(self, msg: ScriptMsg) { + let dedicated: Option<JSRef<DedicatedWorkerGlobalScope>> = + DedicatedWorkerGlobalScopeCast::to_ref(self); + match dedicated { + Some(dedicated) => dedicated.process_event(msg), + None => panic!("need to implement processing single events for SharedWorker"), + } + } + fn handle_fire_timer(self, timer_id: TimerId) { self.timers.fire_timer(timer_id, self); } |