aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/bindings/buffer_source.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom/bindings/buffer_source.rs')
-rw-r--r--components/script/dom/bindings/buffer_source.rs49
1 files changed, 19 insertions, 30 deletions
diff --git a/components/script/dom/bindings/buffer_source.rs b/components/script/dom/bindings/buffer_source.rs
index dd6984e1eab..14a71532e9d 100644
--- a/components/script/dom/bindings/buffer_source.rs
+++ b/components/script/dom/bindings/buffer_source.rs
@@ -37,7 +37,7 @@ use js::rust::{
#[cfg(feature = "webgpu")]
use js::typedarray::{ArrayBuffer, HeapArrayBuffer};
use js::typedarray::{
- ArrayBufferU8, ArrayBufferView, ArrayBufferViewU8, CreateWith, TypedArray, TypedArrayElement,
+ ArrayBufferU8, ArrayBufferViewU8, CreateWith, TypedArray, TypedArrayElement,
TypedArrayElementCreator,
};
@@ -63,36 +63,25 @@ pub(crate) enum BufferSource {
ArrayBuffer(Box<Heap<*mut JSObject>>),
}
-pub(crate) fn new_initialized_heap_buffer_source<T>(
- init: HeapTypedArrayInit,
+pub(crate) fn create_heap_buffer_source_with_length<T>(
+ cx: JSContext,
+ len: u32,
can_gc: CanGc,
-) -> Result<HeapBufferSource<T>, ()>
+) -> Fallible<HeapBufferSource<T>>
where
T: TypedArrayElement + TypedArrayElementCreator,
T::Element: Clone + Copy,
{
- let heap_buffer_source = match init {
- HeapTypedArrayInit::Buffer(buffer_source) => HeapBufferSource {
- buffer_source,
- phantom: PhantomData,
- },
- HeapTypedArrayInit::Info { len, cx } => {
- rooted!(in (*cx) let mut array = ptr::null_mut::<JSObject>());
- let typed_array_result =
- create_buffer_source_with_length::<T>(cx, len as usize, array.handle_mut(), can_gc);
- if typed_array_result.is_err() {
- return Err(());
- }
-
- HeapBufferSource::<T>::new(BufferSource::ArrayBufferView(Heap::boxed(*array.handle())))
- },
- };
- Ok(heap_buffer_source)
-}
+ rooted!(in (*cx) let mut array = ptr::null_mut::<JSObject>());
+ let typed_array_result =
+ create_buffer_source_with_length::<T>(cx, len as usize, array.handle_mut(), can_gc);
+ if typed_array_result.is_err() {
+ return Err(Error::JSFailed);
+ }
-pub(crate) enum HeapTypedArrayInit {
- Buffer(BufferSource),
- Info { len: u32, cx: JSContext },
+ Ok(HeapBufferSource::<T>::new(BufferSource::ArrayBufferView(
+ Heap::boxed(*array.handle()),
+ )))
}
pub(crate) struct HeapBufferSource<T> {
@@ -131,11 +120,11 @@ where
}
pub(crate) fn from_view(
- chunk: CustomAutoRooterGuard<ArrayBufferView>,
- ) -> HeapBufferSource<ArrayBufferViewU8> {
- HeapBufferSource::<ArrayBufferViewU8>::new(BufferSource::ArrayBufferView(Heap::boxed(
- unsafe { *chunk.underlying_object() },
- )))
+ chunk: CustomAutoRooterGuard<TypedArray<T, *mut JSObject>>,
+ ) -> HeapBufferSource<T> {
+ HeapBufferSource::<T>::new(BufferSource::ArrayBufferView(Heap::boxed(unsafe {
+ *chunk.underlying_object()
+ })))
}
pub(crate) fn default() -> Self {