From 3df10d7fb68cf805d9a2c1aa625853404e0a4889 Mon Sep 17 00:00:00 2001 From: Shannon Booth Date: Sat, 17 Jun 2023 15:26:20 +1200 Subject: [PATCH] LibWeb: Add Streams::ReadableStreamDefaultReader::read_all_bytes --- .../Streams/ReadableStreamDefaultReader.cpp | 16 ++++++++++++++++ .../LibWeb/Streams/ReadableStreamDefaultReader.h | 2 ++ 2 files changed, 18 insertions(+) diff --git a/Userland/Libraries/LibWeb/Streams/ReadableStreamDefaultReader.cpp b/Userland/Libraries/LibWeb/Streams/ReadableStreamDefaultReader.cpp index fc47b2cb30..f6592bdbf7 100644 --- a/Userland/Libraries/LibWeb/Streams/ReadableStreamDefaultReader.cpp +++ b/Userland/Libraries/LibWeb/Streams/ReadableStreamDefaultReader.cpp @@ -169,6 +169,22 @@ WebIDL::ExceptionOr> ReadableStreamDefaultReader:: return JS::NonnullGCPtr { verify_cast(*promise_capability->promise()) }; } +// https://streams.spec.whatwg.org/#readablestreamdefaultreader-read-all-bytes +WebIDL::ExceptionOr ReadableStreamDefaultReader::read_all_bytes(ReadLoopReadRequest::SuccessSteps success_steps, ReadLoopReadRequest::FailureSteps failure_steps) +{ + auto& realm = this->realm(); + auto& vm = realm.vm(); + + // 1. Let readRequest be a new read request with the following items: + // NOTE: items and steps in ReadLoopReadRequest. + auto read_request = adopt_ref(*new ReadLoopReadRequest(vm, realm, *this, move(success_steps), move(failure_steps))); + + // 2. Perform ! ReadableStreamDefaultReaderRead(this, readRequest). + TRY(readable_stream_default_reader_read(*this, read_request)); + + return {}; +} + // https://streams.spec.whatwg.org/#default-reader-release-lock WebIDL::ExceptionOr ReadableStreamDefaultReader::release_lock() { diff --git a/Userland/Libraries/LibWeb/Streams/ReadableStreamDefaultReader.h b/Userland/Libraries/LibWeb/Streams/ReadableStreamDefaultReader.h index 3edb5ede61..c5a32b7baf 100644 --- a/Userland/Libraries/LibWeb/Streams/ReadableStreamDefaultReader.h +++ b/Userland/Libraries/LibWeb/Streams/ReadableStreamDefaultReader.h @@ -66,6 +66,8 @@ public: virtual ~ReadableStreamDefaultReader() override = default; WebIDL::ExceptionOr> read(); + + WebIDL::ExceptionOr read_all_bytes(ReadLoopReadRequest::SuccessSteps, ReadLoopReadRequest::FailureSteps); WebIDL::ExceptionOr release_lock(); SinglyLinkedList>& read_requests() { return m_read_requests; }