[Streams API] Improve ReadableStreamDefaultController.h/cpp
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 29 Sep 2016 12:48:16 +0000 (12:48 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 29 Sep 2016 12:48:16 +0000 (12:48 +0000)
https://bugs.webkit.org/show_bug.cgi?id=160293

Patch by Romain Bellessort <romain.bellessort@crf.canon.fr> on 2016-09-29
Reviewed by Youenn Fablet.

Various small improvements in ReadableStreamDefaultController code (helper methods and asserts).

No change in behaviour.

* bindings/js/ReadableStreamDefaultController.cpp:
(WebCore::ReadableStreamDefaultController::isControlledReadableStreamLocked): Added an assert and updated based
on new helper methods.
* bindings/js/ReadableStreamDefaultController.h:
(WebCore::ReadableStreamDefaultController::close): Updated based on new helper methods.
(WebCore::ReadableStreamDefaultController::error): Updated based on new helper methods.
(WebCore::ReadableStreamDefaultController::enqueue): Added an assert and updated based on new helper methods.
(WebCore::ReadableStreamDefaultController::jsController): New helper method.
(WebCore::ReadableStreamDefaultController::globalObject): Return reference instead of pointer.
(WebCore::ReadableStreamDefaultController::globalExec): New helper; return reference after performing an assert.
(WebCore::ReadableStreamDefaultController::error<String>): Added an assert and updated based on new helper methods.

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

Source/WebCore/ChangeLog
Source/WebCore/bindings/js/ReadableStreamDefaultController.cpp
Source/WebCore/bindings/js/ReadableStreamDefaultController.h

index 7b77ca6..b52797d 100644 (file)
@@ -1,3 +1,26 @@
+2016-09-29  Romain Bellessort  <romain.bellessort@crf.canon.fr>
+
+        [Streams API] Improve ReadableStreamDefaultController.h/cpp
+        https://bugs.webkit.org/show_bug.cgi?id=160293
+
+        Reviewed by Youenn Fablet.
+
+        Various small improvements in ReadableStreamDefaultController code (helper methods and asserts).
+
+        No change in behaviour.
+
+        * bindings/js/ReadableStreamDefaultController.cpp:
+        (WebCore::ReadableStreamDefaultController::isControlledReadableStreamLocked): Added an assert and updated based 
+        on new helper methods.
+        * bindings/js/ReadableStreamDefaultController.h:
+        (WebCore::ReadableStreamDefaultController::close): Updated based on new helper methods.
+        (WebCore::ReadableStreamDefaultController::error): Updated based on new helper methods.
+        (WebCore::ReadableStreamDefaultController::enqueue): Added an assert and updated based on new helper methods.
+        (WebCore::ReadableStreamDefaultController::jsController): New helper method.
+        (WebCore::ReadableStreamDefaultController::globalObject): Return reference instead of pointer.
+        (WebCore::ReadableStreamDefaultController::globalExec): New helper; return reference after performing an assert.
+        (WebCore::ReadableStreamDefaultController::error<String>): Added an assert and updated based on new helper methods.
+
 2016-09-29  Jon Davis  <jond@apple.com>
 
         Added Beacon API to the Feature Status page.
index 1d19e0c..439b088 100644 (file)
@@ -33,8 +33,6 @@
 
 #if ENABLE(READABLE_STREAM_API)
 
-#include "JSReadableStream.h"
-#include "JSReadableStreamSource.h"
 #include "WebCoreJSClientData.h"
 
 namespace WebCore {
@@ -69,17 +67,18 @@ JSC::JSValue ReadableStreamDefaultController::invoke(JSC::ExecState& state, JSC:
 
 bool ReadableStreamDefaultController::isControlledReadableStreamLocked() const
 {
-    auto globalObject = this->globalObject();
-    JSC::VM& vm = globalObject->vm();
+    auto& globalObject = this->globalObject();
+    JSC::VM& vm = globalObject.vm();
     JSC::JSLockHolder lock(vm);
     auto scope = DECLARE_CATCH_SCOPE(vm);
-    auto& state = *globalObject->globalExec();
+    auto& state = globalExec();
 
     auto& clientData = *static_cast<JSVMClientData*>(vm.clientData);
     auto readableStream = m_jsController->get(&state, clientData.builtinNames().controlledReadableStreamPrivateName());
     ASSERT_UNUSED(scope, !scope.exception());
 
-    auto isLocked = globalObject->builtinInternalFunctions().readableStreamInternals().m_isReadableStreamLockedFunction.get();
+    auto* isLocked = globalObject.builtinInternalFunctions().readableStreamInternals().m_isReadableStreamLockedFunction.get();
+    ASSERT(isLocked);
 
     JSC::MarkedArgumentBuffer arguments;
     arguments.append(readableStream);
index a274d33..5a0b6b8 100644 (file)
@@ -52,33 +52,48 @@ public:
     template<class ResolveResultType>
     void error(const ResolveResultType&);
 
-    void close() { invoke(*globalObject()->globalExec(), *m_jsController, "close", JSC::jsUndefined()); }
+    void close() { invoke(*globalObject().globalExec(), jsController(), "close", JSC::jsUndefined()); }
 
     bool isControlledReadableStreamLocked() const;
 
 private:
-    void error(JSC::ExecState& state, JSC::JSValue value) { invoke(state, *m_jsController, "error", value); }
-    void enqueue(JSC::ExecState& state, JSC::JSValue value) { invoke(state, *m_jsController, "enqueue", value); }
+    void error(JSC::ExecState& state, JSC::JSValue value) { invoke(state, jsController(), "error", value); }
+    void enqueue(JSC::ExecState& state, JSC::JSValue value) { invoke(state, jsController(), "enqueue", value); }
+    JSReadableStreamDefaultController& jsController() const;
 
-    JSDOMGlobalObject* globalObject() const;
+    JSDOMGlobalObject& globalObject() const;
+    JSC::ExecState& globalExec() const;
 
     // The owner of ReadableStreamDefaultController is responsible to keep uncollected the JSReadableStreamDefaultController.
     JSReadableStreamDefaultController* m_jsController { nullptr };
 };
 
-inline JSDOMGlobalObject* ReadableStreamDefaultController::globalObject() const
+inline JSReadableStreamDefaultController& ReadableStreamDefaultController::jsController() const
 {
     ASSERT(m_jsController);
-    return static_cast<JSDOMGlobalObject*>(m_jsController->globalObject());
+    return *m_jsController;
+}
+
+inline JSDOMGlobalObject& ReadableStreamDefaultController::globalObject() const
+{
+    ASSERT(m_jsController);
+    ASSERT(m_jsController->globalObject());
+    return *static_cast<JSDOMGlobalObject*>(m_jsController->globalObject());
+}
+
+inline JSC::ExecState& ReadableStreamDefaultController::globalExec() const
+{
+    ASSERT(globalObject().globalExec());
+    return *globalObject().globalExec();
 }
 
 inline bool ReadableStreamDefaultController::enqueue(RefPtr<JSC::ArrayBuffer>&& buffer)
 {
-    auto globalObject = this->globalObject();
-    JSC::VM& vm = globalObject->vm();
+    auto& globalObject = this->globalObject();
+    JSC::VM& vm = globalObject.vm();
     JSC::JSLockHolder locker(vm);
     auto scope = DECLARE_THROW_SCOPE(vm);
-    JSC::ExecState& state = *globalObject->globalExec();
+    JSC::ExecState& state = globalExec();
 
     if (!buffer) {
         error(state, createOutOfMemoryError(&state));
@@ -87,7 +102,7 @@ inline bool ReadableStreamDefaultController::enqueue(RefPtr<JSC::ArrayBuffer>&&
     auto length = buffer->byteLength();
     auto chunk = JSC::Uint8Array::create(WTFMove(buffer), 0, length);
     ASSERT(chunk);
-    enqueue(state, toJS(&state, globalObject, chunk.get()));
+    enqueue(state, toJS(&state, &globalObject, chunk.get()));
     ASSERT_UNUSED(scope, !scope.exception());
     return true;
 }
@@ -95,9 +110,9 @@ inline bool ReadableStreamDefaultController::enqueue(RefPtr<JSC::ArrayBuffer>&&
 template<>
 inline void ReadableStreamDefaultController::error<String>(const String& result)
 {
-    JSC::ExecState* state = globalObject()->globalExec();
-    JSC::JSLockHolder locker(state);
-    error(*state, jsString(state, result));
+    JSC::ExecState& state = globalExec();
+    JSC::JSLockHolder locker(&state);
+    error(state, jsString(&state, result));
 }
 
 } // namespace WebCore