diff --git a/Userland/Libraries/LibWeb/Streams/ReadableStreamDefaultReader.cpp b/Userland/Libraries/LibWeb/Streams/ReadableStreamDefaultReader.cpp index f6592bdbf7..50916babee 100644 --- a/Userland/Libraries/LibWeb/Streams/ReadableStreamDefaultReader.cpp +++ b/Userland/Libraries/LibWeb/Streams/ReadableStreamDefaultReader.cpp @@ -185,6 +185,29 @@ WebIDL::ExceptionOr ReadableStreamDefaultReader::read_all_bytes(ReadLoopRe return {}; } +// FIXME: This function is a promise-based wrapper around "read all bytes". The spec changed this function to not use promises +// in https://github.com/whatwg/streams/commit/f894acdd417926a2121710803cef593e15127964 - however, it seems that the +// FileAPI blob specification has not been updated to match, see: https://github.com/w3c/FileAPI/issues/187. +WebIDL::ExceptionOr> ReadableStreamDefaultReader::read_all_bytes_deprecated() +{ + auto& realm = this->realm(); + + auto promise = WebIDL::create_promise(realm); + + auto success_steps = [promise, &realm](ByteBuffer bytes) { + auto buffer = JS::ArrayBuffer::create(realm, move(bytes)); + WebIDL::resolve_promise(realm, promise, buffer); + }; + + auto failure_steps = [promise, &realm](JS::Value error) { + WebIDL::reject_promise(realm, promise, error); + }; + + TRY(read_all_bytes(move(success_steps), move(failure_steps))); + + return promise; +} + // 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 c5a32b7baf..1a2efa8824 100644 --- a/Userland/Libraries/LibWeb/Streams/ReadableStreamDefaultReader.h +++ b/Userland/Libraries/LibWeb/Streams/ReadableStreamDefaultReader.h @@ -68,6 +68,8 @@ public: WebIDL::ExceptionOr> read(); WebIDL::ExceptionOr read_all_bytes(ReadLoopReadRequest::SuccessSteps, ReadLoopReadRequest::FailureSteps); + WebIDL::ExceptionOr> read_all_bytes_deprecated(); + WebIDL::ExceptionOr release_lock(); SinglyLinkedList>& read_requests() { return m_read_requests; }