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;
|
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.
|
* Streams spec, 4.6.6.
|
||||||
* WritableStreamDefaultWriterEnsureReadyPromiseRejected( writer, error )
|
* WritableStreamDefaultWriterEnsureReadyPromiseRejected( writer, error )
|
||||||
@ -161,6 +175,66 @@ bool js::WritableStreamDefaultWriterGetDesiredSize(
|
|||||||
return true;
|
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.
|
* Streams spec, 4.6.9.
|
||||||
* WritableStreamDefaultWriterWrite ( writer, chunk )
|
* WritableStreamDefaultWriterWrite ( writer, chunk )
|
||||||
|
@ -24,6 +24,10 @@ class WritableStreamDefaultWriter;
|
|||||||
extern JSObject* WritableStreamDefaultWriterClose(
|
extern JSObject* WritableStreamDefaultWriterClose(
|
||||||
JSContext* cx, JS::Handle<WritableStreamDefaultWriter*> unwrappedWriter);
|
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(
|
extern MOZ_MUST_USE bool WritableStreamDefaultWriterEnsureReadyPromiseRejected(
|
||||||
JSContext* cx, JS::Handle<WritableStreamDefaultWriter*> unwrappedWriter,
|
JSContext* cx, JS::Handle<WritableStreamDefaultWriter*> unwrappedWriter,
|
||||||
JS::Handle<JS::Value> error);
|
JS::Handle<JS::Value> error);
|
||||||
@ -32,6 +36,9 @@ extern MOZ_MUST_USE bool WritableStreamDefaultWriterGetDesiredSize(
|
|||||||
JSContext* cx, JS::Handle<WritableStreamDefaultWriter*> unwrappedWriter,
|
JSContext* cx, JS::Handle<WritableStreamDefaultWriter*> unwrappedWriter,
|
||||||
JS::MutableHandle<JS::Value> size);
|
JS::MutableHandle<JS::Value> size);
|
||||||
|
|
||||||
|
extern MOZ_MUST_USE bool WritableStreamDefaultWriterRelease(
|
||||||
|
JSContext* cx, JS::Handle<WritableStreamDefaultWriter*> unwrappedWriter);
|
||||||
|
|
||||||
extern JSObject* WritableStreamDefaultWriterWrite(
|
extern JSObject* WritableStreamDefaultWriterWrite(
|
||||||
JSContext* cx, JS::Handle<WritableStreamDefaultWriter*> unwrappedWriter,
|
JSContext* cx, JS::Handle<WritableStreamDefaultWriter*> unwrappedWriter,
|
||||||
JS::Handle<JS::Value> chunk);
|
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_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_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_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")
|
MSG_DEF(JSMSG_READABLESTREAM_NYI, 0, JSEXN_ERR, "full WritableStream support is not yet implemented")
|
||||||
|
|
||||||
// Other Stream-related
|
// Other Stream-related
|
||||||
|
Loading…
x
Reference in New Issue
Block a user