InspectorDebuggerAgent.h [plain text]
#ifndef InspectorDebuggerAgent_h
#define InspectorDebuggerAgent_h
#if ENABLE(JAVASCRIPT_DEBUGGER) && ENABLE(INSPECTOR)
#include "InjectedScript.h"
#include "InspectorFrontend.h"
#include "ScriptBreakpoint.h"
#include "ScriptDebugListener.h"
#include "ScriptState.h"
#include <wtf/Forward.h>
#include <wtf/HashMap.h>
#include <wtf/PassOwnPtr.h>
#include <wtf/PassRefPtr.h>
#include <wtf/Vector.h>
#include <wtf/text/StringHash.h>
namespace WebCore {
class InjectedScriptManager;
class InspectorFrontend;
class InspectorArray;
class InspectorObject;
class InspectorState;
class InspectorValue;
class InstrumentingAgents;
class ScriptDebugServer;
class ScriptValue;
typedef String ErrorString;
enum DebuggerEventType {
JavaScriptPauseEventType,
JavaScriptBreakpointEventType,
NativeBreakpointDebuggerEventType
};
class InspectorDebuggerAgent : public ScriptDebugListener {
WTF_MAKE_NONCOPYABLE(InspectorDebuggerAgent); WTF_MAKE_FAST_ALLOCATED;
public:
virtual ~InspectorDebuggerAgent();
void enable(ErrorString*);
void disable(ErrorString*);
bool enabled();
void restore();
void setFrontend(InspectorFrontend*);
void clearFrontend();
void inspectedURLChanged(const String& url);
void setBreakpointsActive(ErrorString*, bool active);
void setBreakpointByUrl(ErrorString*, const String& url, int lineNumber, const int* const optionalColumnNumber, const String* const optionalCondition, String* breakpointId, RefPtr<InspectorArray>* locations);
void setBreakpoint(ErrorString*, PassRefPtr<InspectorObject> location, const String* const optionalCondition, String* breakpointId, RefPtr<InspectorObject>* actualLocation);
void removeBreakpoint(ErrorString*, const String& breakpointId);
void continueToLocation(ErrorString*, PassRefPtr<InspectorObject> location);
void editScriptSource(ErrorString*, const String& sourceID, const String& newContent, RefPtr<InspectorArray>* newCallFrames);
void getScriptSource(ErrorString*, const String& sourceID, String* scriptSource);
void schedulePauseOnNextStatement(DebuggerEventType type, PassRefPtr<InspectorValue> data);
void cancelPauseOnNextStatement();
void breakProgram(DebuggerEventType type, PassRefPtr<InspectorValue> data);
void pause(ErrorString*);
void resume(ErrorString*);
void stepOver(ErrorString*);
void stepInto(ErrorString*);
void stepOut(ErrorString*);
void setPauseOnExceptions(ErrorString*, const String& pauseState);
void evaluateOnCallFrame(ErrorString*, const String& callFrameId, const String& expression, const String* const objectGroup, const bool* const includeCommandLineAPI, RefPtr<InspectorObject>* result, bool* wasThrown);
class Listener {
public:
virtual ~Listener() { }
virtual void debuggerWasEnabled() = 0;
virtual void debuggerWasDisabled() = 0;
};
void setListener(Listener* listener) { m_listener = listener; }
virtual ScriptDebugServer& scriptDebugServer() = 0;
protected:
InspectorDebuggerAgent(InstrumentingAgents*, InspectorState*, InjectedScriptManager*);
virtual void startListeningScriptDebugServer() = 0;
virtual void stopListeningScriptDebugServer() = 0;
private:
void enable();
void disable();
PassRefPtr<InspectorArray> currentCallFrames();
virtual void didParseSource(const String& sourceID, const String& url, const String& data, int startLine, int startColumn, int endLine, int endColumn, bool isContentScript);
virtual void failedToParseSource(const String& url, const String& data, int firstLine, int errorLine, const String& errorMessage);
virtual void didPause(ScriptState*, const ScriptValue& callFrames, const ScriptValue& exception);
virtual void didContinue();
PassRefPtr<InspectorObject> resolveBreakpoint(const String& breakpointId, const String& sourceId, const ScriptBreakpoint&);
void clear();
class Script {
public:
Script()
: startLine(0)
, startColumn(0)
, endLine(0)
, endColumn(0)
{
}
Script(const String& url, const String& data, int startLine, int startColumn, int endLine, int endColumn)
: url(url)
, data(data)
, startLine(startLine)
, startColumn(startColumn)
, endLine(endLine)
, endColumn(endColumn)
{
}
String url;
String data;
int startLine;
int startColumn;
int endLine;
int endColumn;
int linesCount;
};
typedef HashMap<String, Script> ScriptsMap;
typedef HashMap<String, Vector<String> > BreakpointIdToDebugServerBreakpointIdsMap;
InstrumentingAgents* m_instrumentingAgents;
InspectorState* m_inspectorState;
InjectedScriptManager* m_injectedScriptManager;
InspectorFrontend::Debugger* m_frontend;
ScriptState* m_pausedScriptState;
ScriptValue m_currentCallStack;
ScriptsMap m_scripts;
BreakpointIdToDebugServerBreakpointIdsMap m_breakpointIdToDebugServerBreakpointIds;
String m_continueToLocationBreakpointId;
RefPtr<InspectorObject> m_breakProgramDetails;
bool m_javaScriptPauseScheduled;
Listener* m_listener;
};
}
#endif // ENABLE(JAVASCRIPT_DEBUGGER) && ENABLE(INSPECTOR)
#endif // !defined(InspectorDebuggerAgent_h)