Title: [216926] trunk
Revision
216926
Author
commit-qu...@webkit.org
Date
2017-05-16 05:47:22 -0700 (Tue, 16 May 2017)

Log Message

[Readable Streams API] Implement ReadableStreamBYOBReader releaseLock()
https://bugs.webkit.org/show_bug.cgi?id=172111

Patch by Romain Bellessort <romain.belless...@crf.canon.fr> on 2017-05-16
Reviewed by Chris Dumez.

LayoutTests/imported/w3c:

Updated test expectations.

* web-platform-tests/streams/readable-byte-streams/general-expected.txt: Updated.
* web-platform-tests/streams/readable-byte-streams/general.dedicatedworker-expected.txt: Updated.

Source/WebCore:

Implemented ReadableStreamBYOBReader releaseLock():
- https://streams.spec.whatwg.org/#byob-reader-release-lock;
- https://streams.spec.whatwg.org/#readable-stream-reader-generic-release.

Added tests to check releaseLock behavior.

* Modules/streams/ReadableStreamBYOBReader.js:
(releaseLock): Implemented.
* Modules/streams/ReadableStreamInternals.js:
(readableStreamReaderGenericRelease): Aligned with spec.

LayoutTests:

Added tests to check releaseLock() behavior.

* streams/readable-stream-byob-reader-expected.txt: Updated.
* streams/readable-stream-byob-reader.js: Added new tests.

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (216925 => 216926)


--- trunk/LayoutTests/ChangeLog	2017-05-16 10:32:22 UTC (rev 216925)
+++ trunk/LayoutTests/ChangeLog	2017-05-16 12:47:22 UTC (rev 216926)
@@ -1,3 +1,15 @@
+2017-05-16  Romain Bellessort  <romain.belless...@crf.canon.fr>
+
+        [Readable Streams API] Implement ReadableStreamBYOBReader releaseLock()
+        https://bugs.webkit.org/show_bug.cgi?id=172111
+
+        Reviewed by Chris Dumez.
+
+        Added tests to check releaseLock() behavior.
+
+        * streams/readable-stream-byob-reader-expected.txt: Updated.
+        * streams/readable-stream-byob-reader.js: Added new tests.
+
 2017-05-16  Per Arne Vollan  <pvol...@apple.com>
 
         Unreviewed Windows gardening. Skip svg animation test, since image throttling behaves differently on WK1.

Modified: trunk/LayoutTests/imported/w3c/ChangeLog (216925 => 216926)


--- trunk/LayoutTests/imported/w3c/ChangeLog	2017-05-16 10:32:22 UTC (rev 216925)
+++ trunk/LayoutTests/imported/w3c/ChangeLog	2017-05-16 12:47:22 UTC (rev 216926)
@@ -1,3 +1,15 @@
+2017-05-16  Romain Bellessort  <romain.belless...@crf.canon.fr>
+
+        [Readable Streams API] Implement ReadableStreamBYOBReader releaseLock()
+        https://bugs.webkit.org/show_bug.cgi?id=172111
+
+        Reviewed by Chris Dumez.
+
+        Updated test expectations.
+
+        * web-platform-tests/streams/readable-byte-streams/general-expected.txt: Updated.
+        * web-platform-tests/streams/readable-byte-streams/general.dedicatedworker-expected.txt: Updated.
+
 2017-05-15  Chris Dumez  <cdu...@apple.com>
 
         Import css/geometry-1 web-platform-tests

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/streams/readable-byte-streams/general-expected.txt (216925 => 216926)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/streams/readable-byte-streams/general-expected.txt	2017-05-16 10:32:22 UTC (rev 216925)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/streams/readable-byte-streams/general-expected.txt	2017-05-16 12:47:22 UTC (rev 216926)
@@ -1,7 +1,7 @@
 
 PASS getReader({mode: "byob"}) throws on non-bytes streams 
 PASS ReadableStream with byte source can be constructed with no errors 
-FAIL getReader({mode}) must perform ToString() ReadableStreamBYOBReader releaseLock() is not implemented
+PASS getReader({mode}) must perform ToString() 
 PASS ReadableStream with byte source: Construct and expect start and pull being called 
 PASS ReadableStream with byte source: No automatic pull call if start doesn't finish 
 PASS ReadableStream with byte source: Construct with highWaterMark of 0 
@@ -8,7 +8,7 @@
 FAIL ReadableStream with byte source: desiredSize when closed assert_equals: after closing, desiredSize must be 0 expected 0 but got 10
 FAIL ReadableStream with byte source: desiredSize when errored assert_equals: after erroring, desiredSize must be null expected (object) null but got (number) 10
 PASS ReadableStream with byte source: getReader(), then releaseLock() 
-FAIL ReadableStream with byte source: getReader() with mode set to byob, then releaseLock() ReadableStreamBYOBReader releaseLock() is not implemented
+PASS ReadableStream with byte source: getReader() with mode set to byob, then releaseLock() 
 PASS ReadableStream with byte source: Test that closing a stream does not release a reader automatically 
 PASS ReadableStream with byte source: Test that closing a stream does not release a BYOB reader automatically 
 PASS ReadableStream with byte source: Test that erroring a stream does not release a reader automatically 

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/streams/readable-byte-streams/general.dedicatedworker-expected.txt (216925 => 216926)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/streams/readable-byte-streams/general.dedicatedworker-expected.txt	2017-05-16 10:32:22 UTC (rev 216925)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/streams/readable-byte-streams/general.dedicatedworker-expected.txt	2017-05-16 12:47:22 UTC (rev 216926)
@@ -1,7 +1,7 @@
 
 PASS getReader({mode: "byob"}) throws on non-bytes streams 
 PASS ReadableStream with byte source can be constructed with no errors 
-FAIL getReader({mode}) must perform ToString() ReadableStreamBYOBReader releaseLock() is not implemented
+PASS getReader({mode}) must perform ToString() 
 PASS ReadableStream with byte source: Construct and expect start and pull being called 
 PASS ReadableStream with byte source: No automatic pull call if start doesn't finish 
 PASS ReadableStream with byte source: Construct with highWaterMark of 0 
@@ -8,7 +8,7 @@
 FAIL ReadableStream with byte source: desiredSize when closed assert_equals: after closing, desiredSize must be 0 expected 0 but got 10
 FAIL ReadableStream with byte source: desiredSize when errored assert_equals: after erroring, desiredSize must be null expected (object) null but got (number) 10
 PASS ReadableStream with byte source: getReader(), then releaseLock() 
-FAIL ReadableStream with byte source: getReader() with mode set to byob, then releaseLock() ReadableStreamBYOBReader releaseLock() is not implemented
+PASS ReadableStream with byte source: getReader() with mode set to byob, then releaseLock() 
 PASS ReadableStream with byte source: Test that closing a stream does not release a reader automatically 
 PASS ReadableStream with byte source: Test that closing a stream does not release a BYOB reader automatically 
 PASS ReadableStream with byte source: Test that erroring a stream does not release a reader automatically 

Modified: trunk/LayoutTests/streams/readable-stream-byob-reader-expected.txt (216925 => 216926)


--- trunk/LayoutTests/streams/readable-stream-byob-reader-expected.txt	2017-05-16 10:32:22 UTC (rev 216925)
+++ trunk/LayoutTests/streams/readable-stream-byob-reader-expected.txt	2017-05-16 12:47:22 UTC (rev 216926)
@@ -10,6 +10,9 @@
 PASS If controller has already been closed when ReadableStreamBYOBReader is created, ReadableStreamBYOBReader.closed should be a promise resolved with undefined 
 PASS If controller is errored after ReadableStreamBYOBReader creation, ReadableStreamBYOBReader.closed should be a promise rejected with the same error 
 PASS If controller has already been errored when ReadableStreamBYOBReader is created, ReadableStreamBYOBReader.closed should be a promise rejected with the same error 
+PASS Calling ReadableStreamBYOBReader.releaseLock() with a this object different from ReadableStreamBYOBReader should be rejected 
+PASS Calling ReadableStreamBYOBReader.releaseLock() on a stream that is readable should result in ReadableStreamBYOBReader.closed promise to be rejected with a TypeError 
+PASS Calling ReadableStreamBYOBReader.releaseLock() on a stream that is not readable should result in ReadableStreamBYOBReader.closed promise to be rejected with a TypeError 
 PASS Getting a ReadableStreamBYOBReader should succeed 
 PASS ReadableStreamBYOBReader instances should have the correct list of properties 
 PASS Calling getReader() with a this object different from ReadableStream should throw a TypeError 
@@ -21,4 +24,7 @@
 PASS If controller has already been closed when ReadableStreamBYOBReader is created, ReadableStreamBYOBReader.closed should be a promise resolved with undefined 
 PASS If controller is errored after ReadableStreamBYOBReader creation, ReadableStreamBYOBReader.closed should be a promise rejected with the same error 
 PASS If controller has already been errored when ReadableStreamBYOBReader is created, ReadableStreamBYOBReader.closed should be a promise rejected with the same error 
+PASS Calling ReadableStreamBYOBReader.releaseLock() with a this object different from ReadableStreamBYOBReader should be rejected 
+PASS Calling ReadableStreamBYOBReader.releaseLock() on a stream that is readable should result in ReadableStreamBYOBReader.closed promise to be rejected with a TypeError 
+PASS Calling ReadableStreamBYOBReader.releaseLock() on a stream that is not readable should result in ReadableStreamBYOBReader.closed promise to be rejected with a TypeError 
 

Modified: trunk/LayoutTests/streams/readable-stream-byob-reader.js (216925 => 216926)


--- trunk/LayoutTests/streams/readable-stream-byob-reader.js	2017-05-16 10:32:22 UTC (rev 216925)
+++ trunk/LayoutTests/streams/readable-stream-byob-reader.js	2017-05-16 12:47:22 UTC (rev 216926)
@@ -178,4 +178,41 @@
     return promise_rejects(test, myError, reader.closed);
 }, "If controller has already been errored when ReadableStreamBYOBReader is created, ReadableStreamBYOBReader.closed should be a promise rejected with the same error");
 
+test(function() {
+    const rs = new ReadableStream({ type: 'bytes' });
+    const reader = rs.getReader({ mode: 'byob' });
+    assert_throws(new TypeError("Can only call ReadableStreamBYOBReader.releaseLock() on instances of ReadableStreamBYOBReader"),
+        function() { reader.releaseLock.apply(rs); });
+}, "Calling ReadableStreamBYOBReader.releaseLock() with a this object different from ReadableStreamBYOBReader should be rejected");
+
+promise_test(function(test) {
+    const rs = new ReadableStream({
+        type: "bytes"
+    });
+
+    const reader = rs.getReader({ mode: 'byob' });
+    reader.releaseLock();
+    const myError = new TypeError();
+
+    return promise_rejects(test, myError, reader.closed);
+}, "Calling ReadableStreamBYOBReader.releaseLock() on a stream that is readable should result in ReadableStreamBYOBReader.closed promise to be rejected with a TypeError");
+
+promise_test(function(test) {
+    let controller;
+
+    const rs = new ReadableStream({
+        start: function(c) {
+            controller = c;
+        },
+        type: "bytes"
+    });
+
+    const reader = rs.getReader({ mode: 'byob' });
+    controller.close();
+    reader.releaseLock();
+    const myError = new TypeError();
+
+    return promise_rejects(test, myError, reader.closed);
+}, "Calling ReadableStreamBYOBReader.releaseLock() on a stream that is not readable should result in ReadableStreamBYOBReader.closed promise to be rejected with a TypeError");
+
 done();

Modified: trunk/Source/WebCore/ChangeLog (216925 => 216926)


--- trunk/Source/WebCore/ChangeLog	2017-05-16 10:32:22 UTC (rev 216925)
+++ trunk/Source/WebCore/ChangeLog	2017-05-16 12:47:22 UTC (rev 216926)
@@ -1,3 +1,21 @@
+2017-05-16  Romain Bellessort  <romain.belless...@crf.canon.fr>
+
+        [Readable Streams API] Implement ReadableStreamBYOBReader releaseLock()
+        https://bugs.webkit.org/show_bug.cgi?id=172111
+
+        Reviewed by Chris Dumez.
+
+        Implemented ReadableStreamBYOBReader releaseLock():
+        - https://streams.spec.whatwg.org/#byob-reader-release-lock;
+        - https://streams.spec.whatwg.org/#readable-stream-reader-generic-release.
+
+        Added tests to check releaseLock behavior.
+
+        * Modules/streams/ReadableStreamBYOBReader.js:
+        (releaseLock): Implemented.
+        * Modules/streams/ReadableStreamInternals.js:
+        (readableStreamReaderGenericRelease): Aligned with spec.
+
 2017-05-16  Carlos Garcia Campos  <cgar...@igalia.com>
 
         Unreviewed. Try to fix GTK+ build with MEDIA_STREAM enabled after r216918.

Modified: trunk/Source/WebCore/Modules/streams/ReadableStreamBYOBReader.js (216925 => 216926)


--- trunk/Source/WebCore/Modules/streams/ReadableStreamBYOBReader.js	2017-05-16 10:32:22 UTC (rev 216925)
+++ trunk/Source/WebCore/Modules/streams/ReadableStreamBYOBReader.js	2017-05-16 12:47:22 UTC (rev 216926)
@@ -49,8 +49,16 @@
 {
     "use strict";
 
-    // FIXME: Implement appropriate behavior.
-    @throwTypeError("ReadableStreamBYOBReader releaseLock() is not implemented");
+    if (!@isReadableStreamBYOBReader(this))
+        throw @makeThisTypeError("ReadableStreamBYOBReader", "releaseLock");
+
+    if (!this.@ownerReadableStream)
+        return;
+
+    if (this.@readIntoRequests.length)
+        @throwTypeError("There are still pending read requests, cannot release the lock");
+
+    @readableStreamReaderGenericRelease(this);
 }
 
 function closed()

Modified: trunk/Source/WebCore/Modules/streams/ReadableStreamInternals.js (216925 => 216926)


--- trunk/Source/WebCore/Modules/streams/ReadableStreamInternals.js	2017-05-16 10:32:22 UTC (rev 216925)
+++ trunk/Source/WebCore/Modules/streams/ReadableStreamInternals.js	2017-05-16 12:47:22 UTC (rev 216926)
@@ -498,12 +498,12 @@
     @assert(!!reader.@ownerReadableStream);
     @assert(reader.@ownerReadableStream.@reader === reader);
 
-    if (reader.@ownerReadableStream.@state === @streamReadable) {
+    if (reader.@ownerReadableStream.@state === @streamReadable)
         reader.@closedPromiseCapability.@reject.@call(@undefined, new @TypeError("releasing lock of reader whose stream is still in readable state"));
-        reader.@closedPromiseCapability.@promise.@promiseIsHandled = true;
-    } else
+    else
         reader.@closedPromiseCapability = { @promise: @newHandledRejectedPromise(new @TypeError("reader released lock")) };
 
+    reader.@closedPromiseCapability.@promise.@promiseIsHandled = true;
     reader.@ownerReadableStream.@reader = @undefined;
-    reader.@ownerReadableStream = null;
+    reader.@ownerReadableStream = @undefined;
 }
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to