15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2010 Apple Inc. All rights reserved.
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2010-2011 Google Inc. All rights reserved.
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met:
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1.  Redistributions of source code must retain the above copyright
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     notice, this list of conditions and the following disclaimer.
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2.  Redistributions in binary form must reproduce the above copyright
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     notice, this list of conditions and the following disclaimer in the
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     documentation and/or other materials provided with the distribution.
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     its contributors may be used to endorse or promote products derived
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     from this software without specific prior written permission.
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef InspectorDebuggerAgent_h
315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define InspectorDebuggerAgent_h
325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "InspectorFrontend.h"
3453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "bindings/v8/ScriptState.h"
3553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/inspector/ConsoleAPITypes.h"
3653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/inspector/InjectedScript.h"
3753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/inspector/InspectorBaseAgent.h"
3853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/inspector/ScriptBreakpoint.h"
3953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/inspector/ScriptDebugListener.h"
4053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/ConsoleTypes.h"
41591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/Forward.h"
42591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/HashMap.h"
43591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/PassRefPtr.h"
44591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/Vector.h"
45591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/text/StringHash.h"
465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace WebCore {
485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class InjectedScriptManager;
505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class InspectorFrontend;
515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class InstrumentingAgents;
52591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdochclass JSONObject;
535267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)class ScriptArguments;
545267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)class ScriptCallStack;
555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class ScriptDebugServer;
565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class ScriptValue;
57f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)class RegularExpression;
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)typedef String ErrorString;
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class InspectorDebuggerAgent : public InspectorBaseAgent<InspectorDebuggerAgent>, public ScriptDebugListener, public InspectorBackendDispatcher::DebuggerCommandHandler {
625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    WTF_MAKE_NONCOPYABLE(InspectorDebuggerAgent); WTF_MAKE_FAST_ALLOCATED;
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public:
645267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    enum BreakpointSource {
655267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)        UserBreakpointSource,
66521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)        DebugCommandBreakpointSource,
67521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)        MonitorCommandBreakpointSource
685267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    };
695267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    static const char* backtraceObjectGroup;
715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual ~InspectorDebuggerAgent();
735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    virtual void canSetScriptSource(ErrorString*, bool* result) { *result = true; }
755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual void setFrontend(InspectorFrontend*);
775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual void clearFrontend();
785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual void restore();
795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool isPaused();
81926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    bool runningNestedMessageLoop();
825267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    void addMessageToConsole(MessageSource, MessageType, MessageLevel, const String&, PassRefPtr<ScriptCallStack>, unsigned long);
835267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    void addMessageToConsole(MessageSource, MessageType, MessageLevel, const String&, ScriptState*, PassRefPtr<ScriptArguments>, unsigned long);
845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Part of the protocol.
86926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    virtual void enable(ErrorString*);
87926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    virtual void disable(ErrorString*);
885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual void setBreakpointsActive(ErrorString*, bool active);
895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
90e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    virtual void setBreakpointByUrl(ErrorString*, int lineNumber, const String* optionalURL, const String* optionalURLRegex, const int* optionalColumnNumber, const String* optionalCondition, const bool* isAntiBreakpoint, TypeBuilder::Debugger::BreakpointId*, RefPtr<TypeBuilder::Array<TypeBuilder::Debugger::Location> >& locations);
91591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    virtual void setBreakpoint(ErrorString*, const RefPtr<JSONObject>& location, const String* optionalCondition, TypeBuilder::Debugger::BreakpointId*, RefPtr<TypeBuilder::Debugger::Location>& actualLocation);
925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual void removeBreakpoint(ErrorString*, const String& breakpointId);
93e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    virtual void continueToLocation(ErrorString*, const RefPtr<JSONObject>& location, const bool* interstateLocationOpt);
947757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    virtual void getStepInPositions(ErrorString*, const String& callFrameId, RefPtr<TypeBuilder::Array<TypeBuilder::Debugger::Location> >& positions);
957757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    virtual void getBacktrace(ErrorString*, RefPtr<TypeBuilder::Array<TypeBuilder::Debugger::CallFrame> >&);
965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual void searchInContent(ErrorString*, const String& scriptId, const String& query, const bool* optionalCaseSensitive, const bool* optionalIsRegex, RefPtr<TypeBuilder::Array<TypeBuilder::Page::SearchMatch> >&);
98591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    virtual void setScriptSource(ErrorString*, RefPtr<TypeBuilder::Debugger::SetScriptSourceError>&, const String& scriptId, const String& newContent, const bool* preview, RefPtr<TypeBuilder::Array<TypeBuilder::Debugger::CallFrame> >& newCallFrames, RefPtr<JSONObject>& result);
99591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    virtual void restartFrame(ErrorString*, const String& callFrameId, RefPtr<TypeBuilder::Array<TypeBuilder::Debugger::CallFrame> >& newCallFrames, RefPtr<JSONObject>& result);
1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual void getScriptSource(ErrorString*, const String& scriptId, String* scriptSource);
1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual void getFunctionDetails(ErrorString*, const String& functionId, RefPtr<TypeBuilder::Debugger::FunctionDetails>&);
1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual void pause(ErrorString*);
1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual void resume(ErrorString*);
1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual void stepOver(ErrorString*);
1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual void stepInto(ErrorString*);
1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual void stepOut(ErrorString*);
1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual void setPauseOnExceptions(ErrorString*, const String& pauseState);
1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual void evaluateOnCallFrame(ErrorString*,
1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                             const String& callFrameId,
1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                             const String& expression,
1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                             const String* objectGroup,
1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                             const bool* includeCommandLineAPI,
1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                             const bool* doNotPauseOnExceptionsAndMuteConsole,
1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                             const bool* returnByValue,
1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                             const bool* generatePreview,
1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                             RefPtr<TypeBuilder::Runtime::RemoteObject>& result,
1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                             TypeBuilder::OptOutput<bool>* wasThrown);
1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void compileScript(ErrorString*, const String& expression, const String& sourceURL, TypeBuilder::OptOutput<TypeBuilder::Debugger::ScriptId>*, TypeBuilder::OptOutput<String>* syntaxErrorMessage);
1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void runScript(ErrorString*, const TypeBuilder::Debugger::ScriptId&, const int* executionContextId, const String* objectGroup, const bool* doNotPauseOnExceptionsAndMuteConsole, RefPtr<TypeBuilder::Runtime::RemoteObject>& result, TypeBuilder::OptOutput<bool>* wasThrown);
1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual void setOverlayMessage(ErrorString*, const String*);
121591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    virtual void setVariableValue(ErrorString*, int in_scopeNumber, const String& in_variableName, const RefPtr<JSONObject>& in_newValue, const String* in_callFrame, const String* in_functionObjectId);
122f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)    virtual void skipStackFrames(ErrorString*, const String* pattern);
1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
124591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    void schedulePauseOnNextStatement(InspectorFrontend::Debugger::Reason::Enum breakReason, PassRefPtr<JSONObject> data);
12593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    void didFireTimer();
12693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    void didHandleEvent();
127521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    bool canBreakProgram();
128591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    void breakProgram(InspectorFrontend::Debugger::Reason::Enum breakReason, PassRefPtr<JSONObject> data);
1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual void scriptExecutionBlockedByCSP(const String& directiveText);
1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    class Listener {
1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    public:
1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        virtual ~Listener() { }
1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        virtual void debuggerWasEnabled() = 0;
1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        virtual void debuggerWasDisabled() = 0;
136926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        virtual void stepInto() = 0;
137926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        virtual void didPause() = 0;
1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    };
1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setListener(Listener* listener) { m_listener = listener; }
1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual ScriptDebugServer& scriptDebugServer() = 0;
1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
143521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    void setBreakpoint(const String& scriptId, int lineNumber, int columnNumber, BreakpointSource, const String& condition = String());
1445267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    void removeBreakpoint(const String& scriptId, int lineNumber, int columnNumber, BreakpointSource);
1455267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
146f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)    SkipPauseRequest shouldSkipExceptionPause(RefPtr<JavaScriptCallFrame>& topFrame);
147f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)    SkipPauseRequest shouldSkipBreakpointPause(RefPtr<JavaScriptCallFrame>& topFrame);
148f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)    SkipPauseRequest shouldSkipStepPause(RefPtr<JavaScriptCallFrame>& topFrame);
149f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)
1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)protected:
151926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    InspectorDebuggerAgent(InstrumentingAgents*, InspectorCompositeState*, InjectedScriptManager*);
1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual void startListeningScriptDebugServer() = 0;
1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual void stopListeningScriptDebugServer() = 0;
1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual void muteConsole() = 0;
1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual void unmuteConsole() = 0;
1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    InjectedScriptManager* injectedScriptManager() { return m_injectedScriptManager; }
1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual InjectedScript injectedScriptForEval(ErrorString*, const int* executionContextId) = 0;
1595267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    virtual void addConsoleMessage(MessageSource, MessageLevel, const String& message, const String& sourceURL) = 0;
1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
161926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    virtual void enable();
1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual void disable();
1635267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    virtual void didPause(ScriptState*, const ScriptValue& callFrames, const ScriptValue& exception, const Vector<String>& hitBreakpoints);
1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual void didContinue();
165926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    void reset();
1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private:
16893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    void cancelPauseOnNextStatement();
1695267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    void addMessageToConsole(MessageSource, MessageType);
17093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool enabled();
1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    PassRefPtr<TypeBuilder::Array<TypeBuilder::Debugger::CallFrame> > currentCallFrames();
1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual void didParseSource(const String& scriptId, const Script&);
1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual void failedToParseSource(const String& url, const String& data, int firstLine, int errorLine, const String& errorMessage);
1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setPauseOnExceptionsImpl(ErrorString*, int);
1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1805267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    PassRefPtr<TypeBuilder::Debugger::Location> resolveBreakpoint(const String& breakpointId, const String& scriptId, const ScriptBreakpoint&, BreakpointSource);
1815267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    void removeBreakpoint(const String& breakpointId);
1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void clear();
1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool assertPaused(ErrorString*);
1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void clearBreakDetails();
1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    String sourceMapURLForScript(const Script&);
1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
188f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)    String scriptURL(JavaScriptCallFrame*);
189f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)
1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    typedef HashMap<String, Script> ScriptsMap;
1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    typedef HashMap<String, Vector<String> > BreakpointIdToDebugServerBreakpointIdsMap;
1925267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    typedef HashMap<String, std::pair<String, BreakpointSource> > DebugServerBreakpointToBreakpointIdAndSourceMap;
1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    InjectedScriptManager* m_injectedScriptManager;
1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    InspectorFrontend::Debugger* m_frontend;
1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ScriptState* m_pausedScriptState;
1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ScriptValue m_currentCallStack;
1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ScriptsMap m_scripts;
1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    BreakpointIdToDebugServerBreakpointIdsMap m_breakpointIdToDebugServerBreakpointIds;
2005267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    DebugServerBreakpointToBreakpointIdAndSourceMap m_serverBreakpoints;
2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    String m_continueToLocationBreakpointId;
2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    InspectorFrontend::Debugger::Reason::Enum m_breakReason;
203591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    RefPtr<JSONObject> m_breakAuxData;
2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool m_javaScriptPauseScheduled;
2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Listener* m_listener;
206f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)
207f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)    int m_skipStepInCount;
208f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)    OwnPtr<RegularExpression> m_cachedSkipStackRegExp;
2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)};
2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} // namespace WebCore
2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif // !defined(InspectorDebuggerAgent_h)
215