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

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

Issue 342713002: DevTools: Debugger StepInto/Out/Over initiated from a framework should not black-box it. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: added missing null check Created 6 years, 6 months 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 | « Source/core/inspector/InspectorDebuggerAgent.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/inspector/InspectorDebuggerAgent.cpp
diff --git a/Source/core/inspector/InspectorDebuggerAgent.cpp b/Source/core/inspector/InspectorDebuggerAgent.cpp
index c6014cb5bcf90ddbcc7fd958ab8a027a3ce7c005..d5e7ca3edeb23029b77c50da02d7df1e243b9d59 100644
--- a/Source/core/inspector/InspectorDebuggerAgent.cpp
+++ b/Source/core/inspector/InspectorDebuggerAgent.cpp
@@ -106,6 +106,7 @@ InspectorDebuggerAgent::InspectorDebuggerAgent(InjectedScriptManager* injectedSc
, m_pausedScriptState(nullptr)
, m_javaScriptPauseScheduled(false)
, m_debuggerStepScheduled(false)
+ , m_steppingFromFramework(false)
, m_pausingOnNativeEvent(false)
, m_listener(0)
, m_skippedStepInCount(0)
@@ -474,6 +475,9 @@ String InspectorDebuggerAgent::scriptURL(JavaScriptCallFrame* frame)
ScriptDebugListener::SkipPauseRequest InspectorDebuggerAgent::shouldSkipExceptionPause()
{
+ if (m_steppingFromFramework)
+ return ScriptDebugListener::NoSkip;
+
// FIXME: Fast return: if (!m_cachedSkipStackRegExp && !has_any_anti_breakpoint) return ScriptDebugListener::NoSkip;
RefPtrWillBeRawPtr<JavaScriptCallFrame> topFrame = scriptDebugServer().topCallFrameNoScopes();
@@ -526,7 +530,7 @@ ScriptDebugListener::SkipPauseRequest InspectorDebuggerAgent::shouldSkipExceptio
ScriptDebugListener::SkipPauseRequest InspectorDebuggerAgent::shouldSkipStepPause()
{
- if (!m_cachedSkipStackRegExp)
+ if (!m_cachedSkipStackRegExp || m_steppingFromFramework)
return ScriptDebugListener::NoSkip;
RefPtrWillBeRawPtr<JavaScriptCallFrame> topFrame = scriptDebugServer().topCallFrameNoScopes();
@@ -556,6 +560,19 @@ ScriptDebugListener::SkipPauseRequest InspectorDebuggerAgent::shouldSkipStepPaus
return ScriptDebugListener::StepInto;
}
+bool InspectorDebuggerAgent::isTopCallFrameInFramework()
+{
+ if (!m_cachedSkipStackRegExp)
+ return false;
+
+ RefPtrWillBeRawPtr<JavaScriptCallFrame> topFrame = scriptDebugServer().topCallFrameNoScopes();
+ if (!topFrame)
+ return false;
+
+ String scriptUrl = scriptURL(topFrame.get());
+ return !scriptUrl.isEmpty() && m_cachedSkipStackRegExp->match(scriptUrl) != -1;
+}
+
PassRefPtr<TypeBuilder::Debugger::Location> InspectorDebuggerAgent::resolveBreakpoint(const String& breakpointId, const String& scriptId, const ScriptBreakpoint& breakpoint, BreakpointSource source)
{
ScriptsMap::iterator scriptIterator = m_scripts.find(scriptId);
@@ -803,6 +820,7 @@ void InspectorDebuggerAgent::resume(ErrorString* errorString)
if (!assertPaused(errorString))
return;
m_debuggerStepScheduled = false;
+ m_steppingFromFramework = false;
m_injectedScriptManager->releaseObjectGroup(InspectorDebuggerAgent::backtraceObjectGroup);
scriptDebugServer().continueProgram();
}
@@ -812,6 +830,7 @@ void InspectorDebuggerAgent::stepOver(ErrorString* errorString)
if (!assertPaused(errorString))
return;
m_debuggerStepScheduled = true;
+ m_steppingFromFramework = isTopCallFrameInFramework();
m_injectedScriptManager->releaseObjectGroup(InspectorDebuggerAgent::backtraceObjectGroup);
scriptDebugServer().stepOverStatement();
}
@@ -821,6 +840,7 @@ void InspectorDebuggerAgent::stepInto(ErrorString* errorString)
if (!assertPaused(errorString))
return;
m_debuggerStepScheduled = true;
+ m_steppingFromFramework = isTopCallFrameInFramework();
m_injectedScriptManager->releaseObjectGroup(InspectorDebuggerAgent::backtraceObjectGroup);
scriptDebugServer().stepIntoStatement();
if (m_listener)
@@ -832,6 +852,7 @@ void InspectorDebuggerAgent::stepOut(ErrorString* errorString)
if (!assertPaused(errorString))
return;
m_debuggerStepScheduled = true;
+ m_steppingFromFramework = isTopCallFrameInFramework();
m_injectedScriptManager->releaseObjectGroup(InspectorDebuggerAgent::backtraceObjectGroup);
scriptDebugServer().stepOutOfFunction();
}
@@ -1192,6 +1213,7 @@ ScriptDebugListener::SkipPauseRequest InspectorDebuggerAgent::didPause(ScriptSta
m_frontend->paused(currentCallFrames(), m_breakReason, m_breakAuxData, hitBreakpointIds, currentAsyncStackTrace());
m_javaScriptPauseScheduled = false;
m_debuggerStepScheduled = false;
+ m_steppingFromFramework = false;
m_pausingOnNativeEvent = false;
m_skippedStepInCount = 0;
@@ -1224,6 +1246,7 @@ void InspectorDebuggerAgent::breakProgram(InspectorFrontend::Debugger::Reason::E
m_breakReason = breakReason;
m_breakAuxData = data;
m_debuggerStepScheduled = false;
+ m_steppingFromFramework = false;
m_pausingOnNativeEvent = false;
scriptDebugServer().breakProgram();
}
@@ -1239,6 +1262,7 @@ void InspectorDebuggerAgent::clear()
clearBreakDetails();
m_javaScriptPauseScheduled = false;
m_debuggerStepScheduled = false;
+ m_steppingFromFramework = false;
m_pausingOnNativeEvent = false;
ErrorString error;
setOverlayMessage(&error, 0);
« no previous file with comments | « Source/core/inspector/InspectorDebuggerAgent.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698