diff --git a/Userland/Libraries/LibWeb/Streams/AbstractOperations.cpp b/Userland/Libraries/LibWeb/Streams/AbstractOperations.cpp index 9715ad712e..46c81c06c6 100644 --- a/Userland/Libraries/LibWeb/Streams/AbstractOperations.cpp +++ b/Userland/Libraries/LibWeb/Streams/AbstractOperations.cpp @@ -3736,6 +3736,24 @@ bool is_non_negative_number(JS::Value value) return true; } +// https://streams.spec.whatwg.org/#can-transfer-array-buffer +bool can_transfer_array_buffer(JS::ArrayBuffer const& array_buffer) +{ + // 1. Assert: Type(O) is Object. + // 2. Assert: O has an [[ArrayBufferData]] internal slot. + + // 3. If ! IsDetachedBuffer(O) is true, return false. + if (array_buffer.is_detached()) + return false; + + // 4. If SameValue(O.[[ArrayBufferDetachKey]], undefined) is false, return false. + if (!JS::same_value(array_buffer.detach_key(), JS::js_undefined())) + return false; + + // 5. Return true. + return true; +} + // https://streams.spec.whatwg.org/#close-sentinel // Non-standard function that implements the "close sentinel" value. JS::Value create_close_sentinel() diff --git a/Userland/Libraries/LibWeb/Streams/AbstractOperations.h b/Userland/Libraries/LibWeb/Streams/AbstractOperations.h index d36df644a9..d7366d8345 100644 --- a/Userland/Libraries/LibWeb/Streams/AbstractOperations.h +++ b/Userland/Libraries/LibWeb/Streams/AbstractOperations.h @@ -168,6 +168,7 @@ WebIDL::ExceptionOr transform_stream_error_writable_and_unblock_write(Tran WebIDL::ExceptionOr transform_stream_set_backpressure(TransformStream&, bool backpressure); bool is_non_negative_number(JS::Value); +bool can_transfer_array_buffer(JS::ArrayBuffer const& array_buffer); JS::Value create_close_sentinel(); bool is_close_sentinel(JS::Value);