diff --git a/Userland/Libraries/LibWeb/Streams/ReadableStream.cpp b/Userland/Libraries/LibWeb/Streams/ReadableStream.cpp index a7d8d28524a..05afdd23e90 100644 --- a/Userland/Libraries/LibWeb/Streams/ReadableStream.cpp +++ b/Userland/Libraries/LibWeb/Streams/ReadableStream.cpp @@ -186,6 +186,22 @@ void ReadableStream::close() }); } +// https://streams.spec.whatwg.org/#readablestream-error +void ReadableStream::error(JS::Value error) +{ + controller()->visit( + // 1. If stream.[[controller]] implements ReadableByteStreamController, then perform + // ! ReadableByteStreamControllerError(stream.[[controller]], e). + [&](JS::NonnullGCPtr controller) { + readable_byte_stream_controller_error(controller, error); + }, + + // 2. Otherwise, perform ! ReadableStreamDefaultControllerError(stream.[[controller]], e). + [&](JS::NonnullGCPtr controller) { + readable_stream_default_controller_error(controller, error); + }); +} + void ReadableStream::initialize(JS::Realm& realm) { Base::initialize(realm); diff --git a/Userland/Libraries/LibWeb/Streams/ReadableStream.h b/Userland/Libraries/LibWeb/Streams/ReadableStream.h index 2f9a4c688fd..fbe57f104a2 100644 --- a/Userland/Libraries/LibWeb/Streams/ReadableStream.h +++ b/Userland/Libraries/LibWeb/Streams/ReadableStream.h @@ -80,6 +80,7 @@ public: WebIDL::ExceptionOr tee(); void close(); + void error(JS::Value); Optional& controller() { return m_controller; } void set_controller(Optional value) { m_controller = move(value); }