Index: src/inspector/V8DebuggerAgentImpl.h |
diff --git a/src/inspector/V8DebuggerAgentImpl.h b/src/inspector/V8DebuggerAgentImpl.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..45744b00d35bdd646a3bcc9433e050c683821d60 |
--- /dev/null |
+++ b/src/inspector/V8DebuggerAgentImpl.h |
@@ -0,0 +1,224 @@ |
+// Copyright 2015 the V8 project authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef V8_INSPECTOR_V8DEBUGGERAGENTIMPL_H_ |
+#define V8_INSPECTOR_V8DEBUGGERAGENTIMPL_H_ |
+ |
+#include "src/inspector/Allocator.h" |
+#include "src/inspector/JavaScriptCallFrame.h" |
+#include "src/inspector/protocol/Debugger.h" |
+#include "src/inspector/protocol/Forward.h" |
+ |
+#include <vector> |
+ |
+namespace v8_inspector { |
+ |
+struct ScriptBreakpoint; |
+class JavaScriptCallFrame; |
+class PromiseTracker; |
+class V8Debugger; |
+class V8DebuggerScript; |
+class V8InspectorImpl; |
+class V8InspectorSessionImpl; |
+class V8Regex; |
+class V8StackTraceImpl; |
+ |
+using protocol::ErrorString; |
+using protocol::Maybe; |
+ |
+class V8DebuggerAgentImpl : public protocol::Debugger::Backend { |
+ V8_INSPECTOR_DISALLOW_COPY(V8DebuggerAgentImpl); |
+ |
+ public: |
+ enum SkipPauseRequest { |
+ RequestNoSkip, |
+ RequestContinue, |
+ RequestStepInto, |
+ RequestStepOut, |
+ RequestStepFrame |
+ }; |
+ |
+ enum BreakpointSource { |
+ UserBreakpointSource, |
+ DebugCommandBreakpointSource, |
+ MonitorCommandBreakpointSource |
+ }; |
+ |
+ V8DebuggerAgentImpl(V8InspectorSessionImpl*, protocol::FrontendChannel*, |
+ protocol::DictionaryValue* state); |
+ ~V8DebuggerAgentImpl() override; |
+ void restore(); |
+ |
+ // Part of the protocol. |
+ void enable(ErrorString*) override; |
+ void disable(ErrorString*) override; |
+ void setBreakpointsActive(ErrorString*, bool active) override; |
+ void setSkipAllPauses(ErrorString*, bool skip) override; |
+ void setBreakpointByUrl( |
+ ErrorString*, int lineNumber, const Maybe<String16>& optionalURL, |
+ const Maybe<String16>& optionalURLRegex, |
+ const Maybe<int>& optionalColumnNumber, |
+ const Maybe<String16>& optionalCondition, String16*, |
+ std::unique_ptr<protocol::Array<protocol::Debugger::Location>>* locations) |
+ override; |
+ void setBreakpoint( |
+ ErrorString*, std::unique_ptr<protocol::Debugger::Location>, |
+ const Maybe<String16>& optionalCondition, String16*, |
+ std::unique_ptr<protocol::Debugger::Location>* actualLocation) override; |
+ void removeBreakpoint(ErrorString*, const String16& breakpointId) override; |
+ void continueToLocation( |
+ ErrorString*, std::unique_ptr<protocol::Debugger::Location>) override; |
+ void searchInContent( |
+ ErrorString*, const String16& scriptId, const String16& query, |
+ const Maybe<bool>& optionalCaseSensitive, |
+ const Maybe<bool>& optionalIsRegex, |
+ std::unique_ptr<protocol::Array<protocol::Debugger::SearchMatch>>*) |
+ override; |
+ void setScriptSource( |
+ ErrorString*, const String16& inScriptId, const String16& inScriptSource, |
+ const Maybe<bool>& dryRun, |
+ Maybe<protocol::Array<protocol::Debugger::CallFrame>>* optOutCallFrames, |
+ Maybe<bool>* optOutStackChanged, |
+ Maybe<protocol::Runtime::StackTrace>* optOutAsyncStackTrace, |
+ Maybe<protocol::Runtime::ExceptionDetails>* optOutCompileError) override; |
+ void restartFrame( |
+ ErrorString*, const String16& callFrameId, |
+ std::unique_ptr<protocol::Array<protocol::Debugger::CallFrame>>* |
+ newCallFrames, |
+ Maybe<protocol::Runtime::StackTrace>* asyncStackTrace) override; |
+ void getScriptSource(ErrorString*, const String16& scriptId, |
+ String16* scriptSource) override; |
+ void pause(ErrorString*) override; |
+ void resume(ErrorString*) override; |
+ void stepOver(ErrorString*) override; |
+ void stepInto(ErrorString*) override; |
+ void stepOut(ErrorString*) override; |
+ void setPauseOnExceptions(ErrorString*, const String16& pauseState) override; |
+ void evaluateOnCallFrame( |
+ ErrorString*, const String16& callFrameId, const String16& expression, |
+ const Maybe<String16>& objectGroup, |
+ const Maybe<bool>& includeCommandLineAPI, const Maybe<bool>& silent, |
+ const Maybe<bool>& returnByValue, const Maybe<bool>& generatePreview, |
+ std::unique_ptr<protocol::Runtime::RemoteObject>* result, |
+ Maybe<protocol::Runtime::ExceptionDetails>*) override; |
+ void setVariableValue( |
+ ErrorString*, int scopeNumber, const String16& variableName, |
+ std::unique_ptr<protocol::Runtime::CallArgument> newValue, |
+ const String16& callFrame) override; |
+ void setAsyncCallStackDepth(ErrorString*, int depth) override; |
+ void setBlackboxPatterns( |
+ ErrorString*, |
+ std::unique_ptr<protocol::Array<String16>> patterns) override; |
+ void setBlackboxedRanges( |
+ ErrorString*, const String16& scriptId, |
+ std::unique_ptr<protocol::Array<protocol::Debugger::ScriptPosition>> |
+ positions) override; |
+ |
+ bool enabled(); |
+ |
+ void setBreakpointAt(const String16& scriptId, int lineNumber, |
+ int columnNumber, BreakpointSource, |
+ const String16& condition = String16()); |
+ void removeBreakpointAt(const String16& scriptId, int lineNumber, |
+ int columnNumber, BreakpointSource); |
+ void schedulePauseOnNextStatement( |
+ const String16& breakReason, |
+ std::unique_ptr<protocol::DictionaryValue> data); |
+ void cancelPauseOnNextStatement(); |
+ void breakProgram(const String16& breakReason, |
+ std::unique_ptr<protocol::DictionaryValue> data); |
+ void breakProgramOnException(const String16& breakReason, |
+ std::unique_ptr<protocol::DictionaryValue> data); |
+ |
+ void reset(); |
+ |
+ // Interface for V8InspectorImpl |
+ SkipPauseRequest didPause(v8::Local<v8::Context>, |
+ v8::Local<v8::Value> exception, |
+ const std::vector<String16>& hitBreakpoints, |
+ bool isPromiseRejection); |
+ void didContinue(); |
+ void didParseSource(std::unique_ptr<V8DebuggerScript>, bool success); |
+ void willExecuteScript(int scriptId); |
+ void didExecuteScript(); |
+ |
+ v8::Isolate* isolate() { return m_isolate; } |
+ |
+ private: |
+ bool checkEnabled(ErrorString*); |
+ void enable(); |
+ |
+ SkipPauseRequest shouldSkipExceptionPause(JavaScriptCallFrame* topCallFrame); |
+ SkipPauseRequest shouldSkipStepPause(JavaScriptCallFrame* topCallFrame); |
+ |
+ void schedulePauseOnNextStatementIfSteppingInto(); |
+ |
+ std::unique_ptr<protocol::Array<protocol::Debugger::CallFrame>> |
+ currentCallFrames(ErrorString*); |
+ std::unique_ptr<protocol::Runtime::StackTrace> currentAsyncStackTrace(); |
+ |
+ void changeJavaScriptRecursionLevel(int step); |
+ |
+ void setPauseOnExceptionsImpl(ErrorString*, int); |
+ |
+ std::unique_ptr<protocol::Debugger::Location> resolveBreakpoint( |
+ const String16& breakpointId, const String16& scriptId, |
+ const ScriptBreakpoint&, BreakpointSource); |
+ void removeBreakpoint(const String16& breakpointId); |
+ bool assertPaused(ErrorString*); |
+ void clearBreakDetails(); |
+ |
+ bool isCurrentCallStackEmptyOrBlackboxed(); |
+ bool isTopPausedCallFrameBlackboxed(); |
+ bool isCallFrameWithUnknownScriptOrBlackboxed(JavaScriptCallFrame*); |
+ |
+ void internalSetAsyncCallStackDepth(int); |
+ void increaseCachedSkipStackGeneration(); |
+ |
+ bool setBlackboxPattern(ErrorString*, const String16& pattern); |
+ |
+ using ScriptsMap = |
+ protocol::HashMap<String16, std::unique_ptr<V8DebuggerScript>>; |
+ using BreakpointIdToDebuggerBreakpointIdsMap = |
+ protocol::HashMap<String16, std::vector<String16>>; |
+ using DebugServerBreakpointToBreakpointIdAndSourceMap = |
+ protocol::HashMap<String16, std::pair<String16, BreakpointSource>>; |
+ using MuteBreakpoins = protocol::HashMap<String16, std::pair<String16, int>>; |
+ |
+ enum DebuggerStep { NoStep = 0, StepInto, StepOver, StepOut }; |
+ |
+ V8InspectorImpl* m_inspector; |
+ V8Debugger* m_debugger; |
+ V8InspectorSessionImpl* m_session; |
+ bool m_enabled; |
+ protocol::DictionaryValue* m_state; |
+ protocol::Debugger::Frontend m_frontend; |
+ v8::Isolate* m_isolate; |
+ v8::Global<v8::Context> m_pausedContext; |
+ JavaScriptCallFrames m_pausedCallFrames; |
+ ScriptsMap m_scripts; |
+ BreakpointIdToDebuggerBreakpointIdsMap m_breakpointIdToDebuggerBreakpointIds; |
+ DebugServerBreakpointToBreakpointIdAndSourceMap m_serverBreakpoints; |
+ String16 m_continueToLocationBreakpointId; |
+ String16 m_breakReason; |
+ std::unique_ptr<protocol::DictionaryValue> m_breakAuxData; |
+ DebuggerStep m_scheduledDebuggerStep; |
+ bool m_skipNextDebuggerStepOut; |
+ bool m_javaScriptPauseScheduled; |
+ bool m_steppingFromFramework; |
+ bool m_pausingOnNativeEvent; |
+ |
+ int m_skippedStepFrameCount; |
+ int m_recursionLevelForStepOut; |
+ int m_recursionLevelForStepFrame; |
+ bool m_skipAllPauses; |
+ |
+ std::unique_ptr<V8Regex> m_blackboxPattern; |
+ protocol::HashMap<String16, std::vector<std::pair<int, int>>> |
+ m_blackboxedPositions; |
+}; |
+ |
+} // namespace v8_inspector |
+ |
+#endif // V8_INSPECTOR_V8DEBUGGERAGENTIMPL_H_ |