LibWeb: Fulfill TransformStream promises with the correct "reason"

We need to use the reason provided to the abort algorithm, not the one
from the resolved cancel promise (which will be undefined).
This commit is contained in:
Timothy Flynn 2025-04-16 12:02:51 -04:00
parent f5de814c9f
commit 103a9d20bf
3 changed files with 6 additions and 8 deletions

View file

@ -5438,7 +5438,7 @@ GC::Ref<WebIDL::Promise> transform_stream_default_sink_abort_algorithm(Transform
// 7. React to cancelPromise:
WebIDL::react_to_promise(cancel_promise,
// 1. If cancelPromise was fulfilled, then:
GC::create_function(realm.heap(), [&realm, readable, controller](JS::Value reason) -> WebIDL::ExceptionOr<JS::Value> {
GC::create_function(realm.heap(), [&realm, readable, controller, reason](JS::Value) -> WebIDL::ExceptionOr<JS::Value> {
// 1. If readable.[[state]] is "errored", reject controller.[[finishPromise]] with readable.[[storedError]].
if (readable->state() == ReadableStream::State::Errored) {
WebIDL::reject_promise(realm, *controller->finish_promise(), readable->stored_error());

View file

@ -2,8 +2,7 @@ Harness status: OK
Found 21 tests
19 Pass
2 Fail
21 Pass
Pass TransformStream errors thrown in transform put the writable and readable in an errored state
Pass TransformStream errors thrown in flush put the writable and readable in an errored state
Pass errored TransformStream should not enqueue new chunks
@ -23,5 +22,5 @@ Pass controller.error() should do nothing after readable.cancel() resolves
Pass controller.error() should do nothing after writable.abort() has completed
Pass controller.error() should do nothing after a transformer method has thrown an exception
Pass erroring during write with backpressure should result in the write failing
Fail a write() that was waiting for backpressure should reject if the writable is aborted
Fail the readable should be errored with the reason passed to the writable abort() method
Pass a write() that was waiting for backpressure should reject if the writable is aborted
Pass the readable should be errored with the reason passed to the writable abort() method

View file

@ -2,8 +2,7 @@ Harness status: OK
Found 11 tests
10 Pass
1 Fail
11 Pass
Pass enqueue() inside size() should work
Pass terminate() inside size() should work
Pass error() inside size() should work
@ -14,4 +13,4 @@ Pass read() inside of size() should work
Pass writer.write() inside size() should work
Pass synchronous writer.write() inside size() should work
Pass writer.close() inside size() should work
Fail writer.abort() inside size() should work
Pass writer.abort() inside size() should work