aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/worker.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom/worker.rs')
-rw-r--r--components/script/dom/worker.rs20
1 files changed, 11 insertions, 9 deletions
diff --git a/components/script/dom/worker.rs b/components/script/dom/worker.rs
index d3681900db3..98392cb6a11 100644
--- a/components/script/dom/worker.rs
+++ b/components/script/dom/worker.rs
@@ -11,6 +11,7 @@ use dom::bindings::error::Error::{Syntax, DataClone};
use dom::bindings::global::{GlobalRef, GlobalField};
use dom::bindings::js::{JSRef, Temporary};
use dom::bindings::refcounted::Trusted;
+use dom::bindings::structuredclone::StructuredCloneData;
use dom::bindings::trace::JSTraceable;
use dom::bindings::utils::{Reflectable, reflect_dom_object};
use dom::dedicatedworkerglobalscope::DedicatedWorkerGlobalScope;
@@ -26,7 +27,6 @@ use js::jsapi::{JS_ReadStructuredClone, JS_WriteStructuredClone, JS_ClearPending
use js::jsval::{JSVal, UndefinedValue};
use url::UrlParser;
-use libc::size_t;
use std::cell::Cell;
use std::ptr;
@@ -82,7 +82,7 @@ impl Worker {
#[allow(unsafe_blocks)]
pub fn handle_message(address: TrustedWorkerAddress,
- data: *mut u64, nbytes: size_t) {
+ data: StructuredCloneData) {
let worker = address.to_temporary().root();
let global = worker.r().global.root();
@@ -90,7 +90,7 @@ impl Worker {
let mut message = UndefinedValue();
unsafe {
assert!(JS_ReadStructuredClone(
- global.r().get_cx(), data as *const u64, nbytes,
+ global.r().get_cx(), data.data as *const u64, data.nbytes,
JS_STRUCTURED_CLONE_VERSION, &mut message,
ptr::null(), ptr::null_mut()) != 0);
}
@@ -113,9 +113,13 @@ impl<'a> WorkerMethods for JSRef<'a, Worker> {
unsafe { JS_ClearPendingException(cx); }
return Err(DataClone);
}
+ let data = StructuredCloneData {
+ data: data,
+ nbytes: nbytes,
+ };
let address = Trusted::new(cx, self, self.global.root().r().script_chan().clone());
- self.sender.send((address, ScriptMsg::DOMMessage(data, nbytes)));
+ self.sender.send((address, ScriptMsg::DOMMessage(data)));
Ok(())
}
@@ -124,22 +128,20 @@ impl<'a> WorkerMethods for JSRef<'a, Worker> {
pub struct WorkerMessageHandler {
addr: TrustedWorkerAddress,
- data: *mut u64,
- nbytes: size_t
+ data: StructuredCloneData,
}
impl WorkerMessageHandler {
- pub fn new(addr: TrustedWorkerAddress, data: *mut u64, nbytes: size_t) -> WorkerMessageHandler {
+ pub fn new(addr: TrustedWorkerAddress, data: StructuredCloneData) -> WorkerMessageHandler {
WorkerMessageHandler {
addr: addr,
data: data,
- nbytes: nbytes,
}
}
}
impl Runnable for WorkerMessageHandler {
fn handler(&self){
- Worker::handle_message(self.addr.clone(), self.data, self.nbytes);
+ Worker::handle_message(self.addr.clone(), self.data);
}
}