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);
};