diff options
author | Ms2ger <ms2ger@gmail.com> | 2015-01-10 16:23:35 +0100 |
---|---|---|
committer | Ms2ger <ms2ger@gmail.com> | 2015-01-10 16:33:26 +0100 |
commit | 5978b21abf0939491527fa55503c4c01363f8bbf (patch) | |
tree | 2454e7f5bfc10f33aa03fb2061422ca70f9373d9 /components/script/dom/bindings/structuredclone.rs | |
parent | 57aaa60fa5c3c0da1458271d21a1cab1c6a778c4 (diff) | |
download | servo-5978b21abf0939491527fa55503c4c01363f8bbf.tar.gz servo-5978b21abf0939491527fa55503c4c01363f8bbf.zip |
Implement StructuredCloneData::write.
Diffstat (limited to 'components/script/dom/bindings/structuredclone.rs')
-rw-r--r-- | components/script/dom/bindings/structuredclone.rs | 28 |
1 files changed, 28 insertions, 0 deletions
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<StructuredCloneData> { + 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, + }) + } +} |