WorkerScriptDebugServer.cpp [plain text]
#include "config.h"
#include "WorkerScriptDebugServer.h"
#include "JSDOMBinding.h"
#include "Timer.h"
#include "WorkerDebuggerAgent.h"
#include "WorkerGlobalScope.h"
#include "WorkerRunLoop.h"
#include "WorkerThread.h"
#include <runtime/VM.h>
using namespace Inspector;
namespace WebCore {
WorkerScriptDebugServer::WorkerScriptDebugServer(WorkerGlobalScope* context, const String& mode)
: ScriptDebugServer(true)
, m_workerGlobalScope(context)
, m_debuggerTaskMode(mode)
{
}
void WorkerScriptDebugServer::addListener(ScriptDebugListener* listener)
{
if (!listener)
return;
bool wasEmpty = m_listeners.isEmpty();
m_listeners.add(listener);
if (wasEmpty) {
m_workerGlobalScope->script()->attachDebugger(this);
recompileAllJSFunctions();
}
}
void WorkerScriptDebugServer::removeListener(ScriptDebugListener* listener, bool skipRecompile)
{
if (!listener)
return;
m_listeners.remove(listener);
if (m_listeners.isEmpty()) {
if (m_workerGlobalScope->script())
m_workerGlobalScope->script()->detachDebugger(this);
if (!skipRecompile)
recompileAllJSFunctions();
}
}
void WorkerScriptDebugServer::recompileAllJSFunctions()
{
JSC::VM& vm = m_workerGlobalScope->script()->vm();
JSC::JSLockHolder lock(vm);
JSC::Debugger::recompileAllJSFunctions(&vm);
}
void WorkerScriptDebugServer::runEventLoopWhilePaused()
{
TimerBase::fireTimersInNestedEventLoop();
MessageQueueWaitResult result;
do {
result = m_workerGlobalScope->thread().runLoop().runInMode(m_workerGlobalScope, m_debuggerTaskMode);
} while (result != MessageQueueTerminated && !m_doneProcessingDebuggerEvents);
}
void WorkerScriptDebugServer::reportException(JSC::ExecState* exec, JSC::Exception* exception) const
{
WebCore::reportException(exec, exception);
}
void WorkerScriptDebugServer::interruptAndRunTask(std::unique_ptr<ScriptDebugServer::Task>)
{
}
}