diff options
-rw-r--r-- | components/script/dom/dedicatedworkerglobalscope.rs | 7 | ||||
-rw-r--r-- | components/script/dom/worker.rs | 23 | ||||
-rw-r--r-- | components/script/script_task.rs | 5 |
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) => |