From 5978b21abf0939491527fa55503c4c01363f8bbf Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Sat, 10 Jan 2015 16:23:35 +0100 Subject: Implement StructuredCloneData::write. --- components/script/dom/bindings/structuredclone.rs | 28 +++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'components/script/dom/bindings/structuredclone.rs') diff --git a/components/script/dom/bindings/structuredclone.rs b/components/script/dom/bindings/structuredclone.rs index aad4a50a149..018ac30e340 100644 --- a/components/script/dom/bindings/structuredclone.rs +++ b/components/script/dom/bindings/structuredclone.rs @@ -2,7 +2,15 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +use dom::bindings::error::Fallible; +use dom::bindings::error::Error::DataClone; + +use js::jsapi::JSContext; +use js::jsapi::{JS_WriteStructuredClone, JS_ClearPendingException}; +use js::jsval::JSVal; + use libc::size_t; +use std::ptr; #[allow(raw_pointer_deriving)] #[deriving(Copy)] @@ -10,3 +18,23 @@ pub struct StructuredCloneData { pub data: *mut u64, pub nbytes: size_t, } + +impl StructuredCloneData { + pub fn write(cx: *mut JSContext, message: JSVal) + -> Fallible { + let mut data = ptr::null_mut(); + let mut nbytes = 0; + let result = unsafe { + JS_WriteStructuredClone(cx, message, &mut data, &mut nbytes, + ptr::null(), ptr::null_mut()) + }; + if result == 0 { + unsafe { JS_ClearPendingException(cx); } + return Err(DataClone); + } + Ok(StructuredCloneData { + data: data, + nbytes: nbytes, + }) + } +} -- cgit v1.2.3