[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.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@223044 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebCore/Modules/streams/ReadableStreamInternals.js b/Source/WebCore/Modules/streams/ReadableStreamInternals.js
index 54277f3..869f416 100644
--- a/Source/WebCore/Modules/streams/ReadableStreamInternals.js
+++ b/Source/WebCore/Modules/streams/ReadableStreamInternals.js
@@ -319,9 +319,7 @@
const stream = controller.@controlledReadableStream;
- if (stream.@state === @streamClosed || stream.@state === @streamErrored)
- return;
- if (controller.@closeRequested)
+ if (!@readableStreamDefaultControllerCanCloseOrEnqueue(controller))
return;
if (!controller.@started)
return;
@@ -423,12 +421,10 @@
{
"use strict";
- const stream = controller.@controlledReadableStream;
- @assert(!controller.@closeRequested);
- @assert(stream.@state === @streamReadable);
+ @assert(@readableStreamDefaultControllerCanCloseOrEnqueue(controller));
controller.@closeRequested = true;
if (controller.@queue.content.length === 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.@reader.@readRequests.length) {
@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;
+}