JSCustomPositionErrorCallback.cpp [plain text]
#include "config.h"
#include "JSCustomPositionErrorCallback.h"
#include "Frame.h"
#include "JSPositionError.h"
#include "ScriptController.h"
#include <runtime/JSLock.h>
namespace WebCore {
using namespace JSC;
JSCustomPositionErrorCallback::JSCustomPositionErrorCallback(JSObject* callback, Frame* frame)
: m_callback(callback)
, m_frame(frame)
{
}
void JSCustomPositionErrorCallback::handleEvent(PositionError* positionError)
{
ASSERT(m_callback);
ASSERT(m_frame);
if (!m_frame->script()->isEnabled())
return;
JSGlobalObject* globalObject = m_frame->script()->globalObject();
ExecState* exec = globalObject->globalExec();
JSC::JSLock lock(false);
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) {
return;
}
function = m_callback;
}
RefPtr<JSCustomPositionErrorCallback> protect(this);
MarkedArgumentBuffer args;
args.append(toJS(exec, positionError));
globalObject->globalData()->timeoutChecker.start();
call(exec, function, callType, callData, m_callback, args);
globalObject->globalData()->timeoutChecker.stop();
if (exec->hadException())
reportCurrentException(exec);
Document::updateStyleForAllDocuments();
}
}