<!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>[175588] trunk/Source</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/175588">175588</a></dd>
<dt>Author</dt> <dd>joepeck@webkit.org</dd>
<dt>Date</dt> <dd>2014-11-04 16:31:37 -0800 (Tue, 04 Nov 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Web Inspector: Pause on exceptions should show the actual exception
https://bugs.webkit.org/show_bug.cgi?id=63096

Reviewed by Timothy Hatcher.

Source/JavaScriptCore:

* debugger/Debugger.h:
Expose accessor for the pause reason to subclasses.

* inspector/JSInjectedScriptHost.cpp:
(Inspector::JSInjectedScriptHost::type):
New &quot;error&quot; subtype for error objects.

* inspector/InjectedScriptSource.js:
When an object is an error object, use toString to provide a richer description.

* inspector/protocol/Runtime.json:
Expose a new &quot;error&quot; subtype for Error types (TypeError, ReferenceError, EvalError, etc).

* inspector/protocol/Debugger.json:
Provide type checked objects for different Debugger.pause pause reasons.
An exception provides the thrown object, but assert / CSP pauses provide
a richer typed object as the auxiliary data.

* inspector/ScriptDebugServer.cpp:
(Inspector::ScriptDebugServer::dispatchDidPause):
When paused because of an exception, pass the exception on.

* inspector/agents/InspectorDebuggerAgent.h:
* inspector/agents/InspectorDebuggerAgent.cpp:
(Inspector::InspectorDebuggerAgent::handleConsoleAssert):
(Inspector::InspectorDebuggerAgent::scriptExecutionBlockedByCSP):
Provide richer data in pause events.

* inspector/scripts/codegen/generate_backend_commands.py:
(BackendCommandsGenerator.generate_domain.is_anonymous_enum_param):
(BackendCommandsGenerator.generate_domain):
* inspector/scripts/tests/expected/enum-values.json-result:
Generate frontend enums for anonymous enum event parameters.

Source/WebCore:

* inspector/InspectorInstrumentation.cpp:
(WebCore::InspectorInstrumentation::addMessageToConsoleImpl):
Pass assertion message on.

Source/WebInspectorUI:

* Localizations/en.lproj/localizedStrings.js:
* UserInterface/Main.html:
New strings / files.

* UserInterface/Controllers/DebuggerManager.js:
(WebInspector.DebuggerManager.prototype.get pauseReason):
(WebInspector.DebuggerManager.prototype.get pauseData):
(WebInspector.DebuggerManager.prototype.reset):
(WebInspector.DebuggerManager.prototype.debuggerDidPause):
(WebInspector.DebuggerManager.prototype._pauseReasonFromPayload):
Maintain the current pause reason and auxiliary data in the manager.

* UserInterface/Protocol/DebuggerObserver.js:
(WebInspector.DebuggerObserver.prototype.paused):
Pass previously unused event parameters on to the manager.

* UserInterface/Views/ConsoleMessageImpl.js:
(WebInspector.ConsoleMessageImpl):
Style error objects in the console like Objects. The new description
string provides a richer message if you console.log(exception).

* UserInterface/Views/DebuggerSidebarPanel.js:
(WebInspector.DebuggerSidebarPanel):
(WebInspector.DebuggerSidebarPanel.prototype._debuggerDidPause):
(WebInspector.DebuggerSidebarPanel.prototype._debuggerDidResume):
(WebInspector.DebuggerSidebarPanel.prototype._updatePauseReason):
Update the UI when we pause / resume to show / hide a pause reason section.

* UserInterface/Views/DetailsSectionRow.js:
(WebInspector.DetailsSectionRow.prototype.set emptyMessage):
Fix a latent bug that would have thrown an exception if the setter was ever used.

* UserInterface/Views/DetailsSectionTextRow.js: Added.
(WebInspector.DetailsSectionTextRow):
(WebInspector.DetailsSectionTextRow.prototype.get text):
(WebInspector.DetailsSectionTextRow.prototype.set text):
* UserInterface/Views/DetailsSection.css:
(.details-section &gt; .content &gt; .group &gt; .row.simple.data &gt; .value):
(.details-section &gt; .content &gt; .group &gt; .row.text):
Simple class for a section of centered text. This is modelled after
the empty message text style in other sections.

* UserInterface/Views/LogContentView.css:
(.console-formatted-object, .console-formatted-node, .console-formatted-error):
(.console-formatted-object .section, .console-formatted-node .section, .console-formatted-error .section):
(.console-formatted-object .properties, .console-formatted-node .properties, .console-formatted-error .properties):
Style &quot;error&quot; objects like regular objects. We may wish to treat differently later.

* UserInterface/Protocol/Legacy/6.0/InspectorBackendCommands.js:
* UserInterface/Protocol/Legacy/7.0/InspectorBackendCommands.js:
* UserInterface/Protocol/Legacy/8.0/InspectorBackendCommands.js:
Regenerate legacy backend commands to get the new enum.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCoredebuggerDebuggerh">trunk/Source/JavaScriptCore/debugger/Debugger.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectorInjectedScriptSourcejs">trunk/Source/JavaScriptCore/inspector/InjectedScriptSource.js</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectorJSInjectedScriptHostcpp">trunk/Source/JavaScriptCore/inspector/JSInjectedScriptHost.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectorScriptDebugServercpp">trunk/Source/JavaScriptCore/inspector/ScriptDebugServer.cpp</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="#trunkSourceJavaScriptCoreinspectorprotocolRuntimejson">trunk/Source/JavaScriptCore/inspector/protocol/Runtime.json</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectorscriptscodegengenerate_backend_commandspy">trunk/Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_commands.py</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectorscriptstestsexpectedenumvaluesjsonresult">trunk/Source/JavaScriptCore/inspector/scripts/tests/expected/enum-values.json-result</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreinspectorInspectorInstrumentationcpp">trunk/Source/WebCore/inspector/InspectorInstrumentation.cpp</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="#trunkSourceWebInspectorUIUserInterfaceMainhtml">trunk/Source/WebInspectorUI/UserInterface/Main.html</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceProtocolDebuggerObserverjs">trunk/Source/WebInspectorUI/UserInterface/Protocol/DebuggerObserver.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceProtocolLegacy60InspectorBackendCommandsjs">trunk/Source/WebInspectorUI/UserInterface/Protocol/Legacy/6.0/InspectorBackendCommands.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceProtocolLegacy70InspectorBackendCommandsjs">trunk/Source/WebInspectorUI/UserInterface/Protocol/Legacy/7.0/InspectorBackendCommands.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceProtocolLegacy80InspectorBackendCommandsjs">trunk/Source/WebInspectorUI/UserInterface/Protocol/Legacy/8.0/InspectorBackendCommands.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsConsoleMessageImpljs">trunk/Source/WebInspectorUI/UserInterface/Views/ConsoleMessageImpl.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsDebuggerSidebarPaneljs">trunk/Source/WebInspectorUI/UserInterface/Views/DebuggerSidebarPanel.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsDetailsSectioncss">trunk/Source/WebInspectorUI/UserInterface/Views/DetailsSection.css</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsDetailsSectionRowjs">trunk/Source/WebInspectorUI/UserInterface/Views/DetailsSectionRow.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsLogContentViewcss">trunk/Source/WebInspectorUI/UserInterface/Views/LogContentView.css</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsScopeChainDetailsSidebarPaneljs">trunk/Source/WebInspectorUI/UserInterface/Views/ScopeChainDetailsSidebarPanel.js</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsDetailsSectionTextRowjs">trunk/Source/WebInspectorUI/UserInterface/Views/DetailsSectionTextRow.js</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (175587 => 175588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2014-11-05 00:29:21 UTC (rev 175587)
+++ trunk/Source/JavaScriptCore/ChangeLog        2014-11-05 00:31:37 UTC (rev 175588)
</span><span class="lines">@@ -1,3 +1,44 @@
</span><ins>+2014-11-04  Joseph Pecoraro  &lt;pecoraro@apple.com&gt;
+
+        Web Inspector: Pause on exceptions should show the actual exception
+        https://bugs.webkit.org/show_bug.cgi?id=63096
+
+        Reviewed by Timothy Hatcher.
+
+        * debugger/Debugger.h:
+        Expose accessor for the pause reason to subclasses.
+
+        * inspector/JSInjectedScriptHost.cpp:
+        (Inspector::JSInjectedScriptHost::type):
+        New &quot;error&quot; subtype for error objects.
+
+        * inspector/InjectedScriptSource.js:
+        When an object is an error object, use toString to provide a richer description.
+
+        * inspector/protocol/Runtime.json:
+        Expose a new &quot;error&quot; subtype for Error types (TypeError, ReferenceError, EvalError, etc).
+
+        * inspector/protocol/Debugger.json:
+        Provide type checked objects for different Debugger.pause pause reasons.
+        An exception provides the thrown object, but assert / CSP pauses provide
+        a richer typed object as the auxiliary data.
+
+        * inspector/ScriptDebugServer.cpp:
+        (Inspector::ScriptDebugServer::dispatchDidPause):
+        When paused because of an exception, pass the exception on.
+
+        * inspector/agents/InspectorDebuggerAgent.h:
+        * inspector/agents/InspectorDebuggerAgent.cpp:
+        (Inspector::InspectorDebuggerAgent::handleConsoleAssert):
+        (Inspector::InspectorDebuggerAgent::scriptExecutionBlockedByCSP):
+        Provide richer data in pause events.
+
+        * inspector/scripts/codegen/generate_backend_commands.py:
+        (BackendCommandsGenerator.generate_domain.is_anonymous_enum_param):
+        (BackendCommandsGenerator.generate_domain):
+        * inspector/scripts/tests/expected/enum-values.json-result:
+        Generate frontend enums for anonymous enum event parameters.
+
</ins><span class="cx"> 2014-11-04  Michael Saboff  &lt;msaboff@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Disable flakey float32-repeat-out-of-bounds.js and int8-repeat-out-of-bounds.js tests for ARM64
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredebuggerDebuggerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/debugger/Debugger.h (175587 => 175588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/debugger/Debugger.h        2014-11-05 00:29:21 UTC (rev 175587)
+++ trunk/Source/JavaScriptCore/debugger/Debugger.h        2014-11-05 00:31:37 UTC (rev 175588)
</span><span class="lines">@@ -122,6 +122,8 @@
</span><span class="cx">         PausedForBreakpoint
</span><span class="cx">     };
</span><span class="cx"> 
</span><ins>+    ReasonForPause reasonForPause() const { return m_reasonForPause; }
+
</ins><span class="cx">     virtual void handlePause(ReasonForPause, JSGlobalObject*) { }
</span><span class="cx">     virtual void notifyDoneProcessingDebuggerEvents() { }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectorInjectedScriptSourcejs"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/InjectedScriptSource.js (175587 => 175588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/InjectedScriptSource.js        2014-11-05 00:29:21 UTC (rev 175587)
+++ trunk/Source/JavaScriptCore/inspector/InjectedScriptSource.js        2014-11-05 00:31:37 UTC (rev 175588)
</span><span class="lines">@@ -750,6 +750,9 @@
</span><span class="cx">         if (subtype === &quot;date&quot;)
</span><span class="cx">             return this._toString(obj);
</span><span class="cx"> 
</span><ins>+        if (subtype === &quot;error&quot;)
+            return this._toString(obj);
+
</ins><span class="cx">         if (subtype === &quot;node&quot;) {
</span><span class="cx">             var description = obj.nodeName.toLowerCase();
</span><span class="cx">             switch (obj.nodeType) {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectorJSInjectedScriptHostcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/JSInjectedScriptHost.cpp (175587 => 175588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/JSInjectedScriptHost.cpp        2014-11-05 00:29:21 UTC (rev 175587)
+++ trunk/Source/JavaScriptCore/inspector/JSInjectedScriptHost.cpp        2014-11-05 00:31:37 UTC (rev 175588)
</span><span class="lines">@@ -121,6 +121,10 @@
</span><span class="cx">     if (value.isNumber())
</span><span class="cx">         return exec-&gt;vm().smallStrings.numberString();
</span><span class="cx"> 
</span><ins>+    JSObject* object = asObject(value);
+    if (object &amp;&amp; object-&gt;isErrorInstance())
+        return jsNontrivialString(exec, ASCIILiteral(&quot;error&quot;));
+
</ins><span class="cx">     if (value.inherits(JSArray::info()))
</span><span class="cx">         return jsNontrivialString(exec, ASCIILiteral(&quot;array&quot;));
</span><span class="cx">     if (value.inherits(DateInstance::info()))
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectorScriptDebugServercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/ScriptDebugServer.cpp (175587 => 175588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/ScriptDebugServer.cpp        2014-11-05 00:29:21 UTC (rev 175587)
+++ trunk/Source/JavaScriptCore/inspector/ScriptDebugServer.cpp        2014-11-05 00:31:37 UTC (rev 175588)
</span><span class="lines">@@ -138,7 +138,8 @@
</span><span class="cx">     JSC::ExecState* state = globalObject-&gt;globalExec();
</span><span class="cx">     RefPtr&lt;JavaScriptCallFrame&gt; javaScriptCallFrame = JavaScriptCallFrame::create(debuggerCallFrame);
</span><span class="cx">     JSValue jsCallFrame = toJS(state, globalObject, javaScriptCallFrame.get());
</span><del>-    listener-&gt;didPause(state, Deprecated::ScriptValue(state-&gt;vm(), jsCallFrame), Deprecated::ScriptValue());
</del><ins>+    Deprecated::ScriptValue exception = reasonForPause() == PausedForException ? Deprecated::ScriptValue(state-&gt;vm(), currentException()) : Deprecated::ScriptValue();
+    listener-&gt;didPause(state, Deprecated::ScriptValue(state-&gt;vm(), jsCallFrame), exception);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void ScriptDebugServer::dispatchBreakpointActionLog(ExecState* exec, const String&amp; message)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectoragentsInspectorDebuggerAgentcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.cpp (175587 => 175588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.cpp        2014-11-05 00:29:21 UTC (rev 175587)
+++ trunk/Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.cpp        2014-11-05 00:31:37 UTC (rev 175588)
</span><span class="lines">@@ -143,10 +143,14 @@
</span><span class="cx">     return scriptDebugServer().isPaused();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void InspectorDebuggerAgent::handleConsoleAssert()
</del><ins>+void InspectorDebuggerAgent::handleConsoleAssert(const String&amp; message)
</ins><span class="cx"> {
</span><del>-    if (scriptDebugServer().pauseOnExceptionsState() != JSC::Debugger::DontPauseOnExceptions)
-        breakProgram(InspectorDebuggerFrontendDispatcher::Reason::Assert, nullptr);
</del><ins>+    if (scriptDebugServer().pauseOnExceptionsState() != JSC::Debugger::DontPauseOnExceptions) {
+        RefPtr&lt;Inspector::Protocol::Debugger::AssertPauseReason&gt; reason = Inspector::Protocol::Debugger::AssertPauseReason::create();
+        if (!message.isNull())
+            reason-&gt;setMessage(message);
+        breakProgram(InspectorDebuggerFrontendDispatcher::Reason::Assert, reason-&gt;openAccessors());
+    }
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static PassRefPtr&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">@@ -548,9 +552,8 @@
</span><span class="cx"> void InspectorDebuggerAgent::scriptExecutionBlockedByCSP(const String&amp; directiveText)
</span><span class="cx"> {
</span><span class="cx">     if (scriptDebugServer().pauseOnExceptionsState() != JSC::Debugger::DontPauseOnExceptions) {
</span><del>-        RefPtr&lt;InspectorObject&gt; directive = InspectorObject::create();
-        directive-&gt;setString(ASCIILiteral(&quot;directiveText&quot;), directiveText);
-        breakProgram(InspectorDebuggerFrontendDispatcher::Reason::CSPViolation, directive.release());
</del><ins>+        RefPtr&lt;Inspector::Protocol::Debugger::CSPViolationPauseReason&gt; reason = Inspector::Protocol::Debugger::CSPViolationPauseReason::create().setDirective(directiveText);
+        breakProgram(InspectorDebuggerFrontendDispatcher::Reason::CSPViolation, reason-&gt;openAccessors());
</ins><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectoragentsInspectorDebuggerAgenth"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.h (175587 => 175588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.h        2014-11-05 00:29:21 UTC (rev 175587)
+++ trunk/Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.h        2014-11-05 00:31:37 UTC (rev 175588)
</span><span class="lines">@@ -93,7 +93,7 @@
</span><span class="cx"> 
</span><span class="cx">     bool isPaused();
</span><span class="cx">     
</span><del>-    void handleConsoleAssert();
</del><ins>+    void handleConsoleAssert(const String&amp; message);
</ins><span class="cx"> 
</span><span class="cx">     void schedulePauseOnNextStatement(InspectorDebuggerFrontendDispatcher::Reason breakReason, PassRefPtr&lt;InspectorObject&gt; data);
</span><span class="cx">     void cancelPauseOnNextStatement();
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectorprotocolDebuggerjson"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/protocol/Debugger.json (175587 => 175588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/protocol/Debugger.json        2014-11-05 00:29:21 UTC (rev 175587)
+++ trunk/Source/JavaScriptCore/inspector/protocol/Debugger.json        2014-11-05 00:31:37 UTC (rev 175588)
</span><span class="lines">@@ -96,6 +96,22 @@
</span><span class="cx">                 { &quot;name&quot;: &quot;timestamp&quot;, &quot;type&quot;: &quot;number&quot;, &quot;description&quot;: &quot;Timestamp of when the sample was taken.&quot; },
</span><span class="cx">                 { &quot;name&quot;: &quot;payload&quot;, &quot;$ref&quot;: &quot;Runtime.RemoteObject&quot;, &quot;description&quot;: &quot;Contents of the sample.&quot; }
</span><span class="cx">             ]
</span><ins>+        },
+        {
+            &quot;id&quot;: &quot;AssertPauseReason&quot;,
+            &quot;description&quot;: &quot;The pause reason auxiliary data when paused because of an assertion.&quot;,
+            &quot;type&quot;: &quot;object&quot;,
+            &quot;properties&quot;: [
+                { &quot;name&quot;: &quot;message&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: true, &quot;description&quot;: &quot;The console.assert message string if provided.&quot; }
+            ]
+        },
+        {
+            &quot;id&quot;: &quot;CSPViolationPauseReason&quot;,
+            &quot;description&quot;: &quot;The pause reason auxiliary data when paused because of a Content Security Policy directive.&quot;,
+            &quot;type&quot;: &quot;object&quot;,
+            &quot;properties&quot;: [
+                { &quot;name&quot;: &quot;directive&quot;, &quot;type&quot;: &quot;string&quot;, &quot;description&quot;: &quot;The CSP directive that blocked script execution.&quot; }
+            ]
</ins><span class="cx">         }
</span><span class="cx">     ],
</span><span class="cx">     &quot;commands&quot;: [
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectorprotocolRuntimejson"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/protocol/Runtime.json (175587 => 175588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/protocol/Runtime.json        2014-11-05 00:29:21 UTC (rev 175587)
+++ trunk/Source/JavaScriptCore/inspector/protocol/Runtime.json        2014-11-05 00:31:37 UTC (rev 175588)
</span><span class="lines">@@ -13,7 +13,7 @@
</span><span class="cx">             &quot;description&quot;: &quot;Mirror object referencing original JavaScript object.&quot;,
</span><span class="cx">             &quot;properties&quot;: [
</span><span class="cx">                 { &quot;name&quot;: &quot;type&quot;, &quot;type&quot;: &quot;string&quot;, &quot;enum&quot;: [&quot;object&quot;, &quot;function&quot;, &quot;undefined&quot;, &quot;string&quot;, &quot;number&quot;, &quot;boolean&quot;], &quot;description&quot;: &quot;Object type.&quot; },
</span><del>-                { &quot;name&quot;: &quot;subtype&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: true, &quot;enum&quot;: [&quot;array&quot;, &quot;null&quot;, &quot;node&quot;, &quot;regexp&quot;, &quot;date&quot;], &quot;description&quot;: &quot;Object subtype hint. Specified for &lt;code&gt;object&lt;/code&gt; type values only.&quot; },
</del><ins>+                { &quot;name&quot;: &quot;subtype&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: true, &quot;enum&quot;: [&quot;array&quot;, &quot;null&quot;, &quot;node&quot;, &quot;regexp&quot;, &quot;date&quot;, &quot;error&quot;], &quot;description&quot;: &quot;Object subtype hint. Specified for &lt;code&gt;object&lt;/code&gt; type values only.&quot; },
</ins><span class="cx">                 { &quot;name&quot;: &quot;className&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: true, &quot;description&quot;: &quot;Object class (constructor) name. Specified for &lt;code&gt;object&lt;/code&gt; type values only.&quot; },
</span><span class="cx">                 { &quot;name&quot;: &quot;value&quot;, &quot;type&quot;: &quot;any&quot;, &quot;optional&quot;: true, &quot;description&quot;: &quot;Remote object value (in case of primitive values or JSON values if it was requested).&quot; },
</span><span class="cx">                 { &quot;name&quot;: &quot;description&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: true, &quot;description&quot;: &quot;String representation of the object.&quot; },
</span><span class="lines">@@ -39,7 +39,7 @@
</span><span class="cx">                 { &quot;name&quot;: &quot;type&quot;, &quot;type&quot;: &quot;string&quot;, &quot;enum&quot;: [&quot;object&quot;, &quot;function&quot;, &quot;undefined&quot;, &quot;string&quot;, &quot;number&quot;, &quot;boolean&quot;], &quot;description&quot;: &quot;Object type.&quot; },
</span><span class="cx">                 { &quot;name&quot;: &quot;value&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: true, &quot;description&quot;: &quot;User-friendly property value string.&quot; },
</span><span class="cx">                 { &quot;name&quot;: &quot;valuePreview&quot;, &quot;$ref&quot;: &quot;ObjectPreview&quot;, &quot;optional&quot;: true, &quot;description&quot;: &quot;Nested value preview.&quot; },
</span><del>-                { &quot;name&quot;: &quot;subtype&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: true, &quot;enum&quot;: [&quot;array&quot;, &quot;null&quot;, &quot;node&quot;, &quot;regexp&quot;, &quot;date&quot;], &quot;description&quot;: &quot;Object subtype hint. Specified for &lt;code&gt;object&lt;/code&gt; type values only.&quot; }
</del><ins>+                { &quot;name&quot;: &quot;subtype&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: true, &quot;enum&quot;: [&quot;array&quot;, &quot;null&quot;, &quot;node&quot;, &quot;regexp&quot;, &quot;date&quot;, &quot;error&quot;], &quot;description&quot;: &quot;Object subtype hint. Specified for &lt;code&gt;object&lt;/code&gt; type values only.&quot; }
</ins><span class="cx">             ]
</span><span class="cx">         },
</span><span class="cx">         {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectorscriptscodegengenerate_backend_commandspy"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_commands.py (175587 => 175588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_commands.py        2014-11-05 00:29:21 UTC (rev 175587)
+++ trunk/Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_commands.py        2014-11-05 00:31:37 UTC (rev 175588)
</span><span class="lines">@@ -88,7 +88,18 @@
</span><span class="cx">                 }
</span><span class="cx">                 lines.append('InspectorBackend.registerEnum(&quot;%(domain)s.%(enumName)s&quot;, {%(enumMap)s});' % enum_args)
</span><span class="cx"> 
</span><ins>+        def is_anonymous_enum_param(param):
+            return isinstance(param.type, EnumType) and param.type.is_anonymous
+
</ins><span class="cx">         for event in domain.events:
</span><ins>+            for param in filter(is_anonymous_enum_param, event.event_parameters):
+                enum_args = {
+                    'domain': domain.domain_name,
+                    'enumName': '%s%s' % (ucfirst(event.event_name), ucfirst(param.parameter_name)),
+                    'enumMap': &quot;, &quot;.join(['%s: &quot;%s&quot;' % (Generator.stylized_name_for_enum_value(enum_value), enum_value) for enum_value in param.type.enum_values()])
+                }
+                lines.append('InspectorBackend.registerEnum(&quot;%(domain)s.%(enumName)s&quot;, {%(enumMap)s});' % enum_args)
+
</ins><span class="cx">             event_args = {
</span><span class="cx">                 'domain': domain.domain_name,
</span><span class="cx">                 'eventName': event.event_name,
</span><span class="lines">@@ -97,7 +108,6 @@
</span><span class="cx">             lines.append('InspectorBackend.registerEvent(&quot;%(domain)s.%(eventName)s&quot;, [%(params)s]);' % event_args)
</span><span class="cx"> 
</span><span class="cx">         for command in domain.commands:
</span><del>-
</del><span class="cx">             def generate_parameter_object(parameter):
</span><span class="cx">                 optional_string = &quot;true&quot; if parameter.is_optional else &quot;false&quot;
</span><span class="cx">                 pairs = []
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectorscriptstestsexpectedenumvaluesjsonresult"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/scripts/tests/expected/enum-values.json-result (175587 => 175588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/scripts/tests/expected/enum-values.json-result        2014-11-05 00:29:21 UTC (rev 175587)
+++ trunk/Source/JavaScriptCore/inspector/scripts/tests/expected/enum-values.json-result        2014-11-05 00:31:37 UTC (rev 175588)
</span><span class="lines">@@ -101,6 +101,7 @@
</span><span class="cx"> 
</span><span class="cx"> // EventDomain.
</span><span class="cx"> InspectorBackend.registerEventDomainDispatcher = InspectorBackend.registerDomainDispatcher.bind(InspectorBackend, &quot;EventDomain&quot;);
</span><ins>+InspectorBackend.registerEnum(&quot;EventDomain.EventWithEnumParameterParameter&quot;, {Shared: &quot;shared&quot;, Black: &quot;black&quot;, White: &quot;white&quot;});
</ins><span class="cx"> InspectorBackend.registerEvent(&quot;EventDomain.eventWithEnumParameter&quot;, [&quot;parameter&quot;]);
</span><span class="cx"> InspectorBackend.activateDomain(&quot;EventDomain&quot;);
</span><span class="cx"> ### End File: InspectorBackendCommands.js
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (175587 => 175588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-11-05 00:29:21 UTC (rev 175587)
+++ trunk/Source/WebCore/ChangeLog        2014-11-05 00:31:37 UTC (rev 175588)
</span><span class="lines">@@ -1,3 +1,14 @@
</span><ins>+2014-11-04  Joseph Pecoraro  &lt;pecoraro@apple.com&gt;
+
+        Web Inspector: Pause on exceptions should show the actual exception
+        https://bugs.webkit.org/show_bug.cgi?id=63096
+
+        Reviewed by Timothy Hatcher.
+
+        * inspector/InspectorInstrumentation.cpp:
+        (WebCore::InspectorInstrumentation::addMessageToConsoleImpl):
+        Pass assertion message on.
+
</ins><span class="cx"> 2014-11-04  Reza Abbasian  &lt;rabbasian@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [iOS] Fix incorrect interface orientation that can be caused by fullscreen video dismissal.
</span></span></pre></div>
<a id="trunkSourceWebCoreinspectorInspectorInstrumentationcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/inspector/InspectorInstrumentation.cpp (175587 => 175588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/inspector/InspectorInstrumentation.cpp        2014-11-05 00:29:21 UTC (rev 175587)
+++ trunk/Source/WebCore/inspector/InspectorInstrumentation.cpp        2014-11-05 00:31:37 UTC (rev 175588)
</span><span class="lines">@@ -888,7 +888,7 @@
</span><span class="cx">     // FIXME: This should just pass the message on to the debugger agent. JavaScriptCore InspectorDebuggerAgent should know Console MessageTypes.
</span><span class="cx">     if (InspectorDebuggerAgent* debuggerAgent = instrumentingAgents-&gt;inspectorDebuggerAgent()) {
</span><span class="cx">         if (isConsoleAssertMessage(source, type))
</span><del>-            debuggerAgent-&gt;handleConsoleAssert();
</del><ins>+            debuggerAgent-&gt;handleConsoleAssert(message);
</ins><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -899,7 +899,7 @@
</span><span class="cx">     // FIXME: This should just pass the message on to the debugger agent. JavaScriptCore InspectorDebuggerAgent should know Console MessageTypes.
</span><span class="cx">     if (InspectorDebuggerAgent* debuggerAgent = instrumentingAgents-&gt;inspectorDebuggerAgent()) {
</span><span class="cx">         if (isConsoleAssertMessage(source, type))
</span><del>-            debuggerAgent-&gt;handleConsoleAssert();
</del><ins>+            debuggerAgent-&gt;handleConsoleAssert(message);
</ins><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -907,6 +907,11 @@
</span><span class="cx"> {
</span><span class="cx">     if (WebConsoleAgent* consoleAgent = instrumentingAgents-&gt;webConsoleAgent())
</span><span class="cx">         consoleAgent-&gt;addMessageToConsole(source, type, level, message, scriptID, lineNumber, columnNumber, state, requestIdentifier);
</span><ins>+    // FIXME: This should just pass the message on to the debugger agent. JavaScriptCore InspectorDebuggerAgent should know Console MessageTypes.
+    if (InspectorDebuggerAgent* debuggerAgent = instrumentingAgents-&gt;inspectorDebuggerAgent()) {
+        if (isConsoleAssertMessage(source, type))
+            debuggerAgent-&gt;handleConsoleAssert(message);
+    }
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void InspectorInstrumentation::consoleCountImpl(InstrumentingAgents* instrumentingAgents, JSC::ExecState* state, PassRefPtr&lt;ScriptArguments&gt; arguments)
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/ChangeLog (175587 => 175588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/ChangeLog        2014-11-05 00:29:21 UTC (rev 175587)
+++ trunk/Source/WebInspectorUI/ChangeLog        2014-11-05 00:31:37 UTC (rev 175588)
</span><span class="lines">@@ -1,3 +1,63 @@
</span><ins>+2014-11-04  Joseph Pecoraro  &lt;pecoraro@apple.com&gt;
+
+        Web Inspector: Pause on exceptions should show the actual exception
+        https://bugs.webkit.org/show_bug.cgi?id=63096
+
+        Reviewed by Timothy Hatcher.
+
+        * Localizations/en.lproj/localizedStrings.js:
+        * UserInterface/Main.html:
+        New strings / files.
+
+        * UserInterface/Controllers/DebuggerManager.js:
+        (WebInspector.DebuggerManager.prototype.get pauseReason):
+        (WebInspector.DebuggerManager.prototype.get pauseData):
+        (WebInspector.DebuggerManager.prototype.reset):
+        (WebInspector.DebuggerManager.prototype.debuggerDidPause):
+        (WebInspector.DebuggerManager.prototype._pauseReasonFromPayload):
+        Maintain the current pause reason and auxiliary data in the manager.
+
+        * UserInterface/Protocol/DebuggerObserver.js:
+        (WebInspector.DebuggerObserver.prototype.paused):
+        Pass previously unused event parameters on to the manager.
+
+        * UserInterface/Views/ConsoleMessageImpl.js:
+        (WebInspector.ConsoleMessageImpl):
+        Style error objects in the console like Objects. The new description
+        string provides a richer message if you console.log(exception).
+
+        * UserInterface/Views/DebuggerSidebarPanel.js:
+        (WebInspector.DebuggerSidebarPanel):
+        (WebInspector.DebuggerSidebarPanel.prototype._debuggerDidPause):
+        (WebInspector.DebuggerSidebarPanel.prototype._debuggerDidResume):
+        (WebInspector.DebuggerSidebarPanel.prototype._updatePauseReason):
+        Update the UI when we pause / resume to show / hide a pause reason section.
+
+        * UserInterface/Views/DetailsSectionRow.js:
+        (WebInspector.DetailsSectionRow.prototype.set emptyMessage):
+        Fix a latent bug that would have thrown an exception if the setter was ever used.
+
+        * UserInterface/Views/DetailsSectionTextRow.js: Added.
+        (WebInspector.DetailsSectionTextRow):
+        (WebInspector.DetailsSectionTextRow.prototype.get text):
+        (WebInspector.DetailsSectionTextRow.prototype.set text):
+        * UserInterface/Views/DetailsSection.css:
+        (.details-section &gt; .content &gt; .group &gt; .row.simple.data &gt; .value):
+        (.details-section &gt; .content &gt; .group &gt; .row.text):
+        Simple class for a section of centered text. This is modelled after
+        the empty message text style in other sections.
+
+        * UserInterface/Views/LogContentView.css:
+        (.console-formatted-object, .console-formatted-node, .console-formatted-error):
+        (.console-formatted-object .section, .console-formatted-node .section, .console-formatted-error .section):
+        (.console-formatted-object .properties, .console-formatted-node .properties, .console-formatted-error .properties):
+        Style &quot;error&quot; objects like regular objects. We may wish to treat differently later.
+
+        * UserInterface/Protocol/Legacy/6.0/InspectorBackendCommands.js:
+        * UserInterface/Protocol/Legacy/7.0/InspectorBackendCommands.js:
+        * UserInterface/Protocol/Legacy/8.0/InspectorBackendCommands.js:
+        Regenerate legacy backend commands to get the new enum.
+
</ins><span class="cx"> 2014-11-04  Andrei Bucur  &lt;abucur@adobe.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Building WebInspectorUI should not run the clang static analyzer by default
</span></span></pre></div>
<a id="trunkSourceWebInspectorUILocalizationsenlprojlocalizedStringsjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js (175587 => 175588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js        2014-11-05 00:29:21 UTC (rev 175587)
+++ trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js        2014-11-05 00:31:37 UTC (rev 175588)
</span><span class="lines">@@ -58,6 +58,7 @@
</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><ins>+localizedStrings[&quot;Assertion&quot;] = &quot;Assertion&quot;;
</ins><span class="cx"> localizedStrings[&quot;Assertion failed:&quot;] = &quot;Assertion failed:&quot;;
</span><span class="cx"> localizedStrings[&quot;Assertive&quot;] = &quot;Assertive&quot;;
</span><span class="cx"> localizedStrings[&quot;Attribute&quot;] = &quot;Attribute&quot;;
</span><span class="lines">@@ -108,6 +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><ins>+localizedStrings[&quot;Content Security Policy Violation&quot;] = &quot;Content Security Policy Violation&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">@@ -190,6 +192,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><ins>+localizedStrings[&quot;Exception&quot;] = &quot;Exception&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></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceControllersDebuggerManagerjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Controllers/DebuggerManager.js (175587 => 175588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Controllers/DebuggerManager.js        2014-11-05 00:29:21 UTC (rev 175587)
+++ trunk/Source/WebInspectorUI/UserInterface/Controllers/DebuggerManager.js        2014-11-05 00:31:37 UTC (rev 175588)
</span><span class="lines">@@ -55,6 +55,10 @@
</span><span class="cx"> 
</span><span class="cx">     this._nextBreakpointActionIdentifier = 1;
</span><span class="cx"> 
</span><ins>+    this._paused = false;
+    this._pauseReason = null;
+    this._pauseData = null;
+
</ins><span class="cx">     this._scriptIdMap = {};
</span><span class="cx">     this._scriptURLMap = {};
</span><span class="cx"> 
</span><span class="lines">@@ -91,6 +95,13 @@
</span><span class="cx">     BreakpointsEnabledDidChange: &quot;debugger-manager-breakpoints-enabled-did-change&quot;
</span><span class="cx"> };
</span><span class="cx"> 
</span><ins>+WebInspector.DebuggerManager.PauseReason = {
+    Exception: &quot;exception&quot;,
+    Assertion: &quot;assertion&quot;,
+    CSPViolation: &quot;CSP-violation&quot;,
+    Other: &quot;other&quot;,
+}
+
</ins><span class="cx"> WebInspector.DebuggerManager.prototype = {
</span><span class="cx">     constructor: WebInspector.DebuggerManager,
</span><span class="cx"> 
</span><span class="lines">@@ -120,6 +131,16 @@
</span><span class="cx">         return this._paused;
</span><span class="cx">     },
</span><span class="cx"> 
</span><ins>+    get pauseReason()
+    {
+        return this._pauseReason;
+    },
+
+    get pauseData()
+    {
+        return this._pauseData;
+    },
+
</ins><span class="cx">     get callFrames()
</span><span class="cx">     {
</span><span class="cx">         return this._callFrames;
</span><span class="lines">@@ -404,6 +425,9 @@
</span><span class="cx">         WebInspector.Script.resetUniqueDisplayNameNumbers();
</span><span class="cx"> 
</span><span class="cx">         this._paused = false;
</span><ins>+        this._pauseReason = null;
+        this._pauseData = null;
+
</ins><span class="cx">         this._scriptIdMap = {};
</span><span class="cx">         this._scriptURLMap = {};
</span><span class="cx"> 
</span><span class="lines">@@ -426,7 +450,7 @@
</span><span class="cx">             this.dispatchEventToListeners(WebInspector.DebuggerManager.Event.Resumed);
</span><span class="cx">     },
</span><span class="cx"> 
</span><del>-    debuggerDidPause: function(callFramesPayload)
</del><ins>+    debuggerDidPause: function(callFramesPayload, reason, data)
</ins><span class="cx">     {
</span><span class="cx">         // Called from WebInspector.DebuggerObserver.
</span><span class="cx"> 
</span><span class="lines">@@ -440,6 +464,9 @@
</span><span class="cx">         this._paused = true;
</span><span class="cx">         this._callFrames = [];
</span><span class="cx"> 
</span><ins>+        this._pauseReason = this._pauseReasonFromPayload(reason);
+        this._pauseData = data || null;
+
</ins><span class="cx">         for (var i = 0; i &lt; callFramesPayload.length; ++i) {
</span><span class="cx">             var callFramePayload = callFramesPayload[i];
</span><span class="cx">             var sourceCodeLocation = this._sourceCodeLocationFromPayload(callFramePayload.location);
</span><span class="lines">@@ -583,6 +610,21 @@
</span><span class="cx">         return new WebInspector.ScopeChainNode(type, object);
</span><span class="cx">     },
</span><span class="cx"> 
</span><ins>+    _pauseReasonFromPayload: function(payload)
+    {
+        // FIXME: Handle other backend pause seasons.
+        switch (payload) {
+        case DebuggerAgent.PausedReason.Exception:
+            return WebInspector.DebuggerManager.PauseReason.Exception;
+        case DebuggerAgent.PausedReason.Assert:
+            return WebInspector.DebuggerManager.PauseReason.Assertion;
+        case DebuggerAgent.PausedReason.CSPViolation:
+            return WebInspector.DebuggerManager.PauseReason.CSPViolation;
+        default:
+            return WebInspector.DebuggerManager.PauseReason.Other;
+        }
+    },
+
</ins><span class="cx">     _debuggerBreakpointActionType: function(type)
</span><span class="cx">     {
</span><span class="cx">         switch (type) {
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceMainhtml"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Main.html (175587 => 175588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Main.html        2014-11-05 00:29:21 UTC (rev 175587)
+++ trunk/Source/WebInspectorUI/UserInterface/Main.html        2014-11-05 00:31:37 UTC (rev 175588)
</span><span class="lines">@@ -364,6 +364,7 @@
</span><span class="cx">     &lt;script src=&quot;Views/DetailsSectionGroup.js&quot;&gt;&lt;/script&gt;
</span><span class="cx">     &lt;script src=&quot;Views/DetailsSectionPropertiesRow.js&quot;&gt;&lt;/script&gt;
</span><span class="cx">     &lt;script src=&quot;Views/DetailsSectionSimpleRow.js&quot;&gt;&lt;/script&gt;
</span><ins>+    &lt;script src=&quot;Views/DetailsSectionTextRow.js&quot;&gt;&lt;/script&gt;
</ins><span class="cx">     &lt;script src=&quot;Views/DividerNavigationItem.js&quot;&gt;&lt;/script&gt;
</span><span class="cx">     &lt;script src=&quot;Views/EditingSupport.js&quot;&gt;&lt;/script&gt;
</span><span class="cx">     &lt;script src=&quot;Views/EventListenerSection.js&quot;&gt;&lt;/script&gt;
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceProtocolDebuggerObserverjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Protocol/DebuggerObserver.js (175587 => 175588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Protocol/DebuggerObserver.js        2014-11-05 00:29:21 UTC (rev 175587)
+++ trunk/Source/WebInspectorUI/UserInterface/Protocol/DebuggerObserver.js        2014-11-05 00:31:37 UTC (rev 175588)
</span><span class="lines">@@ -55,7 +55,7 @@
</span><span class="cx"> 
</span><span class="cx">     paused: function(callFrames, reason, data)
</span><span class="cx">     {
</span><del>-        WebInspector.debuggerManager.debuggerDidPause(callFrames);
</del><ins>+        WebInspector.debuggerManager.debuggerDidPause(callFrames, reason, data);
</ins><span class="cx">     },
</span><span class="cx"> 
</span><span class="cx">     resumed: function()
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceProtocolLegacy60InspectorBackendCommandsjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Protocol/Legacy/6.0/InspectorBackendCommands.js (175587 => 175588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Protocol/Legacy/6.0/InspectorBackendCommands.js        2014-11-05 00:29:21 UTC (rev 175587)
+++ trunk/Source/WebInspectorUI/UserInterface/Protocol/Legacy/6.0/InspectorBackendCommands.js        2014-11-05 00:31:37 UTC (rev 175588)
</span><span class="lines">@@ -233,6 +233,7 @@
</span><span class="cx"> InspectorBackend.registerEvent(&quot;Debugger.scriptParsed&quot;, [&quot;scriptId&quot;, &quot;url&quot;, &quot;startLine&quot;, &quot;startColumn&quot;, &quot;endLine&quot;, &quot;endColumn&quot;, &quot;isContentScript&quot;, &quot;sourceMapURL&quot;]);
</span><span class="cx"> InspectorBackend.registerEvent(&quot;Debugger.scriptFailedToParse&quot;, [&quot;url&quot;, &quot;scriptSource&quot;, &quot;startLine&quot;, &quot;errorLine&quot;, &quot;errorMessage&quot;]);
</span><span class="cx"> InspectorBackend.registerEvent(&quot;Debugger.breakpointResolved&quot;, [&quot;breakpointId&quot;, &quot;location&quot;]);
</span><ins>+InspectorBackend.registerEnum(&quot;Debugger.PausedReason&quot;, {XHR: &quot;XHR&quot;, DOM: &quot;DOM&quot;, EventListener: &quot;EventListener&quot;, Exception: &quot;exception&quot;, Other: &quot;other&quot;});
</ins><span class="cx"> InspectorBackend.registerEvent(&quot;Debugger.paused&quot;, [&quot;callFrames&quot;, &quot;reason&quot;, &quot;data&quot;]);
</span><span class="cx"> InspectorBackend.registerEvent(&quot;Debugger.resumed&quot;, []);
</span><span class="cx"> InspectorBackend.registerCommand(&quot;Debugger.supportsNativeBreakpoints&quot;, [], [&quot;result&quot;]);
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceProtocolLegacy70InspectorBackendCommandsjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Protocol/Legacy/7.0/InspectorBackendCommands.js (175587 => 175588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Protocol/Legacy/7.0/InspectorBackendCommands.js        2014-11-05 00:29:21 UTC (rev 175587)
+++ trunk/Source/WebInspectorUI/UserInterface/Protocol/Legacy/7.0/InspectorBackendCommands.js        2014-11-05 00:31:37 UTC (rev 175588)
</span><span class="lines">@@ -264,6 +264,7 @@
</span><span class="cx"> InspectorBackend.registerEvent(&quot;Debugger.scriptParsed&quot;, [&quot;scriptId&quot;, &quot;url&quot;, &quot;startLine&quot;, &quot;startColumn&quot;, &quot;endLine&quot;, &quot;endColumn&quot;, &quot;isContentScript&quot;, &quot;sourceMapURL&quot;, &quot;hasSourceURL&quot;]);
</span><span class="cx"> InspectorBackend.registerEvent(&quot;Debugger.scriptFailedToParse&quot;, [&quot;url&quot;, &quot;scriptSource&quot;, &quot;startLine&quot;, &quot;errorLine&quot;, &quot;errorMessage&quot;]);
</span><span class="cx"> InspectorBackend.registerEvent(&quot;Debugger.breakpointResolved&quot;, [&quot;breakpointId&quot;, &quot;location&quot;]);
</span><ins>+InspectorBackend.registerEnum(&quot;Debugger.PausedReason&quot;, {XHR: &quot;XHR&quot;, DOM: &quot;DOM&quot;, EventListener: &quot;EventListener&quot;, Exception: &quot;exception&quot;, Assert: &quot;assert&quot;, CSPViolation: &quot;CSPViolation&quot;, Other: &quot;other&quot;});
</ins><span class="cx"> InspectorBackend.registerEvent(&quot;Debugger.paused&quot;, [&quot;callFrames&quot;, &quot;reason&quot;, &quot;data&quot;]);
</span><span class="cx"> InspectorBackend.registerEvent(&quot;Debugger.resumed&quot;, []);
</span><span class="cx"> InspectorBackend.registerCommand(&quot;Debugger.enable&quot;, [], []);
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceProtocolLegacy80InspectorBackendCommandsjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Protocol/Legacy/8.0/InspectorBackendCommands.js (175587 => 175588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Protocol/Legacy/8.0/InspectorBackendCommands.js        2014-11-05 00:29:21 UTC (rev 175587)
+++ trunk/Source/WebInspectorUI/UserInterface/Protocol/Legacy/8.0/InspectorBackendCommands.js        2014-11-05 00:31:37 UTC (rev 175588)
</span><span class="lines">@@ -51,6 +51,7 @@
</span><span class="cx"> InspectorBackend.registerEvent(&quot;Debugger.scriptParsed&quot;, [&quot;scriptId&quot;, &quot;url&quot;, &quot;startLine&quot;, &quot;startColumn&quot;, &quot;endLine&quot;, &quot;endColumn&quot;, &quot;isContentScript&quot;, &quot;sourceMapURL&quot;, &quot;hasSourceURL&quot;]);
</span><span class="cx"> InspectorBackend.registerEvent(&quot;Debugger.scriptFailedToParse&quot;, [&quot;url&quot;, &quot;scriptSource&quot;, &quot;startLine&quot;, &quot;errorLine&quot;, &quot;errorMessage&quot;]);
</span><span class="cx"> InspectorBackend.registerEvent(&quot;Debugger.breakpointResolved&quot;, [&quot;breakpointId&quot;, &quot;location&quot;]);
</span><ins>+InspectorBackend.registerEnum(&quot;Debugger.PausedReason&quot;, {XHR: &quot;XHR&quot;, DOM: &quot;DOM&quot;, EventListener: &quot;EventListener&quot;, Exception: &quot;exception&quot;, Assert: &quot;assert&quot;, CSPViolation: &quot;CSPViolation&quot;, Other: &quot;other&quot;});
</ins><span class="cx"> InspectorBackend.registerEvent(&quot;Debugger.paused&quot;, [&quot;callFrames&quot;, &quot;reason&quot;, &quot;data&quot;]);
</span><span class="cx"> InspectorBackend.registerEvent(&quot;Debugger.resumed&quot;, []);
</span><span class="cx"> InspectorBackend.registerEvent(&quot;Debugger.didSampleProbe&quot;, [&quot;sample&quot;]);
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsConsoleMessageImpljs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/ConsoleMessageImpl.js (175587 => 175588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/ConsoleMessageImpl.js        2014-11-05 00:29:21 UTC (rev 175587)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/ConsoleMessageImpl.js        2014-11-05 00:31:37 UTC (rev 175588)
</span><span class="lines">@@ -41,6 +41,7 @@
</span><span class="cx"> 
</span><span class="cx">     this._customFormatters = {
</span><span class="cx">         &quot;object&quot;: this._formatParameterAsObject,
</span><ins>+        &quot;error&quot;: this._formatParameterAsObject,
</ins><span class="cx">         &quot;array&quot;:  this._formatParameterAsArray,
</span><span class="cx">         &quot;node&quot;:   this._formatParameterAsNode,
</span><span class="cx">         &quot;string&quot;: this._formatParameterAsString
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsDebuggerSidebarPaneljs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/DebuggerSidebarPanel.js (175587 => 175588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/DebuggerSidebarPanel.js        2014-11-05 00:29:21 UTC (rev 175587)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/DebuggerSidebarPanel.js        2014-11-05 00:31:37 UTC (rev 175588)
</span><span class="lines">@@ -132,6 +132,10 @@
</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><ins>+    this._pauseReasonRow = new WebInspector.DetailsSectionTextRow;
+    this._pauseReasonGroup = new WebInspector.DetailsSectionGroup([this._pauseReasonRow]);
+    this._pauseReasonSection = new WebInspector.DetailsSection(&quot;paused-reason&quot;, null, [this._pauseReasonGroup]);
+
</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="lines">@@ -229,6 +233,8 @@
</span><span class="cx">     _debuggerDidPause: function(event)
</span><span class="cx">     {
</span><span class="cx">         this.contentElement.insertBefore(this._callStackSection.element, this.contentElement.firstChild);
</span><ins>+        if (this._updatePauseReason())
+            this.contentElement.insertBefore(this._pauseReasonSection.element, this.contentElement.firstChild);
</ins><span class="cx"> 
</span><span class="cx">         this._debuggerPauseResumeButtonItem.enabled = true;
</span><span class="cx">         this._debuggerPauseResumeButtonItem.toggled = true;
</span><span class="lines">@@ -239,6 +245,7 @@
</span><span class="cx">     _debuggerDidResume: function(event)
</span><span class="cx">     {
</span><span class="cx">         this._callStackSection.element.remove();
</span><ins>+        this._pauseReasonSection.element.remove();
</ins><span class="cx"> 
</span><span class="cx">         this._debuggerPauseResumeButtonItem.enabled = true;
</span><span class="cx">         this._debuggerPauseResumeButtonItem.toggled = false;
</span><span class="lines">@@ -584,6 +591,50 @@
</span><span class="cx">             return comparisonResult;
</span><span class="cx"> 
</span><span class="cx">         return aLocation.displayColumnNumber - bLocation.displayColumnNumber;
</span><ins>+    },
+
+    _updatePauseReason: function()
+    {
+        var pauseData = WebInspector.debuggerManager.pauseData;
+        
+        switch (WebInspector.debuggerManager.pauseReason) {
+        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;
+
+        case WebInspector.DebuggerManager.PauseReason.Assertion:
+            console.assert(pauseData, &quot;Expected data with an assertion, but found none.&quot;);
+            if (pauseData &amp;&amp; pauseData.message) {
+                // FIXME: We should include the assertion condition string.
+                this._pauseReasonRow.text = pauseData.message;
+                this._pauseReasonSection.title = WebInspector.UIString(&quot;Assertion&quot;);
+                return true;
+            }
+            break;
+
+        case WebInspector.DebuggerManager.PauseReason.CSPViolation:
+            console.assert(pauseData, &quot;Expected data with a CSP Violation, but found none.&quot;);
+            if (pauseData) {
+                // COMPATIBILITY (iOS 8): 'directive' was 'directiveText'.
+                this._pauseReasonRow.text = pauseData.directive || pauseData.directiveText;
+                this._pauseReasonSection.title = WebInspector.UIString(&quot;Content Security Policy Violation&quot;);
+                return true;
+            }
+            break;
+
+        case WebInspector.DebuggerManager.PauseReason.Other:
+            console.error(&quot;Paused for unknown reason. We should always have a reason.&quot;);
+            break;
+        }
+
+        return false;
</ins><span class="cx">     }
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsDetailsSectioncss"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/DetailsSection.css (175587 => 175588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/DetailsSection.css        2014-11-05 00:29:21 UTC (rev 175587)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/DetailsSection.css        2014-11-05 00:31:37 UTC (rev 175588)
</span><span class="lines">@@ -290,12 +290,17 @@
</span><span class="cx">     word-break: break-all;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-.details-section &gt; .content &gt; .group &gt; .row.empty {
-    padding: 6px;
</del><ins>+.details-section &gt; .content &gt; .group &gt; .row.empty,
+.details-section &gt; .content &gt; .group &gt; .row.text {
+    padding: 0 6px 7px 6px;
</ins><span class="cx">     text-align: center;
</span><span class="cx">     color: gray;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+.details-section &gt; .content &gt; .group &gt; .row.text {
+    -webkit-user-select: text;
+}
+
</ins><span class="cx"> .details-section &gt; .content &gt; .group &gt; .row.properties:not(.empty) {
</span><span class="cx">     padding: 4px 6px;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsDetailsSectionRowjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/DetailsSectionRow.js (175587 => 175588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/DetailsSectionRow.js        2014-11-05 00:29:21 UTC (rev 175587)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/DetailsSectionRow.js        2014-11-05 00:31:37 UTC (rev 175588)
</span><span class="lines">@@ -54,7 +54,7 @@
</span><span class="cx">     {
</span><span class="cx">         this._emptyMessage = emptyMessage || &quot;&quot;;
</span><span class="cx"> 
</span><del>-        if (!this.childNodes.length)
</del><ins>+        if (!this._element.childNodes.length)
</ins><span class="cx">             this.showEmptyMessage();
</span><span class="cx">     },
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsDetailsSectionTextRowjs"></a>
<div class="addfile"><h4>Added: trunk/Source/WebInspectorUI/UserInterface/Views/DetailsSectionTextRow.js (0 => 175588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/DetailsSectionTextRow.js                                (rev 0)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/DetailsSectionTextRow.js        2014-11-05 00:31:37 UTC (rev 175588)
</span><span class="lines">@@ -0,0 +1,52 @@
</span><ins>+/*
+ * Copyright (C) 2014 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+WebInspector.DetailsSectionTextRow = function(text)
+{
+    WebInspector.DetailsSectionRow.call(this);
+
+    this.element.classList.add(WebInspector.DetailsSectionTextRow.StyleClassName);
+
+    this.element.textContent = text;
+};
+
+WebInspector.DetailsSectionTextRow.StyleClassName = &quot;text&quot;;
+
+WebInspector.DetailsSectionTextRow.prototype = {
+    constructor: WebInspector.DetailsSectionTextRow,
+    __proto__: WebInspector.DetailsSectionRow.prototype,
+
+    // Public
+
+    get text()
+    {
+        return this.element.textContent;
+    },
+
+    set text(text)
+    {
+        this.element.textContent = text;
+    }
+};
</ins></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsLogContentViewcss"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/LogContentView.css (175587 => 175588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/LogContentView.css        2014-11-05 00:29:21 UTC (rev 175587)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/LogContentView.css        2014-11-05 00:31:37 UTC (rev 175588)
</span><span class="lines">@@ -246,18 +246,18 @@
</span><span class="cx">     display: none;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-.console-formatted-object, .console-formatted-node {
</del><ins>+.console-formatted-object, .console-formatted-node, .console-formatted-error {
</ins><span class="cx">     position: relative;
</span><span class="cx">     display: inline-block;
</span><span class="cx">     vertical-align: top;
</span><span class="cx">     color: black;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-.console-formatted-object .section, .console-formatted-node .section {
</del><ins>+.console-formatted-object .section, .console-formatted-node .section, .console-formatted-error .section {
</ins><span class="cx">     position: static;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-.console-formatted-object .properties, .console-formatted-node .properties {
</del><ins>+.console-formatted-object .properties, .console-formatted-node .properties, .console-formatted-error .properties {
</ins><span class="cx">     padding-left: 0 !important;
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsScopeChainDetailsSidebarPaneljs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/ScopeChainDetailsSidebarPanel.js (175587 => 175588)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/ScopeChainDetailsSidebarPanel.js        2014-11-05 00:29:21 UTC (rev 175587)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/ScopeChainDetailsSidebarPanel.js        2014-11-05 00:31:37 UTC (rev 175588)
</span><span class="lines">@@ -23,7 +23,8 @@
</span><span class="cx">  * THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx">  */
</span><span class="cx"> 
</span><del>-WebInspector.ScopeChainDetailsSidebarPanel = function() {
</del><ins>+WebInspector.ScopeChainDetailsSidebarPanel = function()
+{
</ins><span class="cx">     WebInspector.DetailsSidebarPanel.call(this, &quot;scope-chain&quot;, WebInspector.UIString(&quot;Scope Chain&quot;), WebInspector.UIString(&quot;Scope Chain&quot;), &quot;Images/NavigationItemVariable.svg&quot;, &quot;5&quot;);
</span><span class="cx"> 
</span><span class="cx">     this._callFrame = null;
</span></span></pre>
</div>
</div>

</body>
</html>