Title: [186109] trunk/Source/WebCore
Revision
186109
Author
[email protected]
Date
2015-06-29 23:47:19 -0700 (Mon, 29 Jun 2015)

Log Message

[Streams API] ReadableStreamReader.closed should use DOMPromise
https://bugs.webkit.org/show_bug.cgi?id=146406

Reviewed by Darin Adler.

Added storage of ClosedPromise as Optional of ReadableStream.
Updated code accordingly.

Covered by existing tests.

* Modules/streams/ReadableStream.cpp:
(WebCore::ReadableStream::clearCallbacks):
(WebCore::ReadableStream::releaseReader):
(WebCore::ReadableStream::changeStateToErrored):
(WebCore::ReadableStream::closed):
* Modules/streams/ReadableStream.h:
* Modules/streams/ReadableStreamReader.cpp:
(WebCore::ReadableStreamReader::closed):
* Modules/streams/ReadableStreamReader.h:
* bindings/js/JSReadableStreamReaderCustom.cpp:
(WebCore::JSReadableStreamReader::closed):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (186108 => 186109)


--- trunk/Source/WebCore/ChangeLog	2015-06-30 06:02:24 UTC (rev 186108)
+++ trunk/Source/WebCore/ChangeLog	2015-06-30 06:47:19 UTC (rev 186109)
@@ -1,3 +1,27 @@
+2015-06-29  Youenn Fablet  <[email protected]>
+
+        [Streams API] ReadableStreamReader.closed should use DOMPromise
+        https://bugs.webkit.org/show_bug.cgi?id=146406
+
+        Reviewed by Darin Adler.
+
+        Added storage of ClosedPromise as Optional of ReadableStream.
+        Updated code accordingly.
+
+        Covered by existing tests.
+
+        * Modules/streams/ReadableStream.cpp:
+        (WebCore::ReadableStream::clearCallbacks):
+        (WebCore::ReadableStream::releaseReader):
+        (WebCore::ReadableStream::changeStateToErrored):
+        (WebCore::ReadableStream::closed):
+        * Modules/streams/ReadableStream.h:
+        * Modules/streams/ReadableStreamReader.cpp:
+        (WebCore::ReadableStreamReader::closed):
+        * Modules/streams/ReadableStreamReader.h:
+        * bindings/js/JSReadableStreamReaderCustom.cpp:
+        (WebCore::JSReadableStreamReader::closed):
+
 2015-06-29  Simon Fraser  <[email protected]>
 
         [iOS WK2] WKWebViews in Facebook app start off black

Modified: trunk/Source/WebCore/Modules/streams/ReadableStream.cpp (186108 => 186109)


--- trunk/Source/WebCore/Modules/streams/ReadableStream.cpp	2015-06-30 06:02:24 UTC (rev 186108)
+++ trunk/Source/WebCore/Modules/streams/ReadableStream.cpp	2015-06-30 06:47:19 UTC (rev 186109)
@@ -59,9 +59,7 @@
 
 void ReadableStream::clearCallbacks()
 {
-    m_closedSuccessCallback = nullptr;
-    m_closedFailureCallback = nullptr;
-
+    m_closedPromise = Nullopt;
     m_readRequests.clear();
 }
 
@@ -85,8 +83,8 @@
 
 void ReadableStream::releaseReader()
 {
-    if (m_closedSuccessCallback)
-        m_closedSuccessCallback();
+    if (m_closedPromise)
+        m_closedPromise.value().resolve(nullptr);
 
     for (auto& request : m_readRequests)
         request.endCallback();
@@ -103,8 +101,8 @@
     m_state = State::Errored;
 
     JSC::JSValue error = this->error();
-    if (m_closedFailureCallback)
-        m_closedFailureCallback(error);
+    if (m_closedPromise)
+        m_closedPromise.value().reject(error);
 
     for (auto& request : m_readRequests)
         request.failureCallback(error);
@@ -210,18 +208,17 @@
     m_cancelPromise = Nullopt;
 }
 
-void ReadableStream::closed(ClosedSuccessCallback&& successCallback, FailureCallback&& failureCallback)
+void ReadableStream::closed(ClosedPromise&& promise)
 {
     if (m_state == State::Closed) {
-        successCallback();
+        promise.resolve(nullptr);
         return;
     }
     if (m_state == State::Errored) {
-        failureCallback(error());
+        promise.reject(error());
         return;
     }
-    m_closedSuccessCallback = WTF::move(successCallback);
-    m_closedFailureCallback = WTF::move(failureCallback);
+    m_closedPromise = WTF::move(promise);
 }
 
 void ReadableStream::read(ReadSuccessCallback&& successCallback, ReadEndCallback&& endCallback, FailureCallback&& failureCallback)

Modified: trunk/Source/WebCore/Modules/streams/ReadableStream.h (186108 => 186109)


--- trunk/Source/WebCore/Modules/streams/ReadableStream.h	2015-06-30 06:02:24 UTC (rev 186108)
+++ trunk/Source/WebCore/Modules/streams/ReadableStream.h	2015-06-30 06:47:19 UTC (rev 186109)
@@ -93,8 +93,8 @@
     void cancel(JSC::JSValue, CancelPromise&&, ExceptionCode&);
     void cancelNoCheck(JSC::JSValue, CancelPromise&&);
 
-    typedef std::function<void()> ClosedSuccessCallback;
-    void closed(ClosedSuccessCallback&&, FailureCallback&&);
+    typedef DOMPromise<std::nullptr_t, JSC::JSValue> ClosedPromise;
+    void closed(ClosedPromise&&);
 
     typedef std::function<void(JSC::JSValue)> ReadSuccessCallback;
     typedef std::function<void()> ReadEndCallback;
@@ -124,10 +124,8 @@
     Vector<std::unique_ptr<ReadableStreamReader>> m_releasedReaders;
 
     Optional<CancelPromise> m_cancelPromise;
+    Optional<ClosedPromise> m_closedPromise;
 
-    ClosedSuccessCallback m_closedSuccessCallback;
-    FailureCallback m_closedFailureCallback;
-
     struct ReadCallbacks {
         ReadSuccessCallback successCallback;
         ReadEndCallback endCallback;

Modified: trunk/Source/WebCore/Modules/streams/ReadableStreamReader.cpp (186108 => 186109)


--- trunk/Source/WebCore/Modules/streams/ReadableStreamReader.cpp	2015-06-30 06:02:24 UTC (rev 186108)
+++ trunk/Source/WebCore/Modules/streams/ReadableStreamReader.cpp	2015-06-30 06:47:19 UTC (rev 186109)
@@ -46,13 +46,13 @@
     m_stream.cancelNoCheck(reason, WTF::move(promise));
 }
 
-void ReadableStreamReader::closed(ReadableStream::ClosedSuccessCallback&& successCallback, ReadableStream::FailureCallback&& failureCallback)
+void ReadableStreamReader::closed(ReadableStream::ClosedPromise&& promise)
 {
     if (m_stream.isReadable() && m_stream.reader() != this) {
-        successCallback();
+        promise.resolve(nullptr);
         return;
     }
-    m_stream.closed(WTF::move(successCallback), WTF::move(failureCallback));
+    m_stream.closed(WTF::move(promise));
 }
 
 void ReadableStreamReader::read(ReadableStream::ReadSuccessCallback&& successCallback, ReadableStream::ReadEndCallback&& endCallback, ReadableStream::FailureCallback&& failureCallback)

Modified: trunk/Source/WebCore/Modules/streams/ReadableStreamReader.h (186108 => 186109)


--- trunk/Source/WebCore/Modules/streams/ReadableStreamReader.h	2015-06-30 06:02:24 UTC (rev 186108)
+++ trunk/Source/WebCore/Modules/streams/ReadableStreamReader.h	2015-06-30 06:47:19 UTC (rev 186109)
@@ -54,7 +54,7 @@
         : m_stream(stream) { }
 
     void cancel(JSC::JSValue, ReadableStream::CancelPromise&&);
-    void closed(ReadableStream::ClosedSuccessCallback&&, ReadableStream::FailureCallback&&);
+    void closed(ReadableStream::ClosedPromise&&);
     void read(ReadableStream::ReadSuccessCallback&&, ReadableStream::ReadEndCallback&&, ReadableStream::FailureCallback&&);
     void releaseLock(ExceptionCode&);
 

Modified: trunk/Source/WebCore/bindings/js/JSReadableStreamReaderCustom.cpp (186108 => 186109)


--- trunk/Source/WebCore/bindings/js/JSReadableStreamReaderCustom.cpp	2015-06-30 06:02:24 UTC (rev 186108)
+++ trunk/Source/WebCore/bindings/js/JSReadableStreamReaderCustom.cpp	2015-06-30 06:47:19 UTC (rev 186109)
@@ -72,17 +72,8 @@
         return m_closedPromiseDeferred->promise();
 
     const_cast<JSReadableStreamReader*>(this)->m_closedPromiseDeferred.set(exec->vm(), JSPromiseDeferred::create(exec, globalObject()));
-    DeferredWrapper wrapper(exec, globalObject(), m_closedPromiseDeferred.get());
+    impl().closed(DeferredWrapper(exec, globalObject(), m_closedPromiseDeferred.get()));
 
-    auto successCallback = [wrapper]() mutable {
-        wrapper.resolve(jsUndefined());
-    };
-    auto failureCallback = [wrapper](JSValue value) mutable {
-        wrapper.reject(value);
-    };
-
-    impl().closed(WTF::move(successCallback), WTF::move(failureCallback));
-
     return m_closedPromiseDeferred->promise();
 }
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to