Skip to content

Commit

Permalink
LibWeb: Close acquired writer in AO readable_stream_pipe_to()
Browse files Browse the repository at this point in the history
Also adds a test to prove that the WritableStream's close callback is
called.
  • Loading branch information
kennethmyhra authored and trflynn89 committed May 20, 2024
1 parent 15b6773 commit e2c4019
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Writer has been closed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<script src="../include.js"></script>
<script>
asyncTest(done => {
const writableStream = new WritableStream({
close() {
println("Writer has been closed.");
}
}
);
const stream = new ReadableStream({
pull(controller) {
controller.close();
}
});

stream.pipeTo(writableStream).then(() => {
done();
});
});
</script>
10 changes: 8 additions & 2 deletions Userland/Libraries/LibWeb/Streams/AbstractOperations.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -314,11 +314,17 @@ JS::NonnullGCPtr<WebIDL::Promise> 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);
};

Expand Down

0 comments on commit e2c4019

Please sign in to comment.