diff --git a/Userland/Libraries/LibWeb/Streams/AbstractOperations.cpp b/Userland/Libraries/LibWeb/Streams/AbstractOperations.cpp index 6ef1a874ac..2e39925f61 100644 --- a/Userland/Libraries/LibWeb/Streams/AbstractOperations.cpp +++ b/Userland/Libraries/LibWeb/Streams/AbstractOperations.cpp @@ -2993,6 +2993,21 @@ WebIDL::ExceptionOr> transform_stream_default_ return transform_stream_default_controller_perform_transform(*controller, chunk); } +WebIDL::ExceptionOr> transform_stream_default_source_pull_algorithm(TransformStream& stream) +{ + // 1. Assert: stream.[[backpressure]] is true. + VERIFY(stream.backpressure().has_value() && *stream.backpressure()); + + // 2. Assert: stream.[[backpressureChangePromise]] is not undefined. + VERIFY(stream.backpressure_change_promise()); + + // 3. Perform ! TransformStreamSetBackpressure(stream, false). + TRY(transform_stream_set_backpressure(stream, false)); + + // 4. Return stream.[[backpressureChangePromise]]. + return JS::NonnullGCPtr { *stream.backpressure_change_promise() }; +} + // https://streams.spec.whatwg.org/#transform-stream-error WebIDL::ExceptionOr transform_stream_error(TransformStream& stream, JS::Value error) { diff --git a/Userland/Libraries/LibWeb/Streams/AbstractOperations.h b/Userland/Libraries/LibWeb/Streams/AbstractOperations.h index a5168ba3ff..27b8d74423 100644 --- a/Userland/Libraries/LibWeb/Streams/AbstractOperations.h +++ b/Userland/Libraries/LibWeb/Streams/AbstractOperations.h @@ -144,6 +144,7 @@ WebIDL::ExceptionOr> transform_stream_default_ WebIDL::ExceptionOr> transform_stream_default_sink_abort_algorithm(TransformStream&, JS::Value reason); WebIDL::ExceptionOr> transform_stream_default_sink_close_algorithm(TransformStream&); WebIDL::ExceptionOr> transform_stream_default_sink_write_algorithm(TransformStream&, JS::Value chunk); +WebIDL::ExceptionOr> transform_stream_default_source_pull_algorithm(TransformStream&); WebIDL::ExceptionOr transform_stream_error(TransformStream&, JS::Value error); WebIDL::ExceptionOr transform_stream_error_writable_and_unblock_write(TransformStream&, JS::Value error); WebIDL::ExceptionOr transform_stream_set_backpressure(TransformStream&, bool backpressure);