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;
}