diff options
Diffstat (limited to 'components/script/dom')
-rw-r--r-- | components/script/dom/filereader.rs | 4 | ||||
-rw-r--r-- | components/script/dom/imagedata.rs | 15 | ||||
-rw-r--r-- | components/script/dom/textencoder.rs | 4 | ||||
-rw-r--r-- | components/script/dom/vreyeparameters.rs | 5 | ||||
-rw-r--r-- | components/script/dom/vrframedata.rs | 10 | ||||
-rw-r--r-- | components/script/dom/vrpose.rs | 38 | ||||
-rw-r--r-- | components/script/dom/vrstageparameters.rs | 6 | ||||
-rw-r--r-- | components/script/dom/websocket.rs | 5 |
8 files changed, 45 insertions, 42 deletions
diff --git a/components/script/dom/filereader.rs b/components/script/dom/filereader.rs index 039d516db6e..f97f14480c3 100644 --- a/components/script/dom/filereader.rs +++ b/components/script/dom/filereader.rs @@ -27,7 +27,7 @@ use js::jsapi::Heap; use js::jsapi::JSAutoCompartment; use js::jsapi::JSContext; use js::jsval::{self, JSVal}; -use js::typedarray::ArrayBuffer; +use js::typedarray::{ArrayBuffer, CreateWith}; use rustc_serialize::base64::{CharacterSet, Config, Newline, ToBase64}; use script_thread::RunnableWrapper; use servo_atoms::Atom; @@ -269,7 +269,7 @@ impl FileReader { cx: *mut JSContext, _: ReadMetaData, bytes: &[u8]) { unsafe { rooted!(in(cx) let mut array_buffer = ptr::null_mut()); - assert!(ArrayBuffer::create(cx, bytes.len() as u32, Some(bytes), array_buffer.handle_mut()).is_ok()); + assert!(ArrayBuffer::create(cx, CreateWith::Slice(bytes), array_buffer.handle_mut()).is_ok()); *result.borrow_mut() = Some(FileReaderResult::ArrayBuffer(Heap::default())); diff --git a/components/script/dom/imagedata.rs b/components/script/dom/imagedata.rs index 6edf2e309b2..4de2e9ced92 100644 --- a/components/script/dom/imagedata.rs +++ b/components/script/dom/imagedata.rs @@ -11,7 +11,7 @@ use dom::globalscope::GlobalScope; use euclid::size::Size2D; use js::jsapi::{Heap, JSContext, JSObject}; use js::rust::Runtime; -use js::typedarray::Uint8ClampedArray; +use js::typedarray::{Uint8ClampedArray, CreateWith}; use std::default::Default; use std::ptr; use std::vec::Vec; @@ -26,19 +26,26 @@ pub struct ImageData { impl ImageData { #[allow(unsafe_code)] - pub fn new(global: &GlobalScope, width: u32, height: u32, data: Option<Vec<u8>>) -> Root<ImageData> { + pub fn new(global: &GlobalScope, width: u32, height: u32, mut data: Option<Vec<u8>>) -> Root<ImageData> { let imagedata = box ImageData { reflector_: Reflector::new(), width: width, height: height, data: Heap::default(), }; + let len = width * height * 4; unsafe { let cx = global.get_cx(); rooted!(in (cx) let mut js_object = ptr::null_mut()); - let data = data.as_ref().map(|d| &d[..]); - Uint8ClampedArray::create(cx, width * height * 4, data, js_object.handle_mut()).unwrap(); + let data = match data { + Some(ref mut d) => { + d.resize(len as usize, 0); + CreateWith::Slice(&d[..]) + }, + None => CreateWith::Length(len), + }; + Uint8ClampedArray::create(cx, data, js_object.handle_mut()).unwrap(); (*imagedata).data.set(js_object.get()); } diff --git a/components/script/dom/textencoder.rs b/components/script/dom/textencoder.rs index 7cb0443d17a..03e6f4882e6 100644 --- a/components/script/dom/textencoder.rs +++ b/components/script/dom/textencoder.rs @@ -14,7 +14,7 @@ use encoding::EncoderTrap; use encoding::Encoding; use encoding::all::UTF_8; use js::jsapi::{JSContext, JSObject}; -use js::typedarray::Uint8Array; +use js::typedarray::{Uint8Array, CreateWith}; use std::ptr; #[dom_struct] @@ -53,7 +53,7 @@ impl TextEncoderMethods for TextEncoder { let encoded = UTF_8.encode(&input.0, EncoderTrap::Strict).unwrap(); rooted!(in(cx) let mut js_object = ptr::null_mut()); - assert!(Uint8Array::create(cx, encoded.len() as u32, Some(encoded.as_slice()), js_object.handle_mut()).is_ok()); + assert!(Uint8Array::create(cx, CreateWith::Slice(&encoded), js_object.handle_mut()).is_ok()); NonZero::new(js_object.get()) } diff --git a/components/script/dom/vreyeparameters.rs b/components/script/dom/vreyeparameters.rs index d6f654b2cb6..5fb835edb0f 100644 --- a/components/script/dom/vreyeparameters.rs +++ b/components/script/dom/vreyeparameters.rs @@ -11,7 +11,7 @@ use dom::bindings::reflector::{Reflector, reflect_dom_object}; use dom::globalscope::GlobalScope; use dom::vrfieldofview::VRFieldOfView; use js::jsapi::{Heap, JSContext, JSObject}; -use js::typedarray::Float32Array; +use js::typedarray::{Float32Array, CreateWith}; use std::default::Default; use webvr_traits::WebVREyeParameters; @@ -40,8 +40,7 @@ impl VREyeParameters { unsafe { let _ = Float32Array::create(global.get_cx(), - result.parameters.borrow().offset.len() as u32, - Some(&result.parameters.borrow().offset), + CreateWith::Slice(&result.parameters.borrow().offset), result.offset.handle_mut()); } result diff --git a/components/script/dom/vrframedata.rs b/components/script/dom/vrframedata.rs index 304c3a47b87..65c9f5d7df4 100644 --- a/components/script/dom/vrframedata.rs +++ b/components/script/dom/vrframedata.rs @@ -13,7 +13,7 @@ use dom::globalscope::GlobalScope; use dom::vrpose::VRPose; use dom::window::Window; use js::jsapi::{Heap, JSContext, JSObject}; -use js::typedarray::Float32Array; +use js::typedarray::{Float32Array, CreateWith}; use std::cell::Cell; use webvr_traits::WebVRFrameData; @@ -56,13 +56,13 @@ impl VRFrameData { unsafe { let ref framedata = *root; - let _ = Float32Array::create(global.get_cx(), matrix.len() as u32, Some(&matrix), + let _ = Float32Array::create(global.get_cx(), CreateWith::Slice(&matrix), framedata.left_proj.handle_mut()); - let _ = Float32Array::create(global.get_cx(), matrix.len() as u32, Some(&matrix), + let _ = Float32Array::create(global.get_cx(), CreateWith::Slice(&matrix), framedata.left_view.handle_mut()); - let _ = Float32Array::create(global.get_cx(), matrix.len() as u32, Some(&matrix), + let _ = Float32Array::create(global.get_cx(), CreateWith::Slice(&matrix), framedata.right_proj.handle_mut()); - let _ = Float32Array::create(global.get_cx(), matrix.len() as u32, Some(&matrix), + let _ = Float32Array::create(global.get_cx(), CreateWith::Slice(&matrix), framedata.right_view.handle_mut()); } diff --git a/components/script/dom/vrpose.rs b/components/script/dom/vrpose.rs index 11ad1c96887..96fa0597a3a 100644 --- a/components/script/dom/vrpose.rs +++ b/components/script/dom/vrpose.rs @@ -3,37 +3,35 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use core::nonzero::NonZero; -use dom::bindings::cell::DOMRefCell; use dom::bindings::codegen::Bindings::VRPoseBinding; use dom::bindings::codegen::Bindings::VRPoseBinding::VRPoseMethods; use dom::bindings::js::Root; use dom::bindings::reflector::{DomObject, Reflector, reflect_dom_object}; use dom::globalscope::GlobalScope; use js::jsapi::{Heap, JSContext, JSObject}; -use js::typedarray::Float32Array; +use js::typedarray::{Float32Array, CreateWith}; use std::ptr; use webvr_traits::webvr; #[dom_struct] pub struct VRPose { reflector_: Reflector, - position: DOMRefCell<Heap<*mut JSObject>>, - orientation: DOMRefCell<Heap<*mut JSObject>>, - linear_vel: DOMRefCell<Heap<*mut JSObject>>, - angular_vel: DOMRefCell<Heap<*mut JSObject>>, - linear_acc: DOMRefCell<Heap<*mut JSObject>>, - angular_acc: DOMRefCell<Heap<*mut JSObject>> + position: Heap<*mut JSObject>, + orientation: Heap<*mut JSObject>, + linear_vel: Heap<*mut JSObject>, + angular_vel: Heap<*mut JSObject>, + linear_acc: Heap<*mut JSObject>, + angular_acc: Heap<*mut JSObject>, } #[allow(unsafe_code)] unsafe fn update_or_create_typed_array(cx: *mut JSContext, src: Option<&[f32]>, - dst: &DOMRefCell<Heap<*mut JSObject>>) { - let dst = dst.borrow(); + dst: &Heap<*mut JSObject>) { match src { - Some(ref data) => { + Some(data) => { if dst.get().is_null() { - let _ = Float32Array::create(cx, data.len() as u32, src, dst.handle_mut()); + let _ = Float32Array::create(cx, CreateWith::Slice(data), dst.handle_mut()); } else { typedarray!(in(cx) let array: Float32Array = dst.get()); if let Ok(mut array) = array { @@ -51,8 +49,8 @@ unsafe fn update_or_create_typed_array(cx: *mut JSContext, #[inline] #[allow(unsafe_code)] -fn heap_to_option(heap: &DOMRefCell<Heap<*mut JSObject>>) -> Option<NonZero<*mut JSObject>> { - let js_object = heap.borrow_mut().get(); +fn heap_to_option(heap: &Heap<*mut JSObject>) -> Option<NonZero<*mut JSObject>> { + let js_object = heap.get(); if js_object.is_null() { None } else { @@ -66,12 +64,12 @@ impl VRPose { fn new_inherited() -> VRPose { VRPose { reflector_: Reflector::new(), - position: DOMRefCell::new(Heap::default()), - orientation: DOMRefCell::new(Heap::default()), - linear_vel: DOMRefCell::new(Heap::default()), - angular_vel: DOMRefCell::new(Heap::default()), - linear_acc: DOMRefCell::new(Heap::default()), - angular_acc: DOMRefCell::new(Heap::default()) + position: Heap::default(), + orientation: Heap::default(), + linear_vel: Heap::default(), + angular_vel: Heap::default(), + linear_acc: Heap::default(), + angular_acc: Heap::default(), } } diff --git a/components/script/dom/vrstageparameters.rs b/components/script/dom/vrstageparameters.rs index 6dc040ce617..35faa0bde35 100644 --- a/components/script/dom/vrstageparameters.rs +++ b/components/script/dom/vrstageparameters.rs @@ -11,7 +11,7 @@ use dom::bindings::num::Finite; use dom::bindings::reflector::{DomObject, Reflector, reflect_dom_object}; use dom::globalscope::GlobalScope; use js::jsapi::{Heap, JSContext, JSObject}; -use js::typedarray::Float32Array; +use js::typedarray::{Float32Array, CreateWith}; use webvr_traits::WebVRStageParameters; #[dom_struct] @@ -33,10 +33,10 @@ impl VRStageParameters { parameters: DOMRefCell::new(parameters), transform: Heap::default() }; + // XXX unsound! unsafe { let _ = Float32Array::create(global.get_cx(), - stage.parameters.borrow().sitting_to_standing_transform.len() as u32, - Some(&stage.parameters.borrow().sitting_to_standing_transform), + CreateWith::Slice(&stage.parameters.borrow().sitting_to_standing_transform), stage.transform.handle_mut()); } diff --git a/components/script/dom/websocket.rs b/components/script/dom/websocket.rs index 8a25a458530..7c02123f33d 100644 --- a/components/script/dom/websocket.rs +++ b/components/script/dom/websocket.rs @@ -27,7 +27,7 @@ use hyper_serde::Serde; use ipc_channel::ipc::{self, IpcReceiver, IpcSender}; use js::jsapi::JSAutoCompartment; use js::jsval::UndefinedValue; -use js::typedarray::ArrayBuffer; +use js::typedarray::{ArrayBuffer, CreateWith}; use net_traits::{WebSocketCommunicate, WebSocketConnectData, WebSocketDomAction, WebSocketNetworkEvent}; use net_traits::CookieSource::HTTP; use net_traits::CoreResourceMsg::{SetCookiesForUrl, WebsocketConnect}; @@ -609,8 +609,7 @@ impl Runnable for MessageReceivedTask { BinaryType::Arraybuffer => { rooted!(in(cx) let mut array_buffer = ptr::null_mut()); assert!(ArrayBuffer::create(cx, - data.len() as u32, - Some(data.as_slice()), + CreateWith::Slice(&data), array_buffer.handle_mut()) .is_ok()); |