Diff
Modified: trunk/LayoutTests/imported/w3c/ChangeLog (265731 => 265732)
--- trunk/LayoutTests/imported/w3c/ChangeLog 2020-08-15 13:30:54 UTC (rev 265731)
+++ trunk/LayoutTests/imported/w3c/ChangeLog 2020-08-15 16:25:41 UTC (rev 265732)
@@ -1,3 +1,17 @@
+2020-08-15 Youenn Fablet <[email protected]>
+
+ WritableStream rejected promises should be marked as handled as per spec
+ https://bugs.webkit.org/show_bug.cgi?id=215501
+
+ Reviewed by Darin Adler.
+
+ * web-platform-tests/streams/writable-streams/aborting.any-expected.txt:
+ * web-platform-tests/streams/writable-streams/aborting.any.worker-expected.txt:
+ * web-platform-tests/streams/writable-streams/bad-underlying-sinks.any-expected.txt:
+ * web-platform-tests/streams/writable-streams/bad-underlying-sinks.any.worker-expected.txt:
+ * web-platform-tests/streams/writable-streams/close.any-expected.txt:
+ * web-platform-tests/streams/writable-streams/close.any.worker-expected.txt:
+
2020-08-14 Chris Dumez <[email protected]>
OfflineAudioContext.destination has incorrect number of channels & channel count mode
Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/streams/writable-streams/aborting.any-expected.txt (265731 => 265732)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/streams/writable-streams/aborting.any-expected.txt 2020-08-15 13:30:54 UTC (rev 265731)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/streams/writable-streams/aborting.any-expected.txt 2020-08-15 16:25:41 UTC (rev 265732)
@@ -1,6 +1,4 @@
-Harness Error (FAIL), message = Unhandled rejection: writableStreamDefaultWriterRelease
-
PASS Aborting a WritableStream before it starts should cause the writer's unsettled ready promise to reject
PASS Aborting a WritableStream should cause the writer's fulfilled ready promise to reset to a rejected one
PASS abort() on a released writer rejects
Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/streams/writable-streams/aborting.any.worker-expected.txt (265731 => 265732)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/streams/writable-streams/aborting.any.worker-expected.txt 2020-08-15 13:30:54 UTC (rev 265731)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/streams/writable-streams/aborting.any.worker-expected.txt 2020-08-15 16:25:41 UTC (rev 265732)
@@ -1,6 +1,4 @@
-Harness Error (FAIL), message = Unhandled rejection: writableStreamDefaultWriterRelease
-
PASS Aborting a WritableStream before it starts should cause the writer's unsettled ready promise to reject
PASS Aborting a WritableStream should cause the writer's fulfilled ready promise to reset to a rejected one
PASS abort() on a released writer rejects
Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/streams/writable-streams/bad-underlying-sinks.any-expected.txt (265731 => 265732)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/streams/writable-streams/bad-underlying-sinks.any-expected.txt 2020-08-15 13:30:54 UTC (rev 265731)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/streams/writable-streams/bad-underlying-sinks.any-expected.txt 2020-08-15 16:25:41 UTC (rev 265732)
@@ -1,6 +1,4 @@
-Harness Error (FAIL), message = Unhandled rejection: error1
-
PASS start: errors in start cause WritableStream constructor to throw
PASS close: throwing method should cause writer close() and ready to reject
PASS close: returning a rejected promise should cause writer close() and ready to reject
Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/streams/writable-streams/bad-underlying-sinks.any.worker-expected.txt (265731 => 265732)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/streams/writable-streams/bad-underlying-sinks.any.worker-expected.txt 2020-08-15 13:30:54 UTC (rev 265731)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/streams/writable-streams/bad-underlying-sinks.any.worker-expected.txt 2020-08-15 16:25:41 UTC (rev 265732)
@@ -1,6 +1,4 @@
-Harness Error (FAIL), message = Unhandled rejection: error1
-
PASS start: errors in start cause WritableStream constructor to throw
PASS close: throwing method should cause writer close() and ready to reject
PASS close: returning a rejected promise should cause writer close() and ready to reject
Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/streams/writable-streams/close.any-expected.txt (265731 => 265732)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/streams/writable-streams/close.any-expected.txt 2020-08-15 13:30:54 UTC (rev 265731)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/streams/writable-streams/close.any-expected.txt 2020-08-15 16:25:41 UTC (rev 265732)
@@ -1,6 +1,4 @@
-Harness Error (FAIL), message = Unhandled rejection: writableStreamDefaultWriterRelease
-
PASS fulfillment value of writer.close() call must be undefined even if the underlying sink returns a non-undefined value
PASS when sink calls error asynchronously while sink close is in-flight, the stream should not become errored
PASS when sink calls error synchronously while closing, the stream should not become errored
Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/streams/writable-streams/close.any.worker-expected.txt (265731 => 265732)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/streams/writable-streams/close.any.worker-expected.txt 2020-08-15 13:30:54 UTC (rev 265731)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/streams/writable-streams/close.any.worker-expected.txt 2020-08-15 16:25:41 UTC (rev 265732)
@@ -1,6 +1,4 @@
-Harness Error (FAIL), message = Unhandled rejection: writableStreamDefaultWriterRelease
-
PASS fulfillment value of writer.close() call must be undefined even if the underlying sink returns a non-undefined value
PASS when sink calls error asynchronously while sink close is in-flight, the stream should not become errored
PASS when sink calls error synchronously while closing, the stream should not become errored
Modified: trunk/Source/WebCore/ChangeLog (265731 => 265732)
--- trunk/Source/WebCore/ChangeLog 2020-08-15 13:30:54 UTC (rev 265731)
+++ trunk/Source/WebCore/ChangeLog 2020-08-15 16:25:41 UTC (rev 265732)
@@ -1,3 +1,19 @@
+2020-08-15 Youenn Fablet <[email protected]>
+
+ WritableStream rejected promises should be marked as handled as per spec
+ https://bugs.webkit.org/show_bug.cgi?id=215501
+
+ Reviewed by Darin Adler.
+
+ Marking promises that got rejected as handled to ensure onunhandledrejection handler is not called erroneously.
+ Covered by rebased tests.
+
+ * Modules/streams/WritableStreamInternals.js:
+ (setUpWritableStreamDefaultWriter):
+ (writableStreamRejectCloseAndClosedPromiseIfNeeded):
+ (writableStreamDefaultWriterEnsureClosedPromiseRejected):
+ (writableStreamDefaultWriterEnsureReadyPromiseRejected):
+
2020-08-14 Brady Eidson <[email protected]>
Crash inside FrameLoader::defaultRequestCachingPolicy (null DocumentLoader)
Modified: trunk/Source/WebCore/Modules/streams/WritableStreamInternals.js (265731 => 265732)
--- trunk/Source/WebCore/Modules/streams/WritableStreamInternals.js 2020-08-15 13:30:54 UTC (rev 265731)
+++ trunk/Source/WebCore/Modules/streams/WritableStreamInternals.js 2020-08-15 16:25:41 UTC (rev 265732)
@@ -67,9 +67,10 @@
if (state === "writable") {
if (@writableStreamCloseQueuedOrInFlight(stream) || !@getByIdDirectPrivate(stream, "backpressure"))
readyPromiseCapability.@resolve.@call();
- } else if (state === "erroring")
+ } else if (state === "erroring") {
readyPromiseCapability.@reject.@call(@undefined, @getByIdDirectPrivate(stream, "storedError"));
- else if (state === "closed") {
+ @putPromiseInternalField(readyPromiseCapability.@promise, @promiseFieldFlags, @getPromiseInternalField(readyPromiseCapability.@promise, @promiseFieldFlags) | @promiseFlagsIsHandled);
+ } else if (state === "closed") {
readyPromiseCapability.@resolve.@call();
closedPromiseCapability.@resolve.@call();
} else {
@@ -76,7 +77,9 @@
@assert(state === "errored");
const storedError = @getByIdDirectPrivate(stream, "storedError");
readyPromiseCapability.@reject.@call(@undefined, storedError);
+ @putPromiseInternalField(readyPromiseCapability.@promise, @promiseFieldFlags, @getPromiseInternalField(readyPromiseCapability.@promise, @promiseFieldFlags) | @promiseFlagsIsHandled);
closedPromiseCapability.@reject.@call(@undefined, storedError);
+ @putPromiseInternalField(closedPromiseCapability.@promise, @promiseFieldFlags, @getPromiseInternalField(closedPromiseCapability.@promise, @promiseFieldFlags) | @promiseFlagsIsHandled);
}
}
@@ -304,8 +307,11 @@
}
const writer = @getByIdDirectPrivate(stream, "writer");
- if (writer !== @undefined)
- @getByIdDirectPrivate(writer, "closedPromise").@reject.@call(@undefined, storedError);
+ if (writer !== @undefined) {
+ const closedPromise = @getByIdDirectPrivate(writer, "closedPromise");
+ closedPromise.@reject.@call(@undefined, storedError);
+ @putPromiseInternalField(closedPromise.@promise, @promiseFieldFlags, @getPromiseInternalField(closedPromise.@promise, @promiseFieldFlags) | @promiseFlagsIsHandled);
+ }
}
function writableStreamStartErroring(stream, reason)
@@ -375,7 +381,9 @@
function writableStreamDefaultWriterEnsureClosedPromiseRejected(writer, error)
{
- @getByIdDirectPrivate(writer, "closedPromise").@reject.@call(@undefined, error);
+ const closedPromise = @getByIdDirectPrivate(writer, "closedPromise");
+ closedPromise.@reject.@call(@undefined, error);
+ @putPromiseInternalField(closedPromise.@promise, @promiseFieldFlags, @getPromiseInternalField(closedPromise.@promise, @promiseFieldFlags) | @promiseFlagsIsHandled);
}
function writableStreamDefaultWriterEnsureReadyPromiseRejected(writer, error)