Title: [223044] trunk/Source/WebCore
Revision
223044
Author
[email protected]
Date
2017-10-09 05:53:11 -0700 (Mon, 09 Oct 2017)

Log Message

[Readable Streams API] Implement canCloseOrEnqueue
https://bugs.webkit.org/show_bug.cgi?id=178005

Reviewed by Youenn Fablet.

Implemented readableStreamDefaultControllerCanCloseOrEnqueue [1]. This is
just a refactoring (based on spec) aiming at factorizing a set of tests
that are done at multiple places.

[1] https://streams.spec.whatwg.org/#readable-stream-default-controller-can-close-or-enqueue

No new tests (refactoring, no new behavior).

* Modules/streams/ReadableStreamDefaultController.js:
(enqueue): Updated.
(close): Updated.
* Modules/streams/ReadableStreamInternals.js:
(readableStreamDefaultControllerClose): Updated.
(readableStreamDefaultControllerCanCloseOrEnqueue): Added.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (223043 => 223044)


--- trunk/Source/WebCore/ChangeLog	2017-10-09 09:59:26 UTC (rev 223043)
+++ trunk/Source/WebCore/ChangeLog	2017-10-09 12:53:11 UTC (rev 223044)
@@ -1,3 +1,25 @@
+2017-10-09  Romain Bellessort  <[email protected]>
+
+        [Readable Streams API] Implement canCloseOrEnqueue
+        https://bugs.webkit.org/show_bug.cgi?id=178005
+
+        Reviewed by Youenn Fablet.
+
+        Implemented readableStreamDefaultControllerCanCloseOrEnqueue [1]. This is
+        just a refactoring (based on spec) aiming at factorizing a set of tests
+        that are done at multiple places.
+
+        [1] https://streams.spec.whatwg.org/#readable-stream-default-controller-can-close-or-enqueue
+
+        No new tests (refactoring, no new behavior).
+
+        * Modules/streams/ReadableStreamDefaultController.js:
+        (enqueue): Updated.
+        (close): Updated.
+        * Modules/streams/ReadableStreamInternals.js:
+        (readableStreamDefaultControllerClose): Updated.
+        (readableStreamDefaultControllerCanCloseOrEnqueue): Added.
+
 2017-10-05  Frederic Wang  <[email protected]>
 
         Remove WOFF2 from Source/ThirdParty.

Modified: trunk/Source/WebCore/Modules/streams/ReadableStreamDefaultController.js (223043 => 223044)


--- trunk/Source/WebCore/Modules/streams/ReadableStreamDefaultController.js	2017-10-09 09:59:26 UTC (rev 223043)
+++ trunk/Source/WebCore/Modules/streams/ReadableStreamDefaultController.js	2017-10-09 12:53:11 UTC (rev 223044)
@@ -32,12 +32,9 @@
     if (!@isReadableStreamDefaultController(this))
         throw @makeThisTypeError("ReadableStreamDefaultController", "enqueue");
 
-    if (this.@closeRequested)
-        @throwTypeError("ReadableStreamDefaultController is requested to close");
+    if (!@readableStreamDefaultControllerCanCloseOrEnqueue(this))
+        @throwTypeError("ReadableStreamDefaultController is not in a state where chunk can be enqueued");
 
-    if (this.@controlledReadableStream.@state !== @streamReadable)
-        @throwTypeError("ReadableStream is not readable");
-
     return @readableStreamDefaultControllerEnqueue(this, chunk);
 }
 
@@ -61,12 +58,9 @@
     if (!@isReadableStreamDefaultController(this))
         throw @makeThisTypeError("ReadableStreamDefaultController", "close");
 
-    if (this.@closeRequested)
-        @throwTypeError("ReadableStreamDefaultController is already requested to close");
+    if (!@readableStreamDefaultControllerCanCloseOrEnqueue(this))
+        @throwTypeError("ReadableStreamDefaultController is not in a state where it can be closed");
 
-    if (this.@controlledReadableStream.@state !== @streamReadable)
-        @throwTypeError("ReadableStream is not readable");
-
     @readableStreamDefaultControllerClose(this);
 }
 

Modified: trunk/Source/WebCore/Modules/streams/ReadableStreamInternals.js (223043 => 223044)


--- trunk/Source/WebCore/Modules/streams/ReadableStreamInternals.js	2017-10-09 09:59:26 UTC (rev 223043)
+++ trunk/Source/WebCore/Modules/streams/ReadableStreamInternals.js	2017-10-09 12:53:11 UTC (rev 223044)
@@ -319,10 +319,8 @@
 
     const stream = controller.@controlledReadableStream;
 
-    if (stream.@state === @streamClosed || stream.@state === @streamErrored)
+    if (!@readableStreamDefaultControllerCanCloseOrEnqueue(controller))
         return;
-    if (controller.@closeRequested)
-        return;
     if (!controller.@started)
         return;
     if ((!@isReadableStreamLocked(stream) || !stream.@[email protected]) && @readableStreamDefaultControllerGetDesiredSize(controller) <= 0)
@@ -423,12 +421,10 @@
 {
     "use strict";
 
-    const stream = controller.@controlledReadableStream;
-    @assert(!controller.@closeRequested);
-    @assert(stream.@state === @streamReadable);
+    @assert(@readableStreamDefaultControllerCanCloseOrEnqueue(controller));
     controller.@closeRequested = true;
     if ([email protected] === 0)
-        @readableStreamClose(stream);
+        @readableStreamClose(controller.@controlledReadableStream);
 }
 
 function readableStreamClose(stream)
@@ -464,8 +460,7 @@
     "use strict";
 
     const stream = controller.@controlledReadableStream;
-    @assert(!controller.@closeRequested);
-    @assert(stream.@state === @streamReadable);
+    @assert(@readableStreamDefaultControllerCanCloseOrEnqueue(controller));
 
     if (@isReadableStreamLocked(stream) && stream.@[email protected]) {
         @readableStreamFulfillReadRequest(stream, chunk, false);
@@ -541,3 +536,10 @@
     reader.@ownerReadableStream.@reader = @undefined;
     reader.@ownerReadableStream = @undefined;
 }
+
+function readableStreamDefaultControllerCanCloseOrEnqueue(controller)
+{
+    "use strict";
+
+    return !controller.@closeRequested && controller.@controlledReadableStream.@state === @streamReadable;
+}
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to