ソースを参照

LibWeb: Implement ReadableStreamBYOBReaderRelease Streams AO

Shannon Booth 1 年間 前
コミット
b06d80e6fd

+ 15 - 0
Userland/Libraries/LibWeb/Streams/AbstractOperations.cpp

@@ -505,6 +505,21 @@ WebIDL::ExceptionOr<void> 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<void> set_up_readable_stream_default_reader(ReadableStreamDefaultReader& reader, ReadableStream& stream)
 {

+ 1 - 0
Userland/Libraries/LibWeb/Streams/AbstractOperations.h

@@ -54,6 +54,7 @@ void readable_stream_byob_reader_error_read_into_requests(ReadableStreamBYOBRead
 
 WebIDL::ExceptionOr<void> readable_stream_default_reader_read(ReadableStreamDefaultReader&, ReadRequest&);
 WebIDL::ExceptionOr<void> readable_stream_default_reader_release(ReadableStreamDefaultReader&);
+void readable_stream_byob_reader_release(ReadableStreamBYOBReader&);
 WebIDL::ExceptionOr<void> set_up_readable_stream_default_reader(ReadableStreamDefaultReader&, ReadableStream&);
 WebIDL::ExceptionOr<void> set_up_readable_stream_byob_reader(ReadableStreamBYOBReader&, ReadableStream&);
 void readable_stream_default_controller_close(ReadableStreamDefaultController&);