diff options
Diffstat (limited to 'src/components/script/dom/worker.rs')
-rw-r--r-- | src/components/script/dom/worker.rs | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/src/components/script/dom/worker.rs b/src/components/script/dom/worker.rs index a01865c6075..0b52309b80e 100644 --- a/src/components/script/dom/worker.rs +++ b/src/components/script/dom/worker.rs @@ -17,11 +17,13 @@ use script_task::{ScriptChan, DOMMessage}; use servo_util::str::DOMString; -use js::jsapi::{JS_AddObjectRoot, JS_RemoveObjectRoot}; +use js::jsapi::{JSContext, JS_AddObjectRoot, JS_RemoveObjectRoot, JS_WriteStructuredClone}; +use js::jsval::JSVal; use url::UrlParser; use libc::c_void; use std::cell::Cell; +use std::ptr; pub struct TrustedWorkerAddress(pub *const c_void); @@ -115,10 +117,17 @@ impl Worker { } impl<'a> WorkerMethods for JSRef<'a, Worker> { - fn PostMessage(&self, message: DOMString) { + fn PostMessage(&self, cx: *mut JSContext, message: JSVal) { + let mut data = ptr::mut_null(); + let mut nbytes = 0; + unsafe { + assert!(JS_WriteStructuredClone(cx, message, &mut data, &mut nbytes, + ptr::null(), ptr::mut_null()) != 0); + } + self.addref(); let ScriptChan(ref sender) = self.sender; - sender.send(DOMMessage(message)); + sender.send(DOMMessage(data, nbytes)); } fn GetOnmessage(&self) -> Option<EventHandlerNonNull> { |