aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/script/dom/worker.rs
diff options
context:
space:
mode:
authorMs2ger <ms2ger@gmail.com>2014-08-12 20:27:12 +0200
committerMs2ger <ms2ger@gmail.com>2014-08-14 16:28:57 +0200
commit1dca6146a87a09e6ab0f792debb763af67be41f2 (patch)
tree91b5646be5b671d716a6d073c48a3c116aea6257 /src/components/script/dom/worker.rs
parent251d818de29b97d8cf4a2398661a71c60cd89da8 (diff)
downloadservo-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.rs15
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> {