[Streams API] ReadableStreamController methods should throw if its stream is not...
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 19 Jul 2016 17:27:32 +0000 (17:27 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 19 Jul 2016 17:27:32 +0000 (17:27 +0000)
https://bugs.webkit.org/show_bug.cgi?id=159871

Patch by Youenn Fablet <youenn@apple.com> on 2016-07-19
Reviewed by Xabier Rodriguez-Calvar.

LayoutTests/imported/w3c:

* web-platform-tests/streams/readable-streams/bad-underlying-sources.https-expected.txt:

Source/WebCore:

Spec now mandates close and enqueue to throw if ReadableStream is not readable.
Covered by rebased and/or modified tests.

* Modules/streams/ReadableStreamController.js:
(enqueue): Throwing a TypeError if controlled stream is not readable.
(close): Ditto.

LayoutTests:

* streams/reference-implementation/pipe-to-options.html: Updated test case according whatwg original test.
* streams/reference-implementation/readable-stream-templated.html: Ditto.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@203411 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/imported/w3c/ChangeLog
LayoutTests/imported/w3c/web-platform-tests/streams/readable-streams/bad-underlying-sources.https-expected.txt
LayoutTests/streams/reference-implementation/pipe-to-options.html
LayoutTests/streams/reference-implementation/readable-stream-templated.html
Source/WebCore/ChangeLog
Source/WebCore/Modules/streams/ReadableStreamController.js

index 109bf57..033d75b 100644 (file)
@@ -1,3 +1,13 @@
+2016-07-19  Youenn Fablet  <youenn@apple.com>
+
+        [Streams API] ReadableStreamController methods should throw if its stream is not readable
+        https://bugs.webkit.org/show_bug.cgi?id=159871
+
+        Reviewed by Xabier Rodriguez-Calvar.
+
+        * streams/reference-implementation/pipe-to-options.html: Updated test case according whatwg original test.
+        * streams/reference-implementation/readable-stream-templated.html: Ditto.
+
 2016-07-19  Simon Fraser  <simon.fraser@apple.com>
 
         Bubbles appear split for a brief moment in Messages
index 8b6bc41..c88aa06 100644 (file)
@@ -1,3 +1,12 @@
+2016-07-19  Youenn Fablet  <youenn@apple.com>
+
+        [Streams API] ReadableStreamController methods should throw if its stream is not readable
+        https://bugs.webkit.org/show_bug.cgi?id=159871
+
+        Reviewed by Xabier Rodriguez-Calvar.
+
+        * web-platform-tests/streams/readable-streams/bad-underlying-sources.https-expected.txt:
+
 2016-07-19  Youenn Fablet  <youennf@gmail.com>
 
         Refresh WPT tests up to 98ec1ad
index 7bef245..43da677 100644 (file)
@@ -7,14 +7,14 @@ PASS Underlying source pull: throwing getter (second pull)
 PASS Underlying source pull: throwing method (second pull) 
 PASS Underlying source cancel: throwing getter 
 PASS Underlying source cancel: throwing method 
-FAIL Underlying source: calling enqueue on an empty canceled stream should throw assert_throws: Calling enqueue after canceling should throw function "() => controller.enqueue('a')" did not throw
-FAIL Underlying source: calling enqueue on a non-empty canceled stream should throw assert_throws: Calling enqueue after canceling should throw function "() => controller.enqueue('c')" did not throw
+PASS Underlying source: calling enqueue on an empty canceled stream should throw 
+PASS Underlying source: calling enqueue on a non-empty canceled stream should throw 
 PASS Underlying source: calling enqueue on a closed stream should throw 
-FAIL Underlying source: calling enqueue on an errored stream should throw assert_throws: call to enqueue should throw the error function "() => c.enqueue('a')" threw object "Error: boo" ("Error") expected object "TypeError" ("TypeError")
+PASS Underlying source: calling enqueue on an errored stream should throw 
 PASS Underlying source: calling close twice on an empty stream should throw the second time 
 PASS Underlying source: calling close twice on a non-empty stream should throw the second time 
-FAIL Underlying source: calling close on an empty canceled stream should throw assert_throws: Calling close after canceling should throw function "() => controller.close()" did not throw
-FAIL Underlying source: calling close on a non-empty canceled stream should throw assert_throws: Calling close after canceling should throw function "() => controller.close()" did not throw
+PASS Underlying source: calling close on an empty canceled stream should throw 
+PASS Underlying source: calling close on a non-empty canceled stream should throw 
 PASS Underlying source: calling close after error should throw 
 PASS Underlying source: calling error twice should throw the second time 
 PASS Underlying source: calling error after close should throw 
@@ -30,14 +30,14 @@ PASS Underlying source pull: throwing getter (second pull)
 PASS Underlying source pull: throwing method (second pull) 
 PASS Underlying source cancel: throwing getter 
 PASS Underlying source cancel: throwing method 
-FAIL Underlying source: calling enqueue on an empty canceled stream should throw assert_throws: Calling enqueue after canceling should throw function "() => controller.enqueue('a')" did not throw
-FAIL Underlying source: calling enqueue on a non-empty canceled stream should throw assert_throws: Calling enqueue after canceling should throw function "() => controller.enqueue('c')" did not throw
+PASS Underlying source: calling enqueue on an empty canceled stream should throw 
+PASS Underlying source: calling enqueue on a non-empty canceled stream should throw 
 PASS Underlying source: calling enqueue on a closed stream should throw 
-FAIL Underlying source: calling enqueue on an errored stream should throw assert_throws: call to enqueue should throw the error function "() => c.enqueue('a')" threw object "Error: boo" ("Error") expected object "TypeError" ("TypeError")
+PASS Underlying source: calling enqueue on an errored stream should throw 
 PASS Underlying source: calling close twice on an empty stream should throw the second time 
 PASS Underlying source: calling close twice on a non-empty stream should throw the second time 
-FAIL Underlying source: calling close on an empty canceled stream should throw assert_throws: Calling close after canceling should throw function "() => controller.close()" did not throw
-FAIL Underlying source: calling close on a non-empty canceled stream should throw assert_throws: Calling close after canceling should throw function "() => controller.close()" did not throw
+PASS Underlying source: calling close on an empty canceled stream should throw 
+PASS Underlying source: calling close on a non-empty canceled stream should throw 
 PASS Underlying source: calling close after error should throw 
 PASS Underlying source: calling error twice should throw the second time 
 PASS Underlying source: calling error after close should throw 
index abebd1c..735c450 100644 (file)
@@ -14,7 +14,7 @@ test1.step(function() {
             c.enqueue('a');
             setTimeout(test1.step_func(function() { c.enqueue('b'); }), 200);
             setTimeout(test1.step_func(function() {
-                c.enqueue('c'); // Enqueue after cancel should not throw.
+                assert_throws(new TypeError(), function() { c.enqueue('c'); }); // Enqueue after cancel should throw.
                 assert_true(cancelCalled);
                 test1.done();
             }), 500);
@@ -45,7 +45,7 @@ test2.step(function() {
             c.enqueue('a');
             setTimeout(test2.step_func(function() { c.enqueue('b'); }), 200);
             setTimeout(test2.step_func(function() {
-                c.enqueue('c'); // Enqueue after cancel should not throw.
+                assert_throws(new TypeError(), function() { c.enqueue('c'); }); // Enqueue after cancel should throw.
                 assert_true(cancelCalled);
                 test2.done();
             }), 500);
index dbfc0c7..d0f9db7 100644 (file)
@@ -400,10 +400,23 @@ templatedRSTwoChunksClosed('ReadableStream (two chunks enqueued, then closed)',
 
 templatedRSTwoChunksClosed('ReadableStream (two chunks enqueued async, then closed)', function() {
     return new ReadableStream({
+        _cancelled: false,
         start: function(c) {
-            setTimeout(function() { c.enqueue(chunks[0]); }, 100);
-            setTimeout(function() { c.enqueue(chunks[1]); }, 200);
-            setTimeout(function() { c.close(); }, 300);
+            setTimeout(() => {
+                if (!this._cancelled)
+                    c.enqueue(chunks[0]);
+            }, 100);
+            setTimeout(() => {
+                if (!this._cancelled)
+                    c.enqueue(chunks[1]);
+            }, 200);
+            setTimeout(() => {
+                if (!this._cancelled)
+                    c.close();
+            }, 300);
+        },
+        cancel: function(reason) {
+             this._cancelled = true;
         }
     })},
     chunks
index d00949e..4275bbb 100644 (file)
@@ -1,3 +1,17 @@
+2016-07-19  Youenn Fablet  <youenn@apple.com>
+
+        [Streams API] ReadableStreamController methods should throw if its stream is not readable
+        https://bugs.webkit.org/show_bug.cgi?id=159871
+
+        Reviewed by Xabier Rodriguez-Calvar.
+
+        Spec now mandates close and enqueue to throw if ReadableStream is not readable.
+        Covered by rebased and/or modified tests.
+
+        * Modules/streams/ReadableStreamController.js:
+        (enqueue): Throwing a TypeError if controlled stream is not readable.
+        (close): Ditto.
+
 2016-07-19  Simon Fraser  <simon.fraser@apple.com>
 
         Bubbles appear split for a brief moment in Messages
index 5fde9cc..f01b4a8 100644 (file)
@@ -33,12 +33,13 @@ function enqueue(chunk)
         throw new @TypeError("Function should be called on a ReadableStreamController");
 
     const stream = this.@controlledReadableStream;
-    if (stream.@state === @streamErrored)
-        throw stream.@storedError;
 
     if (stream.@closeRequested)
         throw new @TypeError("ReadableStream is requested to close");
 
+    if (stream.@state !== @streamReadable)
+        throw new @TypeError("ReadableStream is not readable");
+
     return @enqueueInReadableStream(stream, chunk);
 }
 
@@ -67,8 +68,8 @@ function close()
     if (stream.@closeRequested)
         throw new @TypeError("ReadableStream is already requested to close");
 
-    if (stream.@state === @streamErrored)
-        throw new @TypeError("ReadableStream is already errored");
+    if (stream.@state !== @streamReadable)
+        throw new @TypeError("ReadableStream is not readable");
 
     @closeReadableStream(stream);
 }