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

Unified Diff: Source/core/inspector/InspectorDebuggerAgent.cpp

Issue 732593002: DevTools: Make StepInto work across script boundaries and Blink process tasks. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: added new test debugger-step-into-document-write.html Created 6 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
Index: Source/core/inspector/InspectorDebuggerAgent.cpp
diff --git a/Source/core/inspector/InspectorDebuggerAgent.cpp b/Source/core/inspector/InspectorDebuggerAgent.cpp
index 48f3cd49ababa13266d803017ac3031a2d7c6a25..3a08bb8526b03bf66a126d87cb32d11119c684f7 100644
--- a/Source/core/inspector/InspectorDebuggerAgent.cpp
+++ b/Source/core/inspector/InspectorDebuggerAgent.cpp
@@ -121,8 +121,8 @@ InspectorDebuggerAgent::InspectorDebuggerAgent(InjectedScriptManager* injectedSc
, m_injectedScriptManager(injectedScriptManager)
, m_frontend(0)
, m_pausedScriptState(nullptr)
+ , m_scheduledDebuggerStep(NoStep)
, m_javaScriptPauseScheduled(false)
- , m_debuggerStepScheduled(false)
, m_steppingFromFramework(false)
, m_pausingOnNativeEvent(false)
, m_listener(nullptr)
@@ -719,7 +719,7 @@ void InspectorDebuggerAgent::getCollectionEntries(ErrorString* errorString, cons
void InspectorDebuggerAgent::schedulePauseOnNextStatement(InspectorFrontend::Debugger::Reason::Enum breakReason, PassRefPtr<JSONObject> data)
{
- if (m_javaScriptPauseScheduled || isPaused())
+ if (m_scheduledDebuggerStep == StepInto || m_javaScriptPauseScheduled || isPaused())
return;
m_breakReason = breakReason;
m_breakAuxData = data;
@@ -727,6 +727,16 @@ void InspectorDebuggerAgent::schedulePauseOnNextStatement(InspectorFrontend::Deb
scriptDebugServer().setPauseOnNextStatement(true);
}
+void InspectorDebuggerAgent::schedulePauseOnNextStatementIfSteppingInto()
+{
+ if (m_scheduledDebuggerStep != StepInto || m_javaScriptPauseScheduled || isPaused())
+ return;
+ clearBreakDetails();
+ m_pausingOnNativeEvent = false;
+ m_skippedStepInCount = 0;
+ scriptDebugServer().setPauseOnNextStatement(true);
+}
+
void InspectorDebuggerAgent::cancelPauseOnNextStatement()
{
if (m_javaScriptPauseScheduled || isPaused())
@@ -959,7 +969,7 @@ void InspectorDebuggerAgent::resume(ErrorString* errorString)
{
if (!assertPaused(errorString))
return;
- m_debuggerStepScheduled = false;
+ m_scheduledDebuggerStep = NoStep;
m_steppingFromFramework = false;
m_injectedScriptManager->releaseObjectGroup(InspectorDebuggerAgent::backtraceObjectGroup);
scriptDebugServer().continueProgram();
@@ -969,7 +979,7 @@ void InspectorDebuggerAgent::stepOver(ErrorString* errorString)
{
if (!assertPaused(errorString))
return;
- m_debuggerStepScheduled = true;
+ m_scheduledDebuggerStep = StepOver;
m_steppingFromFramework = isTopCallFrameInFramework();
m_injectedScriptManager->releaseObjectGroup(InspectorDebuggerAgent::backtraceObjectGroup);
scriptDebugServer().stepOverStatement();
@@ -979,19 +989,17 @@ void InspectorDebuggerAgent::stepInto(ErrorString* errorString)
{
if (!assertPaused(errorString))
return;
- m_debuggerStepScheduled = true;
+ m_scheduledDebuggerStep = StepInto;
m_steppingFromFramework = isTopCallFrameInFramework();
m_injectedScriptManager->releaseObjectGroup(InspectorDebuggerAgent::backtraceObjectGroup);
scriptDebugServer().stepIntoStatement();
- if (m_listener)
- m_listener->stepInto();
}
void InspectorDebuggerAgent::stepOut(ErrorString* errorString)
{
if (!assertPaused(errorString))
return;
- m_debuggerStepScheduled = true;
+ m_scheduledDebuggerStep = StepOut;
m_steppingFromFramework = isTopCallFrameInFramework();
m_injectedScriptManager->releaseObjectGroup(InspectorDebuggerAgent::backtraceObjectGroup);
scriptDebugServer().stepOutOfFunction();
@@ -1234,6 +1242,19 @@ void InspectorDebuggerAgent::scriptExecutionBlockedByCSP(const String& directive
}
}
+void InspectorDebuggerAgent::willCallFunction(ExecutionContext*, int scriptId, const String&, int)
+{
+ // Skip unknown scripts (i.e. InjectedScript).
+ if (!m_scripts.contains(String::number(scriptId)))
+ return;
+ schedulePauseOnNextStatementIfSteppingInto();
+}
+
+void InspectorDebuggerAgent::willEvaluateScript(LocalFrame*, const String&, int)
+{
+ schedulePauseOnNextStatementIfSteppingInto();
+}
+
PassRefPtr<Array<CallFrame> > InspectorDebuggerAgent::currentCallFrames()
{
if (!m_pausedScriptState || m_currentCallStack.isEmpty())
@@ -1400,7 +1421,7 @@ ScriptDebugListener::SkipPauseRequest InspectorDebuggerAgent::didPause(ScriptSta
result = ScriptDebugListener::NoSkip; // Don't skip explicit breakpoints even if set in frameworks.
else if (!exception.isEmpty())
result = shouldSkipExceptionPause();
- else if (m_debuggerStepScheduled || m_pausingOnNativeEvent)
+ else if (m_scheduledDebuggerStep != NoStep || m_pausingOnNativeEvent)
result = shouldSkipStepPause();
else
result = ScriptDebugListener::NoSkip;
@@ -1436,8 +1457,8 @@ ScriptDebugListener::SkipPauseRequest InspectorDebuggerAgent::didPause(ScriptSta
}
m_frontend->paused(currentCallFrames(), m_breakReason, m_breakAuxData, hitBreakpointIds, currentAsyncStackTrace());
+ m_scheduledDebuggerStep = NoStep;
m_javaScriptPauseScheduled = false;
- m_debuggerStepScheduled = false;
m_steppingFromFramework = false;
m_pausingOnNativeEvent = false;
m_skippedStepInCount = 0;
@@ -1446,8 +1467,6 @@ ScriptDebugListener::SkipPauseRequest InspectorDebuggerAgent::didPause(ScriptSta
scriptDebugServer().removeBreakpoint(m_continueToLocationBreakpointId);
m_continueToLocationBreakpointId = "";
}
- if (m_listener)
- m_listener->didPause();
return result;
}
@@ -1470,7 +1489,7 @@ void InspectorDebuggerAgent::breakProgram(InspectorFrontend::Debugger::Reason::E
return;
m_breakReason = breakReason;
m_breakAuxData = data;
- m_debuggerStepScheduled = false;
+ m_scheduledDebuggerStep = NoStep;
m_steppingFromFramework = false;
m_pausingOnNativeEvent = false;
scriptDebugServer().breakProgram();
@@ -1486,8 +1505,8 @@ void InspectorDebuggerAgent::clear()
promiseTracker().clear();
m_continueToLocationBreakpointId = String();
clearBreakDetails();
+ m_scheduledDebuggerStep = NoStep;
m_javaScriptPauseScheduled = false;
- m_debuggerStepScheduled = false;
m_steppingFromFramework = false;
m_pausingOnNativeEvent = false;
ErrorString error;
@@ -1523,6 +1542,7 @@ void InspectorDebuggerAgent::removeBreakpoint(const String& scriptId, int lineNu
void InspectorDebuggerAgent::reset()
{
+ m_scheduledDebuggerStep = NoStep;
m_scripts.clear();
m_breakpointIdToDebugServerBreakpointIds.clear();
asyncCallStackTracker().clear();

Powered by Google App Engine
This is Rietveld 408576698