Title: [265732] trunk
Revision
265732
Author
[email protected]
Date
2020-08-15 09:25:41 -0700 (Sat, 15 Aug 2020)

Log Message

WritableStream rejected promises should be marked as handled as per spec
https://bugs.webkit.org/show_bug.cgi?id=215501

Reviewed by Darin Adler.

LayoutTests/imported/w3c:

* 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:

Source/WebCore:

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):

Modified Paths

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)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to