Title: [188580] trunk
Revision
188580
Author
calva...@igalia.com
Date
2015-08-18 01:25:22 -0700 (Tue, 18 Aug 2015)

Log Message

[Streams API] Update implementation with the latest spec
https://bugs.webkit.org/show_bug.cgi?id=147978

Reviewed by Darin Adler.

Source/WebCore:

Changed the way the read and closed promises are resolved and the stream is released when an even closes or
errors the stream.

Current tests suffice after changing the order of the promise resolution according to the new spec.

* Modules/streams/ReadableStream.cpp:
(WebCore::ReadableStream::releaseReader): Changed how the promises are resolved.
(WebCore::ReadableStream::changeStateToErrored): Changed how the promises are resolved and manually releasing
the stream instead of calling releaseReader according to the spec.

LayoutTests:

Changed tests about the order of the read and closed promise resolution.

* streams/readable-stream-reader-read.html:
* streams/reference-implementation/readable-stream-tee.html:
* streams/reference-implementation/readable-stream-templated.html:
* streams/reference-implementation/readable-stream.html:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (188579 => 188580)


--- trunk/LayoutTests/ChangeLog	2015-08-18 06:33:51 UTC (rev 188579)
+++ trunk/LayoutTests/ChangeLog	2015-08-18 08:25:22 UTC (rev 188580)
@@ -1,3 +1,17 @@
+2015-08-18  Xabier Rodriguez Calvar  <calva...@igalia.com>
+
+        [Streams API] Update implementation with the latest spec
+        https://bugs.webkit.org/show_bug.cgi?id=147978
+
+        Reviewed by Darin Adler.
+
+        Changed tests about the order of the read and closed promise resolution.
+
+        * streams/readable-stream-reader-read.html:
+        * streams/reference-implementation/readable-stream-tee.html:
+        * streams/reference-implementation/readable-stream-templated.html:
+        * streams/reference-implementation/readable-stream.html:
+
 2015-08-17  Commit Queue  <commit-qu...@webkit.org>
 
         Unreviewed, rolling out r188539, r188544, r188552, and

Modified: trunk/LayoutTests/streams/readable-stream-reader-read.html (188579 => 188580)


--- trunk/LayoutTests/streams/readable-stream-reader-read.html	2015-08-18 06:33:51 UTC (rev 188579)
+++ trunk/LayoutTests/streams/readable-stream-reader-read.html	2015-08-18 08:25:22 UTC (rev 188580)
@@ -15,18 +15,15 @@
 
     reader.read().then(test1.step_func(function(result) {
         assert_object_equals(result, { value: undefined, done: true }, 'read() should fulfill with close');
-        assert_equals(counter, 1);
-        counter++;
+        assert_equals(++counter, 1);
     }));
     reader.read().then(test1.step_func(function(result) {
         assert_object_equals(result, { value: undefined, done: true }, 'read() should fulfill with close');
-        assert_equals(counter, 2);
-        counter++;
-        test1.done();
+        assert_equals(++counter, 2);
     }));
     reader.closed.then(test1.step_func(function() {
-        assert_equals(counter, 0);
-        counter++;
+        assert_equals(++counter, 3);
+        test1.done();
     }));
 
     controller.close();
@@ -118,23 +115,20 @@
         assert_unreached('read() should reject on an errored stream');
     }), test4.step_func(function(err) {
         assert_equals(myError, err);
-        assert_equals(counter, 1);
-        counter++;
+        assert_equals(++counter, 1);
     }));
     reader.read().then(test4.step_func(function() {
         assert_unreached('read() should reject on an errored stream');
     }), test4.step_func(function(err) {
         assert_equals(myError, err);
-        assert_equals(counter, 2);
-        counter++;
-        test4.done();
+        assert_equals(++counter, 2);
     }));
     reader.closed.then(test4.step_func(function() {
         assert_unreached('read() should reject on an errored stream');
     }), test4.step_func(function(err) {
         assert_equals(myError, err);
-        assert_equals(counter, 0);
-        counter++;
+        assert_equals(++counter, 3);
+        test4.done();
     }));
 
     var myError = { potato: 'mashed' };

Modified: trunk/LayoutTests/streams/reference-implementation/readable-stream-tee.html (188579 => 188580)


--- trunk/LayoutTests/streams/reference-implementation/readable-stream-tee.html	2015-08-18 06:33:51 UTC (rev 188579)
+++ trunk/LayoutTests/streams/reference-implementation/readable-stream-tee.html	2015-08-18 08:25:22 UTC (rev 188580)
@@ -16,7 +16,6 @@
 
 var test1 = async_test('ReadableStream teeing: should be able to read one branch to the end without affecting the other');
 test1.step(function() {
-    var closedCalled = false;
     var readCalls = 0;
     const rs = new ReadableStream({
         start: function(c) {
@@ -33,7 +32,8 @@
     var reader2 = branch2.getReader();
 
     reader1.closed.then(test1.step_func(function() {
-        closedCalled = true;
+        assert_equals(readCalls, 4);
+        test1.done();
     })).catch(test1.step_func(function(e) { assert_unreached(e); }));
     reader2.closed.then(test1.step_func(function() { assert_unreached('branch2 should not be closed'); }));
 
@@ -47,9 +47,7 @@
     }));
     reader1.read().then(test1.step_func(function(r) {
         assert_object_equals(r, { value: undefined, done: true }, 'third read() from branch1 should be done');
-        assert_true(closedCalled);
-        assert_equals(++readCalls, 4);
-        test1.done();
+        ++readCalls;
     }));
 
     reader2.read().then(test1.step_func(function(r) {

Modified: trunk/LayoutTests/streams/reference-implementation/readable-stream-templated.html (188579 => 188580)


--- trunk/LayoutTests/streams/reference-implementation/readable-stream-templated.html	2015-08-18 06:33:51 UTC (rev 188579)
+++ trunk/LayoutTests/streams/reference-implementation/readable-stream-templated.html	2015-08-18 08:25:22 UTC (rev 188580)
@@ -81,12 +81,13 @@
 
         reader.closed.catch(test1.step_func(function(e) {
             assert_equals(e, error, 'reader.closed should reject with the error');
-            ++promisesCount;
+            if (++promisesCount === 2)
+                test1.done();
         }));
         reader.read().catch(test1.step_func(function(e) {
             assert_equals(e, error, 'reader.read() should reject with the error');
-            assert_equals(++promisesCount, 2);
-            test1.done();
+            if (++promisesCount === 2)
+                test1.done();
         }));
     });
 

Modified: trunk/LayoutTests/streams/reference-implementation/readable-stream.html (188579 => 188580)


--- trunk/LayoutTests/streams/reference-implementation/readable-stream.html	2015-08-18 06:33:51 UTC (rev 188579)
+++ trunk/LayoutTests/streams/reference-implementation/readable-stream.html	2015-08-18 08:25:22 UTC (rev 188580)
@@ -240,15 +240,15 @@
 
     reader.closed.catch(test5.step_func(function(e) {
         closed = true;
-        assert_false(read);
+        assert_true(read);
         assert_equals(e, error, 'closed should reject with the thrown error');
+        test5.done();
     }));
 
     reader.read().catch(test5.step_func(function(e) {
         read = true;
-        assert_true(closed);
+        assert_false(closed);
         assert_equals(e, error, 'read() should reject with the thrown error');
-        test5.done();
     }));
 });
 

Modified: trunk/Source/WebCore/ChangeLog (188579 => 188580)


--- trunk/Source/WebCore/ChangeLog	2015-08-18 06:33:51 UTC (rev 188579)
+++ trunk/Source/WebCore/ChangeLog	2015-08-18 08:25:22 UTC (rev 188580)
@@ -1,3 +1,20 @@
+2015-08-18  Xabier Rodriguez Calvar  <calva...@igalia.com>
+
+        [Streams API] Update implementation with the latest spec
+        https://bugs.webkit.org/show_bug.cgi?id=147978
+
+        Reviewed by Darin Adler.
+
+        Changed the way the read and closed promises are resolved and the stream is released when an even closes or
+        errors the stream.
+
+        Current tests suffice after changing the order of the promise resolution according to the new spec.
+
+        * Modules/streams/ReadableStream.cpp:
+        (WebCore::ReadableStream::releaseReader): Changed how the promises are resolved.
+        (WebCore::ReadableStream::changeStateToErrored): Changed how the promises are resolved and manually releasing
+        the stream instead of calling releaseReader according to the spec.
+
 2015-08-17  Zalan Bujtas  <za...@apple.com>
 
         Outline with auto style leaves bits behind when the the box is moved.

Modified: trunk/Source/WebCore/Modules/streams/ReadableStream.cpp (188579 => 188580)


--- trunk/Source/WebCore/Modules/streams/ReadableStream.cpp	2015-08-18 06:33:51 UTC (rev 188579)
+++ trunk/Source/WebCore/Modules/streams/ReadableStream.cpp	2015-08-18 08:25:22 UTC (rev 188580)
@@ -90,15 +90,14 @@
 
 void ReadableStream::releaseReader()
 {
-    if (m_closedPromise)
-        m_closedPromise.value().resolve(nullptr);
-
     for (auto& request : m_readRequests)
         request.resolveEnd();
+    if (m_reader)
+        m_releasedReaders.append(WTF::move(m_reader));
 
+    if (m_closedPromise)
+        m_closedPromise.value().resolve(nullptr);
     clearCallbacks();
-    if (m_reader)
-        m_releasedReaders.append(WTF::move(m_reader));
 }
 
 void ReadableStream::changeStateToErrored()
@@ -107,18 +106,20 @@
         return;
 
     clearValues();
+
     m_state = State::Errored;
 
+    if (!m_reader)
+        return;
+
     JSC::JSValue error = this->error();
-    if (m_closedPromise)
-        m_closedPromise.value().reject(error);
-
     for (auto& request : m_readRequests)
         request.reject(error);
+    m_releasedReaders.append(WTF::move(m_reader));
 
+    if (m_closedPromise)
+        m_closedPromise.value().reject(error);
     clearCallbacks();
-    if (m_reader)
-        releaseReader();
 }
 
 void ReadableStream::start()
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to