diff options
author | Ms2ger <ms2ger@gmail.com> | 2014-08-12 20:27:12 +0200 |
---|---|---|
committer | Ms2ger <ms2ger@gmail.com> | 2014-08-14 16:28:57 +0200 |
commit | 1dca6146a87a09e6ab0f792debb763af67be41f2 (patch) | |
tree | 91b5646be5b671d716a6d073c48a3c116aea6257 /src/components/script/dom/worker.rs | |
parent | 251d818de29b97d8cf4a2398661a71c60cd89da8 (diff) | |
download | servo-1dca6146a87a09e6ab0f792debb763af67be41f2.tar.gz servo-1dca6146a87a09e6ab0f792debb763af67be41f2.zip |
Structured clone the argument to Worker.postMessage.
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> { |