diff options
Diffstat (limited to 'src/components/script/dom/worker.rs')
-rw-r--r-- | src/components/script/dom/worker.rs | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/components/script/dom/worker.rs b/src/components/script/dom/worker.rs index ff41b09e273..3b17375ee46 100644 --- a/src/components/script/dom/worker.rs +++ b/src/components/script/dom/worker.rs @@ -4,12 +4,14 @@ use dom::bindings::codegen::Bindings::WorkerBinding; use dom::bindings::codegen::Bindings::WorkerBinding::WorkerMethods; +use dom::bindings::codegen::InheritTypes::EventTargetCast; use dom::bindings::error::{Fallible, Syntax}; use dom::bindings::global::{GlobalRef, GlobalField}; use dom::bindings::js::{JS, JSRef, Temporary}; use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object}; use dom::dedicatedworkerglobalscope::DedicatedWorkerGlobalScope; use dom::eventtarget::{EventTarget, WorkerTypeId}; +use dom::messageevent::MessageEvent; use script_task::{ScriptChan, DOMMessage}; use servo_util::str::DOMString; @@ -66,6 +68,14 @@ impl Worker { Ok(Temporary::from_rooted(&*worker)) } + + pub fn handle_message(address: TrustedWorkerAddress, message: DOMString) { + let worker = unsafe { JS::from_trusted_worker_address(address).root() }; + + let target: &JSRef<EventTarget> = EventTargetCast::from_ref(&*worker); + let global = worker.global.root(); + MessageEvent::dispatch(target, &global.root_ref(), message); + } } impl Worker { |