mirror of
https://github.com/servo/servo.git
synced 2025-07-24 15:50:21 +01:00
Issue 4497: Converts WorkerPostMessage into a Runnable.
Implements WorkerMessage handler implementing Runnable trait.
This commit is contained in:
parent
dd84ae6bfb
commit
50d53c9fa3
3 changed files with 24 additions and 11 deletions
|
@ -16,7 +16,7 @@ use dom::bindings::refcounted::LiveDOMReferences;
|
||||||
use dom::bindings::utils::Reflectable;
|
use dom::bindings::utils::Reflectable;
|
||||||
use dom::eventtarget::{EventTarget, EventTargetHelpers, EventTargetTypeId};
|
use dom::eventtarget::{EventTarget, EventTargetHelpers, EventTargetTypeId};
|
||||||
use dom::messageevent::MessageEvent;
|
use dom::messageevent::MessageEvent;
|
||||||
use dom::worker::{Worker, TrustedWorkerAddress};
|
use dom::worker::{TrustedWorkerAddress, WorkerMessageHandler};
|
||||||
use dom::workerglobalscope::{WorkerGlobalScope, WorkerGlobalScopeHelpers};
|
use dom::workerglobalscope::{WorkerGlobalScope, WorkerGlobalScopeHelpers};
|
||||||
use dom::workerglobalscope::WorkerGlobalScopeTypeId;
|
use dom::workerglobalscope::WorkerGlobalScopeTypeId;
|
||||||
use script_task::{ScriptTask, ScriptChan, ScriptMsg, TimerSource};
|
use script_task::{ScriptTask, ScriptChan, ScriptMsg, TimerSource};
|
||||||
|
@ -216,9 +216,6 @@ impl<'a> PrivateDedicatedWorkerGlobalScopeHelpers for JSRef<'a, DedicatedWorkerG
|
||||||
ScriptMsg::RunnableMsg(runnable) => {
|
ScriptMsg::RunnableMsg(runnable) => {
|
||||||
runnable.handler()
|
runnable.handler()
|
||||||
},
|
},
|
||||||
ScriptMsg::WorkerPostMessage(addr, data, nbytes) => {
|
|
||||||
Worker::handle_message(addr, data, nbytes);
|
|
||||||
},
|
|
||||||
ScriptMsg::RefcountCleanup(addr) => {
|
ScriptMsg::RefcountCleanup(addr) => {
|
||||||
let scope: JSRef<WorkerGlobalScope> = WorkerGlobalScopeCast::from_ref(self);
|
let scope: JSRef<WorkerGlobalScope> = WorkerGlobalScopeCast::from_ref(self);
|
||||||
LiveDOMReferences::cleanup(scope.get_cx(), addr);
|
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();
|
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(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@ use dom::bindings::utils::{Reflectable, reflect_dom_object};
|
||||||
use dom::dedicatedworkerglobalscope::DedicatedWorkerGlobalScope;
|
use dom::dedicatedworkerglobalscope::DedicatedWorkerGlobalScope;
|
||||||
use dom::eventtarget::{EventTarget, EventTargetHelpers, EventTargetTypeId};
|
use dom::eventtarget::{EventTarget, EventTargetHelpers, EventTargetTypeId};
|
||||||
use dom::messageevent::MessageEvent;
|
use dom::messageevent::MessageEvent;
|
||||||
use script_task::{ScriptChan, ScriptMsg};
|
use script_task::{ScriptChan, ScriptMsg, Runnable};
|
||||||
|
|
||||||
use servo_util::str::DOMString;
|
use servo_util::str::DOMString;
|
||||||
|
|
||||||
|
@ -120,3 +120,24 @@ impl<'a> WorkerMethods for JSRef<'a, Worker> {
|
||||||
event_handler!(message, GetOnmessage, SetOnmessage)
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -27,7 +27,6 @@ use dom::keyboardevent::KeyboardEvent;
|
||||||
use dom::mouseevent::MouseEvent;
|
use dom::mouseevent::MouseEvent;
|
||||||
use dom::node::{mod, Node, NodeHelpers, NodeDamage, NodeTypeId};
|
use dom::node::{mod, Node, NodeHelpers, NodeDamage, NodeTypeId};
|
||||||
use dom::window::{Window, WindowHelpers};
|
use dom::window::{Window, WindowHelpers};
|
||||||
use dom::worker::{Worker, TrustedWorkerAddress};
|
|
||||||
use parse::html::{HTMLInput, parse_html};
|
use parse::html::{HTMLInput, parse_html};
|
||||||
use layout_interface::{ScriptLayoutChan, LayoutChan, ReflowGoal, ReflowQueryType};
|
use layout_interface::{ScriptLayoutChan, LayoutChan, ReflowGoal, ReflowQueryType};
|
||||||
use layout_interface;
|
use layout_interface;
|
||||||
|
@ -115,8 +114,6 @@ pub enum ScriptMsg {
|
||||||
/// Message sent through Worker.postMessage (only dispatched to
|
/// Message sent through Worker.postMessage (only dispatched to
|
||||||
/// DedicatedWorkerGlobalScope).
|
/// DedicatedWorkerGlobalScope).
|
||||||
DOMMessage(*mut u64, size_t),
|
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.
|
/// Generic message that encapsulates event handling.
|
||||||
RunnableMsg(Box<Runnable+Send>),
|
RunnableMsg(Box<Runnable+Send>),
|
||||||
/// A DOM object's last pinned reference was removed (dispatched to all tasks).
|
/// 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),
|
self.handle_exit_window_msg(id),
|
||||||
ScriptMsg::DOMMessage(..) =>
|
ScriptMsg::DOMMessage(..) =>
|
||||||
panic!("unexpected message"),
|
panic!("unexpected message"),
|
||||||
ScriptMsg::WorkerPostMessage(addr, data, nbytes) =>
|
|
||||||
Worker::handle_message(addr, data, nbytes),
|
|
||||||
ScriptMsg::RunnableMsg(runnable) =>
|
ScriptMsg::RunnableMsg(runnable) =>
|
||||||
runnable.handler(),
|
runnable.handler(),
|
||||||
ScriptMsg::RefcountCleanup(addr) =>
|
ScriptMsg::RefcountCleanup(addr) =>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue