[Streams API] Finish pulling must always be done asynchronously as it is the expected...
authorcalvaris@igalia.com <calvaris@igalia.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 30 Jun 2015 09:53:40 +0000 (09:53 +0000)
committercalvaris@igalia.com <calvaris@igalia.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 30 Jun 2015 09:53:40 +0000 (09:53 +0000)
https://bugs.webkit.org/show_bug.cgi?id=146408

Reviewed by Darin Adler.

Source/WebCore:

Current tests cover the case already.

* Modules/streams/ReadableStream.cpp:
(WebCore::ReadableStream::pull): Call finishPull() in a postTask to delay it and simulate the promise
resolution.

LayoutTests:

* streams/reference-implementation/readable-stream-expected.txt: Updated expectation to PASS

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

LayoutTests/ChangeLog
LayoutTests/streams/reference-implementation/readable-stream-expected.txt
Source/WebCore/ChangeLog
Source/WebCore/Modules/streams/ReadableStream.cpp

index 0f6915f..aa09f20 100644 (file)
@@ -1,5 +1,14 @@
 2015-06-30  Youenn Fablet  <youenn.fablet@crf.canon.fr> and Xabier Rodriguez Calvar  <calvaris@igalia.com>
 
+        [Streams API] Finish pulling must always be done asynchronously as it is the expected promise behavior (according to the spec)
+        https://bugs.webkit.org/show_bug.cgi?id=146408
+
+        Reviewed by Darin Adler.
+
+        * streams/reference-implementation/readable-stream-expected.txt: Updated expectation to PASS
+
+2015-06-30  Youenn Fablet  <youenn.fablet@crf.canon.fr> and Xabier Rodriguez Calvar  <calvaris@igalia.com>
+
         [Streams API] Synced bad strategy test with reference implementation
         https://bugs.webkit.org/show_bug.cgi?id=146411
 
index ae5d1fc..4ad914e 100644 (file)
@@ -13,7 +13,7 @@ PASS ReadableStream start should be able to return a promise and reject it
 PASS ReadableStream should be able to enqueue different objects. 
 PASS ReadableStream: if pull rejects, it should error the stream 
 PASS ReadableStream: should only call pull once upon starting the stream 
-FAIL ReadableStream: should call pull when trying to read from a started, empty stream assert_equals: pull should be called again in reaction to calling read expected 2 but got 3
+PASS ReadableStream: should call pull when trying to read from a started, empty stream 
 PASS ReadableStream: should only call pull once on a non-empty stream read from before start fulfills 
 PASS ReadableStream: should only call pull once on a non-empty stream read from after start fulfills 
 PASS ReadableStream: should not call pull() in reaction to read()ing the last chunk, if draining 
index 6790ce3..6f6b10a 100644 (file)
@@ -1,5 +1,18 @@
 2015-06-30  Youenn Fablet  <youenn.fablet@crf.canon.fr> and Xabier Rodriguez Calvar  <calvaris@igalia.com>
 
+        [Streams API] Finish pulling must always be done asynchronously as it is the expected promise behavior (according to the spec)
+        https://bugs.webkit.org/show_bug.cgi?id=146408
+
+        Reviewed by Darin Adler.
+
+        Current tests cover the case already.
+
+        * Modules/streams/ReadableStream.cpp:
+        (WebCore::ReadableStream::pull): Call finishPull() in a postTask to delay it and simulate the promise
+        resolution.
+
+2015-06-30  Youenn Fablet  <youenn.fablet@crf.canon.fr> and Xabier Rodriguez Calvar  <calvaris@igalia.com>
+
         [Streams API] Synced bad strategy test with reference implementation
         https://bugs.webkit.org/show_bug.cgi?id=146411
 
index 5ead46e..217cf92 100644 (file)
@@ -34,6 +34,7 @@
 
 #include "ExceptionCode.h"
 #include "ReadableStreamReader.h"
+#include "ScriptExecutionContext.h"
 #include <runtime/JSCJSValueInlines.h>
 #include <wtf/RefCountedLeakCounter.h>
 
@@ -132,8 +133,12 @@ void ReadableStream::pull()
     }
 
     m_isPulling = true;
-    if (doPull())
-        finishPulling();
+    if (doPull()) {
+        RefPtr<ReadableStream> protectedStream(this);
+        scriptExecutionContext()->postTask([protectedStream](ScriptExecutionContext&) {
+            protectedStream->finishPulling();
+        });
+    }
 }
 
 void ReadableStream::finishPulling()