mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-06-09 09:34:57 +09:00
LibWeb: Implement an AO to close writable streams with error propagation
This commit is contained in:
parent
f7c095a318
commit
1d6e1637cc
Notes:
github-actions[bot]
2025-04-11 16:12:34 +00:00
Author: https://github.com/trflynn89
Commit: 1d6e1637cc
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/4311
Reviewed-by: https://github.com/ADKaster
Reviewed-by: https://github.com/shannonbooth ✅
2 changed files with 30 additions and 0 deletions
|
@ -4092,6 +4092,35 @@ GC::Ref<WebIDL::Promise> writable_stream_default_writer_close(WritableStreamDefa
|
|||
return writable_stream_close(*stream);
|
||||
}
|
||||
|
||||
// https://streams.spec.whatwg.org/#writable-stream-default-writer-close-with-error-propagation
|
||||
GC::Ref<WebIDL::Promise> writable_stream_default_writer_close_with_error_propagation(WritableStreamDefaultWriter& writer)
|
||||
{
|
||||
auto& realm = writer.realm();
|
||||
|
||||
// 1. Let stream be writer.[[stream]].
|
||||
auto stream = writer.stream();
|
||||
|
||||
// 2. Assert: stream is not undefined.
|
||||
VERIFY(stream);
|
||||
|
||||
// 3. Let state be stream.[[state]].
|
||||
auto state = stream->state();
|
||||
|
||||
// 4. If ! WritableStreamCloseQueuedOrInFlight(stream) is true or state is "closed", return a promise resolved with undefined.
|
||||
if (writable_stream_close_queued_or_in_flight(*stream) || state == WritableStream::State::Closed)
|
||||
return WebIDL::create_resolved_promise(realm, JS::js_undefined());
|
||||
|
||||
// 5. If state is "errored", return a promise rejected with stream.[[storedError]].
|
||||
if (state == WritableStream::State::Errored)
|
||||
return WebIDL::create_rejected_promise(realm, stream->stored_error());
|
||||
|
||||
// 6. Assert: state is "writable" or "erroring".
|
||||
VERIFY(state == WritableStream::State::Writable || state == WritableStream::State::Erroring);
|
||||
|
||||
// 7. Return ! WritableStreamDefaultWriterClose(writer).
|
||||
return writable_stream_default_writer_close(writer);
|
||||
}
|
||||
|
||||
// https://streams.spec.whatwg.org/#writable-stream-default-writer-ensure-closed-promise-rejected
|
||||
void writable_stream_default_writer_ensure_closed_promise_rejected(WritableStreamDefaultWriter& writer, JS::Value error)
|
||||
{
|
||||
|
|
|
@ -135,6 +135,7 @@ void writable_stream_update_backpressure(WritableStream&, bool backpressure);
|
|||
|
||||
GC::Ref<WebIDL::Promise> writable_stream_default_writer_abort(WritableStreamDefaultWriter&, JS::Value reason);
|
||||
GC::Ref<WebIDL::Promise> writable_stream_default_writer_close(WritableStreamDefaultWriter&);
|
||||
GC::Ref<WebIDL::Promise> writable_stream_default_writer_close_with_error_propagation(WritableStreamDefaultWriter&);
|
||||
void writable_stream_default_writer_ensure_closed_promise_rejected(WritableStreamDefaultWriter&, JS::Value error);
|
||||
void writable_stream_default_writer_ensure_ready_promise_rejected(WritableStreamDefaultWriter&, JS::Value error);
|
||||
Optional<double> writable_stream_default_writer_get_desired_size(WritableStreamDefaultWriter const&);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue