Modified: trunk/Source/WebCore/ChangeLog (206578 => 206579)
--- trunk/Source/WebCore/ChangeLog 2016-09-29 10:28:14 UTC (rev 206578)
+++ trunk/Source/WebCore/ChangeLog 2016-09-29 12:48:16 UTC (rev 206579)
@@ -1,3 +1,26 @@
+2016-09-29 Romain Bellessort <romain.belless...@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 <j...@apple.com>
Added Beacon API to the Feature Status page.
Modified: trunk/Source/WebCore/bindings/js/ReadableStreamDefaultController.cpp (206578 => 206579)
--- trunk/Source/WebCore/bindings/js/ReadableStreamDefaultController.cpp 2016-09-29 10:28:14 UTC (rev 206578)
+++ trunk/Source/WebCore/bindings/js/ReadableStreamDefaultController.cpp 2016-09-29 12:48:16 UTC (rev 206579)
@@ -33,8 +33,6 @@
#if ENABLE(READABLE_STREAM_API)
-#include "JSReadableStream.h"
-#include "JSReadableStreamSource.h"
#include "WebCoreJSClientData.h"
namespace WebCore {
@@ -69,17 +67,18 @@
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);
Modified: trunk/Source/WebCore/bindings/js/ReadableStreamDefaultController.h (206578 => 206579)
--- trunk/Source/WebCore/bindings/js/ReadableStreamDefaultController.h 2016-09-29 10:28:14 UTC (rev 206578)
+++ trunk/Source/WebCore/bindings/js/ReadableStreamDefaultController.h 2016-09-29 12:48:16 UTC (rev 206579)
@@ -52,33 +52,48 @@
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 @@
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 @@
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