From fc070c8cbd662a0060df0511d1ba588e08d8cb38 Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Mon, 29 Apr 2024 16:45:50 -0400 Subject: [PATCH] LibWeb: Mark readable stream cancel/pull/release steps as infallible These don't throw. We can remove a decent amount of exception handling by marking them infallible. --- Userland/Libraries/LibWeb/FileAPI/Blob.cpp | 4 +- .../LibWeb/Streams/AbstractOperations.cpp | 56 +++++++++---------- .../LibWeb/Streams/AbstractOperations.h | 12 ++-- .../Streams/ReadableByteStreamController.cpp | 14 ++--- .../Streams/ReadableByteStreamController.h | 6 +- .../LibWeb/Streams/ReadableStream.cpp | 6 +- .../ReadableStreamDefaultController.cpp | 9 +-- .../Streams/ReadableStreamDefaultController.h | 6 +- .../Streams/ReadableStreamDefaultReader.cpp | 24 +++----- .../Streams/ReadableStreamDefaultReader.h | 6 +- .../Streams/ReadableStreamGenericReader.cpp | 2 +- 11 files changed, 63 insertions(+), 82 deletions(-) diff --git a/Userland/Libraries/LibWeb/FileAPI/Blob.cpp b/Userland/Libraries/LibWeb/FileAPI/Blob.cpp index 58df38cc175..420a75d0c21 100644 --- a/Userland/Libraries/LibWeb/FileAPI/Blob.cpp +++ b/Userland/Libraries/LibWeb/FileAPI/Blob.cpp @@ -372,7 +372,7 @@ WebIDL::ExceptionOr> Blob::text() auto reader = reader_or_exception.release_value(); // 3. Let promise be the result of reading all bytes from stream with reader - auto promise = TRY(reader->read_all_bytes_deprecated()); + auto promise = reader->read_all_bytes_deprecated(); // 4. Return the result of transforming promise by a fulfillment handler that returns the result of running UTF-8 decode on its first argument. return WebIDL::upon_fulfillment(*promise, JS::create_heap_function(heap(), [&vm](JS::Value first_argument) -> WebIDL::ExceptionOr { @@ -401,7 +401,7 @@ WebIDL::ExceptionOr> Blob::array_buffer() auto reader = reader_or_exception.release_value(); // 3. Let promise be the result of reading all bytes from stream with reader. - auto promise = TRY(reader->read_all_bytes_deprecated()); + auto promise = reader->read_all_bytes_deprecated(); // 4. Return the result of transforming promise by a fulfillment handler that returns a new ArrayBuffer whose contents are its first argument. return WebIDL::upon_fulfillment(*promise, JS::create_heap_function(heap(), [&realm](JS::Value first_argument) -> WebIDL::ExceptionOr { diff --git a/Userland/Libraries/LibWeb/Streams/AbstractOperations.cpp b/Userland/Libraries/LibWeb/Streams/AbstractOperations.cpp index ecfdd40be46..1f3d6c75da2 100644 --- a/Userland/Libraries/LibWeb/Streams/AbstractOperations.cpp +++ b/Userland/Libraries/LibWeb/Streams/AbstractOperations.cpp @@ -86,7 +86,7 @@ bool is_readable_stream_locked(ReadableStream const& stream) } // https://streams.spec.whatwg.org/#readable-stream-cancel -WebIDL::ExceptionOr> readable_stream_cancel(ReadableStream& stream, JS::Value reason) +JS::NonnullGCPtr readable_stream_cancel(ReadableStream& stream, JS::Value reason) { auto& realm = stream.realm(); @@ -121,9 +121,9 @@ WebIDL::ExceptionOr> readable_stream_cancel(Re } // 7. Let sourceCancelPromise be ! stream.[[controller]].[[CancelSteps]](reason). - auto source_cancel_promise = TRY(stream.controller()->visit([&](auto const& controller) { + auto source_cancel_promise = stream.controller()->visit([&](auto const& controller) { return controller->cancel_steps(reason); - })); + }); // 8. Return the result of reacting to sourceCancelPromise with a fulfillment step that returns undefined. auto react_result = WebIDL::react_to_promise(*source_cancel_promise, @@ -242,7 +242,7 @@ bool readable_stream_has_default_reader(ReadableStream const& stream) } // https://streams.spec.whatwg.org/#readable-stream-pipe-to -WebIDL::ExceptionOr> readable_stream_pipe_to(ReadableStream& source, WritableStream& dest, bool, bool, bool, Optional signal) +JS::NonnullGCPtr readable_stream_pipe_to(ReadableStream& source, WritableStream& dest, bool, bool, bool, Optional signal) { auto& realm = source.realm(); @@ -319,7 +319,7 @@ WebIDL::ExceptionOr> readable_stream_pipe_to(R WebIDL::reject_promise(realm, promise, error); }; - TRY(reader->read_all_bytes(move(success_steps), move(failure_steps))); + reader->read_all_bytes(move(success_steps), move(failure_steps)); // 16. Return promise. return promise; @@ -420,7 +420,7 @@ public: readable_stream_default_controller_error(controller2, completion.value().value()); // 3. Resolve cancelPromise with ! ReadableStreamCancel(stream, cloneResult.[[Value]]). - auto cancel_result = MUST(readable_stream_cancel(m_stream, completion.value().value())); + auto cancel_result = readable_stream_cancel(m_stream, completion.value().value()); JS::NonnullGCPtr cancel_value = verify_cast(*cancel_result->promise().ptr()); WebIDL::resolve_promise(m_realm, m_cancel_promise, cancel_value); @@ -548,7 +548,7 @@ WebIDL::ExceptionOr readable_stream_default_tee(JS::Realm& r auto read_request = realm.heap().allocate_without_realm(realm, stream, params, cancel_promise, clone_for_branch2); // 4. Perform ! ReadableStreamDefaultReaderRead(reader, readRequest). - MUST(readable_stream_default_reader_read(reader, read_request)); + readable_stream_default_reader_read(reader, read_request); // 5. Return a promise resolved with undefined. return WebIDL::create_resolved_promise(realm, JS::js_undefined()); @@ -571,7 +571,7 @@ WebIDL::ExceptionOr readable_stream_default_tee(JS::Realm& r auto composite_reason = JS::Array::create_from(realm, AK::Array { params->reason1, params->reason2 }); // 2. Let cancelResult be ! ReadableStreamCancel(stream, compositeReason). - auto cancel_result = MUST(readable_stream_cancel(stream, composite_reason)); + auto cancel_result = readable_stream_cancel(stream, composite_reason); // 3. Resolve cancelPromise with cancelResult. JS::NonnullGCPtr cancel_value = verify_cast(*cancel_result->promise().ptr()); @@ -596,7 +596,7 @@ WebIDL::ExceptionOr readable_stream_default_tee(JS::Realm& r auto composite_reason = JS::Array::create_from(realm, AK::Array { params->reason1, params->reason2 }); // 2. Let cancelResult be ! ReadableStreamCancel(stream, compositeReason). - auto cancel_result = MUST(readable_stream_cancel(stream, composite_reason)); + auto cancel_result = readable_stream_cancel(stream, composite_reason); // 3. Resolve cancelPromise with cancelResult. JS::NonnullGCPtr cancel_value = verify_cast(*cancel_result->promise().ptr()); @@ -733,7 +733,7 @@ public: readable_byte_stream_controller_error(controller2, completion.value().value()); // 3. Resolve cancelPromise with ! ReadableStreamCancel(stream, cloneResult.[[Value]]). - auto cancel_result = MUST(readable_stream_cancel(m_stream, completion.value().value())); + auto cancel_result = readable_stream_cancel(m_stream, completion.value().value()); JS::NonnullGCPtr cancel_value = verify_cast(*cancel_result->promise().ptr()); WebIDL::resolve_promise(m_realm, m_cancel_promise, cancel_value); @@ -898,7 +898,7 @@ public: readable_byte_stream_controller_error(other_controller, completion.value().value()); // 3. Resolve cancelPromise with ! ReadableStreamCancel(stream, cloneResult.[[Value]]). - auto cancel_result = MUST(readable_stream_cancel(m_stream, completion.value().value())); + auto cancel_result = readable_stream_cancel(m_stream, completion.value().value()); JS::NonnullGCPtr cancel_value = verify_cast(*cancel_result->promise().ptr()); WebIDL::resolve_promise(m_realm, m_cancel_promise, cancel_value); @@ -1093,7 +1093,7 @@ WebIDL::ExceptionOr readable_byte_stream_tee(JS::Realm& real auto read_request = realm.heap().allocate_without_realm(realm, stream, params, cancel_promise); // 3. Perform ! ReadableStreamDefaultReaderRead(reader, readRequest). - MUST(readable_stream_default_reader_read(params->reader.get>(), read_request)); + readable_stream_default_reader_read(params->reader.get>(), read_request); }); // 16. Let pullWithBYOBReader be the following steps, given view and forBranch2: @@ -1104,7 +1104,7 @@ WebIDL::ExceptionOr readable_byte_stream_tee(JS::Realm& real VERIFY((*default_reader)->read_requests().is_empty()); // 3. Perform ! ReadableStreamDefaultReaderRelease(reader). - MUST(readable_stream_default_reader_release(*default_reader)); + readable_stream_default_reader_release(*default_reader); // 4. Set reader to ! AcquireReadableStreamBYOBReader(stream). params->reader = MUST(acquire_readable_stream_byob_reader(stream)); @@ -1208,7 +1208,7 @@ WebIDL::ExceptionOr readable_byte_stream_tee(JS::Realm& real auto composite_reason = JS::Array::create_from(realm, AK::Array { params->reason1, params->reason2 }); // 2. Let cancelResult be ! ReadableStreamCancel(stream, compositeReason). - auto cancel_result = MUST(readable_stream_cancel(stream, composite_reason)); + auto cancel_result = readable_stream_cancel(stream, composite_reason); // 3. Resolve cancelPromise with cancelResult. JS::NonnullGCPtr cancel_value = verify_cast(*cancel_result->promise().ptr()); @@ -1233,7 +1233,7 @@ WebIDL::ExceptionOr readable_byte_stream_tee(JS::Realm& real auto composite_reason = JS::Array::create_from(realm, AK::Array { params->reason1, params->reason2 }); // 2. Let cancelResult be ! ReadableStreamCancel(stream, compositeReason). - auto cancel_result = MUST(readable_stream_cancel(stream, composite_reason)); + auto cancel_result = readable_stream_cancel(stream, composite_reason); // 3. Resolve cancelPromise with cancelResult. JS::NonnullGCPtr cancel_value = verify_cast(*cancel_result->promise().ptr()); @@ -1401,7 +1401,7 @@ void readable_stream_add_read_into_request(ReadableStream& stream, JS::NonnullGC } // https://streams.spec.whatwg.org/#readable-stream-reader-generic-cancel -WebIDL::ExceptionOr> readable_stream_reader_generic_cancel(ReadableStreamGenericReaderMixin& reader, JS::Value reason) +JS::NonnullGCPtr readable_stream_reader_generic_cancel(ReadableStreamGenericReaderMixin& reader, JS::Value reason) { // 1. Let stream be reader.[[stream]] auto stream = reader.stream(); @@ -1410,7 +1410,7 @@ WebIDL::ExceptionOr> readable_stream_reader_ge VERIFY(stream); // 3. Return ! ReadableStreamCancel(stream, reason) - return TRY(readable_stream_cancel(*stream, reason)); + return readable_stream_cancel(*stream, reason); } // https://streams.spec.whatwg.org/#readable-stream-reader-generic-initialize @@ -1451,7 +1451,7 @@ void readable_stream_reader_generic_initialize(ReadableStreamReader reader, Read } // https://streams.spec.whatwg.org/#readable-stream-reader-generic-release -WebIDL::ExceptionOr readable_stream_reader_generic_release(ReadableStreamGenericReaderMixin& reader) +void readable_stream_reader_generic_release(ReadableStreamGenericReaderMixin& reader) { // 1. Let stream be reader.[[stream]]. auto stream = reader.stream(); @@ -1478,15 +1478,13 @@ WebIDL::ExceptionOr readable_stream_reader_generic_release(ReadableStreamG WebIDL::mark_promise_as_handled(*reader.closed_promise_capability()); // 7. Perform ! stream.[[controller]].[[ReleaseSteps]](). - TRY(stream->controller()->visit([](auto const& controller) { return controller->release_steps(); })); + stream->controller()->visit([](auto const& controller) { return controller->release_steps(); }); // 8. Set stream.[[reader]] to undefined. stream->set_reader({}); // 9. Set reader.[[stream]] to undefined. reader.set_stream({}); - - return {}; } // https://streams.spec.whatwg.org/#abstract-opdef-readablestreamdefaultreadererrorreadrequests @@ -1626,7 +1624,7 @@ bool readable_byte_stream_controller_fill_pull_into_descriptor_from_queue(Readab } // https://streams.spec.whatwg.org/#readable-stream-default-reader-read -WebIDL::ExceptionOr readable_stream_default_reader_read(ReadableStreamDefaultReader& reader, ReadRequest& read_request) +void readable_stream_default_reader_read(ReadableStreamDefaultReader& reader, ReadRequest& read_request) { // 1. Let stream be reader.[[stream]]. auto stream = reader.stream(); @@ -1651,12 +1649,10 @@ WebIDL::ExceptionOr readable_stream_default_reader_read(ReadableStreamDefa VERIFY(stream->is_readable()); // 2. Perform ! stream.[[controller]].[[PullSteps]](readRequest). - TRY(stream->controller()->visit([&](auto const& controller) { + stream->controller()->visit([&](auto const& controller) { return controller->pull_steps(read_request); - })); + }); } - - return {}; } // https://streams.spec.whatwg.org/#readable-byte-stream-controller-convert-pull-into-descriptor @@ -1841,20 +1837,18 @@ void readable_stream_byob_reader_read(ReadableStreamBYOBReader& reader, WebIDL:: } // https://streams.spec.whatwg.org/#abstract-opdef-readablestreamdefaultreaderrelease -WebIDL::ExceptionOr readable_stream_default_reader_release(ReadableStreamDefaultReader& reader) +void readable_stream_default_reader_release(ReadableStreamDefaultReader& reader) { auto& realm = reader.realm(); // 1. Perform ! ReadableStreamReaderGenericRelease(reader). - TRY(readable_stream_reader_generic_release(reader)); + readable_stream_reader_generic_release(reader); // 2. Let e be a new TypeError exception. auto exception = JS::TypeError::create(realm, "Reader has been released"sv); // 3. Perform ! ReadableStreamDefaultReaderErrorReadRequests(reader, e). readable_stream_default_reader_error_read_requests(reader, exception); - - return {}; } // https://streams.spec.whatwg.org/#abstract-opdef-readablestreambyobreaderrelease @@ -1863,7 +1857,7 @@ void readable_stream_byob_reader_release(ReadableStreamBYOBReader& reader) auto& realm = reader.realm(); // 1. Perform ! ReadableStreamReaderGenericRelease(reader). - MUST(readable_stream_reader_generic_release(reader)); + readable_stream_reader_generic_release(reader); // 2. Let e be a new TypeError exception. auto exception = JS::TypeError::create(realm, "Reader has been released"sv); diff --git a/Userland/Libraries/LibWeb/Streams/AbstractOperations.h b/Userland/Libraries/LibWeb/Streams/AbstractOperations.h index 3c15e510008..44809de6aa1 100644 --- a/Userland/Libraries/LibWeb/Streams/AbstractOperations.h +++ b/Userland/Libraries/LibWeb/Streams/AbstractOperations.h @@ -39,7 +39,7 @@ 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); +JS::NonnullGCPtr 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); size_t readable_stream_get_num_read_into_requests(ReadableStream const&); @@ -47,15 +47,15 @@ size_t readable_stream_get_num_read_requests(ReadableStream const&); bool readable_stream_has_byob_reader(ReadableStream const&); bool readable_stream_has_default_reader(ReadableStream const&); -WebIDL::ExceptionOr> readable_stream_pipe_to(ReadableStream& source, WritableStream& dest, bool prevent_close, bool prevent_abort, bool prevent_cancel, Optional signal); +JS::NonnullGCPtr readable_stream_pipe_to(ReadableStream& source, WritableStream& dest, bool prevent_close, bool prevent_abort, bool prevent_cancel, Optional signal); WebIDL::ExceptionOr readable_stream_tee(JS::Realm&, ReadableStream&, bool clone_for_branch2); WebIDL::ExceptionOr readable_stream_default_tee(JS::Realm& realm, ReadableStream& stream, bool clone_for_branch2); WebIDL::ExceptionOr readable_byte_stream_tee(JS::Realm& realm, ReadableStream& stream); -WebIDL::ExceptionOr> readable_stream_reader_generic_cancel(ReadableStreamGenericReaderMixin&, JS::Value reason); +JS::NonnullGCPtr readable_stream_reader_generic_cancel(ReadableStreamGenericReaderMixin&, JS::Value reason); void readable_stream_reader_generic_initialize(ReadableStreamReader, ReadableStream&); -WebIDL::ExceptionOr readable_stream_reader_generic_release(ReadableStreamGenericReaderMixin&); +void readable_stream_reader_generic_release(ReadableStreamGenericReaderMixin&); void readable_stream_default_reader_error_read_requests(ReadableStreamDefaultReader&, JS::Value error); void readable_stream_byob_reader_error_read_into_requests(ReadableStreamBYOBReader&, JS::Value error); @@ -64,8 +64,8 @@ void readable_byte_stream_controller_pull_into(ReadableByteStreamController&, We void readable_stream_byob_reader_read(ReadableStreamBYOBReader&, WebIDL::ArrayBufferView&, ReadIntoRequest&); void readable_byte_stream_controller_fill_head_pull_into_descriptor(ReadableByteStreamController const&, u64 size, PullIntoDescriptor&); -WebIDL::ExceptionOr readable_stream_default_reader_read(ReadableStreamDefaultReader&, ReadRequest&); -WebIDL::ExceptionOr readable_stream_default_reader_release(ReadableStreamDefaultReader&); +void readable_stream_default_reader_read(ReadableStreamDefaultReader&, ReadRequest&); +void 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&); diff --git a/Userland/Libraries/LibWeb/Streams/ReadableByteStreamController.cpp b/Userland/Libraries/LibWeb/Streams/ReadableByteStreamController.cpp index 430b0d6db08..ea98ee8e3d9 100644 --- a/Userland/Libraries/LibWeb/Streams/ReadableByteStreamController.cpp +++ b/Userland/Libraries/LibWeb/Streams/ReadableByteStreamController.cpp @@ -91,7 +91,7 @@ WebIDL::ExceptionOr ReadableByteStreamController::enqueue(JS::Handle> ReadableByteStreamController::cancel_steps(JS::Value reason) +JS::NonnullGCPtr ReadableByteStreamController::cancel_steps(JS::Value reason) { // 1. Perform ! ReadableByteStreamControllerClearPendingPullIntos(this). readable_byte_stream_controller_clear_pending_pull_intos(*this); @@ -110,7 +110,7 @@ WebIDL::ExceptionOr> ReadableByteStreamControl } // https://streams.spec.whatwg.org/#rbs-controller-private-pull -WebIDL::ExceptionOr ReadableByteStreamController::pull_steps(JS::NonnullGCPtr read_request) +void ReadableByteStreamController::pull_steps(JS::NonnullGCPtr read_request) { auto& realm = this->realm(); @@ -128,7 +128,7 @@ WebIDL::ExceptionOr ReadableByteStreamController::pull_steps(JS::NonnullGC readable_byte_stream_controller_fill_read_request_from_queue(*this, read_request); // 3. Return. - return {}; + return; } // 4. Let autoAllocateChunkSize be this.[[autoAllocateChunkSize]]. @@ -144,7 +144,7 @@ WebIDL::ExceptionOr ReadableByteStreamController::pull_steps(JS::NonnullGC read_request->on_error(*buffer.throw_completion().value()); // 2. Return. - return {}; + return; } // 3. Let pullIntoDescriptor be a new pull-into descriptor with buffer buffer.[[Value]], buffer byte length autoAllocateChunkSize, byte offset 0, @@ -169,12 +169,10 @@ WebIDL::ExceptionOr ReadableByteStreamController::pull_steps(JS::NonnullGC // 7. Perform ! ReadableByteStreamControllerCallPullIfNeeded(this). readable_byte_stream_controller_call_pull_if_needed(*this); - - return {}; } // https://streams.spec.whatwg.org/#rbs-controller-private-pull -WebIDL::ExceptionOr ReadableByteStreamController::release_steps() +void ReadableByteStreamController::release_steps() { // 1. If this.[[pendingPullIntos]] is not empty, if (!m_pending_pull_intos.is_empty()) { @@ -188,8 +186,6 @@ WebIDL::ExceptionOr ReadableByteStreamController::release_steps() m_pending_pull_intos.clear(); m_pending_pull_intos.append(first_pending_pull_into); } - - return {}; } void ReadableByteStreamController::visit_edges(Cell::Visitor& visitor) diff --git a/Userland/Libraries/LibWeb/Streams/ReadableByteStreamController.h b/Userland/Libraries/LibWeb/Streams/ReadableByteStreamController.h index c96a0c3532f..52884bf115b 100644 --- a/Userland/Libraries/LibWeb/Streams/ReadableByteStreamController.h +++ b/Userland/Libraries/LibWeb/Streams/ReadableByteStreamController.h @@ -127,9 +127,9 @@ public: JS::GCPtr stream() { return m_stream; } void set_stream(JS::GCPtr stream) { m_stream = stream; } - WebIDL::ExceptionOr> cancel_steps(JS::Value reason); - WebIDL::ExceptionOr pull_steps(JS::NonnullGCPtr); - WebIDL::ExceptionOr release_steps(); + JS::NonnullGCPtr cancel_steps(JS::Value reason); + void pull_steps(JS::NonnullGCPtr); + void release_steps(); private: explicit ReadableByteStreamController(JS::Realm&); diff --git a/Userland/Libraries/LibWeb/Streams/ReadableStream.cpp b/Userland/Libraries/LibWeb/Streams/ReadableStream.cpp index 2650418ce00..21bbfdeddd8 100644 --- a/Userland/Libraries/LibWeb/Streams/ReadableStream.cpp +++ b/Userland/Libraries/LibWeb/Streams/ReadableStream.cpp @@ -94,7 +94,7 @@ WebIDL::ExceptionOr> ReadableStream::cancel(JS::Value reas } // 2. Return ! ReadableStreamCancel(this, reason). - return TRY(readable_stream_cancel(*this, reason))->promise(); + return readable_stream_cancel(*this, reason)->promise(); } // https://streams.spec.whatwg.org/#rs-get-reader @@ -125,7 +125,7 @@ WebIDL::ExceptionOr> ReadableStream::pipe_throu auto signal = options.signal ? JS::Value(options.signal) : JS::js_undefined(); // 4. Let promise be ! ReadableStreamPipeTo(this, transform["writable"], options["preventClose"], options["preventAbort"], options["preventCancel"], signal). - auto promise = MUST(readable_stream_pipe_to(*this, *transform.writable, options.prevent_close, options.prevent_abort, options.prevent_cancel, signal)); + auto promise = readable_stream_pipe_to(*this, *transform.writable, options.prevent_close, options.prevent_abort, options.prevent_cancel, signal); // 5. Set promise.[[PromiseIsHandled]] to true. WebIDL::mark_promise_as_handled(*promise); @@ -156,7 +156,7 @@ WebIDL::ExceptionOr> ReadableStream::pipe_to(Writab auto signal = options.signal ? JS::Value(options.signal) : JS::js_undefined(); // 4. Return ! ReadableStreamPipeTo(this, destination, options["preventClose"], options["preventAbort"], options["preventCancel"], signal). - return MUST(readable_stream_pipe_to(*this, destination, options.prevent_close, options.prevent_abort, options.prevent_cancel, signal))->promise(); + return readable_stream_pipe_to(*this, destination, options.prevent_close, options.prevent_abort, options.prevent_cancel, signal)->promise(); } // https://streams.spec.whatwg.org/#readablestream-tee diff --git a/Userland/Libraries/LibWeb/Streams/ReadableStreamDefaultController.cpp b/Userland/Libraries/LibWeb/Streams/ReadableStreamDefaultController.cpp index cf00374e070..d436d049dd2 100644 --- a/Userland/Libraries/LibWeb/Streams/ReadableStreamDefaultController.cpp +++ b/Userland/Libraries/LibWeb/Streams/ReadableStreamDefaultController.cpp @@ -65,7 +65,7 @@ void ReadableStreamDefaultController::error(JS::Value error) } // https://streams.spec.whatwg.org/#rs-default-controller-private-cancel -WebIDL::ExceptionOr> ReadableStreamDefaultController::cancel_steps(JS::Value reason) +JS::NonnullGCPtr ReadableStreamDefaultController::cancel_steps(JS::Value reason) { // 1. Perform ! ResetQueue(this). reset_queue(*this); @@ -81,7 +81,7 @@ WebIDL::ExceptionOr> ReadableStreamDefaultCont } // https://streams.spec.whatwg.org/#rs-default-controller-private-pull -WebIDL::ExceptionOr ReadableStreamDefaultController::pull_steps(Web::Streams::ReadRequest& read_request) +void ReadableStreamDefaultController::pull_steps(Web::Streams::ReadRequest& read_request) { // 1. Let stream be this.[[stream]]. auto& stream = *m_stream; @@ -115,15 +115,12 @@ WebIDL::ExceptionOr ReadableStreamDefaultController::pull_steps(Web::Strea // 2. Perform ! ReadableStreamDefaultControllerCallPullIfNeeded(this). readable_stream_default_controller_can_pull_if_needed(*this); } - - return {}; } // https://streams.spec.whatwg.org/#abstract-opdef-readablestreamdefaultcontroller-releasesteps -WebIDL::ExceptionOr ReadableStreamDefaultController::release_steps() +void ReadableStreamDefaultController::release_steps() { // 1. Return. - return {}; } void ReadableStreamDefaultController::initialize(JS::Realm& realm) diff --git a/Userland/Libraries/LibWeb/Streams/ReadableStreamDefaultController.h b/Userland/Libraries/LibWeb/Streams/ReadableStreamDefaultController.h index 27bd00adac4..0140fd2a09d 100644 --- a/Userland/Libraries/LibWeb/Streams/ReadableStreamDefaultController.h +++ b/Userland/Libraries/LibWeb/Streams/ReadableStreamDefaultController.h @@ -64,9 +64,9 @@ public: JS::GCPtr stream() { return m_stream; } void set_stream(JS::GCPtr value) { m_stream = value; } - WebIDL::ExceptionOr> cancel_steps(JS::Value reason); - WebIDL::ExceptionOr pull_steps(ReadRequest&); - WebIDL::ExceptionOr release_steps(); + JS::NonnullGCPtr cancel_steps(JS::Value reason); + void pull_steps(ReadRequest&); + void release_steps(); private: virtual void initialize(JS::Realm&) override; diff --git a/Userland/Libraries/LibWeb/Streams/ReadableStreamDefaultReader.cpp b/Userland/Libraries/LibWeb/Streams/ReadableStreamDefaultReader.cpp index 603253b907a..328b0a41ddc 100644 --- a/Userland/Libraries/LibWeb/Streams/ReadableStreamDefaultReader.cpp +++ b/Userland/Libraries/LibWeb/Streams/ReadableStreamDefaultReader.cpp @@ -94,11 +94,7 @@ void ReadLoopReadRequest::on_chunk(JS::Value chunk) // up more than one chunk at a time, we may run into stack overflow problems. // // 3. Read-loop given reader, bytes, successSteps, and failureSteps. - auto maybe_error = readable_stream_default_reader_read(m_reader, *this); - if (maybe_error.is_exception()) { - auto throw_completion = Bindings::dom_exception_to_throw_completion(m_vm, maybe_error.exception()); - m_failure_steps(*throw_completion.release_error().value()); - } + readable_stream_default_reader_read(m_reader, *this); } // close steps @@ -179,14 +175,14 @@ WebIDL::ExceptionOr> ReadableStreamDefaultReader:: auto read_request = heap().allocate_without_realm(realm, promise_capability); // 4. Perform ! ReadableStreamDefaultReaderRead(this, readRequest). - TRY(readable_stream_default_reader_read(*this, read_request)); + readable_stream_default_reader_read(*this, read_request); // 5. Return promise. 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) +void ReadableStreamDefaultReader::read_all_bytes(ReadLoopReadRequest::SuccessSteps success_steps, ReadLoopReadRequest::FailureSteps failure_steps) { auto& realm = this->realm(); auto& vm = realm.vm(); @@ -196,15 +192,13 @@ WebIDL::ExceptionOr ReadableStreamDefaultReader::read_all_bytes(ReadLoopRe auto read_request = heap().allocate_without_realm(vm, realm, *this, move(success_steps), move(failure_steps)); // 2. Perform ! ReadableStreamDefaultReaderRead(this, readRequest). - TRY(readable_stream_default_reader_read(*this, read_request)); - - return {}; + readable_stream_default_reader_read(*this, read_request); } // 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() +JS::NonnullGCPtr ReadableStreamDefaultReader::read_all_bytes_deprecated() { auto& realm = this->realm(); @@ -223,20 +217,20 @@ WebIDL::ExceptionOr> ReadableStreamDefaultRead WebIDL::reject_promise(realm, promise, error); }; - TRY(read_all_bytes(move(success_steps), move(failure_steps))); + 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() +void ReadableStreamDefaultReader::release_lock() { // 1. If this.[[stream]] is undefined, return. if (!m_stream) - return {}; + return; // 2. Perform ! ReadableStreamDefaultReaderRelease(this). - return readable_stream_default_reader_release(*this); + readable_stream_default_reader_release(*this); } } diff --git a/Userland/Libraries/LibWeb/Streams/ReadableStreamDefaultReader.h b/Userland/Libraries/LibWeb/Streams/ReadableStreamDefaultReader.h index 76ec0460c75..ed68be25cd4 100644 --- a/Userland/Libraries/LibWeb/Streams/ReadableStreamDefaultReader.h +++ b/Userland/Libraries/LibWeb/Streams/ReadableStreamDefaultReader.h @@ -75,10 +75,10 @@ public: WebIDL::ExceptionOr> read(); - WebIDL::ExceptionOr read_all_bytes(ReadLoopReadRequest::SuccessSteps, ReadLoopReadRequest::FailureSteps); - WebIDL::ExceptionOr> read_all_bytes_deprecated(); + void read_all_bytes(ReadLoopReadRequest::SuccessSteps, ReadLoopReadRequest::FailureSteps); + JS::NonnullGCPtr read_all_bytes_deprecated(); - WebIDL::ExceptionOr release_lock(); + void release_lock(); SinglyLinkedList>& read_requests() { return m_read_requests; } diff --git a/Userland/Libraries/LibWeb/Streams/ReadableStreamGenericReader.cpp b/Userland/Libraries/LibWeb/Streams/ReadableStreamGenericReader.cpp index 6f1e5b49f22..6de2c11dd99 100644 --- a/Userland/Libraries/LibWeb/Streams/ReadableStreamGenericReader.cpp +++ b/Userland/Libraries/LibWeb/Streams/ReadableStreamGenericReader.cpp @@ -31,7 +31,7 @@ WebIDL::ExceptionOr> ReadableStreamGenericReaderMi } // 2. Return ! ReadableStreamReaderGenericCancel(this, reason). - auto promise_capability = TRY(readable_stream_reader_generic_cancel(*this, reason)); + auto promise_capability = readable_stream_reader_generic_cancel(*this, reason); return JS::NonnullGCPtr { verify_cast(*promise_capability->promise().ptr()) }; }