ScriptDebugServer.h [plain text]
#ifndef ScriptDebugServer_h
#define ScriptDebugServer_h
#if ENABLE(JAVASCRIPT_DEBUGGER)
#include "JavaScriptCallFrame.h"
#include "PlatformString.h"
#include "ScriptBreakpoint.h"
#include "ScriptState.h"
#include "StringHash.h"
#include "Timer.h"
#include <v8-debug.h>
#include <wtf/HashMap.h>
#include <wtf/Noncopyable.h>
namespace WebCore {
class Page;
class ScriptDebugListener;
class ScriptDebugServer : public Noncopyable {
public:
static ScriptDebugServer& shared();
void addListener(ScriptDebugListener*, Page*);
void removeListener(ScriptDebugListener*, Page*);
void setBreakpoint(const String& sourceID, unsigned lineNumber, ScriptBreakpoint breakpoint);
void removeBreakpoint(const String& sourceID, unsigned lineNumber);
void clearBreakpoints();
void setBreakpointsActivated(bool activated);
enum PauseOnExceptionsState {
DontPauseOnExceptions,
PauseOnAllExceptions,
PauseOnUncaughtExceptions
};
PauseOnExceptionsState pauseOnExceptionsState();
void setPauseOnExceptionsState(PauseOnExceptionsState pauseOnExceptionsState);
void pauseProgram() { }
void continueProgram();
void stepIntoStatement();
void stepOverStatement();
void stepOutOfFunction();
void recompileAllJSFunctionsSoon() { }
void recompileAllJSFunctions(Timer<ScriptDebugServer>* = 0) { }
ScriptState* currentCallFrameState();
void pageCreated(Page*) { }
void setDebuggerScriptSource(const String& scriptSource);
typedef void (*MessageLoopDispatchHandler)(const Vector<WebCore::Page*>&);
static void setMessageLoopDispatchHandler(MessageLoopDispatchHandler messageLoopDispatchHandler) { s_messageLoopDispatchHandler = messageLoopDispatchHandler; }
PassRefPtr<JavaScriptCallFrame> currentCallFrame();
private:
ScriptDebugServer();
~ScriptDebugServer() { }
static void onV8DebugMessage(const v8::Debug::Message& message);
static void onV8DebugHostDispatch();
void handleV8DebugMessage(const v8::Debug::Message& message);
void handleV8DebugHostDispatch();
void dispatchDidParseSource(ScriptDebugListener* listener, v8::Handle<v8::Object> sourceObject);
void ensureDebuggerScriptCompiled();
void didResume();
typedef HashMap<Page*, ScriptDebugListener*> ListenersMap;
ListenersMap m_listenersMap;
String m_debuggerScriptSource;
PauseOnExceptionsState m_pauseOnExceptionsState;
OwnHandle<v8::Object> m_debuggerScript;
ScriptState* m_currentCallFrameState;
RefPtr<JavaScriptCallFrame> m_currentCallFrame;
OwnHandle<v8::Object> m_executionState;
static MessageLoopDispatchHandler s_messageLoopDispatchHandler;
};
}
#endif // ENABLE(JAVASCRIPT_DEBUGGER)
#endif // ScriptDebugServer_h