Use task! to post worker messages

This commit is contained in:
Anthony Ramine 2017-09-17 23:39:12 +02:00
parent 56a546afcd
commit 76745699d2
2 changed files with 5 additions and 26 deletions

View file

@ -17,7 +17,7 @@ use dom::bindings::str::DOMString;
use dom::bindings::structuredclone::StructuredCloneData; use dom::bindings::structuredclone::StructuredCloneData;
use dom::globalscope::GlobalScope; use dom::globalscope::GlobalScope;
use dom::messageevent::MessageEvent; use dom::messageevent::MessageEvent;
use dom::worker::{TrustedWorkerAddress, WorkerErrorHandler, WorkerMessageHandler}; use dom::worker::{TrustedWorkerAddress, Worker, WorkerErrorHandler};
use dom::workerglobalscope::WorkerGlobalScope; use dom::workerglobalscope::WorkerGlobalScope;
use dom_struct::dom_struct; use dom_struct::dom_struct;
use ipc_channel::ipc::{self, IpcReceiver, IpcSender}; use ipc_channel::ipc::{self, IpcReceiver, IpcSender};
@ -375,10 +375,10 @@ impl DedicatedWorkerGlobalScopeMethods for DedicatedWorkerGlobalScope {
unsafe fn PostMessage(&self, cx: *mut JSContext, message: HandleValue) -> ErrorResult { unsafe fn PostMessage(&self, cx: *mut JSContext, message: HandleValue) -> ErrorResult {
let data = StructuredCloneData::write(cx, message)?; let data = StructuredCloneData::write(cx, message)?;
let worker = self.worker.borrow().as_ref().unwrap().clone(); let worker = self.worker.borrow().as_ref().unwrap().clone();
self.parent_sender let task = box task!(post_worker_message: move || {
.send(CommonScriptMsg::Task(WorkerEvent, Worker::handle_message(worker, data);
box WorkerMessageHandler::new(worker, data))) });
.unwrap(); self.parent_sender.send(CommonScriptMsg::Task(WorkerEvent, task)).unwrap();
Ok(()) Ok(())
} }

View file

@ -198,27 +198,6 @@ impl WorkerMethods for Worker {
event_handler!(error, GetOnerror, SetOnerror); event_handler!(error, GetOnerror, SetOnerror);
} }
pub struct WorkerMessageHandler {
addr: TrustedWorkerAddress,
data: StructuredCloneData,
}
impl WorkerMessageHandler {
pub fn new(addr: TrustedWorkerAddress, data: StructuredCloneData) -> WorkerMessageHandler {
WorkerMessageHandler {
addr: addr,
data: data,
}
}
}
impl Task for WorkerMessageHandler {
fn run(self: Box<Self>) {
let this = *self;
Worker::handle_message(this.addr, this.data);
}
}
impl Task for SimpleWorkerErrorHandler<Worker> { impl Task for SimpleWorkerErrorHandler<Worker> {
#[allow(unrooted_must_root)] #[allow(unrooted_must_root)]
fn run(self: Box<Self>) { fn run(self: Box<Self>) {