| 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);
|
|
|