From b06d80e6fd7ed939714a27a94b4e5071340e5823 Mon Sep 17 00:00:00 2001 From: Shannon Booth Date: Sun, 27 Aug 2023 13:29:01 +1200 Subject: [PATCH] LibWeb: Implement ReadableStreamBYOBReaderRelease Streams AO --- .../LibWeb/Streams/AbstractOperations.cpp | 15 +++++++++++++++ .../Libraries/LibWeb/Streams/AbstractOperations.h | 1 + 2 files changed, 16 insertions(+) diff --git a/Userland/Libraries/LibWeb/Streams/AbstractOperations.cpp b/Userland/Libraries/LibWeb/Streams/AbstractOperations.cpp index 31aa3eaefb..1e9b8fe437 100644 --- a/Userland/Libraries/LibWeb/Streams/AbstractOperations.cpp +++ b/Userland/Libraries/LibWeb/Streams/AbstractOperations.cpp @@ -505,6 +505,21 @@ WebIDL::ExceptionOr readable_stream_default_reader_release(ReadableStreamD return {}; } +// https://streams.spec.whatwg.org/#abstract-opdef-readablestreambyobreaderrelease +void readable_stream_byob_reader_release(ReadableStreamBYOBReader& reader) +{ + auto& realm = reader.realm(); + + // 1. Perform ! ReadableStreamReaderGenericRelease(reader). + MUST(readable_stream_reader_generic_release(reader)); + + // 2. Let e be a new TypeError exception. + auto exception = MUST(JS::TypeError::create(realm, "Reader has been released"sv)); + + // 3. Perform ! ReadableStreamBYOBReaderErrorReadIntoRequests(reader, e). + readable_stream_byob_reader_error_read_into_requests(reader, exception); +} + // https://streams.spec.whatwg.org/#set-up-readable-stream-default-reader WebIDL::ExceptionOr set_up_readable_stream_default_reader(ReadableStreamDefaultReader& reader, ReadableStream& stream) { diff --git a/Userland/Libraries/LibWeb/Streams/AbstractOperations.h b/Userland/Libraries/LibWeb/Streams/AbstractOperations.h index 9404ba445c..bc58aa39dd 100644 --- a/Userland/Libraries/LibWeb/Streams/AbstractOperations.h +++ b/Userland/Libraries/LibWeb/Streams/AbstractOperations.h @@ -54,6 +54,7 @@ void readable_stream_byob_reader_error_read_into_requests(ReadableStreamBYOBRead WebIDL::ExceptionOr readable_stream_default_reader_read(ReadableStreamDefaultReader&, ReadRequest&); WebIDL::ExceptionOr readable_stream_default_reader_release(ReadableStreamDefaultReader&); +void readable_stream_byob_reader_release(ReadableStreamBYOBReader&); WebIDL::ExceptionOr set_up_readable_stream_default_reader(ReadableStreamDefaultReader&, ReadableStream&); WebIDL::ExceptionOr set_up_readable_stream_byob_reader(ReadableStreamBYOBReader&, ReadableStream&); void readable_stream_default_controller_close(ReadableStreamDefaultController&);