diff --git a/lib/internal/webstreams/writablestream.js b/lib/internal/webstreams/writablestream.js index f0eb687be129..06441424279e 100644 --- a/lib/internal/webstreams/writablestream.js +++ b/lib/internal/webstreams/writablestream.js @@ -701,15 +701,18 @@ function writerReadyPromise(writer) { } function writableStreamAbort(stream, reason) { - const { - state, - controller, - } = stream[kState]; + const { controller } = stream[kState]; + + let state = stream[kState].state; if (state === 'closed' || state === 'errored') return PromiseResolve(); controller[kState].abortController.abort(reason); + state = stream[kState].state; + if (state === 'closed' || state === 'errored') + return PromiseResolve(); + if (stream[kState].pendingAbortRequest.abort.promise !== undefined) return stream[kState].pendingAbortRequest.abort.promise; @@ -807,7 +810,7 @@ function writableStreamRejectCloseAndClosedPromiseIfNeeded(stream) { } const closedPromiseCache = stream[kState].closedPromise; - if (closedPromiseCache !== undefined) { + if (closedPromiseCache !== undefined && isPromisePending(closedPromiseCache.promise)) { setPromiseHandled(closedPromiseCache.promise); closedPromiseCache.reject(stream[kState].storedError); } @@ -817,7 +820,7 @@ function writableStreamRejectCloseAndClosedPromiseIfNeeded(stream) { } = stream[kState]; if (writer !== undefined) { const closeCache = writer[kState].close; - if (closeCache !== undefined) { + if (closeCache !== undefined && isPromisePending(closeCache.promise)) { setPromiseHandled(closeCache.promise); closeCache.reject(stream[kState].storedError); } diff --git a/test/wpt/status/streams.json b/test/wpt/status/streams.json index 2268ffcc87ac..968b33597651 100644 --- a/test/wpt/status/streams.json +++ b/test/wpt/status/streams.json @@ -43,13 +43,5 @@ }, "transform-streams/invalid-realm.tentative.window.js": { "skip": "Browser-specific test" - }, - "writable-streams/aborting.any.js": { - "fail": { - "note": "Recursive abort() call from within an abort algorithm triggers ERR_INTERNAL_ASSERTION", - "expected": [ - "recursive abort() call from abort() aborting signal" - ] - } } }