mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-22 09:45:41 +00:00
Bug 1582348 - Fill out some of the body of |WritableStreamFinishErroring|. r=arai
Differential Revision: https://phabricator.services.mozilla.com/D46407 --HG-- extra : moz-landing-system : lando
This commit is contained in:
parent
261271e325
commit
3bdf5a2aef
@ -189,6 +189,7 @@ class WritableStream : public NativeObject {
|
||||
void setErroring() { setState(Erroring); }
|
||||
|
||||
bool errored() const { return state() == Errored; }
|
||||
void setErrored() { setState(Errored); }
|
||||
|
||||
bool backpressure() const { return flags() & Backpressure; }
|
||||
|
||||
|
@ -151,17 +151,67 @@ MOZ_MUST_USE bool js::WritableStreamStartErroring(
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool WritableStreamHasOperationMarkedInFlight(
|
||||
const WritableStream* unwrappedStream);
|
||||
|
||||
/**
|
||||
* Streams spec, 4.4.4.
|
||||
* WritableStreamFinishErroring ( stream )
|
||||
*/
|
||||
MOZ_MUST_USE bool js::WritableStreamFinishErroring(
|
||||
JSContext* cx, Handle<WritableStream*> unwrappedStream) {
|
||||
// Step 1: Assert: stream.[[state]] is "erroring".
|
||||
MOZ_ASSERT(unwrappedStream->erroring());
|
||||
|
||||
// Step 2: Assert: ! WritableStreamHasOperationMarkedInFlight(stream) is
|
||||
// false.
|
||||
MOZ_ASSERT(!WritableStreamHasOperationMarkedInFlight(unwrappedStream));
|
||||
|
||||
// Step 3: Set stream.[[state]] to "errored".
|
||||
unwrappedStream->setErrored();
|
||||
|
||||
// Step 4: Perform ! stream.[[writableStreamController]].[[ErrorSteps]]().
|
||||
// Step 5: Let storedError be stream.[[storedError]].
|
||||
// Step 6: Repeat for each writeRequest that is an element of
|
||||
// stream.[[writeRequests]],
|
||||
// a: Reject writeRequest with storedError.
|
||||
// Step 7: Set stream.[[writeRequests]] to an empty List.
|
||||
// Step 8: If stream.[[pendingAbortRequest]] is undefined,
|
||||
// a: Perform ! WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream).
|
||||
// b: Return.
|
||||
// Step 9: Let abortRequest be stream.[[pendingAbortRequest]].
|
||||
// Step 10: Set stream.[[pendingAbortRequest]] to undefined.
|
||||
// Step 11: If abortRequest.[[wasAlreadyErroring]] is true,
|
||||
// a: Reject abortRequest.[[promise]] with storedError.
|
||||
// b: Perform ! WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream).
|
||||
// c: Return.
|
||||
// Step 12: Let promise be
|
||||
// ! stream.[[writableStreamController]].[[AbortSteps]](
|
||||
// abortRequest.[[reason]]).
|
||||
// Step 13: Upon fulfillment of promise,
|
||||
// a: Resolve abortRequest.[[promise]] with undefined.
|
||||
// b: Perform ! WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream).
|
||||
// Step 14: Upon rejection of promise with reason reason,
|
||||
// c: Reject abortRequest.[[promise]] with reason.
|
||||
// d: Perform ! WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream).
|
||||
// XXX jwalden flesh me out!
|
||||
JS_ReportErrorASCII(cx, "epic fail");
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Streams spec, 4.4.10.
|
||||
* WritableStreamHasOperationMarkedInFlight ( stream )
|
||||
*/
|
||||
bool WritableStreamHasOperationMarkedInFlight(
|
||||
const WritableStream* unwrappedStream) {
|
||||
// Step 1: If stream.[[inFlightWriteRequest]] is undefined and
|
||||
// controller.[[inFlightCloseRequest]] is undefined, return false.
|
||||
// Step 2: Return true.
|
||||
return unwrappedStream->haveInFlightWriteRequest() ||
|
||||
unwrappedStream->haveInFlightCloseRequest();
|
||||
}
|
||||
|
||||
/**
|
||||
* Streams spec, 4.4.14.
|
||||
* WritableStreamUpdateBackpressure ( stream, backpressure )
|
||||
|
Loading…
Reference in New Issue
Block a user