mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 16:47:36 +00:00
LibWeb: Implement WritableStreamDefaultWriter.abort()
This commit is contained in:
parent
c421b6113c
commit
0c441fa7af
5 changed files with 32 additions and 1 deletions
|
@ -1308,6 +1308,19 @@ void writable_stream_update_backpressure(WritableStream& stream, bool backpressu
|
||||||
stream.set_backpressure(backpressure);
|
stream.set_backpressure(backpressure);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// https://streams.spec.whatwg.org/#writable-stream-default-writer-abort
|
||||||
|
WebIDL::ExceptionOr<JS::NonnullGCPtr<WebIDL::Promise>> writable_stream_default_writer_abort(WritableStreamDefaultWriter& writer, JS::Value reason)
|
||||||
|
{
|
||||||
|
// 1. Let stream be writer.[[stream]].
|
||||||
|
auto stream = writer.stream();
|
||||||
|
|
||||||
|
// 2. Assert: stream is not undefined.
|
||||||
|
VERIFY(stream);
|
||||||
|
|
||||||
|
// 3. Return ! WritableStreamAbort(stream, reason).
|
||||||
|
return writable_stream_abort(*stream, reason);
|
||||||
|
}
|
||||||
|
|
||||||
// https://streams.spec.whatwg.org/#writable-stream-default-writer-ensure-ready-promise-rejected
|
// https://streams.spec.whatwg.org/#writable-stream-default-writer-ensure-ready-promise-rejected
|
||||||
void writable_stream_default_writer_ensure_ready_promise_rejected(WritableStreamDefaultWriter& writer, JS::Value error)
|
void writable_stream_default_writer_ensure_ready_promise_rejected(WritableStreamDefaultWriter& writer, JS::Value error)
|
||||||
{
|
{
|
||||||
|
|
|
@ -73,6 +73,7 @@ void writable_stream_reject_close_and_closed_promise_if_needed(WritableStream&);
|
||||||
WebIDL::ExceptionOr<void> writable_stream_start_erroring(WritableStream&, JS::Value reason);
|
WebIDL::ExceptionOr<void> writable_stream_start_erroring(WritableStream&, JS::Value reason);
|
||||||
void writable_stream_update_backpressure(WritableStream&, bool backpressure);
|
void writable_stream_update_backpressure(WritableStream&, bool backpressure);
|
||||||
|
|
||||||
|
WebIDL::ExceptionOr<JS::NonnullGCPtr<WebIDL::Promise>> writable_stream_default_writer_abort(WritableStreamDefaultWriter&, JS::Value reason);
|
||||||
void writable_stream_default_writer_ensure_ready_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&);
|
Optional<double> writable_stream_default_writer_get_desired_size(WritableStreamDefaultWriter const&);
|
||||||
|
|
||||||
|
|
|
@ -49,6 +49,21 @@ JS::GCPtr<JS::Object> WritableStreamDefaultWriter::ready()
|
||||||
return m_ready_promise->promise();
|
return m_ready_promise->promise();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// https://streams.spec.whatwg.org/#default-writer-abort
|
||||||
|
WebIDL::ExceptionOr<JS::GCPtr<JS::Object>> WritableStreamDefaultWriter::abort(JS::Value reason)
|
||||||
|
{
|
||||||
|
auto& realm = this->realm();
|
||||||
|
|
||||||
|
// 1. If this.[[stream]] is undefined, return a promise rejected with a TypeError exception.
|
||||||
|
if (!m_stream) {
|
||||||
|
auto exception = MUST_OR_THROW_OOM(JS::TypeError::create(realm, "Cannot abort a writer that has no locked stream"sv));
|
||||||
|
return WebIDL::create_rejected_promise(realm, exception)->promise();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. Return ! WritableStreamDefaultWriterAbort(this, reason).
|
||||||
|
return TRY(writable_stream_default_writer_abort(*this, reason))->promise();
|
||||||
|
}
|
||||||
|
|
||||||
WritableStreamDefaultWriter::WritableStreamDefaultWriter(JS::Realm& realm)
|
WritableStreamDefaultWriter::WritableStreamDefaultWriter(JS::Realm& realm)
|
||||||
: Bindings::PlatformObject(realm)
|
: Bindings::PlatformObject(realm)
|
||||||
{
|
{
|
||||||
|
|
|
@ -27,6 +27,7 @@ public:
|
||||||
JS::GCPtr<JS::Object> closed();
|
JS::GCPtr<JS::Object> closed();
|
||||||
WebIDL::ExceptionOr<Optional<double>> desired_size() const;
|
WebIDL::ExceptionOr<Optional<double>> desired_size() const;
|
||||||
JS::GCPtr<JS::Object> ready();
|
JS::GCPtr<JS::Object> ready();
|
||||||
|
WebIDL::ExceptionOr<JS::GCPtr<JS::Object>> abort(JS::Value reason);
|
||||||
|
|
||||||
JS::GCPtr<WebIDL::Promise> closed_promise() { return m_closed_promise; }
|
JS::GCPtr<WebIDL::Promise> closed_promise() { return m_closed_promise; }
|
||||||
void set_closed_promise(JS::GCPtr<WebIDL::Promise> value) { m_closed_promise = value; }
|
void set_closed_promise(JS::GCPtr<WebIDL::Promise> value) { m_closed_promise = value; }
|
||||||
|
|
|
@ -8,8 +8,9 @@ interface WritableStreamDefaultWriter {
|
||||||
readonly attribute unrestricted double? desiredSize;
|
readonly attribute unrestricted double? desiredSize;
|
||||||
readonly attribute Promise<undefined> ready;
|
readonly attribute Promise<undefined> ready;
|
||||||
|
|
||||||
|
Promise<undefined> abort(optional any reason);
|
||||||
|
|
||||||
// FIXME:
|
// FIXME:
|
||||||
// Promise<undefined> abort(optional any reason);
|
|
||||||
// Promise<undefined> close();
|
// Promise<undefined> close();
|
||||||
// undefined releaseLock();
|
// undefined releaseLock();
|
||||||
// Promise<undefined> write(optional any chunk);
|
// Promise<undefined> write(optional any chunk);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue