aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom')
-rw-r--r--components/script/dom/filereader.rs4
-rw-r--r--components/script/dom/imagedata.rs15
-rw-r--r--components/script/dom/textencoder.rs4
-rw-r--r--components/script/dom/vreyeparameters.rs5
-rw-r--r--components/script/dom/vrframedata.rs10
-rw-r--r--components/script/dom/vrpose.rs38
-rw-r--r--components/script/dom/vrstageparameters.rs6
-rw-r--r--components/script/dom/websocket.rs5
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());