<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[178137] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/178137">178137</a></dd>
<dt>Author</dt> <dd>joepeck@webkit.org</dd>
<dt>Date</dt> <dd>2015-01-08 15:16:48 -0800 (Thu, 08 Jan 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>Web Inspector: Pause Reason Improvements (Breakpoint, Debugger Statement, Pause on Next Statement)
https://bugs.webkit.org/show_bug.cgi?id=138991

Reviewed by Timothy Hatcher.

Source/JavaScriptCore:

* debugger/Debugger.cpp:
(JSC::Debugger::Debugger):
(JSC::Debugger::pauseIfNeeded):
(JSC::Debugger::didReachBreakpoint):
When actually pausing, if we hit a breakpoint ensure the reason
is PausedForBreakpoint, otherwise use the current reason.

* debugger/Debugger.h:
Make pause reason and pausing breakpoint ID public.

* inspector/agents/InspectorDebuggerAgent.h:
* inspector/agents/InspectorDebuggerAgent.cpp:
(Inspector::buildAssertPauseReason):
(Inspector::buildCSPViolationPauseReason):
(Inspector::InspectorDebuggerAgent::buildBreakpointPauseReason):
(Inspector::InspectorDebuggerAgent::buildExceptionPauseReason):
(Inspector::InspectorDebuggerAgent::handleConsoleAssert):
(Inspector::buildObjectForBreakpointCookie):
(Inspector::InspectorDebuggerAgent::setBreakpointByUrl):
(Inspector::InspectorDebuggerAgent::removeBreakpoint):
(Inspector::InspectorDebuggerAgent::resolveBreakpoint):
(Inspector::InspectorDebuggerAgent::pause):
(Inspector::InspectorDebuggerAgent::scriptExecutionBlockedByCSP):
(Inspector::InspectorDebuggerAgent::currentCallFrames):
(Inspector::InspectorDebuggerAgent::clearDebuggerBreakpointState):
Clean up creation of pause reason objects and other cleanup
of PassRefPtr use and InjectedScript use.

(Inspector::InspectorDebuggerAgent::didPause):
Clean up so that we first check for an Exception, and then fall
back to including a Pause Reason derived from the Debugger.

* inspector/protocol/Debugger.json:
Add new DebuggerStatement, Breakpoint, and PauseOnNextStatement reasons.

Source/WebInspectorUI:

* Localizations/en.lproj/localizedStrings.js:
New UI strings for Pause Reasons.

* UserInterface/Controllers/DebuggerManager.js:
(WebInspector.DebuggerManager.prototype.breakpointForIdentifier):
Provide a way to get the breakpoint with an identifier.

* UserInterface/Images/PausedBreakpoint.svg: Added.
* UserInterface/Images/gtk/PausedBreakpoint.svg: Added.
Copy PseudoElement.svg icon and give it a new name.

* UserInterface/Views/BreakpointTreeElement.css:
(.breakpoint-paused-icon .icon):
New icon for a breakpoint causing a pause.

* UserInterface/Views/BreakpointTreeElement.js:
(WebInspector.BreakpointTreeElement.prototype.removeStatusImage):
(WebInspector.BreakpointTreeElement.prototype._updateStatus):
Give API to remove the breakpoint status icon from a BreakpointTreeElement.

* UserInterface/Views/DebuggerSidebarPanel.js:
(WebInspector.DebuggerSidebarPanel):
(WebInspector.DebuggerSidebarPanel.prototype.get hasSelectedElement):
(WebInspector.DebuggerSidebarPanel.prototype.deselectBreakpointContentTreeElements):
(WebInspector.DebuggerSidebarPanel.prototype.deselectPauseReasonContentTreeElements):
(WebInspector.DebuggerSidebarPanel.prototype._treeElementSelected):
Give DebuggerSidebarPanel an optional pause reason tree outline. When available
include it in the pattern of ensuring a single exclusive selection.

(WebInspector.DebuggerSidebarPanel.prototype._breakpointRemoved):
When a breakpoint is removed, check if we should update the pause reason tree outline.

(WebInspector.DebuggerSidebarPanel.prototype._updatePauseReason):
(WebInspector.DebuggerSidebarPanel.prototype._updatePauseReasonSection):
Update Pause Reason section contents depending on the reason.

(WebInspector.DebuggerSidebarPanel.prototype._updatePauseReasonGotoArrow):
Always try to include a goto arrow to jump to the original pause location
if it is available at the time of pausing.

LayoutTests:

Test that the frontend receives expected pause reasons for different kinds of pauses.

* inspector/debugger/pause-reason-expected.txt: Added.
* inspector/debugger/pause-reason.html: Added.
* inspector/debugger/resources/pause-reasons.js: Added.
(triggerBreakpoint):
(triggerException):
(triggerDebuggerStatement):
(triggerAssert):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCoredebuggerDebuggercpp">trunk/Source/JavaScriptCore/debugger/Debugger.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredebuggerDebuggerh">trunk/Source/JavaScriptCore/debugger/Debugger.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectoragentsInspectorDebuggerAgentcpp">trunk/Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectoragentsInspectorDebuggerAgenth">trunk/Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectorprotocolDebuggerjson">trunk/Source/JavaScriptCore/inspector/protocol/Debugger.json</a></li>
<li><a href="#trunkSourceWebInspectorUIChangeLog">trunk/Source/WebInspectorUI/ChangeLog</a></li>
<li><a href="#trunkSourceWebInspectorUILocalizationsenlprojlocalizedStringsjs">trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceControllersDebuggerManagerjs">trunk/Source/WebInspectorUI/UserInterface/Controllers/DebuggerManager.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsBreakpointTreeElementcss">trunk/Source/WebInspectorUI/UserInterface/Views/BreakpointTreeElement.css</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsBreakpointTreeElementjs">trunk/Source/WebInspectorUI/UserInterface/Views/BreakpointTreeElement.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsDebuggerSidebarPaneljs">trunk/Source/WebInspectorUI/UserInterface/Views/DebuggerSidebarPanel.js</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsinspectordebuggerpausereasonexpectedtxt">trunk/LayoutTests/inspector/debugger/pause-reason-expected.txt</a></li>
<li><a href="#trunkLayoutTestsinspectordebuggerpausereasonhtml">trunk/LayoutTests/inspector/debugger/pause-reason.html</a></li>
<li><a href="#trunkLayoutTestsinspectordebuggerresourcespausereasonsjs">trunk/LayoutTests/inspector/debugger/resources/pause-reasons.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceImagesPausedBreakpointsvg">trunk/Source/WebInspectorUI/UserInterface/Images/PausedBreakpoint.svg</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceImagesgtkPausedBreakpointsvg">trunk/Source/WebInspectorUI/UserInterface/Images/gtk/PausedBreakpoint.svg</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (178136 => 178137)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2015-01-08 23:11:45 UTC (rev 178136)
+++ trunk/LayoutTests/ChangeLog        2015-01-08 23:16:48 UTC (rev 178137)
</span><span class="lines">@@ -1,3 +1,20 @@
</span><ins>+2015-01-08  Joseph Pecoraro  &lt;pecoraro@apple.com&gt;
+
+        Web Inspector: Pause Reason Improvements (Breakpoint, Debugger Statement, Pause on Next Statement)
+        https://bugs.webkit.org/show_bug.cgi?id=138991
+
+        Reviewed by Timothy Hatcher.
+
+        Test that the frontend receives expected pause reasons for different kinds of pauses.
+
+        * inspector/debugger/pause-reason-expected.txt: Added.
+        * inspector/debugger/pause-reason.html: Added.
+        * inspector/debugger/resources/pause-reasons.js: Added.
+        (triggerBreakpoint):
+        (triggerException):
+        (triggerDebuggerStatement):
+        (triggerAssert):
+
</ins><span class="cx"> 2015-01-08  Darin Adler  &lt;darin@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         ASSERTION FAILED: character != kEndOfFileMarker in WebCore::HTMLTokenizer::bufferCharacter
</span></span></pre></div>
<a id="trunkLayoutTestsinspectordebuggerpausereasonexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/inspector/debugger/pause-reason-expected.txt (0 => 178137)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/inspector/debugger/pause-reason-expected.txt                                (rev 0)
+++ trunk/LayoutTests/inspector/debugger/pause-reason-expected.txt        2015-01-08 23:16:48 UTC (rev 178137)
</span><span class="lines">@@ -0,0 +1,30 @@
</span><ins>+CONSOLE MESSAGE: line 8: TypeError: undefined is not an object (evaluating '[].x.x')
+CONSOLE MESSAGE: line 18: Assertion message
+Test that pausing in different ways triggers different pause reasons.
+
+PAUSE #1
+  REASON: exception
+  DATA: {&quot;description&quot;:&quot;TypeError: undefined is not an object (evaluating '[].x.x')&quot;}
+RESUMED
+
+PAUSE #2
+  REASON: debugger-statement
+  NO DATA
+RESUMED
+
+PAUSE #3
+  REASON: assertion
+  DATA: {&quot;message&quot;:&quot;Assertion message&quot;}
+RESUMED
+
+PAUSE #4
+  REASON: breakpoint
+  DATA: {&quot;breakpointId&quot;:&quot;pause-reasons.js:3:0&quot;}
+RESUMED
+
+PAUSE #5
+  REASON: pause-on-next-statement
+  NO DATA
+RESUMED
+
+
</ins></span></pre></div>
<a id="trunkLayoutTestsinspectordebuggerpausereasonhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/inspector/debugger/pause-reason.html (0 => 178137)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/inspector/debugger/pause-reason.html                                (rev 0)
+++ trunk/LayoutTests/inspector/debugger/pause-reason.html        2015-01-08 23:16:48 UTC (rev 178137)
</span><span class="lines">@@ -0,0 +1,88 @@
</span><ins>+&lt;!doctype html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;script type=&quot;text/javascript&quot; src=&quot;../../http/tests/inspector/inspector-test.js&quot;&gt;&lt;/script&gt;
+&lt;script type=&quot;text/javascript&quot; src=&quot;./resources/pause-reasons.js&quot;&gt;&lt;/script&gt;
+&lt;script&gt;
+// We expect uncaught exceptions, so avoid logs for them.
+window.onerror = function(){};
+
+function test()
+{
+    var pauses = 0;
+    var index = 0;
+    var testCases = [
+        { expression: &quot;setTimeout(triggerException, 0)&quot; },
+        { expression: &quot;setTimeout(triggerDebuggerStatement, 0)&quot; },
+        { expression: &quot;setTimeout(triggerAssert, 0)&quot; },
+        { expression: &quot;setTimeout(triggerBreakpoint, 0)&quot; },
+        { expression: &quot;setTimeout(function() { 1+1 }, 0)&quot;, setup: function() { WebInspector.debuggerManager.pause(); } },
+    ];
+
+    function nextTestCase()
+    {
+        var test = testCases[index++];
+        if (!test) {
+            InspectorTest.completeTest();
+            return;
+        }
+
+        if (test.setup)
+            test.setup();
+
+        InspectorTest.evaluateInPage(test.expression);
+    }
+
+    function sanitizePauseData(data)
+    {
+        // Sanitize RemoteObjects to just output the description.
+        if (data.description)
+            return {description: data.description};
+
+        // Sanitize BreakpointIdentifier path.
+        if (data.breakpointId)
+            return {breakpointId: data.breakpointId.substring(data.breakpointId.indexOf(&quot;pause-reasons.js&quot;))};
+
+        return data;
+    }
+
+    WebInspector.debuggerManager.allExceptionsBreakpoint.disabled = false;
+
+    WebInspector.debuggerManager.addEventListener(WebInspector.DebuggerManager.Event.ScriptAdded, function(event) {
+        var scriptObject = event.data.script;
+        if (!/pause-reasons\.js$/.test(scriptObject.url))
+            return;
+
+        var sourceCodeLocation = scriptObject.createSourceCodeLocation(3, 0);
+        var breakpoint = new WebInspector.Breakpoint(sourceCodeLocation);
+        WebInspector.debuggerManager.addBreakpoint(breakpoint);
+
+        nextTestCase();
+    });
+
+    WebInspector.debuggerManager.addEventListener(WebInspector.DebuggerManager.Event.Paused, function(event) {
+        InspectorTest.log(&quot;PAUSE #&quot; + (++pauses));
+        InspectorTest.log(&quot;  REASON: &quot; + WebInspector.debuggerManager.pauseReason);
+        if (WebInspector.debuggerManager.pauseData)
+            InspectorTest.log(&quot;  DATA: &quot; + JSON.stringify(sanitizePauseData(WebInspector.debuggerManager.pauseData)));
+        else
+            InspectorTest.log(&quot;  NO DATA&quot;);
+
+        WebInspector.debuggerManager.resume();
+    });
+
+    WebInspector.debuggerManager.addEventListener(WebInspector.DebuggerManager.Event.Resumed, function(event) {
+        InspectorTest.log(&quot;RESUMED&quot;);
+        InspectorTest.log(&quot;&quot;);
+
+        nextTestCase();
+    });
+
+    InspectorTest.reloadPage();
+}
+&lt;/script&gt;
+&lt;/head&gt;
+&lt;body onload=&quot;runTest()&quot;&gt;
+    &lt;p&gt;Test that pausing in different ways triggers different pause reasons.&lt;/p&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsinspectordebuggerresourcespausereasonsjs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/inspector/debugger/resources/pause-reasons.js (0 => 178137)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/inspector/debugger/resources/pause-reasons.js                                (rev 0)
+++ trunk/LayoutTests/inspector/debugger/resources/pause-reasons.js        2015-01-08 23:16:48 UTC (rev 178137)
</span><span class="lines">@@ -0,0 +1,19 @@
</span><ins>+function triggerBreakpoint()
+{
+    1+1; // BREAKPOINT
+}
+
+function triggerException()
+{
+    [].x.x;
+}
+
+function triggerDebuggerStatement()
+{
+    debugger;
+}
+
+function triggerAssert()
+{
+    console.assert(false, &quot;Assertion message&quot;);
+}
</ins></span></pre></div>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (178136 => 178137)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2015-01-08 23:11:45 UTC (rev 178136)
+++ trunk/Source/JavaScriptCore/ChangeLog        2015-01-08 23:16:48 UTC (rev 178137)
</span><span class="lines">@@ -1,5 +1,47 @@
</span><span class="cx"> 2015-01-08  Joseph Pecoraro  &lt;pecoraro@apple.com&gt;
</span><span class="cx"> 
</span><ins>+        Web Inspector: Pause Reason Improvements (Breakpoint, Debugger Statement, Pause on Next Statement)
+        https://bugs.webkit.org/show_bug.cgi?id=138991
+
+        Reviewed by Timothy Hatcher.
+
+        * debugger/Debugger.cpp:
+        (JSC::Debugger::Debugger):
+        (JSC::Debugger::pauseIfNeeded):
+        (JSC::Debugger::didReachBreakpoint):
+        When actually pausing, if we hit a breakpoint ensure the reason
+        is PausedForBreakpoint, otherwise use the current reason.
+
+        * debugger/Debugger.h:
+        Make pause reason and pausing breakpoint ID public.
+
+        * inspector/agents/InspectorDebuggerAgent.h:
+        * inspector/agents/InspectorDebuggerAgent.cpp:
+        (Inspector::buildAssertPauseReason):
+        (Inspector::buildCSPViolationPauseReason):
+        (Inspector::InspectorDebuggerAgent::buildBreakpointPauseReason):
+        (Inspector::InspectorDebuggerAgent::buildExceptionPauseReason):
+        (Inspector::InspectorDebuggerAgent::handleConsoleAssert):
+        (Inspector::buildObjectForBreakpointCookie):
+        (Inspector::InspectorDebuggerAgent::setBreakpointByUrl):
+        (Inspector::InspectorDebuggerAgent::removeBreakpoint):
+        (Inspector::InspectorDebuggerAgent::resolveBreakpoint):
+        (Inspector::InspectorDebuggerAgent::pause):
+        (Inspector::InspectorDebuggerAgent::scriptExecutionBlockedByCSP):
+        (Inspector::InspectorDebuggerAgent::currentCallFrames):
+        (Inspector::InspectorDebuggerAgent::clearDebuggerBreakpointState):
+        Clean up creation of pause reason objects and other cleanup
+        of PassRefPtr use and InjectedScript use.
+
+        (Inspector::InspectorDebuggerAgent::didPause):
+        Clean up so that we first check for an Exception, and then fall
+        back to including a Pause Reason derived from the Debugger.
+
+        * inspector/protocol/Debugger.json:
+        Add new DebuggerStatement, Breakpoint, and PauseOnNextStatement reasons.
+
+2015-01-08  Joseph Pecoraro  &lt;pecoraro@apple.com&gt;
+
</ins><span class="cx">         Web Inspector: Type check NSArray's in ObjC Interfaces have the right object types
</span><span class="cx">         https://bugs.webkit.org/show_bug.cgi?id=140209
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredebuggerDebuggercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/debugger/Debugger.cpp (178136 => 178137)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/debugger/Debugger.cpp        2015-01-08 23:11:45 UTC (rev 178136)
+++ trunk/Source/JavaScriptCore/debugger/Debugger.cpp        2015-01-08 23:16:48 UTC (rev 178137)
</span><span class="lines">@@ -160,6 +160,7 @@
</span><span class="cx">     , m_lastExecutedLine(UINT_MAX)
</span><span class="cx">     , m_lastExecutedSourceID(noSourceID)
</span><span class="cx">     , m_topBreakpointID(noBreakpointID)
</span><ins>+    , m_pausingBreakpointID(noBreakpointID)
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -670,10 +671,16 @@
</span><span class="cx">         // we still have a current call frame when we get back.
</span><span class="cx">         if (breakpoint.autoContinue || !m_currentCallFrame)
</span><span class="cx">             return;
</span><ins>+        m_pausingBreakpointID = breakpoint.id;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    handlePause(vmEntryGlobalObject, m_reasonForPause);
</del><ins>+    {
+        PauseReasonDeclaration reason(*this, didHitBreakpoint ? PausedForBreakpoint : m_reasonForPause);
+        handlePause(vmEntryGlobalObject, m_reasonForPause);
+    }
</ins><span class="cx"> 
</span><ins>+    m_pausingBreakpointID = noBreakpointID;
+
</ins><span class="cx">     if (!m_pauseOnNextStatement &amp;&amp; !m_pauseOnCallFrame) {
</span><span class="cx">         setSteppingMode(SteppingModeDisabled);
</span><span class="cx">         m_currentCallFrame = nullptr;
</span><span class="lines">@@ -779,7 +786,7 @@
</span><span class="cx">     if (m_isPaused)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    PauseReasonDeclaration reason(*this, PausedForBreakpoint);
</del><ins>+    PauseReasonDeclaration reason(*this, PausedForDebuggerStatement);
</ins><span class="cx">     m_pauseOnNextStatement = true;
</span><span class="cx">     setSteppingMode(SteppingModeEnabled);
</span><span class="cx">     updateCallFrameAndPauseIfNeeded(callFrame);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredebuggerDebuggerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/debugger/Debugger.h (178136 => 178137)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/debugger/Debugger.h        2015-01-08 23:11:45 UTC (rev 178136)
+++ trunk/Source/JavaScriptCore/debugger/Debugger.h        2015-01-08 23:16:48 UTC (rev 178137)
</span><span class="lines">@@ -83,6 +83,20 @@
</span><span class="cx">     PauseOnExceptionsState pauseOnExceptionsState() const { return m_pauseOnExceptionsState; }
</span><span class="cx">     void setPauseOnExceptionsState(PauseOnExceptionsState);
</span><span class="cx"> 
</span><ins>+    enum ReasonForPause {
+        NotPaused,
+        PausedForException,
+        PausedAtStatement,
+        PausedAfterCall,
+        PausedBeforeReturn,
+        PausedAtStartOfProgram,
+        PausedAtEndOfProgram,
+        PausedForBreakpoint,
+        PausedForDebuggerStatement,
+    };
+    ReasonForPause reasonForPause() const { return m_reasonForPause; }
+    BreakpointID pausingBreakpointID() const { return m_pausingBreakpointID; }
+
</ins><span class="cx">     void setPauseOnNextStatement(bool);
</span><span class="cx">     void breakProgram();
</span><span class="cx">     void continueProgram();
</span><span class="lines">@@ -111,20 +125,6 @@
</span><span class="cx">     virtual bool needPauseHandling(JSGlobalObject*) { return false; }
</span><span class="cx">     virtual void handleBreakpointHit(JSGlobalObject*, const Breakpoint&amp;) { }
</span><span class="cx">     virtual void handleExceptionInBreakpointCondition(ExecState*, JSValue exception) const { UNUSED_PARAM(exception); }
</span><del>-
-    enum ReasonForPause {
-        NotPaused,
-        PausedForException,
-        PausedAtStatement,
-        PausedAfterCall,
-        PausedBeforeReturn,
-        PausedAtStartOfProgram,
-        PausedAtEndOfProgram,
-        PausedForBreakpoint
-    };
-
-    ReasonForPause reasonForPause() const { return m_reasonForPause; }
-
</del><span class="cx">     virtual void handlePause(JSGlobalObject*, ReasonForPause) { }
</span><span class="cx">     virtual void notifyDoneProcessingDebuggerEvents() { }
</span><span class="cx"> 
</span><span class="lines">@@ -205,6 +205,7 @@
</span><span class="cx">     SourceID m_lastExecutedSourceID;
</span><span class="cx"> 
</span><span class="cx">     BreakpointID m_topBreakpointID;
</span><ins>+    BreakpointID m_pausingBreakpointID;
</ins><span class="cx">     BreakpointIDToBreakpointMap m_breakpointIDToBreakpoint;
</span><span class="cx">     SourceIDToBreakpointsMap m_sourceIDToBreakpoints;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectoragentsInspectorDebuggerAgentcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.cpp (178136 => 178137)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.cpp        2015-01-08 23:11:45 UTC (rev 178136)
+++ trunk/Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.cpp        2015-01-08 23:16:48 UTC (rev 178137)
</span><span class="lines">@@ -138,14 +138,52 @@
</span><span class="cx">     return scriptDebugServer().isPaused();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static RefPtr&lt;InspectorObject&gt; buildAssertPauseReason(const String&amp; message)
+{
+    auto reason = Inspector::Protocol::Debugger::AssertPauseReason::create().release();
+    if (!message.isNull())
+        reason-&gt;setMessage(message);
+    return reason-&gt;openAccessors();
+}
+
+static RefPtr&lt;InspectorObject&gt; buildCSPViolationPauseReason(const String&amp; directiveText)
+{
+    auto reason = Inspector::Protocol::Debugger::CSPViolationPauseReason::create()
+        .setDirective(directiveText)
+        .release();
+    return reason-&gt;openAccessors();
+}
+
+RefPtr&lt;InspectorObject&gt; InspectorDebuggerAgent::buildBreakpointPauseReason(JSC::BreakpointID debuggerBreakpointIdentifier)
+{
+    ASSERT(debuggerBreakpointIdentifier != JSC::noBreakpointID);
+    auto it = m_debuggerBreakpointIdentifierToInspectorBreakpointIdentifier.find(debuggerBreakpointIdentifier);
+    if (it == m_debuggerBreakpointIdentifierToInspectorBreakpointIdentifier.end())
+        return nullptr;
+
+    auto reason = Inspector::Protocol::Debugger::BreakpointPauseReason::create()
+        .setBreakpointId(it-&gt;value)
+        .release();
+    return reason-&gt;openAccessors();
+}
+
+RefPtr&lt;InspectorObject&gt; InspectorDebuggerAgent::buildExceptionPauseReason(const Deprecated::ScriptValue&amp; exception, const InjectedScript&amp; injectedScript)
+{
+    ASSERT(!exception.hasNoValue());
+    if (exception.hasNoValue())
+        return nullptr;
+
+    ASSERT(!injectedScript.hasNoValue());
+    if (injectedScript.hasNoValue())
+        return nullptr;
+
+    return injectedScript.wrapObject(exception, InspectorDebuggerAgent::backtraceObjectGroup)-&gt;openAccessors();
+}
+
</ins><span class="cx"> void InspectorDebuggerAgent::handleConsoleAssert(const String&amp; message)
</span><span class="cx"> {
</span><del>-    if (scriptDebugServer().pauseOnExceptionsState() != JSC::Debugger::DontPauseOnExceptions) {
-        Ref&lt;Inspector::Protocol::Debugger::AssertPauseReason&gt; reason = Inspector::Protocol::Debugger::AssertPauseReason::create().release();
-        if (!message.isNull())
-            reason-&gt;setMessage(message);
-        breakProgram(InspectorDebuggerFrontendDispatcher::Reason::Assert, reason-&gt;openAccessors());
-    }
</del><ins>+    if (scriptDebugServer().pauseOnExceptionsState() != JSC::Debugger::DontPauseOnExceptions)
+        breakProgram(InspectorDebuggerFrontendDispatcher::Reason::Assert, buildAssertPauseReason(message));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static Ref&lt;InspectorObject&gt; buildObjectForBreakpointCookie(const String&amp; url, int lineNumber, int columnNumber, const String&amp; condition, RefPtr&lt;InspectorArray&gt;&amp; actions, bool isRegex, bool autoContinue)
</span><span class="lines">@@ -342,6 +380,8 @@
</span><span class="cx">     m_javaScriptBreakpoints.remove(breakpointIdentifier);
</span><span class="cx"> 
</span><span class="cx">     for (JSC::BreakpointID breakpointID : m_breakpointIdentifierToDebugServerBreakpointIDs.take(breakpointIdentifier)) {
</span><ins>+        m_debuggerBreakpointIdentifierToInspectorBreakpointIdentifier.remove(breakpointID);
+
</ins><span class="cx">         const BreakpointActions&amp; breakpointActions = scriptDebugServer().getActionsForBreakpoint(breakpointID);
</span><span class="cx">         for (auto&amp; action : breakpointActions)
</span><span class="cx">             m_injectedScriptManager-&gt;releaseObjectGroup(objectGroupForBreakpointAction(action));
</span><span class="lines">@@ -387,6 +427,8 @@
</span><span class="cx">     if (debugServerBreakpointIDsIterator == m_breakpointIdentifierToDebugServerBreakpointIDs.end())
</span><span class="cx">         debugServerBreakpointIDsIterator = m_breakpointIdentifierToDebugServerBreakpointIDs.set(breakpointIdentifier, Vector&lt;JSC::BreakpointID&gt;()).iterator;
</span><span class="cx">     debugServerBreakpointIDsIterator-&gt;value.append(debugServerBreakpointID);
</span><ins>+    
+    m_debuggerBreakpointIdentifierToInspectorBreakpointIdentifier.set(debugServerBreakpointID, breakpointIdentifier);
</ins><span class="cx"> 
</span><span class="cx">     auto location = Inspector::Protocol::Debugger::Location::create()
</span><span class="cx">         .setScriptId(String::number(sourceID))
</span><span class="lines">@@ -452,11 +494,8 @@
</span><span class="cx"> 
</span><span class="cx"> void InspectorDebuggerAgent::pause(ErrorString&amp;)
</span><span class="cx"> {
</span><del>-    if (m_javaScriptPauseScheduled)
-        return;
</del><ins>+    schedulePauseOnNextStatement(InspectorDebuggerFrontendDispatcher::Reason::PauseOnNextStatement, nullptr);
</ins><span class="cx"> 
</span><del>-    clearBreakDetails();
-    scriptDebugServer().setPauseOnNextStatement(true);
</del><span class="cx">     m_javaScriptPauseScheduled = true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -544,25 +583,16 @@
</span><span class="cx"> 
</span><span class="cx"> void InspectorDebuggerAgent::scriptExecutionBlockedByCSP(const String&amp; directiveText)
</span><span class="cx"> {
</span><del>-    if (scriptDebugServer().pauseOnExceptionsState() != JSC::Debugger::DontPauseOnExceptions) {
-        auto reason = Inspector::Protocol::Debugger::CSPViolationPauseReason::create()
-            .setDirective(directiveText)
-            .release();
-        breakProgram(InspectorDebuggerFrontendDispatcher::Reason::CSPViolation, reason-&gt;openAccessors());
-    }
</del><ins>+    if (scriptDebugServer().pauseOnExceptionsState() != JSC::Debugger::DontPauseOnExceptions)
+        breakProgram(InspectorDebuggerFrontendDispatcher::Reason::CSPViolation, buildCSPViolationPauseReason(directiveText));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-Ref&lt;Inspector::Protocol::Array&lt;Inspector::Protocol::Debugger::CallFrame&gt;&gt; InspectorDebuggerAgent::currentCallFrames()
</del><ins>+Ref&lt;Inspector::Protocol::Array&lt;Inspector::Protocol::Debugger::CallFrame&gt;&gt; InspectorDebuggerAgent::currentCallFrames(InjectedScript injectedScript)
</ins><span class="cx"> {
</span><del>-    if (!m_pausedScriptState)
</del><ins>+    ASSERT(!injectedScript.hasNoValue());
+    if (injectedScript.hasNoValue())
</ins><span class="cx">         return Inspector::Protocol::Array&lt;Inspector::Protocol::Debugger::CallFrame&gt;::create();
</span><span class="cx"> 
</span><del>-    InjectedScript injectedScript = m_injectedScriptManager-&gt;injectedScriptFor(m_pausedScriptState);
-    if (injectedScript.hasNoValue()) {
-        ASSERT_NOT_REACHED();
-        return Inspector::Protocol::Array&lt;Inspector::Protocol::Debugger::CallFrame&gt;::create();
-    }
-
</del><span class="cx">     return injectedScript.wrapCallFrames(m_currentCallStack);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -627,24 +657,53 @@
</span><span class="cx">     m_frontendDispatcher-&gt;scriptFailedToParse(url, data, firstLine, errorLine, errorMessage);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void InspectorDebuggerAgent::didPause(JSC::ExecState* scriptState, const Deprecated::ScriptValue&amp; callFrames, const Deprecated::ScriptValue&amp; exception)
</del><ins>+void InspectorDebuggerAgent::didPause(JSC::ExecState* scriptState, const Deprecated::ScriptValue&amp; callFrames, const Deprecated::ScriptValue&amp; exceptionOrCaughtValue)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(scriptState &amp;&amp; !m_pausedScriptState);
</span><span class="cx">     m_pausedScriptState = scriptState;
</span><span class="cx">     m_currentCallStack = callFrames;
</span><span class="cx"> 
</span><del>-    if (!exception.hasNoValue()) {
-        InjectedScript injectedScript = m_injectedScriptManager-&gt;injectedScriptFor(scriptState);
-        if (!injectedScript.hasNoValue()) {
</del><ins>+    InjectedScript injectedScript = m_injectedScriptManager-&gt;injectedScriptFor(scriptState);
+
+    // If a high level pause pause reason is not already set, try to infer a reason from the debugger.
+    if (m_breakReason == InspectorDebuggerFrontendDispatcher::Reason::Other) {
+        switch (scriptDebugServer().reasonForPause()) {
+        case JSC::Debugger::PausedForBreakpoint: {
+            JSC::BreakpointID debuggerBreakpointId = scriptDebugServer().pausingBreakpointID();
+            if (debuggerBreakpointId != m_continueToLocationBreakpointID) {
+                m_breakReason = InspectorDebuggerFrontendDispatcher::Reason::Breakpoint;
+                m_breakAuxData = buildBreakpointPauseReason(debuggerBreakpointId);
+            }
+            break;
+        }
+        case JSC::Debugger::PausedForDebuggerStatement:
+            m_breakReason = InspectorDebuggerFrontendDispatcher::Reason::DebuggerStatement;
+            m_breakAuxData = nullptr;
+            break;
+        case JSC::Debugger::PausedForException:
</ins><span class="cx">             m_breakReason = InspectorDebuggerFrontendDispatcher::Reason::Exception;
</span><del>-            m_breakAuxData = injectedScript.wrapObject(exception, InspectorDebuggerAgent::backtraceObjectGroup)-&gt;openAccessors();
-            // m_breakAuxData might be null after this.
-            injectedScript.setExceptionValue(exception);
-            m_hasExceptionValue = true;
</del><ins>+            m_breakAuxData = buildExceptionPauseReason(exceptionOrCaughtValue, injectedScript);
+            break;
+        case JSC::Debugger::PausedAtStatement:
+        case JSC::Debugger::PausedAfterCall:
+        case JSC::Debugger::PausedBeforeReturn:
+        case JSC::Debugger::PausedAtStartOfProgram:
+        case JSC::Debugger::PausedAtEndOfProgram:
+            // Pause was just stepping. Nothing to report.
+            break;
+        case JSC::Debugger::NotPaused:
+            ASSERT_NOT_REACHED();
+            break;
</ins><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    m_frontendDispatcher-&gt;paused(currentCallFrames(), m_breakReason, m_breakAuxData);
</del><ins>+    // Set $exception to the exception or caught value.
+    if (!exceptionOrCaughtValue.hasNoValue() &amp;&amp; !injectedScript.hasNoValue()) {
+        injectedScript.setExceptionValue(exceptionOrCaughtValue);
+        m_hasExceptionValue = true;
+    }
+
+    m_frontendDispatcher-&gt;paused(currentCallFrames(injectedScript), m_breakReason, m_breakAuxData);
</ins><span class="cx">     m_javaScriptPauseScheduled = false;
</span><span class="cx"> 
</span><span class="cx">     if (m_continueToLocationBreakpointID != JSC::noBreakpointID) {
</span><span class="lines">@@ -720,6 +779,7 @@
</span><span class="cx">     m_currentCallStack = Deprecated::ScriptValue();
</span><span class="cx">     m_scripts.clear();
</span><span class="cx">     m_breakpointIdentifierToDebugServerBreakpointIDs.clear();
</span><ins>+    m_debuggerBreakpointIdentifierToInspectorBreakpointIdentifier.clear();
</ins><span class="cx">     m_continueToLocationBreakpointID = JSC::noBreakpointID;
</span><span class="cx">     clearBreakDetails();
</span><span class="cx">     m_javaScriptPauseScheduled = false;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectoragentsInspectorDebuggerAgenth"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.h (178136 => 178137)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.h        2015-01-08 23:11:45 UTC (rev 178136)
+++ trunk/Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.h        2015-01-08 23:16:48 UTC (rev 178137)
</span><span class="lines">@@ -123,7 +123,7 @@
</span><span class="cx"> 
</span><span class="cx">     virtual void enable();
</span><span class="cx">     virtual void disable(bool skipRecompile);
</span><del>-    virtual void didPause(JSC::ExecState*, const Deprecated::ScriptValue&amp; callFrames, const Deprecated::ScriptValue&amp; exception) override;
</del><ins>+    virtual void didPause(JSC::ExecState*, const Deprecated::ScriptValue&amp; callFrames, const Deprecated::ScriptValue&amp; exceptionOrCaughtValue) override;
</ins><span class="cx">     virtual void didContinue() override;
</span><span class="cx"> 
</span><span class="cx">     virtual String sourceMapURLForScript(const Script&amp;);
</span><span class="lines">@@ -131,7 +131,7 @@
</span><span class="cx">     void didClearGlobalObject();
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    Ref&lt;Inspector::Protocol::Array&lt;Inspector::Protocol::Debugger::CallFrame&gt;&gt; currentCallFrames();
</del><ins>+    Ref&lt;Inspector::Protocol::Array&lt;Inspector::Protocol::Debugger::CallFrame&gt;&gt; currentCallFrames(InjectedScript);
</ins><span class="cx"> 
</span><span class="cx">     virtual void didParseSource(JSC::SourceID, const Script&amp;) override final;
</span><span class="cx">     virtual void failedToParseSource(const String&amp; url, const String&amp; data, int firstLine, int errorLine, const String&amp; errorMessage) override final;
</span><span class="lines">@@ -146,11 +146,15 @@
</span><span class="cx">     void clearBreakDetails();
</span><span class="cx">     void clearExceptionValue();
</span><span class="cx"> 
</span><ins>+    RefPtr&lt;InspectorObject&gt; buildBreakpointPauseReason(JSC::BreakpointID);
+    RefPtr&lt;InspectorObject&gt; buildExceptionPauseReason(const Deprecated::ScriptValue&amp; exception, const InjectedScript&amp;);
+
</ins><span class="cx">     bool breakpointActionsFromProtocol(ErrorString&amp;, RefPtr&lt;InspectorArray&gt;&amp; actions, BreakpointActions* result);
</span><span class="cx"> 
</span><span class="cx">     typedef HashMap&lt;JSC::SourceID, Script&gt; ScriptsMap;
</span><span class="cx">     typedef HashMap&lt;String, Vector&lt;JSC::BreakpointID&gt;&gt; BreakpointIdentifierToDebugServerBreakpointIDsMap;
</span><span class="cx">     typedef HashMap&lt;String, RefPtr&lt;InspectorObject&gt;&gt; BreakpointIdentifierToBreakpointMap;
</span><ins>+    typedef HashMap&lt;JSC::BreakpointID, String&gt; DebugServerBreakpointIDToBreakpointIdentifier;
</ins><span class="cx"> 
</span><span class="cx">     InjectedScriptManager* m_injectedScriptManager;
</span><span class="cx">     std::unique_ptr&lt;InspectorDebuggerFrontendDispatcher&gt; m_frontendDispatcher;
</span><span class="lines">@@ -161,6 +165,7 @@
</span><span class="cx">     ScriptsMap m_scripts;
</span><span class="cx">     BreakpointIdentifierToDebugServerBreakpointIDsMap m_breakpointIdentifierToDebugServerBreakpointIDs;
</span><span class="cx">     BreakpointIdentifierToBreakpointMap m_javaScriptBreakpoints;
</span><ins>+    DebugServerBreakpointIDToBreakpointIdentifier m_debuggerBreakpointIdentifierToInspectorBreakpointIdentifier;
</ins><span class="cx">     JSC::BreakpointID m_continueToLocationBreakpointID;
</span><span class="cx">     InspectorDebuggerFrontendDispatcher::Reason m_breakReason;
</span><span class="cx">     RefPtr&lt;InspectorObject&gt; m_breakAuxData;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectorprotocolDebuggerjson"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/protocol/Debugger.json (178136 => 178137)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/protocol/Debugger.json        2015-01-08 23:11:45 UTC (rev 178136)
+++ trunk/Source/JavaScriptCore/inspector/protocol/Debugger.json        2015-01-08 23:16:48 UTC (rev 178137)
</span><span class="lines">@@ -106,6 +106,14 @@
</span><span class="cx">             ]
</span><span class="cx">         },
</span><span class="cx">         {
</span><ins>+            &quot;id&quot;: &quot;BreakpointPauseReason&quot;,
+            &quot;description&quot;: &quot;The pause reason auxiliary data when paused because of hitting a breakpoint.&quot;,
+            &quot;type&quot;: &quot;object&quot;,
+            &quot;properties&quot;: [
+                { &quot;name&quot;: &quot;breakpointId&quot;, &quot;type&quot;: &quot;string&quot;, &quot;description&quot;: &quot;The identifier of the breakpoint causing the pause.&quot; }
+            ]
+        },
+        {
</ins><span class="cx">             &quot;id&quot;: &quot;CSPViolationPauseReason&quot;,
</span><span class="cx">             &quot;description&quot;: &quot;The pause reason auxiliary data when paused because of a Content Security Policy directive.&quot;,
</span><span class="cx">             &quot;type&quot;: &quot;object&quot;,
</span><span class="lines">@@ -299,7 +307,7 @@
</span><span class="cx">             &quot;name&quot;: &quot;paused&quot;,
</span><span class="cx">             &quot;parameters&quot;: [
</span><span class="cx">                 { &quot;name&quot;: &quot;callFrames&quot;, &quot;type&quot;: &quot;array&quot;, &quot;items&quot;: { &quot;$ref&quot;: &quot;CallFrame&quot; }, &quot;description&quot;: &quot;Call stack the virtual machine stopped on.&quot; },
</span><del>-                { &quot;name&quot;: &quot;reason&quot;, &quot;type&quot;: &quot;string&quot;, &quot;enum&quot;: [ &quot;XHR&quot;, &quot;DOM&quot;, &quot;EventListener&quot;, &quot;exception&quot;, &quot;assert&quot;, &quot;CSPViolation&quot;, &quot;other&quot; ], &quot;description&quot;: &quot;Pause reason.&quot; },
</del><ins>+                { &quot;name&quot;: &quot;reason&quot;, &quot;type&quot;: &quot;string&quot;, &quot;enum&quot;: [&quot;XHR&quot;, &quot;DOM&quot;, &quot;EventListener&quot;, &quot;exception&quot;, &quot;assert&quot;, &quot;CSPViolation&quot;, &quot;DebuggerStatement&quot;, &quot;Breakpoint&quot;, &quot;PauseOnNextStatement&quot;, &quot;other&quot;], &quot;description&quot;: &quot;Pause reason.&quot; },
</ins><span class="cx">                 { &quot;name&quot;: &quot;data&quot;, &quot;type&quot;: &quot;object&quot;, &quot;optional&quot;: true, &quot;description&quot;: &quot;Object containing break-specific auxiliary properties.&quot; }
</span><span class="cx">             ],
</span><span class="cx">             &quot;description&quot;: &quot;Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria.&quot;
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/ChangeLog (178136 => 178137)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/ChangeLog        2015-01-08 23:11:45 UTC (rev 178136)
+++ trunk/Source/WebInspectorUI/ChangeLog        2015-01-08 23:16:48 UTC (rev 178137)
</span><span class="lines">@@ -1,5 +1,52 @@
</span><span class="cx"> 2015-01-08  Joseph Pecoraro  &lt;pecoraro@apple.com&gt;
</span><span class="cx"> 
</span><ins>+        Web Inspector: Pause Reason Improvements (Breakpoint, Debugger Statement, Pause on Next Statement)
+        https://bugs.webkit.org/show_bug.cgi?id=138991
+
+        Reviewed by Timothy Hatcher.
+
+        * Localizations/en.lproj/localizedStrings.js:
+        New UI strings for Pause Reasons.
+
+        * UserInterface/Controllers/DebuggerManager.js:
+        (WebInspector.DebuggerManager.prototype.breakpointForIdentifier):
+        Provide a way to get the breakpoint with an identifier.
+
+        * UserInterface/Images/PausedBreakpoint.svg: Added.
+        * UserInterface/Images/gtk/PausedBreakpoint.svg: Added.
+        Copy PseudoElement.svg icon and give it a new name.
+
+        * UserInterface/Views/BreakpointTreeElement.css:
+        (.breakpoint-paused-icon .icon):
+        New icon for a breakpoint causing a pause.
+
+        * UserInterface/Views/BreakpointTreeElement.js:
+        (WebInspector.BreakpointTreeElement.prototype.removeStatusImage):
+        (WebInspector.BreakpointTreeElement.prototype._updateStatus):
+        Give API to remove the breakpoint status icon from a BreakpointTreeElement.
+
+        * UserInterface/Views/DebuggerSidebarPanel.js:
+        (WebInspector.DebuggerSidebarPanel):
+        (WebInspector.DebuggerSidebarPanel.prototype.get hasSelectedElement):
+        (WebInspector.DebuggerSidebarPanel.prototype.deselectBreakpointContentTreeElements):
+        (WebInspector.DebuggerSidebarPanel.prototype.deselectPauseReasonContentTreeElements):
+        (WebInspector.DebuggerSidebarPanel.prototype._treeElementSelected):
+        Give DebuggerSidebarPanel an optional pause reason tree outline. When available
+        include it in the pattern of ensuring a single exclusive selection.
+
+        (WebInspector.DebuggerSidebarPanel.prototype._breakpointRemoved):
+        When a breakpoint is removed, check if we should update the pause reason tree outline.
+
+        (WebInspector.DebuggerSidebarPanel.prototype._updatePauseReason):
+        (WebInspector.DebuggerSidebarPanel.prototype._updatePauseReasonSection):
+        Update Pause Reason section contents depending on the reason.
+
+        (WebInspector.DebuggerSidebarPanel.prototype._updatePauseReasonGotoArrow):
+        Always try to include a goto arrow to jump to the original pause location
+        if it is available at the time of pausing.
+
+2015-01-08  Joseph Pecoraro  &lt;pecoraro@apple.com&gt;
+
</ins><span class="cx">         Web Inspector: Expected UserAgent styles to be crossed-out if overridden
</span><span class="cx">         https://bugs.webkit.org/show_bug.cgi?id=140154
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebInspectorUILocalizationsenlprojlocalizedStringsjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js (178136 => 178137)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js        2015-01-08 23:11:45 UTC (rev 178136)
+++ trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js        2015-01-08 23:16:48 UTC (rev 178137)
</span><span class="lines">@@ -47,7 +47,6 @@
</span><span class="cx"> localizedStrings[&quot;All Exceptions&quot;] = &quot;All Exceptions&quot;;
</span><span class="cx"> localizedStrings[&quot;All Uncaught Exceptions&quot;] = &quot;All Uncaught Exceptions&quot;;
</span><span class="cx"> localizedStrings[&quot;An error occured trying to\nread the  %s  table.&quot;] = &quot;An error occured trying to\nread the  %s  table.&quot;;
</span><del>-localizedStrings[&quot;An error occurred trying to load the resource.&quot;] = &quot;An error occurred trying to load the resource.&quot;;
</del><span class="cx"> localizedStrings[&quot;An unexpected error %s occurred.&quot;] = &quot;An unexpected error %s occurred.&quot;;
</span><span class="cx"> localizedStrings[&quot;An unexpected error occurred.&quot;] = &quot;An unexpected error occurred.&quot;;
</span><span class="cx"> localizedStrings[&quot;Angle&quot;] = &quot;Angle&quot;;
</span><span class="lines">@@ -58,8 +57,9 @@
</span><span class="cx"> localizedStrings[&quot;Anonymous Scripts&quot;] = &quot;Anonymous Scripts&quot;;
</span><span class="cx"> localizedStrings[&quot;Anonymous StyleSheet %d&quot;] = &quot;Anonymous StyleSheet %d&quot;;
</span><span class="cx"> localizedStrings[&quot;Application Cache&quot;] = &quot;Application Cache&quot;;
</span><del>-localizedStrings[&quot;Assertion&quot;] = &quot;Assertion&quot;;
</del><ins>+localizedStrings[&quot;Assertion Failed&quot;] = &quot;Assertion Failed&quot;;
</ins><span class="cx"> localizedStrings[&quot;Assertion failed:&quot;] = &quot;Assertion failed:&quot;;
</span><ins>+localizedStrings[&quot;Assertion with message: %s&quot;] = &quot;Assertion with message: %s&quot;;
</ins><span class="cx"> localizedStrings[&quot;Assertive&quot;] = &quot;Assertive&quot;;
</span><span class="cx"> localizedStrings[&quot;Attribute&quot;] = &quot;Attribute&quot;;
</span><span class="cx"> localizedStrings[&quot;Attributes&quot;] = &quot;Attributes&quot;;
</span><span class="lines">@@ -109,7 +109,7 @@
</span><span class="cx"> localizedStrings[&quot;Container Regions&quot;] = &quot;Container Regions&quot;;
</span><span class="cx"> localizedStrings[&quot;Content&quot;] = &quot;Content&quot;;
</span><span class="cx"> localizedStrings[&quot;Content Flow&quot;] = &quot;Content Flow&quot;;
</span><del>-localizedStrings[&quot;Content Security Policy Violation&quot;] = &quot;Content Security Policy Violation&quot;;
</del><ins>+localizedStrings[&quot;Content Security Policy violation of directive: %s&quot;] = &quot;Content Security Policy violation of directive: %s&quot;;
</ins><span class="cx"> localizedStrings[&quot;Continue script execution (%s or %s)&quot;] = &quot;Continue script execution (%s or %s)&quot;;
</span><span class="cx"> localizedStrings[&quot;Continue to Here&quot;] = &quot;Continue to Here&quot;;
</span><span class="cx"> localizedStrings[&quot;Controls&quot;] = &quot;Controls&quot;;
</span><span class="lines">@@ -124,6 +124,7 @@
</span><span class="cx"> localizedStrings[&quot;Debug: &quot;] = &quot;Debug: &quot;;
</span><span class="cx"> localizedStrings[&quot;Debugger&quot;] = &quot;Debugger&quot;;
</span><span class="cx"> localizedStrings[&quot;Debugger Paused&quot;] = &quot;Debugger Paused&quot;;
</span><ins>+localizedStrings[&quot;Debugger Statement&quot;] = &quot;Debugger Statement&quot;;
</ins><span class="cx"> localizedStrings[&quot;Decoded&quot;] = &quot;Decoded&quot;;
</span><span class="cx"> localizedStrings[&quot;Delete&quot;] = &quot;Delete&quot;;
</span><span class="cx"> localizedStrings[&quot;Delete Breakpoint&quot;] = &quot;Delete Breakpoint&quot;;
</span><span class="lines">@@ -192,7 +193,7 @@
</span><span class="cx"> localizedStrings[&quot;Evaluate JavaScript&quot;] = &quot;Evaluate JavaScript&quot;;
</span><span class="cx"> localizedStrings[&quot;Event Dispatched&quot;] = &quot;Event Dispatched&quot;;
</span><span class="cx"> localizedStrings[&quot;Event Listeners&quot;] = &quot;Event Listeners&quot;;
</span><del>-localizedStrings[&quot;Exception&quot;] = &quot;Exception&quot;;
</del><ins>+localizedStrings[&quot;Exception with thrown value: %s&quot;] = &quot;Exception with thrown value: %s&quot;;
</ins><span class="cx"> localizedStrings[&quot;Expand columns&quot;] = &quot;Expand columns&quot;;
</span><span class="cx"> localizedStrings[&quot;Expanded&quot;] = &quot;Expanded&quot;;
</span><span class="cx"> localizedStrings[&quot;Expires&quot;] = &quot;Expires&quot;;
</span><span class="lines">@@ -241,6 +242,7 @@
</span><span class="cx"> localizedStrings[&quot;Image&quot;] = &quot;Image&quot;;
</span><span class="cx"> localizedStrings[&quot;Image Size&quot;] = &quot;Image Size&quot;;
</span><span class="cx"> localizedStrings[&quot;Images&quot;] = &quot;Images&quot;;
</span><ins>+localizedStrings[&quot;Immediate Pause Requested&quot;] = &quot;Immediate Pause Requested&quot;;
</ins><span class="cx"> localizedStrings[&quot;Index Key \u2014 %s&quot;] = &quot;Index Key \u2014 %s&quot;;
</span><span class="cx"> localizedStrings[&quot;Indexed Databases&quot;] = &quot;Indexed Databases&quot;;
</span><span class="cx"> localizedStrings[&quot;Inherited From: &quot;] = &quot;Inherited From: &quot;;
</span><span class="lines">@@ -321,6 +323,7 @@
</span><span class="cx"> localizedStrings[&quot;Parent&quot;] = &quot;Parent&quot;;
</span><span class="cx"> localizedStrings[&quot;Path&quot;] = &quot;Path&quot;;
</span><span class="cx"> localizedStrings[&quot;Pause Playback&quot;] = &quot;Pause Playback&quot;;
</span><ins>+localizedStrings[&quot;Pause Reason&quot;] = &quot;Pause Reason&quot;;
</ins><span class="cx"> localizedStrings[&quot;Pause script execution (%s or %s)&quot;] = &quot;Pause script execution (%s or %s)&quot;;
</span><span class="cx"> localizedStrings[&quot;Play Sound&quot;] = &quot;Play Sound&quot;;
</span><span class="cx"> localizedStrings[&quot;Polite&quot;] = &quot;Polite&quot;;
</span><span class="lines">@@ -444,6 +447,7 @@
</span><span class="cx"> localizedStrings[&quot;Total number of resources, click to show the Resources navigation sidebar&quot;] = &quot;Total number of resources, click to show the Resources navigation sidebar&quot;;
</span><span class="cx"> localizedStrings[&quot;Total size of all resources, click to show the Network Requests timeline&quot;] = &quot;Total size of all resources, click to show the Network Requests timeline&quot;;
</span><span class="cx"> localizedStrings[&quot;Transfered&quot;] = &quot;Transfered&quot;;
</span><ins>+localizedStrings[&quot;Triggered Breakpoint&quot;] = &quot;Triggered Breakpoint&quot;;
</ins><span class="cx"> localizedStrings[&quot;Type&quot;] = &quot;Type&quot;;
</span><span class="cx"> localizedStrings[&quot;Type Issue&quot;] = &quot;Type Issue&quot;;
</span><span class="cx"> localizedStrings[&quot;Type information for variable: %s&quot;] = &quot;Type information for variable: %s&quot;;
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceControllersDebuggerManagerjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Controllers/DebuggerManager.js (178136 => 178137)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Controllers/DebuggerManager.js        2015-01-08 23:11:45 UTC (rev 178136)
+++ trunk/Source/WebInspectorUI/UserInterface/Controllers/DebuggerManager.js        2015-01-08 23:16:48 UTC (rev 178137)
</span><span class="lines">@@ -96,9 +96,12 @@
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> WebInspector.DebuggerManager.PauseReason = {
</span><del>-    Exception: &quot;exception&quot;,
</del><span class="cx">     Assertion: &quot;assertion&quot;,
</span><ins>+    Breakpoint: &quot;breakpoint&quot;,
</ins><span class="cx">     CSPViolation: &quot;CSP-violation&quot;,
</span><ins>+    DebuggerStatement: &quot;debugger-statement&quot;,
+    Exception: &quot;exception&quot;,
+    PauseOnNextStatement: &quot;pause-on-next-statement&quot;,
</ins><span class="cx">     Other: &quot;other&quot;,
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -308,6 +311,11 @@
</span><span class="cx">         return [];
</span><span class="cx">     },
</span><span class="cx"> 
</span><ins>+    breakpointForIdentifier: function(id)
+    {
+        return this._breakpointIdMap[id];
+    },
+
</ins><span class="cx">     scriptForIdentifier: function(id)
</span><span class="cx">     {
</span><span class="cx">         return this._scriptIdMap[id] || null;
</span><span class="lines">@@ -614,12 +622,18 @@
</span><span class="cx">     {
</span><span class="cx">         // FIXME: Handle other backend pause seasons.
</span><span class="cx">         switch (payload) {
</span><del>-        case DebuggerAgent.PausedReason.Exception:
-            return WebInspector.DebuggerManager.PauseReason.Exception;
</del><span class="cx">         case DebuggerAgent.PausedReason.Assert:
</span><span class="cx">             return WebInspector.DebuggerManager.PauseReason.Assertion;
</span><ins>+        case DebuggerAgent.PausedReason.Breakpoint:
+            return WebInspector.DebuggerManager.PauseReason.Breakpoint;
</ins><span class="cx">         case DebuggerAgent.PausedReason.CSPViolation:
</span><span class="cx">             return WebInspector.DebuggerManager.PauseReason.CSPViolation;
</span><ins>+        case DebuggerAgent.PausedReason.DebuggerStatement:
+            return WebInspector.DebuggerManager.PauseReason.DebuggerStatement;
+        case DebuggerAgent.PausedReason.Exception:
+            return WebInspector.DebuggerManager.PauseReason.Exception;
+        case DebuggerAgent.PausedReason.PauseOnNextStatement:
+            return WebInspector.DebuggerManager.PauseReason.PauseOnNextStatement;
</ins><span class="cx">         default:
</span><span class="cx">             return WebInspector.DebuggerManager.PauseReason.Other;
</span><span class="cx">         }
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceImagesPausedBreakpointsvg"></a>
<div class="addfile"><h4>Added: trunk/Source/WebInspectorUI/UserInterface/Images/PausedBreakpoint.svg (0 => 178137)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Images/PausedBreakpoint.svg                                (rev 0)
+++ trunk/Source/WebInspectorUI/UserInterface/Images/PausedBreakpoint.svg        2015-01-08 23:16:48 UTC (rev 178137)
</span><span class="lines">@@ -0,0 +1,8 @@
</span><ins>+&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
+&lt;!-- Copyright © 2013 Apple Inc. All rights reserved. --&gt;
+&lt;svg version=&quot;1.1&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 16 16&quot;&gt;
+    &lt;path fill=&quot;rgb(236, 151, 153)&quot; d=&quot;M 13 1 L 3 1 C 1.898438 1 1 1.898438 1 3 L 1 13 C 1 14.101562 1.898438 15 3 15 L 13 15 C 14.101562 15 15 14.101562 15 13 L 15 3 C 15 1.898438 14.101562 1 13 1 Z&quot;/&gt;
+    &lt;path fill=&quot;rgb(191, 109, 113)&quot; d=&quot;M 13 1 L 3 1 C 1.898438 1 1 1.898438 1 3 L 1 13 C 1 14.101562 1.898438 15 3 15 L 13 15 C 14.101562 15 15 14.101562 15 13 L 15 3 C 15 1.898438 14.101562 1 13 1 M 13 2 C 13.550781 2 14 2.449219 14 3 L 14 13 C 14 13.550781 13.550781 14 13 14 L 3 14 C 2.449219 14 2 13.550781 2 13 L 2 3 C 2 2.449219 2.449219 2 3 2 L 13 2&quot;/&gt;
+    &lt;path fill=&quot;white&quot; d=&quot;M 6.78125 7.769531 L 7.136719 7.769531 C 7.757812 7.769531 8.246094 7.636719 8.605469 7.371094 C 8.96875 7.105469 9.148438 6.746094 9.148438 6.292969 C 9.148438 5.496094 8.59375 5.097656 7.488281 5.097656 L 6.78125 5.097656 Z M 5 12 L 5 4 L 8.042969 4 C 9.105469 4 9.863281 4.164062 10.316406 4.488281 C 10.773438 4.816406 11 5.359375 11 6.125 C 11 6.988281 10.695312 7.660156 10.085938 8.144531 C 9.480469 8.625 8.628906 8.863281 7.535156 8.863281 L 6.78125 8.863281 L 6.78125 12 Z&quot;/&gt;
+    &lt;path fill=&quot;rgb(204, 116, 121)&quot; d=&quot;M 7.78125 6.679688 L 7.78125 6.113281 C 8.019531 6.136719 8.117188 6.1875 8.144531 6.203125 C 8.140625 6.210938 8.148438 6.242188 8.148438 6.292969 C 8.148438 6.441406 8.105469 6.496094 8.015625 6.566406 C 7.953125 6.613281 7.875 6.648438 7.78125 6.679688 M 8.042969 3 L 4 3 L 4 13 L 7.78125 13 L 7.78125 9.863281 C 8.988281 9.824219 9.96875 9.507812 10.707031 8.925781 C 11.550781 8.257812 12 7.289062 12 6.125 C 12 4.753906 11.402344 4.035156 10.902344 3.675781 C 10.265625 3.222656 9.332031 3 8.042969 3 M 6.78125 7.769531 L 7.136719 7.769531 C 7.757812 7.769531 8.246094 7.636719 8.605469 7.371094 C 8.96875 7.105469 9.148438 6.746094 9.148438 6.292969 C 9.148438 5.496094 8.59375 5.097656 7.488281 5.097656 L 6.78125 5.097656 L 6.78125 7.769531 M 8.042969 4 C 9.105469 4 9.863281 4.164062 10.316406 4.488281 C 10.773438 4.816406 11 5.359375 11 6.125 C 11 6.988281 10.695312 7.660156 10.085938 8.144531 C 9.480469 8.625 8.628906
  8.863281 7.535156 8.863281 L 6.78125 8.863281 L 6.78125 12 L 5 12 L 5 4 L 8.042969 4&quot;/&gt;
+&lt;/svg&gt;
</ins></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceImagesgtkPausedBreakpointsvg"></a>
<div class="addfile"><h4>Added: trunk/Source/WebInspectorUI/UserInterface/Images/gtk/PausedBreakpoint.svg (0 => 178137)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Images/gtk/PausedBreakpoint.svg                                (rev 0)
+++ trunk/Source/WebInspectorUI/UserInterface/Images/gtk/PausedBreakpoint.svg        2015-01-08 23:16:48 UTC (rev 178137)
</span><span class="lines">@@ -0,0 +1,319 @@
</span><ins>+&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;
+&lt;!-- Created with Inkscape (http://www.inkscape.org/) --&gt;
+
+&lt;svg
+   xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot;
+   xmlns:cc=&quot;http://creativecommons.org/ns#&quot;
+   xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;
+   xmlns:svg=&quot;http://www.w3.org/2000/svg&quot;
+   xmlns=&quot;http://www.w3.org/2000/svg&quot;
+   xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;
+   version=&quot;1.1&quot;
+   width=&quot;16&quot;
+   height=&quot;16&quot;
+   id=&quot;svg5300&quot;&gt;
+  &lt;defs
+     id=&quot;defs5302&quot;&gt;
+    &lt;linearGradient
+       x1=&quot;491.22195&quot;
+       y1=&quot;506.64685&quot;
+       x2=&quot;491.22195&quot;
+       y2=&quot;732.05341&quot;
+       id=&quot;linearGradient3161-1&quot;
+       xlink:href=&quot;#linearGradient4373-2-5-8-6-8&quot;
+       gradientUnits=&quot;userSpaceOnUse&quot;
+       gradientTransform=&quot;matrix(0.09329421,0,0,0.09329421,-35.8706,-43.768871)&quot; /&gt;
+    &lt;linearGradient
+       id=&quot;linearGradient4373-2-5-8-6-8&quot;&gt;
+      &lt;stop
+         id=&quot;stop4375-3-6-8-4-7&quot;
+         style=&quot;stop-color:#a40000;stop-opacity:1&quot;
+         offset=&quot;0&quot; /&gt;
+      &lt;stop
+         id=&quot;stop4377-3-5-2-3-7&quot;
+         style=&quot;stop-color:#f9adad;stop-opacity:1&quot;
+         offset=&quot;1&quot; /&gt;
+    &lt;/linearGradient&gt;
+    &lt;radialGradient
+       cx=&quot;301&quot;
+       cy=&quot;51.5&quot;
+       r=&quot;19.500002&quot;
+       fx=&quot;301&quot;
+       fy=&quot;51.5&quot;
+       id=&quot;radialGradient3175-6&quot;
+       xlink:href=&quot;#linearGradient8978-0&quot;
+       gradientUnits=&quot;userSpaceOnUse&quot;
+       gradientTransform=&quot;matrix(0.9706301,1.96843e-8,0,0.2861052,-291.15791,-14.630261)&quot; /&gt;
+    &lt;linearGradient
+       id=&quot;linearGradient8978-0&quot;&gt;
+      &lt;stop
+         id=&quot;stop8980-9&quot;
+         style=&quot;stop-color:#ffffff;stop-opacity:1&quot;
+         offset=&quot;0&quot; /&gt;
+      &lt;stop
+         id=&quot;stop8982-2&quot;
+         style=&quot;stop-color:#ffffff;stop-opacity:0&quot;
+         offset=&quot;1&quot; /&gt;
+    &lt;/linearGradient&gt;
+    &lt;radialGradient
+       cx=&quot;24.44569&quot;
+       cy=&quot;35.87817&quot;
+       r=&quot;20.530962&quot;
+       fx=&quot;24.44569&quot;
+       fy=&quot;35.87817&quot;
+       id=&quot;radialGradient5208&quot;
+       xlink:href=&quot;#linearGradient11520-4&quot;
+       gradientUnits=&quot;userSpaceOnUse&quot;
+       gradientTransform=&quot;matrix(0.8569597,3.2529443e-7,-1.2530456e-7,0.3301039,-31.728631,-21.533276)&quot; /&gt;
+    &lt;linearGradient
+       id=&quot;linearGradient11520-4&quot;&gt;
+      &lt;stop
+         id=&quot;stop11522-7&quot;
+         style=&quot;stop-color:#ffffff;stop-opacity:1&quot;
+         offset=&quot;0&quot; /&gt;
+      &lt;stop
+         id=&quot;stop11524-7&quot;
+         style=&quot;stop-color:#fabebe;stop-opacity:1&quot;
+         offset=&quot;1&quot; /&gt;
+    &lt;/linearGradient&gt;
+    &lt;linearGradient
+       x1=&quot;321.5675&quot;
+       y1=&quot;145.51683&quot;
+       x2=&quot;311.65057&quot;
+       y2=&quot;118.49502&quot;
+       id=&quot;linearGradient5210&quot;
+       xlink:href=&quot;#linearGradient4247-6&quot;
+       gradientUnits=&quot;userSpaceOnUse&quot;
+       gradientTransform=&quot;matrix(0.5556927,0,0,0.5556793,-188.04562,-93.211546)&quot; /&gt;
+    &lt;linearGradient
+       id=&quot;linearGradient4247-6&quot;&gt;
+      &lt;stop
+         id=&quot;stop4249-2&quot;
+         style=&quot;stop-color:#a40000;stop-opacity:1&quot;
+         offset=&quot;0&quot; /&gt;
+      &lt;stop
+         id=&quot;stop4251-2&quot;
+         style=&quot;stop-color:#f9adad;stop-opacity:1&quot;
+         offset=&quot;1&quot; /&gt;
+    &lt;/linearGradient&gt;
+    &lt;radialGradient
+       cx=&quot;24.44569&quot;
+       cy=&quot;35.87817&quot;
+       r=&quot;20.530962&quot;
+       fx=&quot;24.44569&quot;
+       fy=&quot;35.87817&quot;
+       id=&quot;radialGradient5296&quot;
+       xlink:href=&quot;#linearGradient11520-4&quot;
+       gradientUnits=&quot;userSpaceOnUse&quot;
+       gradientTransform=&quot;matrix(0.8569597,3.2529443e-7,-1.2530456e-7,0.3301039,-12.94897,0.77180918)&quot; /&gt;
+    &lt;linearGradient
+       x1=&quot;321.5675&quot;
+       y1=&quot;145.51683&quot;
+       x2=&quot;311.65057&quot;
+       y2=&quot;118.49502&quot;
+       id=&quot;linearGradient5298&quot;
+       xlink:href=&quot;#linearGradient4247-6&quot;
+       gradientUnits=&quot;userSpaceOnUse&quot;
+       gradientTransform=&quot;matrix(0.5556927,0,0,0.5556793,-169.26596,-70.906461)&quot; /&gt;
+    &lt;linearGradient
+       x1=&quot;491.22195&quot;
+       y1=&quot;506.64685&quot;
+       x2=&quot;491.22195&quot;
+       y2=&quot;732.05341&quot;
+       id=&quot;linearGradient3161-1-6&quot;
+       xlink:href=&quot;#linearGradient4373-2-5-8-6-8-6&quot;
+       gradientUnits=&quot;userSpaceOnUse&quot;
+       gradientTransform=&quot;matrix(0.09329421,0,0,0.09329421,-35.8706,-43.768871)&quot; /&gt;
+    &lt;linearGradient
+       id=&quot;linearGradient4373-2-5-8-6-8-6&quot;&gt;
+      &lt;stop
+         id=&quot;stop4375-3-6-8-4-7-3&quot;
+         style=&quot;stop-color:#a40000;stop-opacity:1&quot;
+         offset=&quot;0&quot; /&gt;
+      &lt;stop
+         id=&quot;stop4377-3-5-2-3-7-5&quot;
+         style=&quot;stop-color:#f9adad;stop-opacity:1&quot;
+         offset=&quot;1&quot; /&gt;
+    &lt;/linearGradient&gt;
+    &lt;linearGradient
+       x1=&quot;491.22195&quot;
+       y1=&quot;506.64685&quot;
+       x2=&quot;491.22195&quot;
+       y2=&quot;732.05341&quot;
+       id=&quot;linearGradient5518&quot;
+       xlink:href=&quot;#linearGradient4373-2-5-8-6-8-6&quot;
+       gradientUnits=&quot;userSpaceOnUse&quot;
+       gradientTransform=&quot;matrix(0.09329421,0,0,0.09329421,-38.9244,-46.94361)&quot; /&gt;
+    &lt;radialGradient
+       cx=&quot;301&quot;
+       cy=&quot;51.5&quot;
+       r=&quot;19.500002&quot;
+       fx=&quot;301&quot;
+       fy=&quot;51.5&quot;
+       id=&quot;radialGradient3929&quot;
+       xlink:href=&quot;#linearGradient8978-0&quot;
+       gradientUnits=&quot;userSpaceOnUse&quot;
+       gradientTransform=&quot;matrix(0.9706301,1.96843e-8,0,0.2861052,-291.15791,-14.630261)&quot; /&gt;
+    &lt;radialGradient
+       cx=&quot;24.44569&quot;
+       cy=&quot;35.87817&quot;
+       r=&quot;20.530962&quot;
+       fx=&quot;24.44569&quot;
+       fy=&quot;35.87817&quot;
+       id=&quot;radialGradient3933&quot;
+       xlink:href=&quot;#linearGradient11520-4&quot;
+       gradientUnits=&quot;userSpaceOnUse&quot;
+       gradientTransform=&quot;matrix(0.8569597,3.2529443e-7,-1.2530456e-7,0.3301039,-12.94897,0.77180918)&quot; /&gt;
+    &lt;linearGradient
+       x1=&quot;321.5675&quot;
+       y1=&quot;145.51683&quot;
+       x2=&quot;311.65057&quot;
+       y2=&quot;118.49502&quot;
+       id=&quot;linearGradient3935&quot;
+       xlink:href=&quot;#linearGradient4247-6&quot;
+       gradientUnits=&quot;userSpaceOnUse&quot;
+       gradientTransform=&quot;matrix(0.5556927,0,0,0.5556793,-169.26596,-70.906461)&quot; /&gt;
+    &lt;linearGradient
+       id=&quot;linearGradient4373-2-5-8-6-8-6-4&quot;&gt;
+      &lt;stop
+         id=&quot;stop4375-3-6-8-4-7-3-2&quot;
+         style=&quot;stop-color:#a40000;stop-opacity:1&quot;
+         offset=&quot;0&quot; /&gt;
+      &lt;stop
+         id=&quot;stop4377-3-5-2-3-7-5-2&quot;
+         style=&quot;stop-color:#f9adad;stop-opacity:1&quot;
+         offset=&quot;1&quot; /&gt;
+    &lt;/linearGradient&gt;
+    &lt;linearGradient
+       x1=&quot;491.22195&quot;
+       y1=&quot;506.64685&quot;
+       x2=&quot;491.22195&quot;
+       y2=&quot;732.05341&quot;
+       id=&quot;linearGradient3952&quot;
+       xlink:href=&quot;#linearGradient4373-2-5-8-6-8-6-4&quot;
+       gradientUnits=&quot;userSpaceOnUse&quot;
+       gradientTransform=&quot;matrix(0.09329421,0,0,0.09329421,-39.902379,-47.24489)&quot; /&gt;
+    &lt;linearGradient
+       x1=&quot;491.22195&quot;
+       y1=&quot;506.64685&quot;
+       x2=&quot;491.22195&quot;
+       y2=&quot;732.05341&quot;
+       id=&quot;linearGradient3925-3-9&quot;
+       xlink:href=&quot;#linearGradient4373-2-5-8-6-8-6-4-9&quot;
+       gradientUnits=&quot;userSpaceOnUse&quot;
+       gradientTransform=&quot;matrix(0.09329421,0,0,0.09329421,-35.8706,-43.768871)&quot; /&gt;
+    &lt;linearGradient
+       id=&quot;linearGradient4373-2-5-8-6-8-6-4-9&quot;&gt;
+      &lt;stop
+         id=&quot;stop4375-3-6-8-4-7-3-2-1&quot;
+         style=&quot;stop-color:#a40000;stop-opacity:1&quot;
+         offset=&quot;0&quot; /&gt;
+      &lt;stop
+         id=&quot;stop4377-3-5-2-3-7-5-2-5&quot;
+         style=&quot;stop-color:#f9adad;stop-opacity:1&quot;
+         offset=&quot;1&quot; /&gt;
+    &lt;/linearGradient&gt;
+    &lt;linearGradient
+       x1=&quot;491.22195&quot;
+       y1=&quot;506.64685&quot;
+       x2=&quot;491.22195&quot;
+       y2=&quot;732.05341&quot;
+       id=&quot;linearGradient4080&quot;
+       xlink:href=&quot;#linearGradient4373-2-5-8-6-8-6-4-9&quot;
+       gradientUnits=&quot;userSpaceOnUse&quot;
+       gradientTransform=&quot;matrix(0.09329421,0,0,0.09329421,-40.198725,-47.440746)&quot; /&gt;
+    &lt;linearGradient
+       x1=&quot;491.22195&quot;
+       y1=&quot;506.64685&quot;
+       x2=&quot;491.22195&quot;
+       y2=&quot;732.05341&quot;
+       id=&quot;linearGradient3925-3-9-6&quot;
+       xlink:href=&quot;#linearGradient4373-2-5-8-6-8-6-4-9-8&quot;
+       gradientUnits=&quot;userSpaceOnUse&quot;
+       gradientTransform=&quot;matrix(0.09329421,0,0,0.09329421,-35.8706,-43.768871)&quot; /&gt;
+    &lt;linearGradient
+       id=&quot;linearGradient4373-2-5-8-6-8-6-4-9-8&quot;&gt;
+      &lt;stop
+         id=&quot;stop4375-3-6-8-4-7-3-2-1-9&quot;
+         style=&quot;stop-color:#a40000;stop-opacity:1&quot;
+         offset=&quot;0&quot; /&gt;
+      &lt;stop
+         id=&quot;stop4377-3-5-2-3-7-5-2-5-8&quot;
+         style=&quot;stop-color:#f9adad;stop-opacity:1&quot;
+         offset=&quot;1&quot; /&gt;
+    &lt;/linearGradient&gt;
+    &lt;linearGradient
+       x1=&quot;491.22195&quot;
+       y1=&quot;506.64685&quot;
+       x2=&quot;491.22195&quot;
+       y2=&quot;732.05341&quot;
+       id=&quot;linearGradient4733&quot;
+       xlink:href=&quot;#linearGradient4373-2-5-8-6-8-6-4-9-8&quot;
+       gradientUnits=&quot;userSpaceOnUse&quot;
+       gradientTransform=&quot;matrix(0.09329421,0,0,0.09329421,-40.27489,-47.51691)&quot; /&gt;
+  &lt;/defs&gt;
+  &lt;metadata
+     id=&quot;metadata5305&quot;&gt;
+    &lt;rdf:RDF&gt;
+      &lt;cc:Work
+         rdf:about=&quot;&quot;&gt;
+        &lt;dc:format&gt;image/svg+xml&lt;/dc:format&gt;
+        &lt;dc:type
+           rdf:resource=&quot;http://purl.org/dc/dcmitype/StillImage&quot; /&gt;
+        &lt;dc:title&gt;&lt;/dc:title&gt;
+        &lt;cc:license
+           rdf:resource=&quot;http://creativecommons.org/licenses/by-sa/3.0/&quot; /&gt;
+      &lt;/cc:Work&gt;
+      &lt;cc:License
+         rdf:about=&quot;http://creativecommons.org/licenses/by-sa/3.0/&quot;&gt;
+        &lt;cc:permits
+           rdf:resource=&quot;http://creativecommons.org/ns#Reproduction&quot; /&gt;
+        &lt;cc:permits
+           rdf:resource=&quot;http://creativecommons.org/ns#Distribution&quot; /&gt;
+        &lt;cc:requires
+           rdf:resource=&quot;http://creativecommons.org/ns#Notice&quot; /&gt;
+        &lt;cc:requires
+           rdf:resource=&quot;http://creativecommons.org/ns#Attribution&quot; /&gt;
+        &lt;cc:permits
+           rdf:resource=&quot;http://creativecommons.org/ns#DerivativeWorks&quot; /&gt;
+        &lt;cc:requires
+           rdf:resource=&quot;http://creativecommons.org/ns#ShareAlike&quot; /&gt;
+      &lt;/cc:License&gt;
+    &lt;/rdf:RDF&gt;
+  &lt;/metadata&gt;
+  &lt;rect
+     width=&quot;15.003705&quot;
+     height=&quot;15.003344&quot;
+     rx=&quot;1.5143198&quot;
+     ry=&quot;1.5142833&quot;
+     x=&quot;0.49814749&quot;
+     y=&quot;0.49832821&quot;
+     id=&quot;rect4319-7&quot;
+     style=&quot;fill:url(#radialGradient3933);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3935);stroke-width:1.00000095;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new&quot; /&gt;
+  &lt;rect
+     width=&quot;12.997247&quot;
+     height=&quot;12.999963&quot;
+     rx=&quot;0.5081172&quot;
+     ry=&quot;0.50810492&quot;
+     x=&quot;1.5013518&quot;
+     y=&quot;1.5016088&quot;
+     id=&quot;rect4321-0&quot;
+     style=&quot;fill:none;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new&quot; /&gt;
+  &lt;rect
+     width=&quot;14.000044&quot;
+     height=&quot;14.000041&quot;
+     rx=&quot;1.9062433&quot;
+     ry=&quot;1.9062428&quot;
+     x=&quot;1.0017486&quot;
+     y=&quot;1.0015783&quot;
+     id=&quot;rect9035-4&quot;
+     style=&quot;fill:url(#radialGradient3929);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new&quot; /&gt;
+  &lt;path
+     d=&quot;m 4.9353007,4.850099 c -0.03291,0.00406 -0.06499,0.014754 -0.09375,0.03125 -0.02216,0.00743 -0.04326,0.017981 -0.0625,0.03125 -0.01131,0.00947 -0.02175,0.019939 -0.03125,0.03125 -0.02758,0.025975 -0.04913,0.058305 -0.0625,0.09375 -0.0026,0.020724 -0.0026,0.041776 0,0.0625 l 0,8 a 0.250025,0.250025 0 0 0 0,0.0625 0.250025,0.250025 0 0 0 0.03125,0.0625 0.250025,0.250025 0 0 0 0.03125,0.03125 0.250025,0.250025 0 0 0 0.03125,0.03125 0.250025,0.250025 0 0 0 0.0625,0.03125 0.250025,0.250025 0 0 0 0.09375,0.03125 l 1.4374997,0 a 0.250025,0.250025 0 0 0 0.09375,-0.03125 0.250025,0.250025 0 0 0 0.0625,-0.03125 0.250025,0.250025 0 0 0 0.03125,-0.03125 0.250025,0.250025 0 0 0 0.03125,-0.03125 0.250025,0.250025 0 0 0 0.03125,-0.03125 0.250025,0.250025 0 0 0 0,-0.0625 0.250025,0.250025 0 0 0 0,-0.03125 l 0,-2.875 c 0.1149081,0.0052 0.2182086,0.03125 0.34375,0.03125 0.8773303,0 1.8771032,-0.05577 2.6875,-0.4375 0.8103966,-0.3817315 1.4374996,-1.1250996 1.4374996,-2.34375 0,-1
 .1859421 -0.65393,-1.9067539 -1.4062496,-2.25 -0.7523196,-0.3432461 -1.5933054,-0.375 -2.125,-0.375 l -2.6249997,0 z m 1.6874997,1.8125 0.78125,0 c 0.502668,0 0.9798162,0.028766 1.28125,0.15625 0.3014338,0.1274839 0.4375,0.2779793 0.4375,0.6875 0,0.23499 -0.037039,0.3814267 -0.125,0.5 -0.087961,0.1185733 -0.2233926,0.2110623 -0.40625,0.28125 -0.3657149,0.1403755 -0.9332062,0.1875 -1.53125,0.1875 -0.144116,0 -0.2905331,-0.021575 -0.4375,-0.03125 l 0,-1.78125 z&quot;
+     id=&quot;path7036-2&quot;
+     style=&quot;font-size:11.52737713px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.9999997;marker:none;visibility:visible;display:block;overflow:visible;enable-background:new;font-family:Cantarell;-inkscape-font-specification:Cantarell Bold&quot; /&gt;
+  &lt;path
+     d=&quot;m 5.0478557,3.75 c -0.03291,0.00406 -0.06499,0.014754 -0.09375,0.03125 -0.02216,0.00743 -0.04326,0.017981 -0.0625,0.03125 -0.01131,0.00947 -0.02175,0.019939 -0.03125,0.03125 -0.02758,0.025975 -0.04913,0.058305 -0.0625,0.09375 -0.0026,0.020724 -0.0026,0.041776 0,0.0625 l 0,8 a 0.250025,0.250025 0 0 0 0,0.0625 0.250025,0.250025 0 0 0 0.03125,0.0625 0.250025,0.250025 0 0 0 0.03125,0.03125 0.250025,0.250025 0 0 0 0.03125,0.03125 0.250025,0.250025 0 0 0 0.0625,0.03125 0.250025,0.250025 0 0 0 0.09375,0.03125 l 1.4374997,0 a 0.250025,0.250025 0 0 0 0.09375,-0.03125 0.250025,0.250025 0 0 0 0.0625,-0.03125 0.250025,0.250025 0 0 0 0.03125,-0.03125 0.250025,0.250025 0 0 0 0.03125,-0.03125 0.250025,0.250025 0 0 0 0.03125,-0.03125 0.250025,0.250025 0 0 0 0,-0.0625 0.250025,0.250025 0 0 0 0,-0.03125 l 0,-2.875 c 0.1149081,0.00518 0.2182086,0.03125 0.34375,0.03125 0.8773303,0 1.8771032,-0.055769 2.6875,-0.4375 C 10.577002,8.3370185 11.204105,7.5936504 11.204105,6.375 c 0,-1.18
 59421 -0.65393,-1.9067539 -1.4062496,-2.25 C 9.0455358,3.7817539 8.20455,3.75 7.6728554,3.75 l -2.6249997,0 z m 1.6874997,1.8125 0.78125,0 c 0.502668,0 0.9798162,0.028766 1.28125,0.15625 0.3014338,0.1274839 0.4375,0.2779793 0.4375,0.6875 0,0.23499 -0.037039,0.3814267 -0.125,0.5 -0.087961,0.1185733 -0.2233926,0.2110623 -0.40625,0.28125 -0.3657149,0.1403755 -0.9332062,0.1875 -1.53125,0.1875 -0.144116,0 -0.2905331,-0.021575 -0.4375,-0.03125 l 0,-1.78125 z&quot;
+     id=&quot;path7036-2-3&quot;
+     style=&quot;font-size:11.52737713px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;color:#000000;fill:url(#linearGradient3925-3-9-6);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.9999997;marker:none;visibility:visible;display:block;overflow:visible;enable-background:new;font-family:Cantarell;-inkscape-font-specification:Cantarell Bold&quot; /&gt;
+&lt;/svg&gt;
</ins></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsBreakpointTreeElementcss"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/BreakpointTreeElement.css (178136 => 178137)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/BreakpointTreeElement.css        2015-01-08 23:11:45 UTC (rev 178136)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/BreakpointTreeElement.css        2015-01-08 23:16:48 UTC (rev 178137)
</span><span class="lines">@@ -50,6 +50,10 @@
</span><span class="cx">     content: url(../Images/Exception.svg);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+.breakpoint-paused-icon .icon {
+    content: url(../Images/PausedBreakpoint.svg);
+}
+
</ins><span class="cx"> /* When animating a layer on top of a tree element's icon, move the main
</span><span class="cx"> icon to the icon element's background so animations are layered on top. */
</span><span class="cx"> .breakpoint-generic-line-icon .icon {
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsBreakpointTreeElementjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/BreakpointTreeElement.js (178136 => 178137)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/BreakpointTreeElement.js        2015-01-08 23:11:45 UTC (rev 178136)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/BreakpointTreeElement.js        2015-01-08 23:16:48 UTC (rev 178137)
</span><span class="lines">@@ -132,6 +132,12 @@
</span><span class="cx">             this._removeProbeSet(this._probeSet);
</span><span class="cx">     },
</span><span class="cx"> 
</span><ins>+    removeStatusImage: function()
+    {
+        this._statusImageElement.remove();
+        this._statusImageElement = null;
+    },
+
</ins><span class="cx">     // Private
</span><span class="cx"> 
</span><span class="cx">     _updateTitles: function()
</span><span class="lines">@@ -159,6 +165,9 @@
</span><span class="cx"> 
</span><span class="cx">     _updateStatus: function()
</span><span class="cx">     {
</span><ins>+        if (!this._statusImageElement)
+            return;
+
</ins><span class="cx">         if (this._breakpoint.disabled)
</span><span class="cx">             this._statusImageElement.classList.add(WebInspector.BreakpointTreeElement.StatusImageDisabledStyleClassName);
</span><span class="cx">         else
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsDebuggerSidebarPaneljs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/DebuggerSidebarPanel.js (178136 => 178137)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/DebuggerSidebarPanel.js        2015-01-08 23:11:45 UTC (rev 178136)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/DebuggerSidebarPanel.js        2015-01-08 23:16:48 UTC (rev 178137)
</span><span class="lines">@@ -132,15 +132,20 @@
</span><span class="cx">     var callStackGroup = new WebInspector.DetailsSectionGroup([this._callStackRow]);
</span><span class="cx">     this._callStackSection = new WebInspector.DetailsSection(&quot;call-stack&quot;, WebInspector.UIString(&quot;Call Stack&quot;), [callStackGroup]);
</span><span class="cx"> 
</span><del>-    this._pauseReasonRow = new WebInspector.DetailsSectionTextRow;
-    this._pauseReasonGroup = new WebInspector.DetailsSectionGroup([this._pauseReasonRow]);
-    this._pauseReasonSection = new WebInspector.DetailsSection(&quot;paused-reason&quot;, null, [this._pauseReasonGroup]);
</del><ins>+    this._pauseReasonTreeOutline = null;
</ins><span class="cx"> 
</span><ins>+    this._pauseReasonLinkContainerElement = document.createElement(&quot;span&quot;);
+    this._pauseReasonTextRow = new WebInspector.DetailsSectionTextRow;
+    this._pauseReasonGroup = new WebInspector.DetailsSectionGroup([this._pauseReasonTextRow]);
+    this._pauseReasonSection = new WebInspector.DetailsSection(&quot;paused-reason&quot;, null, [this._pauseReasonGroup], this._pauseReasonLinkContainerElement);
+    this._pauseReasonSection.title = WebInspector.UIString(&quot;Pause Reason&quot;);
+
</ins><span class="cx">     WebInspector.Breakpoint.addEventListener(WebInspector.Breakpoint.Event.DisplayLocationDidChange, this._breakpointDisplayLocationDidChange, this);
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> WebInspector.DebuggerSidebarPanel.OffsetSectionsStyleClassName = &quot;offset-sections&quot;;
</span><span class="cx"> WebInspector.DebuggerSidebarPanel.ExceptionIconStyleClassName = &quot;breakpoint-exception-icon&quot;;
</span><ins>+WebInspector.DebuggerSidebarPanel.PausedBreakpointIconStyleClassName = &quot;breakpoint-paused-icon&quot;;
</ins><span class="cx"> 
</span><span class="cx"> WebInspector.DebuggerSidebarPanel.SelectedAllExceptionsCookieKey = &quot;debugger-sidebar-panel-all-exceptions-breakpoint&quot;;
</span><span class="cx"> WebInspector.DebuggerSidebarPanel.SelectedAllUncaughtExceptionsCookieKey = &quot;debugger-sidebar-panel-all-uncaught-exceptions-breakpoint&quot;;
</span><span class="lines">@@ -152,7 +157,9 @@
</span><span class="cx"> 
</span><span class="cx">     get hasSelectedElement()
</span><span class="cx">     {
</span><del>-        return !!this._breakpointsContentTreeOutline.selectedTreeElement || !!this._callStackContentTreeOutline.selectedTreeElement;
</del><ins>+        return !!this._breakpointsContentTreeOutline.selectedTreeElement
+            || !!this._callStackContentTreeOutline.selectedTreeElement
+            || (this._pauseReasonTreeOutline &amp;&amp; !!this._pauseReasonTreeOutline.selectedTreeElement);
</ins><span class="cx">     },
</span><span class="cx"> 
</span><span class="cx">     showDefaultContentView: function()
</span><span class="lines">@@ -351,6 +358,12 @@
</span><span class="cx">     {
</span><span class="cx">         var breakpoint = event.data.breakpoint;
</span><span class="cx"> 
</span><ins>+        if (this._pauseReasonTreeOutline) {
+            var pauseReasonBreakpointTreeElement = this._pauseReasonTreeOutline.getCachedTreeElement(breakpoint);
+            if (pauseReasonBreakpointTreeElement)
+                pauseReasonBreakpointTreeElement.removeStatusImage();
+        }
+
</ins><span class="cx">         var breakpointTreeElement = this._breakpointsContentTreeOutline.getCachedTreeElement(breakpoint);
</span><span class="cx">         console.assert(breakpointTreeElement);
</span><span class="cx">         if (!breakpointTreeElement)
</span><span class="lines">@@ -523,26 +536,42 @@
</span><span class="cx">     {
</span><span class="cx">         function deselectCallStackContentTreeElements()
</span><span class="cx">         {
</span><del>-            // Deselect any tree element in the call stack content tree outline to prevent two selections in the sidebar.
</del><span class="cx">             var selectedTreeElement = this._callStackContentTreeOutline.selectedTreeElement;
</span><span class="cx">             if (selectedTreeElement)
</span><span class="cx">                 selectedTreeElement.deselect();
</span><span class="cx">         }
</span><span class="cx"> 
</span><ins>+        function deselectBreakpointContentTreeElements()
+        {
+            var selectedTreeElement = this._breakpointsContentTreeOutline.selectedTreeElement;
+            if (selectedTreeElement)
+                selectedTreeElement.deselect();
+        }
+
+        function deselectPauseReasonContentTreeElements()
+        {
+            if (!this._pauseReasonTreeOutline)
+                return;
+
+            var selectedTreeElement = this._pauseReasonTreeOutline.selectedTreeElement;
+            if (selectedTreeElement)
+                selectedTreeElement.deselect();
+        }
+
</ins><span class="cx">         if (treeElement instanceof WebInspector.ResourceTreeElement || treeElement instanceof WebInspector.ScriptTreeElement) {
</span><span class="cx">             // If the resource is being selected when it has no children it is in the process of being deleted, don't do anything.
</span><span class="cx">             if (!treeElement.children.length)
</span><span class="cx">                 return;
</span><span class="cx">             deselectCallStackContentTreeElements.call(this);
</span><ins>+            deselectPauseReasonContentTreeElements.call(this);
</ins><span class="cx">             WebInspector.resourceSidebarPanel.showSourceCode(treeElement.representedObject);
</span><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         if (treeElement instanceof WebInspector.CallFrameTreeElement) {
</span><del>-            // Deselect any tree element in the breakpoints content tree outline to prevent two selections in the sidebar.
-            var selectedTreeElement = this._breakpointsContentTreeOutline.selectedTreeElement;
-            if (selectedTreeElement)
-                selectedTreeElement.deselect();
</del><ins>+            // Deselect any tree element in the breakpoint / pause reason content tree outlines to prevent two selections in the sidebar.
+            deselectBreakpointContentTreeElements.call(this);
+            deselectPauseReasonContentTreeElements.call(this);
</ins><span class="cx"> 
</span><span class="cx">             var callFrame = treeElement.callFrame;
</span><span class="cx">             WebInspector.debuggerManager.activeCallFrame = callFrame;
</span><span class="lines">@@ -553,8 +582,20 @@
</span><span class="cx">         if (!(treeElement instanceof WebInspector.BreakpointTreeElement))
</span><span class="cx">             return;
</span><span class="cx"> 
</span><ins>+        // Deselect any other tree elements to prevent two selections in the sidebar.
</ins><span class="cx">         deselectCallStackContentTreeElements.call(this);
</span><span class="cx"> 
</span><ins>+        if (treeElement.treeOutline === this._pauseReasonTreeOutline)
+            deselectBreakpointContentTreeElements.call(this);
+        else
+            deselectPauseReasonContentTreeElements.call(this);
+
+        var breakpoint = treeElement.breakpoint;
+        if (treeElement.treeOutline === this._pauseReasonTreeOutline) {
+            WebInspector.resourceSidebarPanel.showSourceCodeLocation(breakpoint.sourceCodeLocation);
+            return;
+        }
+
</ins><span class="cx">         if (!treeElement.parent.representedObject)
</span><span class="cx">             return;
</span><span class="cx"> 
</span><span class="lines">@@ -562,7 +603,6 @@
</span><span class="cx">         if (!(treeElement.parent.representedObject instanceof WebInspector.SourceCode))
</span><span class="cx">             return;
</span><span class="cx"> 
</span><del>-        var breakpoint = treeElement.breakpoint;
</del><span class="cx">         WebInspector.resourceSidebarPanel.showSourceCodeLocation(breakpoint.sourceCodeLocation);
</span><span class="cx">     },
</span><span class="cx"> 
</span><span class="lines">@@ -595,27 +635,43 @@
</span><span class="cx"> 
</span><span class="cx">     _updatePauseReason: function()
</span><span class="cx">     {
</span><ins>+        this._pauseReasonTreeOutline = null;
+
+        this._updatePauseReasonGotoArrow();
+        return this._updatePauseReasonSection();
+    },
+
+    _updatePauseReasonSection: function()
+    {
</ins><span class="cx">         var pauseData = WebInspector.debuggerManager.pauseData;
</span><span class="cx">         
</span><span class="cx">         switch (WebInspector.debuggerManager.pauseReason) {
</span><del>-        case WebInspector.DebuggerManager.PauseReason.Exception:
-            console.assert(pauseData, &quot;Expected data with an exception, but found none.&quot;);
-            if (pauseData) {
-                // FIXME: We should improve the appearance of thrown objects. This works well for exception strings.
-                var data = WebInspector.RemoteObject.fromPayload(pauseData);
-                this._pauseReasonRow.text = data.description;
-                this._pauseReasonSection.title = WebInspector.UIString(&quot;Exception&quot;);
-                return true;
-            }
-            break;
-
</del><span class="cx">         case WebInspector.DebuggerManager.PauseReason.Assertion:
</span><ins>+            // FIXME: We should include the assertion condition string.
</ins><span class="cx">             console.assert(pauseData, &quot;Expected data with an assertion, but found none.&quot;);
</span><span class="cx">             if (pauseData &amp;&amp; pauseData.message) {
</span><del>-                // FIXME: We should include the assertion condition string.
-                this._pauseReasonRow.text = pauseData.message;
-                this._pauseReasonSection.title = WebInspector.UIString(&quot;Assertion&quot;);
</del><ins>+                this._pauseReasonTextRow.text = WebInspector.UIString(&quot;Assertion with message: %s&quot;).format(pauseData.message);
</ins><span class="cx">                 return true;
</span><ins>+            }            
+
+            this._pauseReasonTextRow.text = WebInspector.UIString(&quot;Assertion Failed&quot;);
+            this._pauseReasonGroup.rows = [this._pauseReasonTextRow];
+            return true;
+
+        case WebInspector.DebuggerManager.PauseReason.Breakpoint:
+            console.assert(pauseData, &quot;Expected breakpoint identifier, but found none.&quot;);
+            if (pauseData &amp;&amp; pauseData.breakpointId) {
+                var breakpoint = WebInspector.debuggerManager.breakpointForIdentifier(pauseData.breakpointId);
+                var breakpointTreeOutline = this.createContentTreeOutline(true, true);
+                breakpointTreeOutline.onselect = this._treeElementSelected.bind(this);
+                var breakpointTreeElement = new WebInspector.BreakpointTreeElement(breakpoint, WebInspector.DebuggerSidebarPanel.PausedBreakpointIconStyleClassName, WebInspector.UIString(&quot;Triggered Breakpoint&quot;));
+                var breakpointDetailsSection = new WebInspector.DetailsSectionRow;
+                breakpointTreeOutline.appendChild(breakpointTreeElement);
+                breakpointDetailsSection.element.appendChild(breakpointTreeOutline.element);
+
+                this._pauseReasonGroup.rows = [breakpointDetailsSection];
+                this._pauseReasonTreeOutline = breakpointTreeOutline;
+                return true;
</ins><span class="cx">             }
</span><span class="cx">             break;
</span><span class="cx"> 
</span><span class="lines">@@ -623,18 +679,55 @@
</span><span class="cx">             console.assert(pauseData, &quot;Expected data with a CSP Violation, but found none.&quot;);
</span><span class="cx">             if (pauseData) {
</span><span class="cx">                 // COMPATIBILITY (iOS 8): 'directive' was 'directiveText'.
</span><del>-                this._pauseReasonRow.text = pauseData.directive || pauseData.directiveText;
-                this._pauseReasonSection.title = WebInspector.UIString(&quot;Content Security Policy Violation&quot;);
</del><ins>+                this._pauseReasonTextRow.text = WebInspector.UIString(&quot;Content Security Policy violation of directive: %s&quot;).format(pauseData.directive || pauseData.directiveText);
+                this._pauseReasonGroup.rows = [this._pauseReasonTextRow];
</ins><span class="cx">                 return true;
</span><span class="cx">             }
</span><span class="cx">             break;
</span><span class="cx"> 
</span><ins>+        case WebInspector.DebuggerManager.PauseReason.DebuggerStatement:
+            this._pauseReasonTextRow.text = WebInspector.UIString(&quot;Debugger Statement&quot;);
+            this._pauseReasonGroup.rows = [this._pauseReasonTextRow];
+            return true;
+
+        case WebInspector.DebuggerManager.PauseReason.Exception:
+            console.assert(pauseData, &quot;Expected data with an exception, but found none.&quot;);
+            if (pauseData) {
+                // FIXME: We should improve the appearance of thrown objects. This works well for exception strings.
+                var data = WebInspector.RemoteObject.fromPayload(pauseData);
+                this._pauseReasonTextRow.text = WebInspector.UIString(&quot;Exception with thrown value: %s&quot;).format(data.description);
+                this._pauseReasonGroup.rows = [this._pauseReasonTextRow];
+                return true;
+            }
+            break;
+
+        case WebInspector.DebuggerManager.PauseReason.PauseOnNextStatement:
+            this._pauseReasonTextRow.text = WebInspector.UIString(&quot;Immediate Pause Requested&quot;);
+            this._pauseReasonGroup.rows = [this._pauseReasonTextRow];
+            return true;
+
</ins><span class="cx">         case WebInspector.DebuggerManager.PauseReason.Other:
</span><span class="cx">             console.error(&quot;Paused for unknown reason. We should always have a reason.&quot;);
</span><span class="cx">             break;
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         return false;
</span><ins>+    },
+
+    _updatePauseReasonGotoArrow: function()
+    {
+        this._pauseReasonLinkContainerElement.removeChildren();
+
+        var activeCallFrame = WebInspector.debuggerManager.activeCallFrame;
+        if (!activeCallFrame)
+            return;
+
+        var sourceCodeLocation = activeCallFrame.sourceCodeLocation;
+        if (!sourceCodeLocation)
+            return;
+
+        var linkElement = WebInspector.createSourceCodeLocationLink(sourceCodeLocation, false, true);
+        this._pauseReasonLinkContainerElement.appendChild(linkElement);
</ins><span class="cx">     }
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>