aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/script/dom/dedicatedworkerglobalscope.rs7
-rw-r--r--components/script/dom/worker.rs23
-rw-r--r--components/script/script_task.rs5
3 files changed, 24 insertions, 11 deletions
diff --git a/components/script/dom/dedicatedworkerglobalscope.rs b/components/script/dom/dedicatedworkerglobalscope.rs
index b095cd7b104..0257f8edc2e 100644
--- a/components/script/dom/dedicatedworkerglobalscope.rs
+++ b/components/script/dom/dedicatedworkerglobalscope.rs
@@ -16,7 +16,7 @@ use dom::bindings::refcounted::LiveDOMReferences;
use dom::bindings::utils::Reflectable;
use dom::eventtarget::{EventTarget, EventTargetHelpers, EventTargetTypeId};
use dom::messageevent::MessageEvent;
-use dom::worker::{Worker, TrustedWorkerAddress};
+use dom::worker::{TrustedWorkerAddress, WorkerMessageHandler};
use dom::workerglobalscope::{WorkerGlobalScope, WorkerGlobalScopeHelpers};
use dom::workerglobalscope::WorkerGlobalScopeTypeId;
use script_task::{ScriptTask, ScriptChan, ScriptMsg, TimerSource};
@@ -216,9 +216,6 @@ impl<'a> PrivateDedicatedWorkerGlobalScopeHelpers for JSRef<'a, DedicatedWorkerG
ScriptMsg::RunnableMsg(runnable) => {
runnable.handler()
},
- ScriptMsg::WorkerPostMessage(addr, data, nbytes) => {
- Worker::handle_message(addr, data, nbytes);
- },
ScriptMsg::RefcountCleanup(addr) => {
let scope: JSRef<WorkerGlobalScope> = WorkerGlobalScopeCast::from_ref(self);
LiveDOMReferences::cleanup(scope.get_cx(), addr);
@@ -246,7 +243,7 @@ impl<'a> DedicatedWorkerGlobalScopeMethods for JSRef<'a, DedicatedWorkerGlobalSc
}
let worker = self.worker.borrow().as_ref().unwrap().clone();
- self.parent_sender.send(ScriptMsg::WorkerPostMessage(worker, data, nbytes));
+ self.parent_sender.send(ScriptMsg::RunnableMsg(box WorkerMessageHandler::new(worker, data, nbytes)));
Ok(())
}
diff --git a/components/script/dom/worker.rs b/components/script/dom/worker.rs
index 51f9962ed6b..fbf3ca5043d 100644
--- a/components/script/dom/worker.rs
+++ b/components/script/dom/worker.rs
@@ -16,7 +16,7 @@ use dom::bindings::utils::{Reflectable, reflect_dom_object};
use dom::dedicatedworkerglobalscope::DedicatedWorkerGlobalScope;
use dom::eventtarget::{EventTarget, EventTargetHelpers, EventTargetTypeId};
use dom::messageevent::MessageEvent;
-use script_task::{ScriptChan, ScriptMsg};
+use script_task::{ScriptChan, ScriptMsg, Runnable};
use servo_util::str::DOMString;
@@ -120,3 +120,24 @@ impl<'a> WorkerMethods for JSRef<'a, Worker> {
event_handler!(message, GetOnmessage, SetOnmessage)
}
+pub struct WorkerMessageHandler {
+ addr: TrustedWorkerAddress,
+ data: *mut u64,
+ nbytes: size_t
+}
+
+impl WorkerMessageHandler {
+ pub fn new(addr: TrustedWorkerAddress, data: *mut u64, nbytes: size_t) -> WorkerMessageHandler {
+ WorkerMessageHandler {
+ addr: addr,
+ data: data,
+ nbytes: nbytes,
+ }
+ }
+}
+
+impl Runnable for WorkerMessageHandler {
+ fn handler(&self){
+ Worker::handle_message(self.addr.clone(), self.data, self.nbytes);
+ }
+}
diff --git a/components/script/script_task.rs b/components/script/script_task.rs
index 91899233b45..92b457403f6 100644
--- a/components/script/script_task.rs
+++ b/components/script/script_task.rs
@@ -27,7 +27,6 @@ use dom::keyboardevent::KeyboardEvent;
use dom::mouseevent::MouseEvent;
use dom::node::{mod, Node, NodeHelpers, NodeDamage, NodeTypeId};
use dom::window::{Window, WindowHelpers};
-use dom::worker::{Worker, TrustedWorkerAddress};
use parse::html::{HTMLInput, parse_html};
use layout_interface::{ScriptLayoutChan, LayoutChan, ReflowGoal, ReflowQueryType};
use layout_interface;
@@ -115,8 +114,6 @@ pub enum ScriptMsg {
/// Message sent through Worker.postMessage (only dispatched to
/// DedicatedWorkerGlobalScope).
DOMMessage(*mut u64, size_t),
- /// Posts a message to the Worker object (dispatched to all tasks).
- WorkerPostMessage(TrustedWorkerAddress, *mut u64, size_t),
/// Generic message that encapsulates event handling.
RunnableMsg(Box<Runnable+Send>),
/// A DOM object's last pinned reference was removed (dispatched to all tasks).
@@ -600,8 +597,6 @@ impl ScriptTask {
self.handle_exit_window_msg(id),
ScriptMsg::DOMMessage(..) =>
panic!("unexpected message"),
- ScriptMsg::WorkerPostMessage(addr, data, nbytes) =>
- Worker::handle_message(addr, data, nbytes),
ScriptMsg::RunnableMsg(runnable) =>
runnable.handler(),
ScriptMsg::RefcountCleanup(addr) =>