aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/bindings
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom/bindings')
-rw-r--r--components/script/dom/bindings/structuredclone.rs16
1 files changed, 15 insertions, 1 deletions
diff --git a/components/script/dom/bindings/structuredclone.rs b/components/script/dom/bindings/structuredclone.rs
index 018ac30e340..843b7bea30c 100644
--- a/components/script/dom/bindings/structuredclone.rs
+++ b/components/script/dom/bindings/structuredclone.rs
@@ -4,10 +4,13 @@
use dom::bindings::error::Fallible;
use dom::bindings::error::Error::DataClone;
+use dom::bindings::global::GlobalRef;
+use js::glue::JS_STRUCTURED_CLONE_VERSION;
use js::jsapi::JSContext;
use js::jsapi::{JS_WriteStructuredClone, JS_ClearPendingException};
-use js::jsval::JSVal;
+use js::jsapi::JS_ReadStructuredClone;
+use js::jsval::{JSVal, UndefinedValue};
use libc::size_t;
use std::ptr;
@@ -37,4 +40,15 @@ impl StructuredCloneData {
nbytes: nbytes,
})
}
+
+ pub fn read(self, global: GlobalRef) -> JSVal {
+ let mut message = UndefinedValue();
+ unsafe {
+ assert!(JS_ReadStructuredClone(
+ global.get_cx(), self.data as *const u64, self.nbytes,
+ JS_STRUCTURED_CLONE_VERSION, &mut message,
+ ptr::null(), ptr::null_mut()) != 0);
+ }
+ message
+ }
}