Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(47)

Unified Diff: src/inspector/v8-debugger-agent-impl.cc

Issue 2471583003: [inspector] migrate Debugger to new style (Closed)
Patch Set: addressed comments Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/inspector/v8-debugger-agent-impl.h ('k') | src/inspector/v8-inspector-session-impl.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/inspector/v8-debugger-agent-impl.cc
diff --git a/src/inspector/v8-debugger-agent-impl.cc b/src/inspector/v8-debugger-agent-impl.cc
index 94b7f9417757d4ce64a13540cf0ee05cd3f8a08c..adf9169d303ab9dca493c6e4c35eeb2162ec6be2 100644
--- a/src/inspector/v8-debugger-agent-impl.cc
+++ b/src/inspector/v8-debugger-agent-impl.cc
@@ -54,8 +54,11 @@ static const char skipAllPauses[] = "skipAllPauses";
} // namespace DebuggerAgentState
-static const int maxSkipStepFrameCount = 128;
-static const char backtraceObjectGroup[] = "backtrace";
+static const int kMaxSkipStepFrameCount = 128;
+static const char kBacktraceObjectGroup[] = "backtrace";
+static const char kDebuggerNotEnabled[] = "Debugger agent is not enabled";
+static const char kDebuggerNotPaused[] =
+ "Can only perform operation while paused.";
static String16 breakpointIdSuffix(
V8DebuggerAgentImpl::BreakpointSource source) {
@@ -83,11 +86,6 @@ static bool positionComparator(const std::pair<int, int>& a,
return a.second < b.second;
}
-static bool hasInternalError(ErrorString* errorString, bool hasError) {
- if (hasError) *errorString = "Internal error";
- return hasError;
-}
-
static std::unique_ptr<protocol::Debugger::Location> buildProtocolLocation(
const String16& scriptId, int lineNumber, int columnNumber) {
return protocol::Debugger::Location::create()
@@ -122,13 +120,7 @@ V8DebuggerAgentImpl::V8DebuggerAgentImpl(
V8DebuggerAgentImpl::~V8DebuggerAgentImpl() {}
-bool V8DebuggerAgentImpl::checkEnabled(ErrorString* errorString) {
- if (enabled()) return true;
- *errorString = "Debugger agent is not enabled";
- return false;
-}
-
-void V8DebuggerAgentImpl::enable() {
+void V8DebuggerAgentImpl::enableImpl() {
// m_inspector->addListener may result in reporting all parsed scripts to
// the agent so it should already be in enabled state by then.
m_enabled = true;
@@ -147,19 +139,18 @@ void V8DebuggerAgentImpl::enable() {
bool V8DebuggerAgentImpl::enabled() { return m_enabled; }
-void V8DebuggerAgentImpl::enable(ErrorString* errorString) {
- if (enabled()) return;
+Response V8DebuggerAgentImpl::enable() {
+ if (enabled()) return Response::OK();
- if (!m_inspector->client()->canExecuteScripts(m_session->contextGroupId())) {
- *errorString = "Script execution is prohibited";
- return;
- }
+ if (!m_inspector->client()->canExecuteScripts(m_session->contextGroupId()))
+ return Response::Error("Script execution is prohibited");
- enable();
+ enableImpl();
+ return Response::OK();
}
-void V8DebuggerAgentImpl::disable(ErrorString*) {
- if (!enabled()) return;
+Response V8DebuggerAgentImpl::disable() {
+ if (!enabled()) return Response::OK();
m_state->setObject(DebuggerAgentState::javaScriptBreakpoints,
protocol::DictionaryValue::create());
@@ -190,6 +181,7 @@ void V8DebuggerAgentImpl::disable(ErrorString*) {
m_state->remove(DebuggerAgentState::blackboxPattern);
m_enabled = false;
m_state->setBoolean(DebuggerAgentState::debuggerEnabled, false);
+ return Response::OK();
}
void V8DebuggerAgentImpl::restore() {
@@ -199,7 +191,7 @@ void V8DebuggerAgentImpl::restore() {
if (!m_inspector->client()->canExecuteScripts(m_session->contextGroupId()))
return;
- enable();
+ enableImpl();
int pauseState = v8::DebugInterface::NoBreakOnException;
m_state->getInteger(DebuggerAgentState::pauseOnExceptionsState, &pauseState);
@@ -216,20 +208,20 @@ void V8DebuggerAgentImpl::restore() {
String16 blackboxPattern;
if (m_state->getString(DebuggerAgentState::blackboxPattern,
&blackboxPattern)) {
- ErrorString error;
- if (!setBlackboxPattern(&error, blackboxPattern)) UNREACHABLE();
+ setBlackboxPattern(blackboxPattern);
}
}
-void V8DebuggerAgentImpl::setBreakpointsActive(ErrorString* errorString,
- bool active) {
- if (!checkEnabled(errorString)) return;
+Response V8DebuggerAgentImpl::setBreakpointsActive(bool active) {
+ if (!enabled()) return Response::Error(kDebuggerNotEnabled);
m_debugger->setBreakpointsActivated(active);
+ return Response::OK();
}
-void V8DebuggerAgentImpl::setSkipAllPauses(ErrorString*, bool skip) {
+Response V8DebuggerAgentImpl::setSkipAllPauses(bool skip) {
m_skipAllPauses = skip;
m_state->setBoolean(DebuggerAgentState::skipAllPauses, m_skipAllPauses);
+ return Response::OK();
}
static std::unique_ptr<protocol::DictionaryValue>
@@ -255,27 +247,21 @@ static bool matches(V8InspectorImpl* inspector, const String16& url,
return url == pattern;
}
-void V8DebuggerAgentImpl::setBreakpointByUrl(
- ErrorString* errorString, int lineNumber,
- const Maybe<String16>& optionalURL, const Maybe<String16>& optionalURLRegex,
- const Maybe<int>& optionalColumnNumber,
- const Maybe<String16>& optionalCondition, String16* outBreakpointId,
+Response V8DebuggerAgentImpl::setBreakpointByUrl(
+ int lineNumber, Maybe<String16> optionalURL,
+ Maybe<String16> optionalURLRegex, Maybe<int> optionalColumnNumber,
+ Maybe<String16> optionalCondition, String16* outBreakpointId,
std::unique_ptr<protocol::Array<protocol::Debugger::Location>>* locations) {
*locations = Array<protocol::Debugger::Location>::create();
- if (optionalURL.isJust() == optionalURLRegex.isJust()) {
- *errorString = "Either url or urlRegex must be specified.";
- return;
- }
+ if (optionalURL.isJust() == optionalURLRegex.isJust())
+ return Response::Error("Either url or urlRegex must be specified.");
String16 url = optionalURL.isJust() ? optionalURL.fromJust()
: optionalURLRegex.fromJust();
int columnNumber = 0;
if (optionalColumnNumber.isJust()) {
columnNumber = optionalColumnNumber.fromJust();
- if (columnNumber < 0) {
- *errorString = "Incorrect column number";
- return;
- }
+ if (columnNumber < 0) return Response::Error("Incorrect column number");
}
String16 condition = optionalCondition.fromMaybe("");
bool isRegex = optionalURLRegex.isJust();
@@ -292,10 +278,8 @@ void V8DebuggerAgentImpl::setBreakpointByUrl(
m_state->setObject(DebuggerAgentState::javaScriptBreakpoints,
std::move(newValue));
}
- if (breakpointsCookie->get(breakpointId)) {
- *errorString = "Breakpoint at specified location already exists.";
- return;
- }
+ if (breakpointsCookie->get(breakpointId))
+ return Response::Error("Breakpoint at specified location already exists.");
breakpointsCookie->setObject(
breakpointId, buildObjectForBreakpointCookie(
@@ -311,30 +295,16 @@ void V8DebuggerAgentImpl::setBreakpointByUrl(
}
*outBreakpointId = breakpointId;
+ return Response::OK();
}
-static bool parseLocation(
- ErrorString* errorString,
- std::unique_ptr<protocol::Debugger::Location> location, String16* scriptId,
- int* lineNumber, int* columnNumber) {
- *scriptId = location->getScriptId();
- *lineNumber = location->getLineNumber();
- *columnNumber = location->getColumnNumber(0);
- return true;
-}
-
-void V8DebuggerAgentImpl::setBreakpoint(
- ErrorString* errorString,
+Response V8DebuggerAgentImpl::setBreakpoint(
std::unique_ptr<protocol::Debugger::Location> location,
- const Maybe<String16>& optionalCondition, String16* outBreakpointId,
+ Maybe<String16> optionalCondition, String16* outBreakpointId,
std::unique_ptr<protocol::Debugger::Location>* actualLocation) {
- String16 scriptId;
- int lineNumber;
- int columnNumber;
-
- if (!parseLocation(errorString, std::move(location), &scriptId, &lineNumber,
- &columnNumber))
- return;
+ String16 scriptId = location->getScriptId();
+ int lineNumber = location->getLineNumber();
+ int columnNumber = location->getColumnNumber(0);
String16 condition = optionalCondition.fromMaybe("");
@@ -342,28 +312,26 @@ void V8DebuggerAgentImpl::setBreakpoint(
scriptId, lineNumber, columnNumber, UserBreakpointSource);
if (m_breakpointIdToDebuggerBreakpointIds.find(breakpointId) !=
m_breakpointIdToDebuggerBreakpointIds.end()) {
- *errorString = "Breakpoint at specified location already exists.";
- return;
+ return Response::Error("Breakpoint at specified location already exists.");
}
ScriptBreakpoint breakpoint(lineNumber, columnNumber, condition);
*actualLocation = resolveBreakpoint(breakpointId, scriptId, breakpoint,
UserBreakpointSource);
- if (*actualLocation)
- *outBreakpointId = breakpointId;
- else
- *errorString = "Could not resolve breakpoint";
+ if (!*actualLocation) return Response::Error("Could not resolve breakpoint");
+ *outBreakpointId = breakpointId;
+ return Response::OK();
}
-void V8DebuggerAgentImpl::removeBreakpoint(ErrorString* errorString,
- const String16& breakpointId) {
- if (!checkEnabled(errorString)) return;
+Response V8DebuggerAgentImpl::removeBreakpoint(const String16& breakpointId) {
+ if (!enabled()) return Response::Error(kDebuggerNotEnabled);
protocol::DictionaryValue* breakpointsCookie =
m_state->getObject(DebuggerAgentState::javaScriptBreakpoints);
if (breakpointsCookie) breakpointsCookie->remove(breakpointId);
- removeBreakpoint(breakpointId);
+ removeBreakpointImpl(breakpointId);
+ return Response::OK();
}
-void V8DebuggerAgentImpl::removeBreakpoint(const String16& breakpointId) {
+void V8DebuggerAgentImpl::removeBreakpointImpl(const String16& breakpointId) {
DCHECK(enabled());
BreakpointIdToDebuggerBreakpointIdsMap::iterator
debuggerBreakpointIdsIterator =
@@ -381,27 +349,22 @@ void V8DebuggerAgentImpl::removeBreakpoint(const String16& breakpointId) {
m_breakpointIdToDebuggerBreakpointIds.erase(breakpointId);
}
-void V8DebuggerAgentImpl::continueToLocation(
- ErrorString* errorString,
+Response V8DebuggerAgentImpl::continueToLocation(
std::unique_ptr<protocol::Debugger::Location> location) {
- if (!checkEnabled(errorString)) return;
+ if (!enabled()) return Response::Error(kDebuggerNotEnabled);
if (!m_continueToLocationBreakpointId.isEmpty()) {
m_debugger->removeBreakpoint(m_continueToLocationBreakpointId);
m_continueToLocationBreakpointId = "";
}
- String16 scriptId;
- int lineNumber;
- int columnNumber;
-
- if (!parseLocation(errorString, std::move(location), &scriptId, &lineNumber,
- &columnNumber))
- return;
+ String16 scriptId = location->getScriptId();
+ int lineNumber = location->getLineNumber();
+ int columnNumber = location->getColumnNumber(0);
ScriptBreakpoint breakpoint(lineNumber, columnNumber, "");
m_continueToLocationBreakpointId = m_debugger->setBreakpoint(
scriptId, breakpoint, &lineNumber, &columnNumber);
- resume(errorString);
+ return resume();
}
bool V8DebuggerAgentImpl::isCurrentCallStackEmptyOrBlackboxed() {
@@ -472,7 +435,7 @@ V8DebuggerAgentImpl::SkipPauseRequest V8DebuggerAgentImpl::shouldSkipStepPause(
if (!isCallFrameWithUnknownScriptOrBlackboxed(topCallFrame))
return RequestNoSkip;
- if (m_skippedStepFrameCount >= maxSkipStepFrameCount) return RequestStepOut;
+ if (m_skippedStepFrameCount >= kMaxSkipStepFrameCount) return RequestStepOut;
if (!m_skippedStepFrameCount) m_recursionLevelForStepFrame = 1;
@@ -510,17 +473,14 @@ V8DebuggerAgentImpl::resolveBreakpoint(const String16& breakpointId,
return buildProtocolLocation(scriptId, actualLineNumber, actualColumnNumber);
}
-void V8DebuggerAgentImpl::searchInContent(
- ErrorString* error, const String16& scriptId, const String16& query,
- const Maybe<bool>& optionalCaseSensitive,
- const Maybe<bool>& optionalIsRegex,
+Response V8DebuggerAgentImpl::searchInContent(
+ const String16& scriptId, const String16& query,
+ Maybe<bool> optionalCaseSensitive, Maybe<bool> optionalIsRegex,
std::unique_ptr<Array<protocol::Debugger::SearchMatch>>* results) {
v8::HandleScope handles(m_isolate);
ScriptsMap::iterator it = m_scripts.find(scriptId);
- if (it == m_scripts.end()) {
- *error = String16("No script for id: " + scriptId);
- return;
- }
+ if (it == m_scripts.end())
+ return Response::Error("No script for id: " + scriptId);
std::vector<std::unique_ptr<protocol::Debugger::SearchMatch>> matches =
searchInTextByLinesImpl(m_session,
@@ -530,48 +490,46 @@ void V8DebuggerAgentImpl::searchInContent(
*results = protocol::Array<protocol::Debugger::SearchMatch>::create();
for (size_t i = 0; i < matches.size(); ++i)
(*results)->addItem(std::move(matches[i]));
+ return Response::OK();
}
-void V8DebuggerAgentImpl::setScriptSource(
- ErrorString* errorString, const String16& scriptId,
- const String16& newContent, const Maybe<bool>& dryRun,
+Response V8DebuggerAgentImpl::setScriptSource(
+ const String16& scriptId, const String16& newContent, Maybe<bool> dryRun,
Maybe<protocol::Array<protocol::Debugger::CallFrame>>* newCallFrames,
Maybe<bool>* stackChanged, Maybe<StackTrace>* asyncStackTrace,
Maybe<protocol::Runtime::ExceptionDetails>* optOutCompileError) {
- if (!checkEnabled(errorString)) return;
+ if (!enabled()) return Response::Error(kDebuggerNotEnabled);
v8::HandleScope handles(m_isolate);
v8::Local<v8::String> newSource = toV8String(m_isolate, newContent);
- if (!m_debugger->setScriptSource(scriptId, newSource, dryRun.fromMaybe(false),
- errorString, optOutCompileError,
- &m_pausedCallFrames, stackChanged))
- return;
+ bool compileError = false;
+ Response response = m_debugger->setScriptSource(
+ scriptId, newSource, dryRun.fromMaybe(false), optOutCompileError,
+ &m_pausedCallFrames, stackChanged, &compileError);
+ if (!response.isSuccess() || compileError) return response;
ScriptsMap::iterator it = m_scripts.find(scriptId);
if (it != m_scripts.end()) it->second->setSource(m_isolate, newSource);
- std::unique_ptr<Array<CallFrame>> callFrames = currentCallFrames(errorString);
- if (!callFrames) return;
+ std::unique_ptr<Array<CallFrame>> callFrames;
+ response = currentCallFrames(&callFrames);
+ if (!response.isSuccess()) return response;
*newCallFrames = std::move(callFrames);
*asyncStackTrace = currentAsyncStackTrace();
+ return Response::OK();
}
-void V8DebuggerAgentImpl::restartFrame(
- ErrorString* errorString, const String16& callFrameId,
+Response V8DebuggerAgentImpl::restartFrame(
+ const String16& callFrameId,
std::unique_ptr<Array<CallFrame>>* newCallFrames,
Maybe<StackTrace>* asyncStackTrace) {
- if (!assertPaused(errorString)) return;
+ if (m_pausedContext.IsEmpty()) return Response::Error(kDebuggerNotPaused);
InjectedScript::CallFrameScope scope(m_inspector, m_session->contextGroupId(),
callFrameId);
Response response = scope.initialize();
- if (!response.isSuccess()) {
- *errorString = response.errorMessage();
- return;
- }
- if (scope.frameOrdinal() >= m_pausedCallFrames.size()) {
- *errorString = "Could not find call frame with given id";
- return;
- }
+ if (!response.isSuccess()) return response;
+ if (scope.frameOrdinal() >= m_pausedCallFrames.size())
+ return Response::Error("Could not find call frame with given id");
v8::Local<v8::Value> resultValue;
v8::Local<v8::Boolean> result;
@@ -580,28 +538,26 @@ void V8DebuggerAgentImpl::restartFrame(
scope.tryCatch().HasCaught() ||
!resultValue->ToBoolean(scope.context()).ToLocal(&result) ||
!result->Value()) {
- *errorString = "Internal error";
- return;
+ return Response::InternalError();
}
JavaScriptCallFrames frames = m_debugger->currentCallFrames();
m_pausedCallFrames.swap(frames);
- *newCallFrames = currentCallFrames(errorString);
- if (!*newCallFrames) return;
+ response = currentCallFrames(newCallFrames);
+ if (!response.isSuccess()) return response;
*asyncStackTrace = currentAsyncStackTrace();
+ return Response::OK();
}
-void V8DebuggerAgentImpl::getScriptSource(ErrorString* error,
- const String16& scriptId,
- String16* scriptSource) {
- if (!checkEnabled(error)) return;
+Response V8DebuggerAgentImpl::getScriptSource(const String16& scriptId,
+ String16* scriptSource) {
+ if (!enabled()) return Response::Error(kDebuggerNotEnabled);
ScriptsMap::iterator it = m_scripts.find(scriptId);
- if (it == m_scripts.end()) {
- *error = "No script for id: " + scriptId;
- return;
- }
+ if (it == m_scripts.end())
+ return Response::Error("No script for id: " + scriptId);
v8::HandleScope handles(m_isolate);
*scriptSource = toProtocolString(it->second->source(m_isolate));
+ return Response::OK();
}
void V8DebuggerAgentImpl::schedulePauseOnNextStatement(
@@ -637,61 +593,64 @@ void V8DebuggerAgentImpl::cancelPauseOnNextStatement() {
m_debugger->setPauseOnNextStatement(false);
}
-void V8DebuggerAgentImpl::pause(ErrorString* errorString) {
- if (!checkEnabled(errorString)) return;
- if (m_javaScriptPauseScheduled || m_debugger->isPaused()) return;
+Response V8DebuggerAgentImpl::pause() {
+ if (!enabled()) return Response::Error(kDebuggerNotEnabled);
+ if (m_javaScriptPauseScheduled || m_debugger->isPaused())
+ return Response::OK();
clearBreakDetails();
m_javaScriptPauseScheduled = true;
m_scheduledDebuggerStep = NoStep;
m_skippedStepFrameCount = 0;
m_steppingFromFramework = false;
m_debugger->setPauseOnNextStatement(true);
+ return Response::OK();
}
-void V8DebuggerAgentImpl::resume(ErrorString* errorString) {
- if (!assertPaused(errorString)) return;
+Response V8DebuggerAgentImpl::resume() {
+ if (m_pausedContext.IsEmpty()) return Response::Error(kDebuggerNotPaused);
m_scheduledDebuggerStep = NoStep;
m_steppingFromFramework = false;
- m_session->releaseObjectGroup(backtraceObjectGroup);
+ m_session->releaseObjectGroup(kBacktraceObjectGroup);
m_debugger->continueProgram();
+ return Response::OK();
}
-void V8DebuggerAgentImpl::stepOver(ErrorString* errorString) {
- if (!assertPaused(errorString)) return;
+Response V8DebuggerAgentImpl::stepOver() {
+ if (m_pausedContext.IsEmpty()) return Response::Error(kDebuggerNotPaused);
// StepOver at function return point should fallback to StepInto.
JavaScriptCallFrame* frame =
!m_pausedCallFrames.empty() ? m_pausedCallFrames[0].get() : nullptr;
- if (frame && frame->isAtReturn()) {
- stepInto(errorString);
- return;
- }
+ if (frame && frame->isAtReturn()) return stepInto();
m_scheduledDebuggerStep = StepOver;
m_steppingFromFramework = isTopPausedCallFrameBlackboxed();
- m_session->releaseObjectGroup(backtraceObjectGroup);
+ m_session->releaseObjectGroup(kBacktraceObjectGroup);
m_debugger->stepOverStatement();
+ return Response::OK();
}
-void V8DebuggerAgentImpl::stepInto(ErrorString* errorString) {
- if (!assertPaused(errorString)) return;
+Response V8DebuggerAgentImpl::stepInto() {
+ if (m_pausedContext.IsEmpty()) return Response::Error(kDebuggerNotPaused);
m_scheduledDebuggerStep = StepInto;
m_steppingFromFramework = isTopPausedCallFrameBlackboxed();
- m_session->releaseObjectGroup(backtraceObjectGroup);
+ m_session->releaseObjectGroup(kBacktraceObjectGroup);
m_debugger->stepIntoStatement();
+ return Response::OK();
}
-void V8DebuggerAgentImpl::stepOut(ErrorString* errorString) {
- if (!assertPaused(errorString)) return;
+Response V8DebuggerAgentImpl::stepOut() {
+ if (m_pausedContext.IsEmpty()) return Response::Error(kDebuggerNotPaused);
m_scheduledDebuggerStep = StepOut;
m_skipNextDebuggerStepOut = false;
m_recursionLevelForStepOut = 1;
m_steppingFromFramework = isTopPausedCallFrameBlackboxed();
- m_session->releaseObjectGroup(backtraceObjectGroup);
+ m_session->releaseObjectGroup(kBacktraceObjectGroup);
m_debugger->stepOutOfFunction();
+ return Response::OK();
}
-void V8DebuggerAgentImpl::setPauseOnExceptions(
- ErrorString* errorString, const String16& stringPauseState) {
- if (!checkEnabled(errorString)) return;
+Response V8DebuggerAgentImpl::setPauseOnExceptions(
+ const String16& stringPauseState) {
+ if (!enabled()) return Response::Error(kDebuggerNotEnabled);
v8::DebugInterface::ExceptionBreakState pauseState;
if (stringPauseState == "none") {
pauseState = v8::DebugInterface::NoBreakOnException;
@@ -700,10 +659,11 @@ void V8DebuggerAgentImpl::setPauseOnExceptions(
} else if (stringPauseState == "uncaught") {
pauseState = v8::DebugInterface::BreakOnUncaughtException;
} else {
- *errorString = "Unknown pause on exceptions mode: " + stringPauseState;
- return;
+ return Response::Error("Unknown pause on exceptions mode: " +
+ stringPauseState);
}
setPauseOnExceptionsImpl(pauseState);
+ return Response::OK();
}
void V8DebuggerAgentImpl::setPauseOnExceptionsImpl(int pauseState) {
@@ -712,25 +672,19 @@ void V8DebuggerAgentImpl::setPauseOnExceptionsImpl(int pauseState) {
m_state->setInteger(DebuggerAgentState::pauseOnExceptionsState, pauseState);
}
-void V8DebuggerAgentImpl::evaluateOnCallFrame(
- ErrorString* 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,
+Response V8DebuggerAgentImpl::evaluateOnCallFrame(
+ const String16& callFrameId, const String16& expression,
+ Maybe<String16> objectGroup, Maybe<bool> includeCommandLineAPI,
+ Maybe<bool> silent, Maybe<bool> returnByValue, Maybe<bool> generatePreview,
std::unique_ptr<RemoteObject>* result,
Maybe<protocol::Runtime::ExceptionDetails>* exceptionDetails) {
- if (!assertPaused(errorString)) return;
+ if (m_pausedContext.IsEmpty()) return Response::Error(kDebuggerNotPaused);
InjectedScript::CallFrameScope scope(m_inspector, m_session->contextGroupId(),
callFrameId);
Response response = scope.initialize();
- if (!response.isSuccess()) {
- *errorString = response.errorMessage();
- return;
- }
- if (scope.frameOrdinal() >= m_pausedCallFrames.size()) {
- *errorString = "Could not find call frame with given id";
- return;
- }
+ if (!response.isSuccess()) return response;
+ if (scope.frameOrdinal() >= m_pausedCallFrames.size())
+ return Response::Error("Could not find call frame with given id");
if (includeCommandLineAPI.fromMaybe(false)) scope.installCommandLineAPI();
if (silent.fromMaybe(false)) scope.ignoreExceptionsAndMuteConsole();
@@ -742,65 +696,51 @@ void V8DebuggerAgentImpl::evaluateOnCallFrame(
// Re-initialize after running client's code, as it could have destroyed
// context or session.
response = scope.initialize();
- if (!response.isSuccess()) {
- *errorString = response.errorMessage();
- return;
- }
- response = scope.injectedScript()->wrapEvaluateResult(
+ if (!response.isSuccess()) return response;
+ return scope.injectedScript()->wrapEvaluateResult(
maybeResultValue, scope.tryCatch(), objectGroup.fromMaybe(""),
returnByValue.fromMaybe(false), generatePreview.fromMaybe(false), result,
exceptionDetails);
- if (!response.isSuccess()) *errorString = response.errorMessage();
}
-void V8DebuggerAgentImpl::setVariableValue(
- ErrorString* errorString, int scopeNumber, const String16& variableName,
+Response V8DebuggerAgentImpl::setVariableValue(
+ int scopeNumber, const String16& variableName,
std::unique_ptr<protocol::Runtime::CallArgument> newValueArgument,
const String16& callFrameId) {
- if (!checkEnabled(errorString)) return;
- if (!assertPaused(errorString)) return;
+ if (!enabled()) return Response::Error(kDebuggerNotEnabled);
+ if (m_pausedContext.IsEmpty()) return Response::Error(kDebuggerNotPaused);
InjectedScript::CallFrameScope scope(m_inspector, m_session->contextGroupId(),
callFrameId);
Response response = scope.initialize();
- if (!response.isSuccess()) {
- *errorString = response.errorMessage();
- return;
- }
+ if (!response.isSuccess()) return response;
v8::Local<v8::Value> newValue;
response = scope.injectedScript()->resolveCallArgument(newValueArgument.get(),
&newValue);
- if (!response.isSuccess()) {
- *errorString = response.errorMessage();
- return;
- }
+ if (!response.isSuccess()) return response;
- if (scope.frameOrdinal() >= m_pausedCallFrames.size()) {
- *errorString = "Could not find call frame with given id";
- return;
- }
+ if (scope.frameOrdinal() >= m_pausedCallFrames.size())
+ return Response::Error("Could not find call frame with given id");
v8::MaybeLocal<v8::Value> result =
m_pausedCallFrames[scope.frameOrdinal()]->setVariableValue(
scopeNumber, toV8String(m_isolate, variableName), newValue);
- if (scope.tryCatch().HasCaught() || result.IsEmpty()) {
- *errorString = "Internal error";
- return;
- }
+ if (scope.tryCatch().HasCaught() || result.IsEmpty())
+ return Response::InternalError();
+ return Response::OK();
}
-void V8DebuggerAgentImpl::setAsyncCallStackDepth(ErrorString* errorString,
- int depth) {
- if (!checkEnabled(errorString)) return;
+Response V8DebuggerAgentImpl::setAsyncCallStackDepth(int depth) {
+ if (!enabled()) return Response::Error(kDebuggerNotEnabled);
m_state->setInteger(DebuggerAgentState::asyncCallStackDepth, depth);
m_debugger->setAsyncCallStackDepth(this, depth);
+ return Response::OK();
}
-void V8DebuggerAgentImpl::setBlackboxPatterns(
- ErrorString* errorString,
+Response V8DebuggerAgentImpl::setBlackboxPatterns(
std::unique_ptr<protocol::Array<String16>> patterns) {
if (!patterns->length()) {
m_blackboxPattern = nullptr;
m_state->remove(DebuggerAgentState::blackboxPattern);
- return;
+ return Response::OK();
}
String16Builder patternBuilder;
@@ -812,48 +752,41 @@ void V8DebuggerAgentImpl::setBlackboxPatterns(
patternBuilder.append(patterns->get(patterns->length() - 1));
patternBuilder.append(')');
String16 pattern = patternBuilder.toString();
- if (!setBlackboxPattern(errorString, pattern)) return;
+ Response response = setBlackboxPattern(pattern);
+ if (!response.isSuccess()) return response;
m_state->setString(DebuggerAgentState::blackboxPattern, pattern);
+ return Response::OK();
}
-bool V8DebuggerAgentImpl::setBlackboxPattern(ErrorString* errorString,
- const String16& pattern) {
+Response V8DebuggerAgentImpl::setBlackboxPattern(const String16& pattern) {
std::unique_ptr<V8Regex> regex(new V8Regex(
m_inspector, pattern, true /** caseSensitive */, false /** multiline */));
- if (!regex->isValid()) {
- *errorString = "Pattern parser error: " + regex->errorMessage();
- return false;
- }
+ if (!regex->isValid())
+ return Response::Error("Pattern parser error: " + regex->errorMessage());
m_blackboxPattern = std::move(regex);
- return true;
+ return Response::OK();
}
-void V8DebuggerAgentImpl::setBlackboxedRanges(
- ErrorString* error, const String16& scriptId,
+Response V8DebuggerAgentImpl::setBlackboxedRanges(
+ const String16& scriptId,
std::unique_ptr<protocol::Array<protocol::Debugger::ScriptPosition>>
inPositions) {
- if (m_scripts.find(scriptId) == m_scripts.end()) {
- *error = "No script with passed id.";
- return;
- }
+ if (m_scripts.find(scriptId) == m_scripts.end())
+ return Response::Error("No script with passed id.");
if (!inPositions->length()) {
m_blackboxedPositions.erase(scriptId);
- return;
+ return Response::OK();
}
std::vector<std::pair<int, int>> positions;
positions.reserve(inPositions->length());
for (size_t i = 0; i < inPositions->length(); ++i) {
protocol::Debugger::ScriptPosition* position = inPositions->get(i);
- if (position->getLineNumber() < 0) {
- *error = "Position missing 'line' or 'line' < 0.";
- return;
- }
- if (position->getColumnNumber() < 0) {
- *error = "Position missing 'column' or 'column' < 0.";
- return;
- }
+ if (position->getLineNumber() < 0)
+ return Response::Error("Position missing 'line' or 'line' < 0.");
+ if (position->getColumnNumber() < 0)
+ return Response::Error("Position missing 'column' or 'column' < 0.");
positions.push_back(
std::make_pair(position->getLineNumber(), position->getColumnNumber()));
}
@@ -863,12 +796,12 @@ void V8DebuggerAgentImpl::setBlackboxedRanges(
if (positions[i - 1].first == positions[i].first &&
positions[i - 1].second < positions[i].second)
continue;
- *error =
- "Input positions array is not sorted or contains duplicate values.";
- return;
+ return Response::Error(
+ "Input positions array is not sorted or contains duplicate values.");
}
m_blackboxedPositions[scriptId] = positions;
+ return Response::OK();
}
void V8DebuggerAgentImpl::willExecuteScript(int scriptId) {
@@ -921,10 +854,12 @@ void V8DebuggerAgentImpl::changeJavaScriptRecursionLevel(int step) {
}
}
-std::unique_ptr<Array<CallFrame>> V8DebuggerAgentImpl::currentCallFrames(
- ErrorString* errorString) {
- if (m_pausedContext.IsEmpty() || !m_pausedCallFrames.size())
- return Array<CallFrame>::create();
+Response V8DebuggerAgentImpl::currentCallFrames(
+ std::unique_ptr<Array<CallFrame>>* result) {
+ if (m_pausedContext.IsEmpty() || !m_pausedCallFrames.size()) {
+ *result = Array<CallFrame>::create();
+ return Response::OK();
+ }
v8::HandleScope handles(m_isolate);
v8::Local<v8::Context> debuggerContext =
v8::DebugInterface::GetDebugContext(m_isolate);
@@ -938,8 +873,7 @@ std::unique_ptr<Array<CallFrame>> V8DebuggerAgentImpl::currentCallFrames(
m_pausedCallFrames[frameOrdinal];
v8::Local<v8::Object> details = currentCallFrame->details();
- if (hasInternalError(errorString, details.IsEmpty()))
- return Array<CallFrame>::create();
+ if (details.IsEmpty()) return Response::InternalError();
int contextId = currentCallFrame->contextId();
@@ -948,101 +882,83 @@ std::unique_ptr<Array<CallFrame>> V8DebuggerAgentImpl::currentCallFrames(
String16 callFrameId =
RemoteCallFrameId::serialize(contextId, static_cast<int>(frameOrdinal));
- if (hasInternalError(
- errorString,
- !details
- ->Set(debuggerContext,
- toV8StringInternalized(m_isolate, "callFrameId"),
- toV8String(m_isolate, callFrameId))
- .FromMaybe(false)))
- return Array<CallFrame>::create();
+ if (!details
+ ->Set(debuggerContext,
+ toV8StringInternalized(m_isolate, "callFrameId"),
+ toV8String(m_isolate, callFrameId))
+ .FromMaybe(false)) {
+ return Response::InternalError();
+ }
if (injectedScript) {
v8::Local<v8::Value> scopeChain;
- if (hasInternalError(
- errorString,
- !details->Get(debuggerContext,
- toV8StringInternalized(m_isolate, "scopeChain"))
- .ToLocal(&scopeChain) ||
- !scopeChain->IsArray()))
- return Array<CallFrame>::create();
+ if (!details
+ ->Get(debuggerContext,
+ toV8StringInternalized(m_isolate, "scopeChain"))
+ .ToLocal(&scopeChain) ||
+ !scopeChain->IsArray()) {
+ return Response::InternalError();
+ }
v8::Local<v8::Array> scopeChainArray = scopeChain.As<v8::Array>();
Response response = injectedScript->wrapPropertyInArray(
scopeChainArray, toV8StringInternalized(m_isolate, "object"),
- backtraceObjectGroup);
- if (!response.isSuccess()) {
- *errorString = response.errorMessage();
- return Array<CallFrame>::create();
- }
+ kBacktraceObjectGroup);
+ if (!response.isSuccess()) return response;
response = injectedScript->wrapObjectProperty(
details, toV8StringInternalized(m_isolate, "this"),
- backtraceObjectGroup);
- if (!response.isSuccess()) {
- *errorString = response.errorMessage();
- return Array<CallFrame>::create();
- }
+ kBacktraceObjectGroup);
+ if (!response.isSuccess()) return response;
if (details
->Has(debuggerContext,
toV8StringInternalized(m_isolate, "returnValue"))
.FromMaybe(false)) {
response = injectedScript->wrapObjectProperty(
details, toV8StringInternalized(m_isolate, "returnValue"),
- backtraceObjectGroup);
- if (!response.isSuccess()) {
- *errorString = response.errorMessage();
- return Array<CallFrame>::create();
- }
+ kBacktraceObjectGroup);
+ if (!response.isSuccess()) return response;
}
} else {
- if (hasInternalError(errorString, !details
- ->Set(debuggerContext,
- toV8StringInternalized(
- m_isolate, "scopeChain"),
- v8::Array::New(m_isolate, 0))
- .FromMaybe(false)))
- return Array<CallFrame>::create();
+ if (!details
+ ->Set(debuggerContext,
+ toV8StringInternalized(m_isolate, "scopeChain"),
+ v8::Array::New(m_isolate, 0))
+ .FromMaybe(false)) {
+ return Response::InternalError();
+ }
v8::Local<v8::Object> remoteObject = v8::Object::New(m_isolate);
- if (hasInternalError(
- errorString,
- !remoteObject
- ->Set(debuggerContext,
- toV8StringInternalized(m_isolate, "type"),
- toV8StringInternalized(m_isolate, "undefined"))
- .FromMaybe(false)))
- return Array<CallFrame>::create();
- if (hasInternalError(errorString,
- !details
- ->Set(debuggerContext,
- toV8StringInternalized(m_isolate, "this"),
- remoteObject)
- .FromMaybe(false)))
- return Array<CallFrame>::create();
- if (hasInternalError(
- errorString,
- !details
- ->Delete(debuggerContext,
- toV8StringInternalized(m_isolate, "returnValue"))
- .FromMaybe(false)))
- return Array<CallFrame>::create();
+ if (!remoteObject
+ ->Set(debuggerContext, toV8StringInternalized(m_isolate, "type"),
+ toV8StringInternalized(m_isolate, "undefined"))
+ .FromMaybe(false)) {
+ return Response::InternalError();
+ }
+ if (!details
+ ->Set(debuggerContext, toV8StringInternalized(m_isolate, "this"),
+ remoteObject)
+ .FromMaybe(false)) {
+ return Response::InternalError();
+ }
+ if (!details
+ ->Delete(debuggerContext,
+ toV8StringInternalized(m_isolate, "returnValue"))
+ .FromMaybe(false)) {
+ return Response::InternalError();
+ }
}
- if (hasInternalError(
- errorString,
- !objects
- ->Set(debuggerContext, static_cast<int>(frameOrdinal), details)
- .FromMaybe(false)))
- return Array<CallFrame>::create();
+ if (!objects->Set(debuggerContext, static_cast<int>(frameOrdinal), details)
+ .FromMaybe(false)) {
+ return Response::InternalError();
+ }
}
std::unique_ptr<protocol::Value> protocolValue;
Response response = toProtocolValue(debuggerContext, objects, &protocolValue);
- if (!response.isSuccess()) return Array<CallFrame>::create();
+ if (!response.isSuccess()) return response;
protocol::ErrorSupport errorSupport;
- std::unique_ptr<Array<CallFrame>> callFrames =
- Array<CallFrame>::parse(protocolValue.get(), &errorSupport);
- if (hasInternalError(errorString, !callFrames))
- return Array<CallFrame>::create();
- return callFrames;
+ *result = Array<CallFrame>::parse(protocolValue.get(), &errorSupport);
+ if (!*result) return Response::Error(errorSupport.errors());
+ return Response::OK();
}
std::unique_ptr<StackTrace> V8DebuggerAgentImpl::currentAsyncStackTrace() {
@@ -1069,8 +985,8 @@ void V8DebuggerAgentImpl::didParseSource(
String16 scriptId = script->scriptId();
String16 scriptURL = script->sourceURL();
- const Maybe<String16>& sourceMapURLParam = script->sourceMappingURL();
- const Maybe<protocol::DictionaryValue>& executionContextAuxDataParam(
+ Maybe<String16> sourceMapURLParam = script->sourceMappingURL();
+ Maybe<protocol::DictionaryValue> executionContextAuxDataParam(
std::move(executionContextAuxData));
const bool* isLiveEditParam = isLiveEdit ? &isLiveEdit : nullptr;
const bool* hasSourceURLParam = hasSourceURL ? &hasSourceURL : nullptr;
@@ -1078,14 +994,14 @@ void V8DebuggerAgentImpl::didParseSource(
m_frontend.scriptParsed(
scriptId, scriptURL, script->startLine(), script->startColumn(),
script->endLine(), script->endColumn(), script->executionContextId(),
- script->hash(), executionContextAuxDataParam, isLiveEditParam,
- sourceMapURLParam, hasSourceURLParam);
+ script->hash(), std::move(executionContextAuxDataParam),
+ isLiveEditParam, std::move(sourceMapURLParam), hasSourceURLParam);
else
m_frontend.scriptFailedToParse(
scriptId, scriptURL, script->startLine(), script->startColumn(),
script->endLine(), script->endColumn(), script->executionContextId(),
- script->hash(), executionContextAuxDataParam, sourceMapURLParam,
- hasSourceURLParam);
+ script->hash(), std::move(executionContextAuxDataParam),
+ std::move(sourceMapURLParam), hasSourceURLParam);
m_scripts[scriptId] = std::move(script);
@@ -1160,7 +1076,7 @@ V8DebuggerAgentImpl::SkipPauseRequest V8DebuggerAgentImpl::didPause(
? protocol::Debugger::Paused::ReasonEnum::PromiseRejection
: protocol::Debugger::Paused::ReasonEnum::Exception;
std::unique_ptr<protocol::Runtime::RemoteObject> obj;
- injectedScript->wrapObject(exception, backtraceObjectGroup, false, false,
+ injectedScript->wrapObject(exception, kBacktraceObjectGroup, false, false,
&obj);
m_breakAuxData = obj ? obj->serialize() : nullptr;
// m_breakAuxData might be null after this.
@@ -1183,8 +1099,10 @@ V8DebuggerAgentImpl::SkipPauseRequest V8DebuggerAgentImpl::didPause(
}
}
- ErrorString errorString;
- m_frontend.paused(currentCallFrames(&errorString), m_breakReason,
+ std::unique_ptr<Array<CallFrame>> protocolCallFrames;
+ Response response = currentCallFrames(&protocolCallFrames);
+ if (!response.isSuccess()) protocolCallFrames = Array<CallFrame>::create();
+ m_frontend.paused(std::move(protocolCallFrames), m_breakReason,
std::move(m_breakAuxData), std::move(hitBreakpointIds),
currentAsyncStackTrace());
m_scheduledDebuggerStep = NoStep;
@@ -1234,14 +1152,6 @@ void V8DebuggerAgentImpl::breakProgramOnException(
breakProgram(breakReason, std::move(data));
}
-bool V8DebuggerAgentImpl::assertPaused(ErrorString* errorString) {
- if (m_pausedContext.IsEmpty()) {
- *errorString = "Can only perform operation while paused.";
- return false;
- }
- return true;
-}
-
void V8DebuggerAgentImpl::clearBreakDetails() {
m_breakReason = protocol::Debugger::Paused::ReasonEnum::Other;
m_breakAuxData = nullptr;
@@ -1260,7 +1170,7 @@ void V8DebuggerAgentImpl::setBreakpointAt(const String16& scriptId,
void V8DebuggerAgentImpl::removeBreakpointAt(const String16& scriptId,
int lineNumber, int columnNumber,
BreakpointSource source) {
- removeBreakpoint(
+ removeBreakpointImpl(
generateBreakpointId(scriptId, lineNumber, columnNumber, source));
}
« no previous file with comments | « src/inspector/v8-debugger-agent-impl.h ('k') | src/inspector/v8-inspector-session-impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698