diff options
Diffstat (limited to 'components/script/dom/dedicatedworkerglobalscope.rs')
-rw-r--r-- | components/script/dom/dedicatedworkerglobalscope.rs | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/components/script/dom/dedicatedworkerglobalscope.rs b/components/script/dom/dedicatedworkerglobalscope.rs index a3adde75498..d0e8ba8258d 100644 --- a/components/script/dom/dedicatedworkerglobalscope.rs +++ b/components/script/dom/dedicatedworkerglobalscope.rs @@ -462,13 +462,20 @@ impl DedicatedWorkerGlobalScope { fn handle_script_event(&self, msg: WorkerScriptMsg) { match msg { - WorkerScriptMsg::DOMMessage(data) => { + WorkerScriptMsg::DOMMessage { origin, data } => { let scope = self.upcast::<WorkerGlobalScope>(); let target = self.upcast(); let _ac = enter_realm(self); rooted!(in(*scope.get_cx()) let mut message = UndefinedValue()); - data.read(scope.upcast(), message.handle_mut()); - MessageEvent::dispatch_jsval(target, scope.upcast(), message.handle(), None, None); + assert!(data.read(scope.upcast(), message.handle_mut())); + MessageEvent::dispatch_jsval( + target, + scope.upcast(), + message.handle(), + Some(&origin), + None, + vec![], + ); }, WorkerScriptMsg::Common(msg) => { self.upcast::<WorkerGlobalScope>().process_event(msg); @@ -562,11 +569,13 @@ unsafe extern "C" fn interrupt_callback(cx: *mut JSContext) -> bool { impl DedicatedWorkerGlobalScopeMethods for DedicatedWorkerGlobalScope { // https://html.spec.whatwg.org/multipage/#dom-dedicatedworkerglobalscope-postmessage fn PostMessage(&self, cx: SafeJSContext, message: HandleValue) -> ErrorResult { - let data = StructuredCloneData::write(*cx, message)?; + rooted!(in(*cx) let transfer = UndefinedValue()); + let data = StructuredCloneData::write(*cx, message, transfer.handle())?; let worker = self.worker.borrow().as_ref().unwrap().clone(); - let pipeline_id = self.upcast::<GlobalScope>().pipeline_id(); + let pipeline_id = self.global().pipeline_id(); + let origin = self.global().origin().immutable().ascii_serialization(); let task = Box::new(task!(post_worker_message: move || { - Worker::handle_message(worker, data); + Worker::handle_message(worker, origin, data); })); // TODO: Change this task source to a new `unshipped-port-message-queue` task source self.parent_sender |