diff options
Diffstat (limited to 'src/3rdparty/webkit/WebCore/bindings/js/JSCustomSQLTransactionCallback.cpp')
-rw-r--r-- | src/3rdparty/webkit/WebCore/bindings/js/JSCustomSQLTransactionCallback.cpp | 69 |
1 files changed, 6 insertions, 63 deletions
diff --git a/src/3rdparty/webkit/WebCore/bindings/js/JSCustomSQLTransactionCallback.cpp b/src/3rdparty/webkit/WebCore/bindings/js/JSCustomSQLTransactionCallback.cpp index 18863455ac..456022f9f7 100644 --- a/src/3rdparty/webkit/WebCore/bindings/js/JSCustomSQLTransactionCallback.cpp +++ b/src/3rdparty/webkit/WebCore/bindings/js/JSCustomSQLTransactionCallback.cpp @@ -32,6 +32,7 @@ #if ENABLE(DATABASE) #include "Frame.h" +#include "JSCallbackData.h" #include "JSDOMGlobalObject.h" #include "JSSQLTransaction.h" #include "Page.h" @@ -48,42 +49,17 @@ using namespace JSC; static WTF::RefCountedLeakCounter counter("JSCustomSQLTransactionCallback"); #endif -// We have to clean up the data on the main thread because unprotecting the -// JSObject on a non-main thread would register that thread for JavaScript -// garbage collection, which could unnecessarily slow things down. - -class JSCustomSQLTransactionCallback::Data { -public: - Data(JSObject* callback, JSDOMGlobalObject* globalObject) - : m_callback(callback) - , m_globalObject(globalObject) - { - } - - JSObject* callback() { return m_callback; } - JSDOMGlobalObject* globalObject() { return m_globalObject.get(); } - -private: - ProtectedPtr<JSObject> m_callback; - ProtectedPtr<JSDOMGlobalObject> m_globalObject; -}; - JSCustomSQLTransactionCallback::JSCustomSQLTransactionCallback(JSObject* callback, JSDOMGlobalObject* globalObject) - : m_data(new Data(callback, globalObject)) + : m_data(new JSCallbackData(callback, globalObject)) { #ifndef NDEBUG counter.increment(); #endif } -void JSCustomSQLTransactionCallback::deleteData(void* context) -{ - delete static_cast<Data*>(context); -} - JSCustomSQLTransactionCallback::~JSCustomSQLTransactionCallback() { - callOnMainThread(deleteData, m_data); + callOnMainThread(JSCallbackData::deleteData, m_data); #ifndef NDEBUG m_data = 0; counter.decrement(); @@ -93,47 +69,14 @@ JSCustomSQLTransactionCallback::~JSCustomSQLTransactionCallback() void JSCustomSQLTransactionCallback::handleEvent(SQLTransaction* transaction, bool& raisedException) { ASSERT(m_data); - ASSERT(m_data->callback()); - ASSERT(m_data->globalObject()); - JSDOMGlobalObject* globalObject = m_data->globalObject(); - ExecState* exec = globalObject->globalExec(); - - JSC::JSLock lock(SilenceAssertionsOnly); - - JSValue handleEventFunction = m_data->callback()->get(exec, Identifier(exec, "handleEvent")); - CallData handleEventCallData; - CallType handleEventCallType = handleEventFunction.getCallData(handleEventCallData); - CallData callbackCallData; - CallType callbackCallType = CallTypeNone; - - if (handleEventCallType == CallTypeNone) { - callbackCallType = m_data->callback()->getCallData(callbackCallData); - if (callbackCallType == CallTypeNone) { - // FIXME: Should an exception be thrown here? - return; - } - } - RefPtr<JSCustomSQLTransactionCallback> protect(this); + JSC::JSLock lock(SilenceAssertionsOnly); + ExecState* exec = m_data->globalObject()->globalExec(); MarkedArgumentBuffer args; args.append(toJS(exec, deprecatedGlobalObjectForPrototype(exec), transaction)); - - globalObject->globalData()->timeoutChecker.start(); - if (handleEventCallType != CallTypeNone) - call(exec, handleEventFunction, handleEventCallType, handleEventCallData, m_data->callback(), args); - else - call(exec, m_data->callback(), callbackCallType, callbackCallData, m_data->callback(), args); - globalObject->globalData()->timeoutChecker.stop(); - - if (exec->hadException()) { - reportCurrentException(exec); - - raisedException = true; - } - - Document::updateStyleForAllDocuments(); + m_data->invokeCallback(args, &raisedException); } } |