From 446a78f30e4d20b8f2142e9a87db16a4a4cc8484 Mon Sep 17 00:00:00 2001 From: Shannon Booth Date: Sun, 19 Nov 2023 11:47:11 +1300 Subject: [PATCH] LibWeb: Implement Streams AO ReadableStreamAddReadIntoRequest This is effectively identical to ReadableStreamAddReadRequest besides from the fact that it takes a ReadIntoRequest instead of a ReadRequest, and is instead intended to be used for BYOB readers. --- .../Libraries/LibWeb/Streams/AbstractOperations.cpp | 13 +++++++++++++ .../Libraries/LibWeb/Streams/AbstractOperations.h | 1 + 2 files changed, 14 insertions(+) diff --git a/Userland/Libraries/LibWeb/Streams/AbstractOperations.cpp b/Userland/Libraries/LibWeb/Streams/AbstractOperations.cpp index 470d25d165..c270f56b08 100644 --- a/Userland/Libraries/LibWeb/Streams/AbstractOperations.cpp +++ b/Userland/Libraries/LibWeb/Streams/AbstractOperations.cpp @@ -358,6 +358,19 @@ void readable_stream_add_read_request(ReadableStream& stream, JS::NonnullGCPtrget>()->read_requests().append(read_request); } +// https://streams.spec.whatwg.org/#readable-stream-add-read-into-request +void readable_stream_add_read_into_request(ReadableStream& stream, JS::NonnullGCPtr read_into_request) +{ + // 1. Assert: stream.[[reader]] implements ReadableStreamBYOBReader. + VERIFY(stream.reader().has_value() && stream.reader()->has>()); + + // 2. Assert: stream.[[state]] is "readable" or "closed". + VERIFY(stream.is_readable() || stream.is_closed()); + + // 3. Append readRequest to stream.[[reader]].[[readIntoRequests]]. + stream.reader()->get>()->read_into_requests().append(read_into_request); +} + // https://streams.spec.whatwg.org/#readable-stream-reader-generic-cancel WebIDL::ExceptionOr> readable_stream_reader_generic_cancel(ReadableStreamGenericReaderMixin& reader, JS::Value reason) { diff --git a/Userland/Libraries/LibWeb/Streams/AbstractOperations.h b/Userland/Libraries/LibWeb/Streams/AbstractOperations.h index 3485003be8..e61e35e0d9 100644 --- a/Userland/Libraries/LibWeb/Streams/AbstractOperations.h +++ b/Userland/Libraries/LibWeb/Streams/AbstractOperations.h @@ -38,6 +38,7 @@ WebIDL::ExceptionOr extract_high_water_mark(QueuingStrategy const&, doub void readable_stream_close(ReadableStream&); void readable_stream_error(ReadableStream&, JS::Value error); void readable_stream_add_read_request(ReadableStream&, JS::NonnullGCPtr); +void readable_stream_add_read_into_request(ReadableStream&, JS::NonnullGCPtr); WebIDL::ExceptionOr> readable_stream_cancel(ReadableStream&, JS::Value reason); void readable_stream_fulfill_read_into_request(ReadableStream&, JS::Value chunk, bool done); void readable_stream_fulfill_read_request(ReadableStream&, JS::Value chunk, bool done);