From ad73c03ea330b02696fd5f85d99a812138773930 Mon Sep 17 00:00:00 2001 From: Kenneth Myhra Date: Fri, 7 Jul 2023 16:12:35 +0200 Subject: [PATCH] LibWeb: Add AO transform_stream_error_writable_and_unblock_write() --- .../LibWeb/Streams/AbstractOperations.cpp | 16 ++++++++++++++++ .../LibWeb/Streams/AbstractOperations.h | 1 + 2 files changed, 17 insertions(+) diff --git a/Userland/Libraries/LibWeb/Streams/AbstractOperations.cpp b/Userland/Libraries/LibWeb/Streams/AbstractOperations.cpp index 8f299db1cc..bf0fa166b1 100644 --- a/Userland/Libraries/LibWeb/Streams/AbstractOperations.cpp +++ b/Userland/Libraries/LibWeb/Streams/AbstractOperations.cpp @@ -2734,6 +2734,22 @@ void transform_stream_default_controller_clear_algorithms(TransformStreamDefault controller.set_flush_algorithm({}); } +// https://streams.spec.whatwg.org/#transform-stream-error-writable-and-unblock-write +WebIDL::ExceptionOr transform_stream_error_writable_and_unblock_write(TransformStream& stream, JS::Value error) +{ + // 1. Perform ! TransformStreamDefaultControllerClearAlgorithms(stream.[[controller]]). + transform_stream_default_controller_clear_algorithms(*stream.controller()); + + // 2. Perform ! WritableStreamDefaultControllerErrorIfNeeded(stream.[[writable]].[[controller]], e). + TRY(writable_stream_default_controller_error_if_needed(*stream.writable()->controller(), error)); + + // 3. If stream.[[backpressure]] is true, perform ! TransformStreamSetBackpressure(stream, false). + if (stream.backpressure().has_value() && *stream.backpressure()) + TRY(transform_stream_set_backpressure(stream, false)); + + return {}; +} + // https://streams.spec.whatwg.org/#transform-stream-set-backpressure WebIDL::ExceptionOr transform_stream_set_backpressure(TransformStream& stream, bool backpressure) { diff --git a/Userland/Libraries/LibWeb/Streams/AbstractOperations.h b/Userland/Libraries/LibWeb/Streams/AbstractOperations.h index b01581b433..5a8913a940 100644 --- a/Userland/Libraries/LibWeb/Streams/AbstractOperations.h +++ b/Userland/Libraries/LibWeb/Streams/AbstractOperations.h @@ -133,6 +133,7 @@ WebIDL::ExceptionOr writable_stream_default_controller_process_write(Writa WebIDL::ExceptionOr writable_stream_default_controller_write(WritableStreamDefaultController&, JS::Value chunk, JS::Value chunk_size); void transform_stream_default_controller_clear_algorithms(TransformStreamDefaultController&); +WebIDL::ExceptionOr transform_stream_error_writable_and_unblock_write(TransformStream&, JS::Value error); WebIDL::ExceptionOr transform_stream_set_backpressure(TransformStream&, bool backpressure); bool is_non_negative_number(JS::Value);