mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-03-01 13:57:32 +00:00
Bug 1582348 - Implement |WritableStreamDefaultWriterRelease|. r=arai
Differential Revision: https://phabricator.services.mozilla.com/D50105 --HG-- extra : moz-landing-system : lando
This commit is contained in:
parent
fa982c9e33
commit
331487beaa
@ -113,6 +113,20 @@ JSObject* js::WritableStreamDefaultWriterClose(
|
||||
return promise;
|
||||
}
|
||||
|
||||
/**
|
||||
* Streams spec, 4.6.5.
|
||||
* WritableStreamDefaultWriterEnsureClosedPromiseRejected( writer, error )
|
||||
*/
|
||||
MOZ_MUST_USE bool js::WritableStreamDefaultWriterEnsureClosedPromiseRejected(
|
||||
JSContext* cx, Handle<WritableStreamDefaultWriter*> unwrappedWriter,
|
||||
Handle<Value> error) {
|
||||
cx->check(error);
|
||||
|
||||
// XXX jwalden flesh me out!
|
||||
JS_ReportErrorASCII(cx, "epic fail");
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Streams spec, 4.6.6.
|
||||
* WritableStreamDefaultWriterEnsureReadyPromiseRejected( writer, error )
|
||||
@ -161,6 +175,66 @@ bool js::WritableStreamDefaultWriterGetDesiredSize(
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Streams spec, 4.6.8.
|
||||
* WritableStreamDefaultWriterRelease ( writer )
|
||||
*/
|
||||
bool js::WritableStreamDefaultWriterRelease(
|
||||
JSContext* cx, Handle<WritableStreamDefaultWriter*> unwrappedWriter) {
|
||||
// Step 1: Let stream be writer.[[ownerWritableStream]].
|
||||
// Step 2: Assert: stream is not undefined.
|
||||
MOZ_ASSERT(unwrappedWriter->hasStream());
|
||||
Rooted<WritableStream*> unwrappedStream(
|
||||
cx, UnwrapStreamFromWriter(cx, unwrappedWriter));
|
||||
if (!unwrappedStream) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Step 3: Assert: stream.[[writer]] is writer.
|
||||
#ifdef DEBUG
|
||||
{
|
||||
WritableStreamDefaultWriter* unwrappedStreamWriter =
|
||||
UnwrapWriterFromStream(cx, unwrappedStream);
|
||||
if (!unwrappedStreamWriter) {
|
||||
return false;
|
||||
}
|
||||
|
||||
MOZ_ASSERT(unwrappedStreamWriter == unwrappedWriter);
|
||||
}
|
||||
#endif
|
||||
|
||||
// Step 4: Let releasedError be a new TypeError.
|
||||
Rooted<Value> releasedError(cx);
|
||||
JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr,
|
||||
JSMSG_WRITABLESTREAM_CANT_RELEASE_ALREADY_CLOSED);
|
||||
if (!cx->isExceptionPending() || !cx->getPendingException(&releasedError)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Step 5: Perform
|
||||
// ! WritableStreamDefaultWriterEnsureReadyPromiseRejected(
|
||||
// writer, releasedError).
|
||||
if (!WritableStreamDefaultWriterEnsureReadyPromiseRejected(
|
||||
cx, unwrappedWriter, releasedError)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Step 6: Perform
|
||||
// ! WritableStreamDefaultWriterEnsureClosedPromiseRejected(
|
||||
// writer, releasedError).
|
||||
if (!WritableStreamDefaultWriterEnsureClosedPromiseRejected(
|
||||
cx, unwrappedWriter, releasedError)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Step 7: Set stream.[[writer]] to undefined.
|
||||
unwrappedStream->clearWriter();
|
||||
|
||||
// Step 8: Set writer.[[ownerWritableStream]] to undefined.
|
||||
unwrappedWriter->clearStream();
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Streams spec, 4.6.9.
|
||||
* WritableStreamDefaultWriterWrite ( writer, chunk )
|
||||
|
@ -24,6 +24,10 @@ class WritableStreamDefaultWriter;
|
||||
extern JSObject* WritableStreamDefaultWriterClose(
|
||||
JSContext* cx, JS::Handle<WritableStreamDefaultWriter*> unwrappedWriter);
|
||||
|
||||
extern MOZ_MUST_USE bool WritableStreamDefaultWriterEnsureClosedPromiseRejected(
|
||||
JSContext* cx, JS::Handle<WritableStreamDefaultWriter*> unwrappedWriter,
|
||||
JS::Handle<JS::Value> error);
|
||||
|
||||
extern MOZ_MUST_USE bool WritableStreamDefaultWriterEnsureReadyPromiseRejected(
|
||||
JSContext* cx, JS::Handle<WritableStreamDefaultWriter*> unwrappedWriter,
|
||||
JS::Handle<JS::Value> error);
|
||||
@ -32,6 +36,9 @@ extern MOZ_MUST_USE bool WritableStreamDefaultWriterGetDesiredSize(
|
||||
JSContext* cx, JS::Handle<WritableStreamDefaultWriter*> unwrappedWriter,
|
||||
JS::MutableHandle<JS::Value> size);
|
||||
|
||||
extern MOZ_MUST_USE bool WritableStreamDefaultWriterRelease(
|
||||
JSContext* cx, JS::Handle<WritableStreamDefaultWriter*> unwrappedWriter);
|
||||
|
||||
extern JSObject* WritableStreamDefaultWriterWrite(
|
||||
JSContext* cx, JS::Handle<WritableStreamDefaultWriter*> unwrappedWriter,
|
||||
JS::Handle<JS::Value> chunk);
|
||||
|
@ -691,6 +691,7 @@ MSG_DEF(JSMSG_WRITABLESTREAM_RELEASED_DURING_WRITE, 0, JSEXN_TYPEERR, "writ
|
||||
MSG_DEF(JSMSG_WRITABLESTREAM_WRITE_CLOSING_OR_CLOSED, 0, JSEXN_TYPEERR, "can't write to a stream that's currently closing or already closed")
|
||||
MSG_DEF(JSMSG_CANT_ABORT_LOCKED_WRITABLESTREAM, 0, JSEXN_TYPEERR, "can't abort a WritableStream that's locked to a writer")
|
||||
MSG_DEF(JSMSG_WRITABLESTREAM_CLOSE_CLOSING_OR_CLOSED, 0, JSEXN_TYPEERR, "can't close a stream that's currently closing or already closed")
|
||||
MSG_DEF(JSMSG_WRITABLESTREAM_CANT_RELEASE_ALREADY_CLOSED,0, JSEXN_TYPEERR, "writer has already been released and can't be closed")
|
||||
MSG_DEF(JSMSG_READABLESTREAM_NYI, 0, JSEXN_ERR, "full WritableStream support is not yet implemented")
|
||||
|
||||
// Other Stream-related
|
||||
|
Loading…
x
Reference in New Issue
Block a user