aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/workerglobalscope.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom/workerglobalscope.rs')
-rw-r--r--components/script/dom/workerglobalscope.rs22
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);
}