diff options
Diffstat (limited to 'src/3rdparty/webkit/WebCore/bindings/js/JSCustomVoidCallback.cpp')
-rw-r--r-- | src/3rdparty/webkit/WebCore/bindings/js/JSCustomVoidCallback.cpp | 43 |
1 files changed, 14 insertions, 29 deletions
diff --git a/src/3rdparty/webkit/WebCore/bindings/js/JSCustomVoidCallback.cpp b/src/3rdparty/webkit/WebCore/bindings/js/JSCustomVoidCallback.cpp index 5300c42b5d..0edd66fdde 100644 --- a/src/3rdparty/webkit/WebCore/bindings/js/JSCustomVoidCallback.cpp +++ b/src/3rdparty/webkit/WebCore/bindings/js/JSCustomVoidCallback.cpp @@ -30,53 +30,38 @@ #include "JSCustomVoidCallback.h" #include "Frame.h" +#include "JSCallbackData.h" #include "JSDOMWindowCustom.h" #include "ScriptController.h" #include <runtime/JSLock.h> +#include <wtf/MainThread.h> namespace WebCore { using namespace JSC; JSCustomVoidCallback::JSCustomVoidCallback(JSObject* callback, JSDOMGlobalObject* globalObject) - : m_callback(callback) - , m_globalObject(globalObject) + : m_data(new JSCallbackData(callback, globalObject)) { } + +JSCustomVoidCallback::~JSCustomVoidCallback() +{ + callOnMainThread(JSCallbackData::deleteData, m_data); +#ifndef NDEBUG + m_data = 0; +#endif +} void JSCustomVoidCallback::handleEvent() { - ASSERT(m_callback); - ASSERT(m_globalObject); + ASSERT(m_data); - ExecState* exec = m_globalObject->globalExec(); - - JSC::JSLock lock(SilenceAssertionsOnly); - - JSValue function = m_callback->get(exec, Identifier(exec, "handleEvent")); - CallData callData; - CallType callType = function.getCallData(callData); - if (callType == CallTypeNone) { - callType = m_callback->getCallData(callData); - if (callType == CallTypeNone) { - // FIXME: Should an exception be thrown here? - return; - } - function = m_callback; - } - RefPtr<JSCustomVoidCallback> protect(this); + JSC::JSLock lock(SilenceAssertionsOnly); MarkedArgumentBuffer args; - - m_globalObject->globalData()->timeoutChecker.start(); - call(exec, function, callType, callData, m_callback, args); - m_globalObject->globalData()->timeoutChecker.stop(); - - if (exec->hadException()) - reportCurrentException(exec); - - Document::updateStyleForAllDocuments(); + m_data->invokeCallback(args); } } // namespace WebCore |