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 2af1d43efe1d1ff240be691e408709508bbf9eb8..75a7a3fe8e8b372497945cfd106439812960618e 100644 |
--- a/src/inspector/v8-debugger-agent-impl.cc |
+++ b/src/inspector/v8-debugger-agent-impl.cc |
@@ -198,8 +198,7 @@ V8DebuggerAgentImpl::V8DebuggerAgentImpl( |
m_enabled(false), |
m_state(state), |
m_frontend(frontendChannel), |
- m_isolate(m_inspector->isolate()), |
- m_javaScriptPauseScheduled(false) {} |
+ m_isolate(m_inspector->isolate()) {} |
V8DebuggerAgentImpl::~V8DebuggerAgentImpl() {} |
@@ -251,7 +250,6 @@ Response V8DebuggerAgentImpl::disable() { |
m_debugger->setAsyncCallStackDepth(this, 0); |
m_continueToLocationBreakpointId = String16(); |
clearBreakDetails(); |
- m_javaScriptPauseScheduled = false; |
m_skipAllPauses = false; |
m_state->setBoolean(DebuggerAgentState::skipAllPauses, false); |
m_state->remove(DebuggerAgentState::blackboxPattern); |
@@ -291,6 +289,10 @@ void V8DebuggerAgentImpl::restore() { |
Response V8DebuggerAgentImpl::setBreakpointsActive(bool active) { |
if (!enabled()) return Response::Error(kDebuggerNotEnabled); |
m_debugger->setBreakpointsActivated(active); |
+ if (!active && !m_breakReason.empty()) { |
+ clearBreakDetails(); |
+ m_debugger->setPauseOnNextStatement(false, m_session->contextGroupId()); |
+ } |
return Response::OK(); |
} |
@@ -685,9 +687,7 @@ void V8DebuggerAgentImpl::clearBreakDetails() { |
void V8DebuggerAgentImpl::schedulePauseOnNextStatement( |
const String16& breakReason, |
std::unique_ptr<protocol::DictionaryValue> data) { |
- if (!enabled() || m_javaScriptPauseScheduled || isPaused() || |
- !m_debugger->breakpointsActivated()) |
- return; |
+ if (!enabled() || isPaused() || !m_debugger->breakpointsActivated()) return; |
if (m_breakReason.empty()) { |
m_debugger->setPauseOnNextStatement(true, m_session->contextGroupId()); |
} |
@@ -695,18 +695,20 @@ void V8DebuggerAgentImpl::schedulePauseOnNextStatement( |
} |
void V8DebuggerAgentImpl::cancelPauseOnNextStatement() { |
- if (m_javaScriptPauseScheduled || isPaused()) return; |
- popBreakDetails(); |
- if (m_breakReason.empty()) |
+ if (!enabled() || isPaused() || !m_debugger->breakpointsActivated()) return; |
+ if (m_breakReason.size() == 1) { |
m_debugger->setPauseOnNextStatement(false, m_session->contextGroupId()); |
+ } |
+ popBreakDetails(); |
} |
Response V8DebuggerAgentImpl::pause() { |
if (!enabled()) return Response::Error(kDebuggerNotEnabled); |
- if (m_javaScriptPauseScheduled || isPaused()) return Response::OK(); |
- clearBreakDetails(); |
- m_javaScriptPauseScheduled = true; |
- m_debugger->setPauseOnNextStatement(true, m_session->contextGroupId()); |
+ if (isPaused()) return Response::OK(); |
+ if (m_breakReason.empty()) { |
+ m_debugger->setPauseOnNextStatement(true, m_session->contextGroupId()); |
+ } |
+ pushBreakDetails(protocol::Debugger::Paused::ReasonEnum::Other, nullptr); |
return Response::OK(); |
} |
@@ -1240,7 +1242,6 @@ void V8DebuggerAgentImpl::didPause(int contextId, |
m_frontend.paused(std::move(protocolCallFrames), breakReason, |
std::move(breakAuxData), std::move(hitBreakpointIds), |
currentAsyncStackTrace()); |
- m_javaScriptPauseScheduled = false; |
if (!m_continueToLocationBreakpointId.isEmpty()) { |
m_debugger->removeBreakpoint(m_continueToLocationBreakpointId); |