diff --git a/Tests/LibWeb/Text/expected/Streams/ReadableStream-pipeTo-Writer-close-callback-called.txt b/Tests/LibWeb/Text/expected/Streams/ReadableStream-pipeTo-Writer-close-callback-called.txt new file mode 100644 index 00000000000..2ffe46565ba --- /dev/null +++ b/Tests/LibWeb/Text/expected/Streams/ReadableStream-pipeTo-Writer-close-callback-called.txt @@ -0,0 +1 @@ +Writer has been closed. \ No newline at end of file diff --git a/Tests/LibWeb/Text/input/Streams/ReadableStream-pipeTo-Writer-close-callback-called.html b/Tests/LibWeb/Text/input/Streams/ReadableStream-pipeTo-Writer-close-callback-called.html new file mode 100644 index 00000000000..b6cd67d13ed --- /dev/null +++ b/Tests/LibWeb/Text/input/Streams/ReadableStream-pipeTo-Writer-close-callback-called.html @@ -0,0 +1,20 @@ + + diff --git a/Userland/Libraries/LibWeb/Streams/AbstractOperations.cpp b/Userland/Libraries/LibWeb/Streams/AbstractOperations.cpp index 5ad849e1532..731968e2ea4 100644 --- a/Userland/Libraries/LibWeb/Streams/AbstractOperations.cpp +++ b/Userland/Libraries/LibWeb/Streams/AbstractOperations.cpp @@ -314,11 +314,17 @@ JS::NonnullGCPtr readable_stream_pipe_to(ReadableStream& source WebIDL::resolve_promise(realm, promise, JS::js_undefined()); }; - auto success_steps = [promise, &realm](ByteBuffer) { + auto success_steps = [promise, &realm, writer](ByteBuffer) { + // Make sure we close the acquired writer. + WebIDL::resolve_promise(realm, writable_stream_default_writer_close(*writer), JS::js_undefined()); + WebIDL::resolve_promise(realm, promise, JS::js_undefined()); }; - auto failure_steps = [promise, &realm](JS::Value error) { + auto failure_steps = [promise, &realm, writer](JS::Value error) { + // Make sure we close the acquired writer. + WebIDL::resolve_promise(realm, writable_stream_default_writer_close(*writer), JS::js_undefined()); + WebIDL::reject_promise(realm, promise, error); };