From 9b1d89ae6e782d65af855d4f33b064d7400f3d20 Mon Sep 17 00:00:00 2001 From: Takeshi Yoshino Date: Wed, 29 Mar 2017 00:40:45 +0900 Subject: [PATCH] Make writer.abort() fail immediately --- .../lib/writable-stream.js | 35 ++++++------------- 1 file changed, 11 insertions(+), 24 deletions(-) diff --git a/reference-implementation/lib/writable-stream.js b/reference-implementation/lib/writable-stream.js index 9e8698750..5a979883a 100644 --- a/reference-implementation/lib/writable-stream.js +++ b/reference-implementation/lib/writable-stream.js @@ -212,7 +212,7 @@ function WritableStreamFinishInFlightWrite(stream) { const state = stream._state; if (state === 'errored') { - WritableStreamFinishInFlightWriteInErroredState(stream); + WritableStreamRejectPromisesInReactionToError(stream); return; } @@ -221,11 +221,6 @@ function WritableStreamFinishInFlightWrite(stream) { WritableStreamHandleAbortRequestIfPending(stream); } -function WritableStreamFinishInFlightWriteInErroredState(stream) { - WritableStreamRejectAbortRequestIfPending(stream); - WritableStreamRejectPromisesInReactionToError(stream); -} - function WritableStreamFinishInFlightWriteWithError(stream, error) { assert(stream._inFlightWriteRequest !== undefined); stream._inFlightWriteRequest._reject(error); @@ -234,14 +229,13 @@ function WritableStreamFinishInFlightWriteWithError(stream, error) { const state = stream._state; if (state === 'errored') { - WritableStreamFinishInFlightWriteInErroredState(stream); + WritableStreamRejectPromisesInReactionToError(stream); return; } assert(state === 'writable'); - WritableStreamError(stream, error); - WritableStreamRejectAbortRequestIfPending(stream); + WritableStreamErrorNotForAbort(stream, error); } function WritableStreamFinishInFlightClose(stream) { @@ -252,7 +246,7 @@ function WritableStreamFinishInFlightClose(stream) { const state = stream._state; if (state === 'errored') { - WritableStreamFinishInFlightCloseInErroredState(stream); + WritableStreamRejectClosedPromiseInReactionToError(stream); return; } @@ -271,11 +265,6 @@ function WritableStreamFinishInFlightClose(stream) { } } -function WritableStreamFinishInFlightCloseInErroredState(stream) { - WritableStreamRejectAbortRequestIfPending(stream); - WritableStreamRejectClosedPromiseInReactionToError(stream); -} - function WritableStreamFinishInFlightCloseWithError(stream, error) { assert(stream._inFlightCloseRequest !== undefined); stream._inFlightCloseRequest._reject(error); @@ -284,14 +273,13 @@ function WritableStreamFinishInFlightCloseWithError(stream, error) { const state = stream._state; if (state === 'errored') { - WritableStreamFinishInFlightCloseInErroredState(stream); + WritableStreamRejectClosedPromiseInReactionToError(stream); return; } assert(state === 'writable'); - WritableStreamError(stream, error); - WritableStreamRejectAbortRequestIfPending(stream); + WritableStreamErrorNotForAbort(stream, error); } function WritableStreamCloseQueuedOrInFlight(stream) { @@ -347,7 +335,9 @@ function WritableStreamRejectClosedPromiseInReactionToError(stream) { } } -function WritableStreamRejectAbortRequestIfPending(stream) { +function WritableStreamErrorNotForAbort(stream, error) { + WritableStreamError(stream, error); + if (stream._pendingAbortRequest !== undefined) { stream._pendingAbortRequest._reject(stream._storedError); stream._pendingAbortRequest = undefined; @@ -737,9 +727,7 @@ class WritableStreamDefaultController { () => { this._started = true; - if (stream._state === 'errored') { - WritableStreamRejectAbortRequestIfPending(stream); - } else { + if (stream._state !== 'errored') { WritableStreamHandleAbortRequestIfPending(stream); } @@ -749,7 +737,6 @@ class WritableStreamDefaultController { r => { assert(stream._state === 'writable' || stream._state === 'errored'); WritableStreamDefaultControllerErrorIfNeeded(this, r); - WritableStreamRejectAbortRequestIfPending(stream); } ) .catch(rethrowAssertionErrorRejection); @@ -924,7 +911,7 @@ function WritableStreamDefaultControllerError(controller, error) { assert(stream._state === 'writable'); - WritableStreamError(stream, error); + WritableStreamErrorNotForAbort(stream, error); } // Helper functions for the WritableStream.