<!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>[208010] 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/208010">208010</a></dd>
<dt>Author</dt> <dd>joepeck@webkit.org</dd>
<dt>Date</dt> <dd>2016-10-27 15:19:33 -0700 (Thu, 27 Oct 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Web Inspector: Include ConsoleAgent in Workers - real console.log support
https://bugs.webkit.org/show_bug.cgi?id=163844
&lt;rdar://problem/28903328&gt;

Reviewed by Brian Burg.

LayoutTests/imported/w3c:

* web-platform-tests/fetch/api/policies/csp-blocked-worker-expected.txt:
* web-platform-tests/streams/readable-streams/garbage-collection.https-expected.txt:

Source/JavaScriptCore:

* inspector/protocol/Worker.json:

Source/WebCore:

Test: inspector/worker/console-basic.html

This introduces a real ConsoleAgent in the Worker InspectorController.
We no longer need to pass partial ConsoleMessage objects to be logged
through the Page, we can just send the full ConsoleMessages to a
frontend once it connects to the Worker.

In order to guarantee that the Worker InspectorController is properly
all Workers will start paused if there is an Inspector attached to
the Page. The frontend _must_ call the new Worker.initialized method
after sending its setup commands to the Worker. This ensures we get
handle all initialization commands (like Agent.enable(), and
setting state like breakpoints) before any script executes in the
Worker. This mirrors the Inspector.initialized method that does the
same thing for JSContext auto-attach of the Main target.

In the backend, the wait until initialized state is just running
the WorkerThread's RunLoop in a special debugger mode to only process
debugger commands until we are ready. This will effectively be
the same as pausing so it is generalized into WorkerThread.

* CMakeLists.txt:
* WebCore.xcodeproj/project.pbxproj:
* inspector/InspectorAllInOne.cpp:
New files.

* inspector/InspectorWorkerAgent.cpp:
(WebCore::InspectorWorkerAgent::initialized):
(WebCore::InspectorWorkerAgent::shouldWaitForDebuggerOnStart):
* inspector/InspectorWorkerAgent.h:
Add the new initialized method. This just uses the proxy to send
a message to be handled on the Worker Thread and unpause.

* inspector/WorkerConsoleAgent.cpp:
(WebCore::WorkerConsoleAgent::WorkerConsoleAgent):
(WebCore::WorkerConsoleAgent::addInspectedNode):
* inspector/WorkerConsoleAgent.h:
* inspector/WorkerInspectorController.cpp:
(WebCore::WorkerInspectorController::WorkerInspectorController):
Add a ConsoleAgent to WorkerInspectorController.

* workers/WorkerInspectorProxy.h:
* workers/WorkerInspectorProxy.cpp:
(WebCore::WorkerInspectorProxy::workerStartMode):
(WebCore::WorkerInspectorProxy::resumeWorkerIfPaused):
(WebCore::WorkerInspectorProxy::connectToWorkerInspector):
(WebCore::WorkerInspectorProxy::disconnectFromWorkerInspector):
(WebCore::WorkerInspectorProxy::sendMessageToWorkerInspector):
Use the debugger mode when sending messages to the WorkerThread.

* workers/Worker.cpp:
(WebCore::Worker::notifyFinished):
* workers/WorkerMessagingProxy.cpp:
(WebCore::WorkerMessagingProxy::startWorkerGlobalScope):
(WebCore::WorkerMessagingProxy::postConsoleMessageToWorkerObject): Deleted.
* workers/WorkerMessagingProxy.h:
* workers/WorkerReportingProxy.h:
* workers/WorkerGlobalScope.cpp:
(WebCore::WorkerGlobalScope::addConsoleMessage):
(WebCore::WorkerGlobalScope::addMessage):
* workers/WorkerGlobalScope.h:
* workers/WorkerGlobalScopeProxy.h:
Remove legacy partial console support.

* workers/WorkerRunLoop.h:
* workers/WorkerRunLoop.cpp:
(WebCore::WorkerRunLoop::debuggerMode):
* workers/WorkerThread.h:
* workers/WorkerThread.cpp:
(WebCore::WorkerThread::workerThread):
(WebCore::WorkerThread::startRunningDebuggerTasks):
(WebCore::WorkerThread::stopRunningDebuggerTasks):
General code for spinning the WorkerThread and only processing debugger
(Inspector) commands. Use this when starting the thread to ensure the
frontend initializes the Worker's Agents before any JavaScript executes.

* page/PageConsoleClient.cpp:
* workers/WorkerConsoleClient.cpp:
(WebCore::WorkerConsoleClient::count):
(WebCore::WorkerConsoleClient::time):
(WebCore::WorkerConsoleClient::timeEnd):
* inspector/InspectorConsoleInstrumentation.h: Removed.
* inspector/InspectorInstrumentation.cpp:
(WebCore::InspectorInstrumentation::startConsoleTimingImpl):
(WebCore::InspectorInstrumentation::stopConsoleTimingImpl):
(WebCore::InspectorInstrumentation::shouldWaitForDebuggerOnStartImpl):
* inspector/InspectorInstrumentation.h:
(WebCore::InspectorInstrumentation::shouldWaitForDebuggerOnStart):
(WebCore::InspectorInstrumentation::addMessageToConsole):
(WebCore::InspectorInstrumentation::consoleCount):
(WebCore::InspectorInstrumentation::takeHeapSnapshot):
(WebCore::InspectorInstrumentation::startConsoleTiming):
(WebCore::InspectorInstrumentation::stopConsoleTiming):
(WebCore::InspectorInstrumentation::consoleTimeStamp):
(WebCore::InspectorInstrumentation::startProfiling):
(WebCore::InspectorInstrumentation::stopProfiling):
Implement a few more basic console APIs that required ConsoleAgent.

Source/WebInspectorUI:

* UserInterface/Protocol/Target.js:
(WebInspector.Target.prototype.get ConsoleAgent):
(WebInspector.Target.prototype._initializeNonMainTarget):
* UserInterface/Protocol/Connection.js:
(InspectorBackend.WorkerConnection):
Add ConsoleAgent.

* UserInterface/Controllers/LogManager.js:
(WebInspector.LogManager.prototype.messageWasAdded):
(WebInspector.LogManager.prototype.requestClearMessages):
Handle ConsoleAgent calls with multiple targets.

* UserInterface/Protocol/ConsoleObserver.js:
(WebInspector.ConsoleObserver.prototype.messageAdded):
Dispatch with the target in case we create Model objects.

* UserInterface/Controllers/WorkerManager.js:
(WebInspector.WorkerManager.prototype.workerCreated):
The frontend must now call &quot;initialized&quot; on Workers after
sending our setup messages (enable, set breakpoints, etc).

* UserInterface/Protocol/RemoteObject.js:
(WebInspector.RemoteObject.prototype.get target):
Expose an accessor for tests.

* UserInterface/Protocol/LoggingProtocolTracer.js:
(WebInspector.LoggingProtocolTracer.prototype._processEntry):
Actually output the Exception, useful when debugging failures in tests.

LayoutTests:

* inspector/console/messageAdded-from-worker-expected.txt: Removed.
* inspector/console/messageAdded-from-worker.html: Removed.
* inspector/console/resources/worker-console-log.js: Removed.
Remove the old partial console in Worker test.

* inspector/worker/console-basic-expected.txt: Added.
* inspector/worker/console-basic.html: Added.
* inspector/worker/resources/worker-console.js: Added.
New console in Worker test.

* inspector/worker/worker-create-and-terminate.html:
The frontend must call initialize on Workers, otherwise they
are paused forever.

* http/tests/security/contentSecurityPolicy/worker-blob-inherits-csp-expected.txt:
* http/tests/security/contentSecurityPolicy/worker-blob-inherits-csp-importScripts-block-aborts-all-subsequent-imports-expected.txt:
* http/tests/security/contentSecurityPolicy/worker-connect-src-blocked-expected.txt:
* http/tests/security/contentSecurityPolicy/worker-csp-blocks-xhr-redirect-cross-origin-expected.txt:
* http/tests/security/contentSecurityPolicy/worker-importscripts-blocked-expected.txt:
* http/tests/security/contentSecurityPolicy/worker-multiple-csp-headers-expected.txt:
* http/tests/security/contentSecurityPolicy/worker-set-timeout-blocked-expected.txt:
* http/tests/websocket/tests/hybi/workers/close-expected.txt:
* http/tests/xmlhttprequest/workers/access-control-basic-get-fail-non-simple-expected.txt:
* security/contentSecurityPolicy/worker-inherits-blocks-xhr-expected.txt:
Rebaseline. We no longer send Worker console messages through the Page, and likewise
we don't send them to the WebKit client, so they will no longer appear in test output.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestshttptestssecuritycontentSecurityPolicyworkerblobinheritscspexpectedtxt">trunk/LayoutTests/http/tests/security/contentSecurityPolicy/worker-blob-inherits-csp-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestssecuritycontentSecurityPolicyworkerblobinheritscspimportScriptsblockabortsallsubsequentimportsexpectedtxt">trunk/LayoutTests/http/tests/security/contentSecurityPolicy/worker-blob-inherits-csp-importScripts-block-aborts-all-subsequent-imports-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestssecuritycontentSecurityPolicyworkerconnectsrcblockedexpectedtxt">trunk/LayoutTests/http/tests/security/contentSecurityPolicy/worker-connect-src-blocked-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestssecuritycontentSecurityPolicyworkercspblocksxhrredirectcrossoriginexpectedtxt">trunk/LayoutTests/http/tests/security/contentSecurityPolicy/worker-csp-blocks-xhr-redirect-cross-origin-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestssecuritycontentSecurityPolicyworkerimportscriptsblockedexpectedtxt">trunk/LayoutTests/http/tests/security/contentSecurityPolicy/worker-importscripts-blocked-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestssecuritycontentSecurityPolicyworkermultiplecspheadersexpectedtxt">trunk/LayoutTests/http/tests/security/contentSecurityPolicy/worker-multiple-csp-headers-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestssecuritycontentSecurityPolicyworkersettimeoutblockedexpectedtxt">trunk/LayoutTests/http/tests/security/contentSecurityPolicy/worker-set-timeout-blocked-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestswebsockettestshybiworkerscloseexpectedtxt">trunk/LayoutTests/http/tests/websocket/tests/hybi/workers/close-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsxmlhttprequestworkersaccesscontrolbasicgetfailnonsimpleexpectedtxt">trunk/LayoutTests/http/tests/xmlhttprequest/workers/access-control-basic-get-fail-non-simple-expected.txt</a></li>
<li><a href="#trunkLayoutTestsimportedw3cChangeLog">trunk/LayoutTests/imported/w3c/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestsfetchapipoliciescspblockedworkerexpectedtxt">trunk/LayoutTests/imported/w3c/web-platform-tests/fetch/api/policies/csp-blocked-worker-expected.txt</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestsstreamsreadablestreamsgarbagecollectionhttpsexpectedtxt">trunk/LayoutTests/imported/w3c/web-platform-tests/streams/readable-streams/garbage-collection.https-expected.txt</a></li>
<li><a href="#trunkLayoutTestsinspectorworkerworkercreateandterminatehtml">trunk/LayoutTests/inspector/worker/worker-create-and-terminate.html</a></li>
<li><a href="#trunkLayoutTestssecuritycontentSecurityPolicyworkerinheritsblocksxhrexpectedtxt">trunk/LayoutTests/security/contentSecurityPolicy/worker-inherits-blocks-xhr-expected.txt</a></li>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectorprotocolWorkerjson">trunk/Source/JavaScriptCore/inspector/protocol/Worker.json</a></li>
<li><a href="#trunkSourceWebCoreCMakeListstxt">trunk/Source/WebCore/CMakeLists.txt</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreWebCorexcodeprojprojectpbxproj">trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceWebCoreinspectorInspectorAllInOnecpp">trunk/Source/WebCore/inspector/InspectorAllInOne.cpp</a></li>
<li><a href="#trunkSourceWebCoreinspectorInspectorInstrumentationcpp">trunk/Source/WebCore/inspector/InspectorInstrumentation.cpp</a></li>
<li><a href="#trunkSourceWebCoreinspectorInspectorInstrumentationh">trunk/Source/WebCore/inspector/InspectorInstrumentation.h</a></li>
<li><a href="#trunkSourceWebCoreinspectorInspectorWorkerAgentcpp">trunk/Source/WebCore/inspector/InspectorWorkerAgent.cpp</a></li>
<li><a href="#trunkSourceWebCoreinspectorInspectorWorkerAgenth">trunk/Source/WebCore/inspector/InspectorWorkerAgent.h</a></li>
<li><a href="#trunkSourceWebCoreinspectorWorkerInspectorControllercpp">trunk/Source/WebCore/inspector/WorkerInspectorController.cpp</a></li>
<li><a href="#trunkSourceWebCorepagePageConsoleClientcpp">trunk/Source/WebCore/page/PageConsoleClient.cpp</a></li>
<li><a href="#trunkSourceWebCoreworkersWorkercpp">trunk/Source/WebCore/workers/Worker.cpp</a></li>
<li><a href="#trunkSourceWebCoreworkersWorkerConsoleClientcpp">trunk/Source/WebCore/workers/WorkerConsoleClient.cpp</a></li>
<li><a href="#trunkSourceWebCoreworkersWorkerGlobalScopecpp">trunk/Source/WebCore/workers/WorkerGlobalScope.cpp</a></li>
<li><a href="#trunkSourceWebCoreworkersWorkerGlobalScopeh">trunk/Source/WebCore/workers/WorkerGlobalScope.h</a></li>
<li><a href="#trunkSourceWebCoreworkersWorkerGlobalScopeProxyh">trunk/Source/WebCore/workers/WorkerGlobalScopeProxy.h</a></li>
<li><a href="#trunkSourceWebCoreworkersWorkerInspectorProxycpp">trunk/Source/WebCore/workers/WorkerInspectorProxy.cpp</a></li>
<li><a href="#trunkSourceWebCoreworkersWorkerInspectorProxyh">trunk/Source/WebCore/workers/WorkerInspectorProxy.h</a></li>
<li><a href="#trunkSourceWebCoreworkersWorkerMessagingProxycpp">trunk/Source/WebCore/workers/WorkerMessagingProxy.cpp</a></li>
<li><a href="#trunkSourceWebCoreworkersWorkerMessagingProxyh">trunk/Source/WebCore/workers/WorkerMessagingProxy.h</a></li>
<li><a href="#trunkSourceWebCoreworkersWorkerReportingProxyh">trunk/Source/WebCore/workers/WorkerReportingProxy.h</a></li>
<li><a href="#trunkSourceWebCoreworkersWorkerRunLoopcpp">trunk/Source/WebCore/workers/WorkerRunLoop.cpp</a></li>
<li><a href="#trunkSourceWebCoreworkersWorkerRunLooph">trunk/Source/WebCore/workers/WorkerRunLoop.h</a></li>
<li><a href="#trunkSourceWebCoreworkersWorkerThreadcpp">trunk/Source/WebCore/workers/WorkerThread.cpp</a></li>
<li><a href="#trunkSourceWebCoreworkersWorkerThreadh">trunk/Source/WebCore/workers/WorkerThread.h</a></li>
<li><a href="#trunkSourceWebInspectorUIChangeLog">trunk/Source/WebInspectorUI/ChangeLog</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceControllersJavaScriptLogViewControllerjs">trunk/Source/WebInspectorUI/UserInterface/Controllers/JavaScriptLogViewController.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceControllersLogManagerjs">trunk/Source/WebInspectorUI/UserInterface/Controllers/LogManager.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceControllersWorkerManagerjs">trunk/Source/WebInspectorUI/UserInterface/Controllers/WorkerManager.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceModelsConsoleCommandResultMessagejs">trunk/Source/WebInspectorUI/UserInterface/Models/ConsoleCommandResultMessage.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceModelsConsoleMessagejs">trunk/Source/WebInspectorUI/UserInterface/Models/ConsoleMessage.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceProtocolConnectionjs">trunk/Source/WebInspectorUI/UserInterface/Protocol/Connection.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceProtocolConsoleObserverjs">trunk/Source/WebInspectorUI/UserInterface/Protocol/ConsoleObserver.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceProtocolLoggingProtocolTracerjs">trunk/Source/WebInspectorUI/UserInterface/Protocol/LoggingProtocolTracer.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceProtocolRemoteObjectjs">trunk/Source/WebInspectorUI/UserInterface/Protocol/RemoteObject.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceProtocolTargetjs">trunk/Source/WebInspectorUI/UserInterface/Protocol/Target.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsConsoleMessageViewjs">trunk/Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsinspectorworkerconsolebasicexpectedtxt">trunk/LayoutTests/inspector/worker/console-basic-expected.txt</a></li>
<li><a href="#trunkLayoutTestsinspectorworkerconsolebasichtml">trunk/LayoutTests/inspector/worker/console-basic.html</a></li>
<li><a href="#trunkLayoutTestsinspectorworkerresourcesworkerconsolejs">trunk/LayoutTests/inspector/worker/resources/worker-console.js</a></li>
<li><a href="#trunkSourceWebCoreinspectorWorkerConsoleAgentcpp">trunk/Source/WebCore/inspector/WorkerConsoleAgent.cpp</a></li>
<li><a href="#trunkSourceWebCoreinspectorWorkerConsoleAgenth">trunk/Source/WebCore/inspector/WorkerConsoleAgent.h</a></li>
</ul>

<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsinspectorconsolemessageAddedfromworkerexpectedtxt">trunk/LayoutTests/inspector/console/messageAdded-from-worker-expected.txt</a></li>
<li><a href="#trunkLayoutTestsinspectorconsolemessageAddedfromworkerhtml">trunk/LayoutTests/inspector/console/messageAdded-from-worker.html</a></li>
<li><a href="#trunkLayoutTestsinspectorconsoleresourcesworkerconsolelogjs">trunk/LayoutTests/inspector/console/resources/worker-console-log.js</a></li>
<li><a href="#trunkSourceWebCoreinspectorInspectorConsoleInstrumentationh">trunk/Source/WebCore/inspector/InspectorConsoleInstrumentation.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/LayoutTests/ChangeLog        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -1,5 +1,40 @@
</span><span class="cx"> 2016-10-27  Joseph Pecoraro  &lt;pecoraro@apple.com&gt;
</span><span class="cx"> 
</span><ins>+        Web Inspector: Include ConsoleAgent in Workers - real console.log support
+        https://bugs.webkit.org/show_bug.cgi?id=163844
+        &lt;rdar://problem/28903328&gt;
+
+        Reviewed by Brian Burg.
+
+        * inspector/console/messageAdded-from-worker-expected.txt: Removed.
+        * inspector/console/messageAdded-from-worker.html: Removed.
+        * inspector/console/resources/worker-console-log.js: Removed.
+        Remove the old partial console in Worker test.
+
+        * inspector/worker/console-basic-expected.txt: Added.
+        * inspector/worker/console-basic.html: Added.
+        * inspector/worker/resources/worker-console.js: Added.
+        New console in Worker test.
+
+        * inspector/worker/worker-create-and-terminate.html:
+        The frontend must call initialize on Workers, otherwise they
+        are paused forever.
+
+        * http/tests/security/contentSecurityPolicy/worker-blob-inherits-csp-expected.txt:
+        * http/tests/security/contentSecurityPolicy/worker-blob-inherits-csp-importScripts-block-aborts-all-subsequent-imports-expected.txt:
+        * http/tests/security/contentSecurityPolicy/worker-connect-src-blocked-expected.txt:
+        * http/tests/security/contentSecurityPolicy/worker-csp-blocks-xhr-redirect-cross-origin-expected.txt:
+        * http/tests/security/contentSecurityPolicy/worker-importscripts-blocked-expected.txt:
+        * http/tests/security/contentSecurityPolicy/worker-multiple-csp-headers-expected.txt:
+        * http/tests/security/contentSecurityPolicy/worker-set-timeout-blocked-expected.txt:
+        * http/tests/websocket/tests/hybi/workers/close-expected.txt:
+        * http/tests/xmlhttprequest/workers/access-control-basic-get-fail-non-simple-expected.txt:
+        * security/contentSecurityPolicy/worker-inherits-blocks-xhr-expected.txt:
+        Rebaseline. We no longer send Worker console messages through the Page, and likewise
+        we don't send them to the WebKit client, so they will no longer appear in test output.
+
+2016-10-27  Joseph Pecoraro  &lt;pecoraro@apple.com&gt;
+
</ins><span class="cx">         Web Inspector: Include RuntimeAgent in Workers - evaluate in Worker context
</span><span class="cx">         https://bugs.webkit.org/show_bug.cgi?id=163835
</span><span class="cx">         &lt;rdar://problem/28901465&gt;
</span></span></pre></div>
<a id="trunkLayoutTestshttptestssecuritycontentSecurityPolicyworkerblobinheritscspexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/security/contentSecurityPolicy/worker-blob-inherits-csp-expected.txt (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/security/contentSecurityPolicy/worker-blob-inherits-csp-expected.txt        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/LayoutTests/http/tests/security/contentSecurityPolicy/worker-blob-inherits-csp-expected.txt        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -1,4 +1,3 @@
</span><del>-CONSOLE MESSAGE: Refused to load http://localhost:8000/security/contentSecurityPolicy/resources/post-message.js because it does not appear in the script-src directive of the Content Security Policy.
</del><span class="cx"> 
</span><span class="cx"> PASS Blob worker inherits CSP 
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestshttptestssecuritycontentSecurityPolicyworkerblobinheritscspimportScriptsblockabortsallsubsequentimportsexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/security/contentSecurityPolicy/worker-blob-inherits-csp-importScripts-block-aborts-all-subsequent-imports-expected.txt (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/security/contentSecurityPolicy/worker-blob-inherits-csp-importScripts-block-aborts-all-subsequent-imports-expected.txt        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/LayoutTests/http/tests/security/contentSecurityPolicy/worker-blob-inherits-csp-importScripts-block-aborts-all-subsequent-imports-expected.txt        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -1,4 +1,3 @@
</span><del>-CONSOLE MESSAGE: Refused to load http://localhost:8000/workers/resources/worker-importScripts-source1.js because it does not appear in the script-src directive of the Content Security Policy.
</del><span class="cx"> This tests that when calling WorkerGlobalScope.importScripts() will two script URLs that the second script is not loaded if the first script URL was blocked by the Content Security Policy of the worker (inherited from this page).
</span><span class="cx"> 
</span><span class="cx"> PASS threw exception NetworkError (DOM Exception 19):  A network error occurred..
</span></span></pre></div>
<a id="trunkLayoutTestshttptestssecuritycontentSecurityPolicyworkerconnectsrcblockedexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/security/contentSecurityPolicy/worker-connect-src-blocked-expected.txt (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/security/contentSecurityPolicy/worker-connect-src-blocked-expected.txt        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/LayoutTests/http/tests/security/contentSecurityPolicy/worker-connect-src-blocked-expected.txt        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -1,3 +1,2 @@
</span><del>-CONSOLE MESSAGE: Refused to connect to http://127.0.0.1:8000/xmlhttprequest/resources/get.txt because it does not appear in the connect-src directive of the Content Security Policy.
</del><span class="cx"> ALERT: xhr blocked
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestshttptestssecuritycontentSecurityPolicyworkercspblocksxhrredirectcrossoriginexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/security/contentSecurityPolicy/worker-csp-blocks-xhr-redirect-cross-origin-expected.txt (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/security/contentSecurityPolicy/worker-csp-blocks-xhr-redirect-cross-origin-expected.txt        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/LayoutTests/http/tests/security/contentSecurityPolicy/worker-csp-blocks-xhr-redirect-cross-origin-expected.txt        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -1,4 +1,3 @@
</span><del>-CONSOLE MESSAGE: XMLHttpRequest cannot load http://127.0.0.1:8000/security/contentSecurityPolicy/resources/redir.php?url=http://localhost:8000/xmlhttprequest/resources/access-control-basic-allow.cgi. Cross-origin redirection denied by Content Security Policy.
</del><span class="cx"> This tests an XHR request made from a worker is blocked if it redirects to a cross-origin resource that is not listed as a connect-src in the CSP of the worker.
</span><span class="cx"> 
</span><span class="cx"> PASS threw exception NetworkError (DOM Exception 19):  A network error occurred..
</span></span></pre></div>
<a id="trunkLayoutTestshttptestssecuritycontentSecurityPolicyworkerimportscriptsblockedexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/security/contentSecurityPolicy/worker-importscripts-blocked-expected.txt (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/security/contentSecurityPolicy/worker-importscripts-blocked-expected.txt        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/LayoutTests/http/tests/security/contentSecurityPolicy/worker-importscripts-blocked-expected.txt        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -1,4 +1,3 @@
</span><del>-CONSOLE MESSAGE: Refused to load http://localhost:8000/security/contentSecurityPolicy/resources/post-message.js because it does not appear in the script-src directive of the Content Security Policy.
</del><span class="cx"> PASS result is &quot;importScripts blocked: NetworkError (DOM Exception 19):  A network error occurred.&quot;
</span><span class="cx"> PASS successfullyParsed is true
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestshttptestssecuritycontentSecurityPolicyworkermultiplecspheadersexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/security/contentSecurityPolicy/worker-multiple-csp-headers-expected.txt (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/security/contentSecurityPolicy/worker-multiple-csp-headers-expected.txt        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/LayoutTests/http/tests/security/contentSecurityPolicy/worker-multiple-csp-headers-expected.txt        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -1,4 +1,3 @@
</span><del>-CONSOLE MESSAGE: Refused to connect to http://127.0.0.1:8000/xmlhttprequest/resources/get.txt because it does not appear in the connect-src directive of the Content Security Policy.
</del><span class="cx"> 
</span><span class="cx"> PASS Worker can have multiple CSP headers 
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestshttptestssecuritycontentSecurityPolicyworkersettimeoutblockedexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/security/contentSecurityPolicy/worker-set-timeout-blocked-expected.txt (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/security/contentSecurityPolicy/worker-set-timeout-blocked-expected.txt        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/LayoutTests/http/tests/security/contentSecurityPolicy/worker-set-timeout-blocked-expected.txt        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -1,3 +1,2 @@
</span><del>-CONSOLE MESSAGE: Refused to execute a script because 'unsafe-eval' does not appear in the script-src directive of the Content Security Policy.
</del><span class="cx"> ALERT: setTimeout blocked
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestshttptestswebsockettestshybiworkerscloseexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/websocket/tests/hybi/workers/close-expected.txt (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/websocket/tests/hybi/workers/close-expected.txt        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/LayoutTests/http/tests/websocket/tests/hybi/workers/close-expected.txt        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -1,6 +1,4 @@
</span><span class="cx"> CONSOLE MESSAGE: WebSocket connection to 'ws://127.0.0.1:8880/websocket/tests/hybi/close' failed: WebSocket is closed before the connection is established.
</span><del>-CONSOLE MESSAGE: WebSocket close message is too long.
-CONSOLE MESSAGE: WebSocket close message is too long.
</del><span class="cx"> CONSOLE MESSAGE: WebSocket connection to 'ws://127.0.0.1:8880/websocket/tests/hybi/close' failed: WebSocket is closed before the connection is established.
</span><span class="cx"> Verify WebSocket::close behaviors in Worker.
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestshttptestsxmlhttprequestworkersaccesscontrolbasicgetfailnonsimpleexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/xmlhttprequest/workers/access-control-basic-get-fail-non-simple-expected.txt (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/xmlhttprequest/workers/access-control-basic-get-fail-non-simple-expected.txt        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/LayoutTests/http/tests/xmlhttprequest/workers/access-control-basic-get-fail-non-simple-expected.txt        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -1,4 +1,3 @@
</span><del>-CONSOLE MESSAGE: XMLHttpRequest cannot load http://localhost:8000/xmlhttprequest/resources/access-control-basic-get-fail-non-simple.cgi. Preflight response is not successful
</del><span class="cx"> GET should not trigger a preflight request from a worker unless it has non-simple headers.
</span><span class="cx"> 
</span><span class="cx"> PASS: Cross-domain access allowed for simple get.
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/ChangeLog (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/ChangeLog        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/LayoutTests/imported/w3c/ChangeLog        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -1,3 +1,14 @@
</span><ins>+2016-10-27  Joseph Pecoraro  &lt;pecoraro@apple.com&gt;
+
+        Web Inspector: Include ConsoleAgent in Workers - real console.log support
+        https://bugs.webkit.org/show_bug.cgi?id=163844
+        &lt;rdar://problem/28903328&gt;
+
+        Reviewed by Brian Burg.
+
+        * web-platform-tests/fetch/api/policies/csp-blocked-worker-expected.txt:
+        * web-platform-tests/streams/readable-streams/garbage-collection.https-expected.txt:
+
</ins><span class="cx"> 2016-10-27  Chris Dumez  &lt;cdumez@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         testharnessreport.js should sanitize the results before printing them
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestsfetchapipoliciescspblockedworkerexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/fetch/api/policies/csp-blocked-worker-expected.txt (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/fetch/api/policies/csp-blocked-worker-expected.txt        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/fetch/api/policies/csp-blocked-worker-expected.txt        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -1,4 +1,3 @@
</span><del>-CONSOLE MESSAGE: Refused to connect to http://localhost:8800/fetch/api/resources/top.txt because it does not appear in the connect-src directive of the Content Security Policy.
</del><span class="cx"> 
</span><span class="cx"> PASS Fetch is blocked by CSP, got a TypeError 
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestsstreamsreadablestreamsgarbagecollectionhttpsexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/streams/readable-streams/garbage-collection.https-expected.txt (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/streams/readable-streams/garbage-collection.https-expected.txt        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/streams/readable-streams/garbage-collection.https-expected.txt        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -1,7 +1,3 @@
</span><del>-CONSOLE MESSAGE: line 37: Tests are running without the ability to do manual garbage collection. They will still work, but coverage will be suboptimal.
-CONSOLE MESSAGE: line 37: Tests are running without the ability to do manual garbage collection. They will still work, but coverage will be suboptimal.
-CONSOLE MESSAGE: line 37: Tests are running without the ability to do manual garbage collection. They will still work, but coverage will be suboptimal.
-CONSOLE MESSAGE: line 37: Tests are running without the ability to do manual garbage collection. They will still work, but coverage will be suboptimal.
</del><span class="cx"> 
</span><span class="cx"> PASS ReadableStreamController methods should continue working properly when scripts lose their reference to the readable stream 
</span><span class="cx"> PASS ReadableStream closed promise should fulfill even if the stream and reader JS references are lost 
</span></span></pre></div>
<a id="trunkLayoutTestsinspectorconsolemessageAddedfromworkerexpectedtxt"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/inspector/console/messageAdded-from-worker-expected.txt (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/inspector/console/messageAdded-from-worker-expected.txt        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/LayoutTests/inspector/console/messageAdded-from-worker-expected.txt        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -1,10 +0,0 @@
</span><del>-CONSOLE MESSAGE: line 1: WORKER STARTED
-CONSOLE MESSAGE: line 7: WORKER RECEIVED MESSAGE
-Console messages should be received from console logs in a Worker.
-
-
-== Running test suite: Console.messageAdded.worker
--- Running test case: TriggerConsoleMessagesInWorker
-PASS: MessageAdded event should fire for started log.
-PASS: MessageAdded event should fire for received message log.
-
</del></span></pre></div>
<a id="trunkLayoutTestsinspectorconsolemessageAddedfromworkerhtml"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/inspector/console/messageAdded-from-worker.html (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/inspector/console/messageAdded-from-worker.html        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/LayoutTests/inspector/console/messageAdded-from-worker.html        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -1,43 +0,0 @@
</span><del>-&lt;!DOCTYPE html&gt;
-&lt;html&gt;
-&lt;head&gt;
-&lt;script src=&quot;../../http/tests/inspector/resources/inspector-test.js&quot;&gt;&lt;/script&gt;
-&lt;script&gt;
-function triggerWorkerConsoleLog() {
-    let worker = new Worker(&quot;resources/worker-console-log.js&quot;);
-    worker.postMessage(&quot;log&quot;);
-}
-
-function test()
-{
-    let suite = InspectorTest.createAsyncSuite(&quot;Console.messageAdded.worker&quot;);
-
-    suite.addTestCase({
-        name: &quot;TriggerConsoleMessagesInWorker&quot;,
-        description: &quot;Triggered console messages in a Worker should be received.&quot;,
-        test(resolve, reject) {
-            let eventCount = 0;
-            WebInspector.logManager.addEventListener(WebInspector.LogManager.Event.MessageAdded, (event) =&gt; {
-                ++eventCount;
-
-                if (eventCount === 1)
-                    InspectorTest.expectThat(event.data.message.messageText === &quot;WORKER STARTED&quot;, &quot;MessageAdded event should fire for started log.&quot;);
-                else if (eventCount === 2) {
-                    InspectorTest.expectThat(event.data.message.messageText === &quot;WORKER RECEIVED MESSAGE&quot;, &quot;MessageAdded event should fire for received message log.&quot;);
-                    resolve();
-                } else
-                    reject();
-            });
-
-            InspectorTest.evaluateInPage(&quot;triggerWorkerConsoleLog()&quot;);
-        }
-    });
-
-    suite.runTestCasesAndFinish();
-}
-&lt;/script&gt;
-&lt;/head&gt;
-&lt;body onload=&quot;runTest()&quot;&gt;
-&lt;p&gt;Console messages should be received from console logs in a Worker.&lt;/p&gt;
-&lt;/body&gt;
-&lt;/html&gt;
</del></span></pre></div>
<a id="trunkLayoutTestsinspectorconsoleresourcesworkerconsolelogjs"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/inspector/console/resources/worker-console-log.js (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/inspector/console/resources/worker-console-log.js        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/LayoutTests/inspector/console/resources/worker-console-log.js        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -1,9 +0,0 @@
</span><del>-console.log(&quot;WORKER STARTED&quot;);
-
-self.addEventListener(&quot;message&quot;, (event) =&gt; {
-    // FIXME: &lt;https://webkit.org/b/154213&gt; Web Inspector: Improve support for console logging within workers
-    // Currently the arguments to the console.log are lost when crossing thread boundaries. This should be
-    // addressed when adding better worker debugging in general.
-    console.log(&quot;WORKER RECEIVED MESSAGE&quot;, &quot;argument&quot;);
-});
-
</del></span></pre></div>
<a id="trunkLayoutTestsinspectorworkerconsolebasicexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/inspector/worker/console-basic-expected.txt (0 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/inspector/worker/console-basic-expected.txt                                (rev 0)
+++ trunk/LayoutTests/inspector/worker/console-basic-expected.txt        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -0,0 +1,158 @@
</span><ins>+Test for ConsoleAgent in a Worker.
+
+
+== Running test suite: Worker.Console.basic
+-- Running test case: Worker.Console.log
+PASS: ConsoleMessage parameter RemoteObjects should be from the Worker target.
+{
+  &quot;_source&quot;: &quot;console-api&quot;,
+  &quot;_level&quot;: &quot;log&quot;,
+  &quot;_messageText&quot;: &quot;log!&quot;,
+  &quot;_type&quot;: &quot;log&quot;,
+  &quot;_url&quot;: &quot;inspector/worker/resources/worker-console.js&quot;,
+  &quot;_line&quot;: 4,
+  &quot;_column&quot;: 20,
+  &quot;_repeatCount&quot;: 1,
+  &quot;_parameters&quot;: [
+    {
+      &quot;_type&quot;: &quot;string&quot;,
+      &quot;_description&quot;: &quot;log!&quot;,
+      &quot;_value&quot;: &quot;log!&quot;
+    },
+    {
+      &quot;_type&quot;: &quot;object&quot;,
+      &quot;_subtype&quot;: &quot;array&quot;,
+      &quot;_objectId&quot;: &quot;&lt;filtered&gt;&quot;,
+      &quot;_description&quot;: &quot;Array&quot;,
+      &quot;_size&quot;: 4,
+      &quot;_preview&quot;: {
+        &quot;_type&quot;: &quot;object&quot;,
+        &quot;_subtype&quot;: &quot;array&quot;,
+        &quot;_description&quot;: &quot;Array&quot;,
+        &quot;_lossless&quot;: false,
+        &quot;_overflow&quot;: false,
+        &quot;_size&quot;: 4,
+        &quot;_properties&quot;: [
+          {
+            &quot;_name&quot;: &quot;0&quot;,
+            &quot;_type&quot;: &quot;object&quot;,
+            &quot;_value&quot;: &quot;DedicatedWorkerGlobalScope&quot;
+          },
+          {
+            &quot;_name&quot;: &quot;1&quot;,
+            &quot;_type&quot;: &quot;object&quot;,
+            &quot;_value&quot;: &quot;WorkerLocation&quot;
+          },
+          {
+            &quot;_name&quot;: &quot;2&quot;,
+            &quot;_type&quot;: &quot;number&quot;,
+            &quot;_value&quot;: &quot;123&quot;
+          },
+          {
+            &quot;_name&quot;: &quot;3&quot;,
+            &quot;_type&quot;: &quot;symbol&quot;,
+            &quot;_value&quot;: &quot;Symbol()&quot;
+          }
+        ],
+        &quot;_entries&quot;: null
+      }
+    }
+  ],
+  &quot;_stackTrace&quot;: &quot;&lt;filtered&gt;&quot;,
+  &quot;_request&quot;: null
+}
+
+-- Running test case: Worker.Console.warn
+{
+  &quot;_source&quot;: &quot;console-api&quot;,
+  &quot;_level&quot;: &quot;warning&quot;,
+  &quot;_messageText&quot;: &quot;warning!&quot;,
+  &quot;_type&quot;: &quot;log&quot;,
+  &quot;_url&quot;: &quot;inspector/worker/resources/worker-console.js&quot;,
+  &quot;_line&quot;: 7,
+  &quot;_column&quot;: 21,
+  &quot;_sourceCodeLocation&quot;: null,
+  &quot;_repeatCount&quot;: 1,
+  &quot;_parameters&quot;: [
+    {
+      &quot;_type&quot;: &quot;string&quot;,
+      &quot;_description&quot;: &quot;warning!&quot;,
+      &quot;_value&quot;: &quot;warning!&quot;
+    }
+  ],
+  &quot;_stackTrace&quot;: &quot;&lt;filtered&gt;&quot;,
+  &quot;_request&quot;: null
+}
+
+-- Running test case: Worker.Console.error
+{
+  &quot;_source&quot;: &quot;console-api&quot;,
+  &quot;_level&quot;: &quot;error&quot;,
+  &quot;_messageText&quot;: &quot;error!&quot;,
+  &quot;_type&quot;: &quot;log&quot;,
+  &quot;_url&quot;: &quot;inspector/worker/resources/worker-console.js&quot;,
+  &quot;_line&quot;: 10,
+  &quot;_column&quot;: 22,
+  &quot;_sourceCodeLocation&quot;: null,
+  &quot;_repeatCount&quot;: 1,
+  &quot;_parameters&quot;: [
+    {
+      &quot;_type&quot;: &quot;string&quot;,
+      &quot;_description&quot;: &quot;error!&quot;,
+      &quot;_value&quot;: &quot;error!&quot;
+    }
+  ],
+  &quot;_stackTrace&quot;: &quot;&lt;filtered&gt;&quot;,
+  &quot;_request&quot;: null
+}
+
+-- Running test case: Worker.Console.assert
+{
+  &quot;_source&quot;: &quot;console-api&quot;,
+  &quot;_level&quot;: &quot;error&quot;,
+  &quot;_messageText&quot;: &quot;Assertion Failure&quot;,
+  &quot;_type&quot;: &quot;assert&quot;,
+  &quot;_url&quot;: &quot;inspector/worker/resources/worker-console.js&quot;,
+  &quot;_line&quot;: 14,
+  &quot;_column&quot;: 23,
+  &quot;_sourceCodeLocation&quot;: null,
+  &quot;_repeatCount&quot;: 1,
+  &quot;_parameters&quot;: [
+    {
+      &quot;_type&quot;: &quot;string&quot;,
+      &quot;_description&quot;: &quot;Assertion Failure&quot;,
+      &quot;_value&quot;: &quot;Assertion Failure&quot;
+    }
+  ],
+  &quot;_stackTrace&quot;: &quot;&lt;filtered&gt;&quot;,
+  &quot;_request&quot;: null
+}
+
+-- Running test case: Worker.Console.time
+{
+  &quot;_source&quot;: &quot;console-api&quot;,
+  &quot;_level&quot;: &quot;debug&quot;,
+  &quot;_messageText&quot;: &quot;name: &lt;filtered&gt;ms&quot;,
+  &quot;_type&quot;: &quot;timing&quot;,
+  &quot;_url&quot;: &quot;inspector/worker/resources/worker-console.js&quot;,
+  &quot;_line&quot;: 18,
+  &quot;_column&quot;: 24,
+  &quot;_repeatCount&quot;: 1,
+  &quot;_stackTrace&quot;: &quot;&lt;filtered&gt;&quot;,
+  &quot;_request&quot;: null
+}
+
+-- Running test case: Worker.Console.count
+{
+  &quot;_source&quot;: &quot;console-api&quot;,
+  &quot;_level&quot;: &quot;debug&quot;,
+  &quot;_messageText&quot;: &quot;Global: 1&quot;,
+  &quot;_type&quot;: &quot;log&quot;,
+  &quot;_url&quot;: &quot;inspector/worker/resources/worker-console.js&quot;,
+  &quot;_line&quot;: 21,
+  &quot;_column&quot;: 22,
+  &quot;_repeatCount&quot;: 1,
+  &quot;_stackTrace&quot;: &quot;&lt;filtered&gt;&quot;,
+  &quot;_request&quot;: null
+}
+
</ins></span></pre></div>
<a id="trunkLayoutTestsinspectorworkerconsolebasichtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/inspector/worker/console-basic.html (0 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/inspector/worker/console-basic.html                                (rev 0)
+++ trunk/LayoutTests/inspector/worker/console-basic.html        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -0,0 +1,121 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../http/tests/inspector/resources/inspector-test.js&quot;&gt;&lt;/script&gt;
+&lt;script&gt;
+let worker = new Worker(&quot;resources/worker-console.js&quot;);
+
+function triggerConsoleMethodInWorker(msg) {
+    worker.postMessage(msg);
+}
+
+function test()
+{
+    function sanitizeURL(url) {
+        return url.replace(/^.*?LayoutTests\//, &quot;&quot;);
+    }
+
+    function remoteObjectJSONFilter(key, value) {
+        if (key === &quot;_target&quot; || key === &quot;_hasChildren&quot; || key === &quot;_listeners&quot;)
+            return undefined;
+        if (key === &quot;_objectId&quot; || key === &quot;_stackTrace&quot;)
+            return &quot;&lt;filtered&gt;&quot;;
+        if (key === &quot;_url&quot;)
+            return sanitizeURL(value);
+        return value;
+    }
+
+    let triggerNextConsoleMessage;
+
+    function nextConsoleMessage() {
+        return new Promise((resolve, reject) =&gt; {
+            triggerNextConsoleMessage = resolve;
+        });
+    }
+
+    WebInspector.logManager.addEventListener(WebInspector.LogManager.Event.MessageAdded, function(event) {
+        let message = event.data.message;
+        InspectorTest.assert(message instanceof WebInspector.ConsoleMessage);
+        if (triggerNextConsoleMessage)
+            triggerNextConsoleMessage(message);
+    });
+
+    let mainTarget = WebInspector.mainTarget;
+    let workerTarget = Array.from(WebInspector.targets).find((target) =&gt; target.type === WebInspector.Target.Type.Worker);
+    if (!workerTarget) {
+        InspectorTest.fail(&quot;Missing Worker Target&quot;);
+        InspectorTest.completeTest();
+        return;
+    }
+
+
+    let suite = InspectorTest.createAsyncSuite(&quot;Worker.Console.basic&quot;);
+
+    function addConsoleTestCase({name, message, description, validate, preprocess}) {
+        suite.addTestCase({
+            name, description,
+            test(resolve, reject) {
+                InspectorTest.evaluateInPage(`triggerConsoleMethodInWorker(&quot;${message}&quot;)`);
+                nextConsoleMessage()
+                    .then((message) =&gt; {
+                        if (validate)
+                            validate(message);
+                        if (preprocess)
+                            preprocess(message);
+                        InspectorTest.log(JSON.stringify(message, remoteObjectJSONFilter, &quot;  &quot;));
+                        resolve();
+                    }).catch(reject);
+            }
+        })
+    }
+
+    addConsoleTestCase({
+        name: &quot;Worker.Console.log&quot;,
+        description: &quot;console.log with multiple values should work.&quot;,
+        message: &quot;log&quot;,
+        validate(message) {
+            InspectorTest.expectEqual(message.parameters[1].target, workerTarget, &quot;ConsoleMessage parameter RemoteObjects should be from the Worker target.&quot;);
+        }
+    });
+
+    addConsoleTestCase({
+        name: &quot;Worker.Console.warn&quot;,
+        description: &quot;console.warn should produce a warning message.&quot;,
+        message: &quot;warn&quot;,
+    });
+
+    addConsoleTestCase({
+        name: &quot;Worker.Console.error&quot;,
+        description: &quot;console.error should produce an error message.&quot;,
+        message: &quot;error&quot;,
+    });
+
+    addConsoleTestCase({
+        name: &quot;Worker.Console.assert&quot;,
+        description: &quot;console.assert should produce an assertion message.&quot;,
+        message: &quot;assert&quot;,
+    });
+
+    addConsoleTestCase({
+        name: &quot;Worker.Console.time&quot;,
+        description: &quot;console.time/timeEnd should produce a timing message.&quot;,
+        message: &quot;time&quot;,
+        preprocess(message) {
+            message._messageText = message._messageText.replace(/[0-9.]+/, &quot;&lt;filtered&gt;&quot;);
+        }
+    });
+
+    addConsoleTestCase({
+        name: &quot;Worker.Console.count&quot;,
+        description: &quot;console.count should produce a count message.&quot;,
+        message: &quot;count&quot;,
+    });
+
+    suite.runTestCasesAndFinish();
+}
+&lt;/script&gt;
+&lt;/head&gt;
+&lt;body onload=&quot;runTest()&quot;&gt;
+&lt;p&gt;Test for ConsoleAgent in a Worker.&lt;/p&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsinspectorworkerresourcesworkerconsolejs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/inspector/worker/resources/worker-console.js (0 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/inspector/worker/resources/worker-console.js                                (rev 0)
+++ trunk/LayoutTests/inspector/worker/resources/worker-console.js        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -0,0 +1,24 @@
</span><ins>+onmessage = function(event) {
+    switch (event.data) {
+    case &quot;log&quot;:
+        console.log(&quot;log!&quot;, [self, self.location, 123, Symbol()]);
+        break;
+    case &quot;warn&quot;:
+        console.warn(&quot;warning!&quot;);
+        break;
+    case &quot;error&quot;:
+        console.error(&quot;error!&quot;);
+        break;
+    case &quot;assert&quot;:
+        console.assert(true, &quot;SHOULD NOT SEE THIS&quot;);
+        console.assert(false, &quot;Assertion Failure&quot;);
+        break;
+    case &quot;time&quot;:
+        console.time(&quot;name&quot;);
+        console.timeEnd(&quot;name&quot;);
+        break;
+    case &quot;count&quot;:
+        console.count();
+        break;
+    }
+}
</ins></span></pre></div>
<a id="trunkLayoutTestsinspectorworkerworkercreateandterminatehtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/inspector/worker/worker-create-and-terminate.html (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/inspector/worker/worker-create-and-terminate.html        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/LayoutTests/inspector/worker/worker-create-and-terminate.html        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -65,6 +65,7 @@
</span><span class="cx"> 
</span><span class="cx">     InspectorProtocol.eventHandler[&quot;Worker.workerCreated&quot;] = (messageObject) =&gt; {
</span><span class="cx">         addWorker(messageObject.params.workerId, messageObject.params.url);
</span><ins>+        InspectorProtocol.sendCommand(&quot;Worker.initialized&quot;, {workerId: messageObject.params.workerId});
</ins><span class="cx">         if (triggerNextCreate)
</span><span class="cx">             triggerNextCreate();
</span><span class="cx">     };
</span></span></pre></div>
<a id="trunkLayoutTestssecuritycontentSecurityPolicyworkerinheritsblocksxhrexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/security/contentSecurityPolicy/worker-inherits-blocks-xhr-expected.txt (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/security/contentSecurityPolicy/worker-inherits-blocks-xhr-expected.txt        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/LayoutTests/security/contentSecurityPolicy/worker-inherits-blocks-xhr-expected.txt        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -1,4 +1,3 @@
</span><del>-CONSOLE MESSAGE: Refused to connect to non-existent-file because it does not appear in the connect-src directive of the Content Security Policy.
</del><span class="cx"> This tests that the Content Security Policy (CSP) of the owner document (this page) blocks a file-URL Web Worker from making an XHR request because the parent's CSP contains &quot;connect-src 'none'&quot;
</span><span class="cx"> 
</span><span class="cx"> PASS threw exception NetworkError (DOM Exception 19):  A network error occurred..
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/Source/JavaScriptCore/ChangeLog        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -1,5 +1,15 @@
</span><span class="cx"> 2016-10-27  Joseph Pecoraro  &lt;pecoraro@apple.com&gt;
</span><span class="cx"> 
</span><ins>+        Web Inspector: Include ConsoleAgent in Workers - real console.log support
+        https://bugs.webkit.org/show_bug.cgi?id=163844
+        &lt;rdar://problem/28903328&gt;
+
+        Reviewed by Brian Burg.
+
+        * inspector/protocol/Worker.json:
+
+2016-10-27  Joseph Pecoraro  &lt;pecoraro@apple.com&gt;
+
</ins><span class="cx">         Web Inspector: Introduce Page WorkerAgent and Worker InspectorController
</span><span class="cx">         https://bugs.webkit.org/show_bug.cgi?id=163817
</span><span class="cx">         &lt;rdar://problem/28899063&gt;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectorprotocolWorkerjson"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/protocol/Worker.json (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/protocol/Worker.json        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/Source/JavaScriptCore/inspector/protocol/Worker.json        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -12,6 +12,13 @@
</span><span class="cx">             &quot;description&quot;: &quot;Disable Worker domain events.&quot;
</span><span class="cx">         },
</span><span class="cx">         {
</span><ins>+            &quot;name&quot;: &quot;initialized&quot;,
+            &quot;description&quot;: &quot;Sent after the frontend has sent all initialization messages and can resume this worker. This command is required to allow execution in the worker.&quot;,
+            &quot;parameters&quot;: [
+                { &quot;name&quot;: &quot;workerId&quot;, &quot;type&quot;: &quot;string&quot; }
+            ]            
+        },
+        {
</ins><span class="cx">             &quot;name&quot;: &quot;sendMessageToWorker&quot;,
</span><span class="cx">             &quot;description&quot;: &quot;Send an Inspector Protocol message to be dispatched to a Worker's agents.&quot;,
</span><span class="cx">             &quot;parameters&quot;: [
</span></span></pre></div>
<a id="trunkSourceWebCoreCMakeListstxt"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/CMakeLists.txt (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/CMakeLists.txt        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/Source/WebCore/CMakeLists.txt        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -1907,6 +1907,7 @@
</span><span class="cx">     inspector/WebDebuggerAgent.cpp
</span><span class="cx">     inspector/WebInjectedScriptHost.cpp
</span><span class="cx">     inspector/WebInjectedScriptManager.cpp
</span><ins>+    inspector/WorkerConsoleAgent.cpp
</ins><span class="cx">     inspector/WorkerInspectorController.cpp
</span><span class="cx">     inspector/WorkerRuntimeAgent.cpp
</span><span class="cx">     inspector/WorkerScriptDebugServer.cpp
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/Source/WebCore/ChangeLog        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -1,5 +1,111 @@
</span><span class="cx"> 2016-10-27  Joseph Pecoraro  &lt;pecoraro@apple.com&gt;
</span><span class="cx"> 
</span><ins>+        Web Inspector: Include ConsoleAgent in Workers - real console.log support
+        https://bugs.webkit.org/show_bug.cgi?id=163844
+        &lt;rdar://problem/28903328&gt;
+
+        Reviewed by Brian Burg.
+
+        Test: inspector/worker/console-basic.html
+
+        This introduces a real ConsoleAgent in the Worker InspectorController.
+        We no longer need to pass partial ConsoleMessage objects to be logged
+        through the Page, we can just send the full ConsoleMessages to a
+        frontend once it connects to the Worker.
+
+        In order to guarantee that the Worker InspectorController is properly
+        all Workers will start paused if there is an Inspector attached to
+        the Page. The frontend _must_ call the new Worker.initialized method
+        after sending its setup commands to the Worker. This ensures we get
+        handle all initialization commands (like Agent.enable(), and
+        setting state like breakpoints) before any script executes in the
+        Worker. This mirrors the Inspector.initialized method that does the
+        same thing for JSContext auto-attach of the Main target.
+
+        In the backend, the wait until initialized state is just running
+        the WorkerThread's RunLoop in a special debugger mode to only process
+        debugger commands until we are ready. This will effectively be
+        the same as pausing so it is generalized into WorkerThread.
+
+        * CMakeLists.txt:
+        * WebCore.xcodeproj/project.pbxproj:
+        * inspector/InspectorAllInOne.cpp:
+        New files.
+
+        * inspector/InspectorWorkerAgent.cpp:
+        (WebCore::InspectorWorkerAgent::initialized):
+        (WebCore::InspectorWorkerAgent::shouldWaitForDebuggerOnStart):
+        * inspector/InspectorWorkerAgent.h:
+        Add the new initialized method. This just uses the proxy to send
+        a message to be handled on the Worker Thread and unpause.
+
+        * inspector/WorkerConsoleAgent.cpp:
+        (WebCore::WorkerConsoleAgent::WorkerConsoleAgent):
+        (WebCore::WorkerConsoleAgent::addInspectedNode):
+        * inspector/WorkerConsoleAgent.h:
+        * inspector/WorkerInspectorController.cpp:
+        (WebCore::WorkerInspectorController::WorkerInspectorController):
+        Add a ConsoleAgent to WorkerInspectorController.
+
+        * workers/WorkerInspectorProxy.h:
+        * workers/WorkerInspectorProxy.cpp:
+        (WebCore::WorkerInspectorProxy::workerStartMode):
+        (WebCore::WorkerInspectorProxy::resumeWorkerIfPaused):
+        (WebCore::WorkerInspectorProxy::connectToWorkerInspector):
+        (WebCore::WorkerInspectorProxy::disconnectFromWorkerInspector):
+        (WebCore::WorkerInspectorProxy::sendMessageToWorkerInspector):
+        Use the debugger mode when sending messages to the WorkerThread.
+
+        * workers/Worker.cpp:
+        (WebCore::Worker::notifyFinished):
+        * workers/WorkerMessagingProxy.cpp:
+        (WebCore::WorkerMessagingProxy::startWorkerGlobalScope):
+        (WebCore::WorkerMessagingProxy::postConsoleMessageToWorkerObject): Deleted.
+        * workers/WorkerMessagingProxy.h:
+        * workers/WorkerReportingProxy.h:
+        * workers/WorkerGlobalScope.cpp:
+        (WebCore::WorkerGlobalScope::addConsoleMessage):
+        (WebCore::WorkerGlobalScope::addMessage):
+        * workers/WorkerGlobalScope.h:
+        * workers/WorkerGlobalScopeProxy.h:
+        Remove legacy partial console support.
+
+        * workers/WorkerRunLoop.h:
+        * workers/WorkerRunLoop.cpp:
+        (WebCore::WorkerRunLoop::debuggerMode):
+        * workers/WorkerThread.h:
+        * workers/WorkerThread.cpp:
+        (WebCore::WorkerThread::workerThread):
+        (WebCore::WorkerThread::startRunningDebuggerTasks):
+        (WebCore::WorkerThread::stopRunningDebuggerTasks):
+        General code for spinning the WorkerThread and only processing debugger
+        (Inspector) commands. Use this when starting the thread to ensure the
+        frontend initializes the Worker's Agents before any JavaScript executes.
+
+        * page/PageConsoleClient.cpp:
+        * workers/WorkerConsoleClient.cpp:
+        (WebCore::WorkerConsoleClient::count):
+        (WebCore::WorkerConsoleClient::time):
+        (WebCore::WorkerConsoleClient::timeEnd):
+        * inspector/InspectorConsoleInstrumentation.h: Removed.
+        * inspector/InspectorInstrumentation.cpp:
+        (WebCore::InspectorInstrumentation::startConsoleTimingImpl):
+        (WebCore::InspectorInstrumentation::stopConsoleTimingImpl):
+        (WebCore::InspectorInstrumentation::shouldWaitForDebuggerOnStartImpl):
+        * inspector/InspectorInstrumentation.h:
+        (WebCore::InspectorInstrumentation::shouldWaitForDebuggerOnStart):
+        (WebCore::InspectorInstrumentation::addMessageToConsole):
+        (WebCore::InspectorInstrumentation::consoleCount):
+        (WebCore::InspectorInstrumentation::takeHeapSnapshot):
+        (WebCore::InspectorInstrumentation::startConsoleTiming):
+        (WebCore::InspectorInstrumentation::stopConsoleTiming):
+        (WebCore::InspectorInstrumentation::consoleTimeStamp):
+        (WebCore::InspectorInstrumentation::startProfiling):
+        (WebCore::InspectorInstrumentation::stopProfiling):
+        Implement a few more basic console APIs that required ConsoleAgent.
+
+2016-10-27  Joseph Pecoraro  &lt;pecoraro@apple.com&gt;
+
</ins><span class="cx">         Web Inspector: Include RuntimeAgent in Workers - evaluate in Worker context
</span><span class="cx">         https://bugs.webkit.org/show_bug.cgi?id=163835
</span><span class="cx">         &lt;rdar://problem/28901465&gt;
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -3883,6 +3883,8 @@
</span><span class="cx">                 A513B3D8114B166A001C429B /* KeyEventCocoa.mm in Sources */ = {isa = PBXBuildFile; fileRef = A5C974D011485FF10066F2AB /* KeyEventCocoa.mm */; };
</span><span class="cx">                 A516E8B7136E04DB0076C3C0 /* LocalizedDateCache.h in Headers */ = {isa = PBXBuildFile; fileRef = A516E8B4136E04DB0076C3C0 /* LocalizedDateCache.h */; };
</span><span class="cx">                 A516E8B8136E04DB0076C3C0 /* LocalizedDateCache.mm in Sources */ = {isa = PBXBuildFile; fileRef = A516E8B5136E04DB0076C3C0 /* LocalizedDateCache.mm */; };
</span><ins>+                A52A68611DBB0F630083373F /* WorkerConsoleAgent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A52A685F1DBB0F5B0083373F /* WorkerConsoleAgent.cpp */; };
+                A52A68621DBB0F630083373F /* WorkerConsoleAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = A52A68601DBB0F5B0083373F /* WorkerConsoleAgent.h */; };
</ins><span class="cx">                 A5416FE518810EF80009FC5F /* YouTubeEmbedShadowElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A5416FE318810EF80009FC5F /* YouTubeEmbedShadowElement.cpp */; };
</span><span class="cx">                 A5416FE618810EF80009FC5F /* YouTubeEmbedShadowElement.h in Headers */ = {isa = PBXBuildFile; fileRef = A5416FE418810EF80009FC5F /* YouTubeEmbedShadowElement.h */; };
</span><span class="cx">                 A54A0C5D1DB6D9C00017A90B /* InspectorWorkerAgent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A54A0C5B1DB6D9B10017A90B /* InspectorWorkerAgent.cpp */; };
</span><span class="lines">@@ -6386,7 +6388,6 @@
</span><span class="cx">                 F3D461491161D53200CA0D09 /* JSErrorHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = F3D461471161D53200CA0D09 /* JSErrorHandler.h */; };
</span><span class="cx">                 F3D4C47812E07663003DA150 /* InspectorDOMDebuggerAgent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F3D4C47612E07663003DA150 /* InspectorDOMDebuggerAgent.cpp */; };
</span><span class="cx">                 F3D4C47912E07663003DA150 /* InspectorDOMDebuggerAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = F3D4C47712E07663003DA150 /* InspectorDOMDebuggerAgent.h */; };
</span><del>-                F3F5CF1112ED81A80084C569 /* InspectorConsoleInstrumentation.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F5CF1012ED81A80084C569 /* InspectorConsoleInstrumentation.h */; };
</del><span class="cx">                 F40EA8AB1B867E4400CE5581 /* NSScrollingInputFilterSPI.h in Headers */ = {isa = PBXBuildFile; fileRef = F40EA8AA1B867D6500CE5581 /* NSScrollingInputFilterSPI.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 F42FFB461984B71600F6837F /* LengthRepeat.h in Headers */ = {isa = PBXBuildFile; fileRef = F42FFB451984B71600F6837F /* LengthRepeat.h */; };
</span><span class="cx">                 F433E9031DBBDBA200EF0D14 /* StaticPasteboard.h in Headers */ = {isa = PBXBuildFile; fileRef = F433E9021DBBDBA200EF0D14 /* StaticPasteboard.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="lines">@@ -11372,6 +11373,8 @@
</span><span class="cx">                 A516E8B5136E04DB0076C3C0 /* LocalizedDateCache.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = LocalizedDateCache.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 A518225417E2A0D400A9BA1D /* InspectorOverlayPage.css */ = {isa = PBXFileReference; lastKnownFileType = text.css; path = InspectorOverlayPage.css; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 A518225517E2A0D400A9BA1D /* InspectorOverlayPage.js */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.javascript; path = InspectorOverlayPage.js; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><ins>+                A52A685F1DBB0F5B0083373F /* WorkerConsoleAgent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WorkerConsoleAgent.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
+                A52A68601DBB0F5B0083373F /* WorkerConsoleAgent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WorkerConsoleAgent.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 A5416FE318810EF80009FC5F /* YouTubeEmbedShadowElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = YouTubeEmbedShadowElement.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 A5416FE418810EF80009FC5F /* YouTubeEmbedShadowElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YouTubeEmbedShadowElement.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 A54A0C5B1DB6D9B10017A90B /* InspectorWorkerAgent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorWorkerAgent.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -14229,7 +14232,6 @@
</span><span class="cx">                 F3D461471161D53200CA0D09 /* JSErrorHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSErrorHandler.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 F3D4C47612E07663003DA150 /* InspectorDOMDebuggerAgent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorDOMDebuggerAgent.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 F3D4C47712E07663003DA150 /* InspectorDOMDebuggerAgent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorDOMDebuggerAgent.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><del>-                F3F5CF1012ED81A80084C569 /* InspectorConsoleInstrumentation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorConsoleInstrumentation.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</del><span class="cx">                 F40EA8AA1B867D6500CE5581 /* NSScrollingInputFilterSPI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NSScrollingInputFilterSPI.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 F42FFB451984B71600F6837F /* LengthRepeat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LengthRepeat.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 F433E9021DBBDBA200EF0D14 /* StaticPasteboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StaticPasteboard.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -15808,7 +15810,6 @@
</span><span class="cx">                                 B885E8D311E06DD2009FFBF4 /* InspectorApplicationCacheAgent.h */,
</span><span class="cx">                                 7A1F2B51126C61B20006A7E6 /* InspectorClient.cpp */,
</span><span class="cx">                                 1C81B9580E97330800266E07 /* InspectorClient.h */,
</span><del>-                                F3F5CF1012ED81A80084C569 /* InspectorConsoleInstrumentation.h */,
</del><span class="cx">                                 1C81B9570E97330800266E07 /* InspectorController.cpp */,
</span><span class="cx">                                 1C81B9560E97330800266E07 /* InspectorController.h */,
</span><span class="cx">                                 82AB1741124B99EC00C5069D /* InspectorCSSAgent.cpp */,
</span><span class="lines">@@ -15885,6 +15886,8 @@
</span><span class="cx">                                 A5840E23187B8AC200843B10 /* WebInjectedScriptHost.h */,
</span><span class="cx">                                 A584FE2D1864CB8400843B10 /* WebInjectedScriptManager.cpp */,
</span><span class="cx">                                 A584FE2E1864CB8400843B10 /* WebInjectedScriptManager.h */,
</span><ins>+                                A52A685F1DBB0F5B0083373F /* WorkerConsoleAgent.cpp */,
+                                A52A68601DBB0F5B0083373F /* WorkerConsoleAgent.h */,
</ins><span class="cx">                                 A54A0C5F1DB7F8B70017A90B /* WorkerInspectorController.cpp */,
</span><span class="cx">                                 A54A0C601DB7F8B70017A90B /* WorkerInspectorController.h */,
</span><span class="cx">                                 A57FD7191DB94236006AE24B /* WorkerRuntimeAgent.cpp */,
</span><span class="lines">@@ -25502,7 +25505,6 @@
</span><span class="cx">                                 93309DF2099E64920056E581 /* InsertTextCommand.h in Headers */,
</span><span class="cx">                                 B885E8D511E06DD2009FFBF4 /* InspectorApplicationCacheAgent.h in Headers */,
</span><span class="cx">                                 1C81B95C0E97330800266E07 /* InspectorClient.h in Headers */,
</span><del>-                                F3F5CF1112ED81A80084C569 /* InspectorConsoleInstrumentation.h in Headers */,
</del><span class="cx">                                 1C81B95A0E97330800266E07 /* InspectorController.h in Headers */,
</span><span class="cx">                                 82AB1744124B99EC00C5069D /* InspectorCSSAgent.h in Headers */,
</span><span class="cx">                                 4A9CC82116BF9BB400EC645A /* InspectorCSSOMWrappers.h in Headers */,
</span><span class="lines">@@ -27818,6 +27820,7 @@
</span><span class="cx">                                 A14832C6187F668F00DA63A6 /* WKViewPrivate.h in Headers */,
</span><span class="cx">                                 379919971200DDF400EA041C /* WOFFFileFormat.h in Headers */,
</span><span class="cx">                                 2E4346460F546A8200B0F1BA /* Worker.h in Headers */,
</span><ins>+                                A52A68621DBB0F630083373F /* WorkerConsoleAgent.h in Headers */,
</ins><span class="cx">                                 A55639D11C6F09E300806D8E /* WorkerConsoleClient.h in Headers */,
</span><span class="cx">                                 A3E2643114748991005A8588 /* WorkerEventQueue.h in Headers */,
</span><span class="cx">                                 2E4346490F546A8200B0F1BA /* WorkerGlobalScope.h in Headers */,
</span><span class="lines">@@ -31269,6 +31272,7 @@
</span><span class="cx">                                 A14832C5187F668300DA63A6 /* WKView.mm in Sources */,
</span><span class="cx">                                 379919961200DDF400EA041C /* WOFFFileFormat.cpp in Sources */,
</span><span class="cx">                                 2E4346450F546A8200B0F1BA /* Worker.cpp in Sources */,
</span><ins>+                                A52A68611DBB0F630083373F /* WorkerConsoleAgent.cpp in Sources */,
</ins><span class="cx">                                 A55639D21C6F09E700806D8E /* WorkerConsoleClient.cpp in Sources */,
</span><span class="cx">                                 A3E2643014748991005A8588 /* WorkerEventQueue.cpp in Sources */,
</span><span class="cx">                                 2E4346480F546A8200B0F1BA /* WorkerGlobalScope.cpp in Sources */,
</span></span></pre></div>
<a id="trunkSourceWebCoreinspectorInspectorAllInOnecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/inspector/InspectorAllInOne.cpp (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/inspector/InspectorAllInOne.cpp        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/Source/WebCore/inspector/InspectorAllInOne.cpp        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -63,6 +63,7 @@
</span><span class="cx"> #include &quot;WebDebuggerAgent.cpp&quot;
</span><span class="cx"> #include &quot;WebInjectedScriptHost.cpp&quot;
</span><span class="cx"> #include &quot;WebInjectedScriptManager.cpp&quot;
</span><ins>+#include &quot;WorkerConsoleAgent.cpp&quot;
</ins><span class="cx"> #include &quot;WorkerInspectorController.cpp&quot;
</span><span class="cx"> #include &quot;WorkerRuntimeAgent.cpp&quot;
</span><span class="cx"> #include &quot;WorkerScriptDebugServer.cpp&quot;
</span></span></pre></div>
<a id="trunkSourceWebCoreinspectorInspectorConsoleInstrumentationh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/inspector/InspectorConsoleInstrumentation.h (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/inspector/InspectorConsoleInstrumentation.h        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/Source/WebCore/inspector/InspectorConsoleInstrumentation.h        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -1,92 +0,0 @@
</span><del>-/*
-* Copyright (C) 2011 Google Inc. All rights reserved.
-* Copyright (C) 2015 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:
-*
-*     * Redistributions of source code must retain the above copyright
-* notice, this list of conditions and the following disclaimer.
-*     * 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.
-*     * Neither the name of Google Inc. nor the names of its
-* contributors may be used to endorse or promote products derived from
-* this software without specific prior written permission.
-*
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-* &quot;AS IS&quot; 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 THE COPYRIGHT
-* OWNER OR 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.
-*/
-
-#pragma once
-
-#include &quot;InspectorInstrumentation.h&quot;
-#include &lt;inspector/ScriptArguments.h&gt;
-#include &lt;inspector/ScriptCallStack.h&gt;
-
-namespace WebCore {
-
-inline void InspectorInstrumentation::addMessageToConsole(Page&amp; page, std::unique_ptr&lt;Inspector::ConsoleMessage&gt; message)
-{
-    addMessageToConsoleImpl(instrumentingAgentsForPage(page), WTFMove(message));
-}
-
-inline void InspectorInstrumentation::addMessageToConsole(WorkerGlobalScope*, std::unique_ptr&lt;Inspector::ConsoleMessage&gt;)
-{
-    // FIXME: &lt;https://webkit.org/b/127634&gt; Web Inspector: support debugging web workers
-}
-
-inline void InspectorInstrumentation::consoleCount(Page&amp; page, JSC::ExecState* state, RefPtr&lt;Inspector::ScriptArguments&gt;&amp;&amp; arguments)
-{
-    consoleCountImpl(instrumentingAgentsForPage(page), state, WTFMove(arguments));
-}
-
-inline void InspectorInstrumentation::takeHeapSnapshot(Frame&amp; frame, const String&amp; title)
-{
-    FAST_RETURN_IF_NO_FRONTENDS(void());
-    if (InstrumentingAgents* instrumentingAgents = instrumentingAgentsForFrame(frame))
-        takeHeapSnapshotImpl(*instrumentingAgents, title);
-}
-
-inline void InspectorInstrumentation::startConsoleTiming(Frame&amp; frame, const String&amp; title)
-{
-    if (InstrumentingAgents* instrumentingAgents = instrumentingAgentsForFrame(frame))
-        startConsoleTimingImpl(*instrumentingAgents, frame, title);
-}
-
-inline void InspectorInstrumentation::stopConsoleTiming(Frame&amp; frame, const String&amp; title, RefPtr&lt;Inspector::ScriptCallStack&gt;&amp;&amp; stack)
-{
-    if (InstrumentingAgents* instrumentingAgents = instrumentingAgentsForFrame(frame))
-        stopConsoleTimingImpl(*instrumentingAgents, frame, title, WTFMove(stack));
-}
-
-inline void InspectorInstrumentation::consoleTimeStamp(Frame&amp; frame, RefPtr&lt;Inspector::ScriptArguments&gt;&amp;&amp; arguments)
-{
-    FAST_RETURN_IF_NO_FRONTENDS(void());
-    if (InstrumentingAgents* instrumentingAgents = instrumentingAgentsForFrame(frame))
-        consoleTimeStampImpl(*instrumentingAgents, frame, WTFMove(arguments));
-}
-
-inline void InspectorInstrumentation::startProfiling(Page&amp; page, JSC::ExecState* exec, const String &amp;title)
-{
-    startProfilingImpl(instrumentingAgentsForPage(page), exec, title);
-}
-
-inline void InspectorInstrumentation::stopProfiling(Page&amp; page, JSC::ExecState* exec, const String &amp;title)
-{
-    stopProfilingImpl(instrumentingAgentsForPage(page), exec, title);
-}
-
-} // namespace WebCore
-
</del></span></pre></div>
<a id="trunkSourceWebCoreinspectorInspectorInstrumentationcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/inspector/InspectorInstrumentation.cpp (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/inspector/InspectorInstrumentation.cpp        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/Source/WebCore/inspector/InspectorInstrumentation.cpp        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -884,6 +884,12 @@
</span><span class="cx">         consoleAgent-&gt;startTiming(title);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void InspectorInstrumentation::startConsoleTimingImpl(InstrumentingAgents&amp; instrumentingAgents, const String&amp; title)
+{
+    if (WebConsoleAgent* consoleAgent = instrumentingAgents.webConsoleAgent())
+        consoleAgent-&gt;startTiming(title);
+}
+
</ins><span class="cx"> void InspectorInstrumentation::stopConsoleTimingImpl(InstrumentingAgents&amp; instrumentingAgents, Frame&amp; frame, const String&amp; title, RefPtr&lt;ScriptCallStack&gt;&amp;&amp; stack)
</span><span class="cx"> {
</span><span class="cx">     if (WebConsoleAgent* consoleAgent = instrumentingAgents.webConsoleAgent())
</span><span class="lines">@@ -892,6 +898,12 @@
</span><span class="cx">         timelineAgent-&gt;timeEnd(frame, title);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void InspectorInstrumentation::stopConsoleTimingImpl(InstrumentingAgents&amp; instrumentingAgents, const String&amp; title, RefPtr&lt;ScriptCallStack&gt;&amp;&amp; stack)
+{
+    if (WebConsoleAgent* consoleAgent = instrumentingAgents.webConsoleAgent())
+        consoleAgent-&gt;stopTiming(title, stack);
+}
+
</ins><span class="cx"> void InspectorInstrumentation::consoleTimeStampImpl(InstrumentingAgents&amp; instrumentingAgents, Frame&amp; frame, RefPtr&lt;ScriptArguments&gt;&amp;&amp; arguments)
</span><span class="cx"> {
</span><span class="cx">     if (InspectorTimelineAgent* timelineAgent = instrumentingAgents.inspectorTimelineAgent()) {
</span><span class="lines">@@ -927,6 +939,13 @@
</span><span class="cx">         domStorageAgent-&gt;didDispatchDOMStorageEvent(key, oldValue, newValue, storageType, securityOrigin, page);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+bool InspectorInstrumentation::shouldWaitForDebuggerOnStartImpl(InstrumentingAgents&amp; instrumentingAgents)
+{
+    if (InspectorWorkerAgent* workerAgent = instrumentingAgents.inspectorWorkerAgent())
+        return workerAgent-&gt;shouldWaitForDebuggerOnStart();
+    return false;
+}
+
</ins><span class="cx"> void InspectorInstrumentation::workerStartedImpl(InstrumentingAgents&amp; instrumentingAgents, WorkerInspectorProxy* proxy, const URL&amp; url)
</span><span class="cx"> {
</span><span class="cx">     if (InspectorWorkerAgent* workerAgent = instrumentingAgents.inspectorWorkerAgent())
</span></span></pre></div>
<a id="trunkSourceWebCoreinspectorInspectorInstrumentationh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/inspector/InspectorInstrumentation.h (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/inspector/InspectorInstrumentation.h        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/Source/WebCore/inspector/InspectorInstrumentation.h        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -199,15 +199,18 @@
</span><span class="cx">     static void willDestroyCachedResource(CachedResource&amp;);
</span><span class="cx"> 
</span><span class="cx">     static void addMessageToConsole(Page&amp;, std::unique_ptr&lt;Inspector::ConsoleMessage&gt;);
</span><del>-
-    // FIXME: Convert to ScriptArguments to match non-worker context.
</del><span class="cx">     static void addMessageToConsole(WorkerGlobalScope*, std::unique_ptr&lt;Inspector::ConsoleMessage&gt;);
</span><span class="cx"> 
</span><span class="cx">     static void consoleCount(Page&amp;, JSC::ExecState*, RefPtr&lt;Inspector::ScriptArguments&gt;&amp;&amp;);
</span><ins>+    static void consoleCount(WorkerGlobalScope&amp;, JSC::ExecState*, RefPtr&lt;Inspector::ScriptArguments&gt;&amp;&amp;);
</ins><span class="cx">     static void takeHeapSnapshot(Frame&amp;, const String&amp; title);
</span><span class="cx">     static void startConsoleTiming(Frame&amp;, const String&amp; title);
</span><ins>+    static void startConsoleTiming(WorkerGlobalScope&amp;, const String&amp; title);
</ins><span class="cx">     static void stopConsoleTiming(Frame&amp;, const String&amp; title, RefPtr&lt;Inspector::ScriptCallStack&gt;&amp;&amp;);
</span><ins>+    static void stopConsoleTiming(WorkerGlobalScope&amp;, const String&amp; title, RefPtr&lt;Inspector::ScriptCallStack&gt;&amp;&amp;);
</ins><span class="cx">     static void consoleTimeStamp(Frame&amp;, RefPtr&lt;Inspector::ScriptArguments&gt;&amp;&amp;);
</span><ins>+    static void startProfiling(Page&amp;, JSC::ExecState*, const String&amp; title);
+    static void stopProfiling(Page&amp;, JSC::ExecState*, const String&amp; title);
</ins><span class="cx"> 
</span><span class="cx">     static void didRequestAnimationFrame(Document*, int callbackId);
</span><span class="cx">     static void didCancelAnimationFrame(Document*, int callbackId);
</span><span class="lines">@@ -214,13 +217,11 @@
</span><span class="cx">     static InspectorInstrumentationCookie willFireAnimationFrame(Document*, int callbackId);
</span><span class="cx">     static void didFireAnimationFrame(const InspectorInstrumentationCookie&amp;);
</span><span class="cx"> 
</span><del>-    static void startProfiling(Page&amp;, JSC::ExecState*, const String&amp; title);
-    static void stopProfiling(Page&amp;, JSC::ExecState*, const String&amp; title);
-
</del><span class="cx">     static void didOpenDatabase(ScriptExecutionContext*, RefPtr&lt;Database&gt;&amp;&amp;, const String&amp; domain, const String&amp; name, const String&amp; version);
</span><span class="cx"> 
</span><span class="cx">     static void didDispatchDOMStorageEvent(const String&amp; key, const String&amp; oldValue, const String&amp; newValue, StorageType, SecurityOrigin*, Page*);
</span><span class="cx"> 
</span><ins>+    static bool shouldWaitForDebuggerOnStart(ScriptExecutionContext*);
</ins><span class="cx">     static void workerStarted(ScriptExecutionContext*, WorkerInspectorProxy*, const URL&amp;);
</span><span class="cx">     static void workerTerminated(ScriptExecutionContext*, WorkerInspectorProxy*);
</span><span class="cx"> 
</span><span class="lines">@@ -378,7 +379,9 @@
</span><span class="cx">     static void consoleCountImpl(InstrumentingAgents&amp;, JSC::ExecState*, RefPtr&lt;Inspector::ScriptArguments&gt;&amp;&amp;);
</span><span class="cx">     static void takeHeapSnapshotImpl(InstrumentingAgents&amp;, const String&amp; title);
</span><span class="cx">     static void startConsoleTimingImpl(InstrumentingAgents&amp;, Frame&amp;, const String&amp; title);
</span><ins>+    static void startConsoleTimingImpl(InstrumentingAgents&amp;, const String&amp; title);
</ins><span class="cx">     static void stopConsoleTimingImpl(InstrumentingAgents&amp;, Frame&amp;, const String&amp; title, RefPtr&lt;Inspector::ScriptCallStack&gt;&amp;&amp;);
</span><ins>+    static void stopConsoleTimingImpl(InstrumentingAgents&amp;, const String&amp; title, RefPtr&lt;Inspector::ScriptCallStack&gt;&amp;&amp;);
</ins><span class="cx">     static void consoleTimeStampImpl(InstrumentingAgents&amp;, Frame&amp;, RefPtr&lt;Inspector::ScriptArguments&gt;&amp;&amp;);
</span><span class="cx"> 
</span><span class="cx">     static void didRequestAnimationFrameImpl(InstrumentingAgents&amp;, int callbackId, Frame*);
</span><span class="lines">@@ -393,6 +396,7 @@
</span><span class="cx"> 
</span><span class="cx">     static void didDispatchDOMStorageEventImpl(InstrumentingAgents&amp;, const String&amp; key, const String&amp; oldValue, const String&amp; newValue, StorageType, SecurityOrigin*, Page*);
</span><span class="cx"> 
</span><ins>+    static bool shouldWaitForDebuggerOnStartImpl(InstrumentingAgents&amp;);
</ins><span class="cx">     static void workerStartedImpl(InstrumentingAgents&amp;, WorkerInspectorProxy*, const URL&amp;);
</span><span class="cx">     static void workerTerminatedImpl(InstrumentingAgents&amp;, WorkerInspectorProxy*);
</span><span class="cx"> 
</span><span class="lines">@@ -1059,6 +1063,14 @@
</span><span class="cx">         didDispatchDOMStorageEventImpl(*instrumentingAgents, key, oldValue, newValue, storageType, securityOrigin, page);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+inline bool InspectorInstrumentation::shouldWaitForDebuggerOnStart(ScriptExecutionContext* context)
+{
+    FAST_RETURN_IF_NO_FRONTENDS(false);
+    if (InstrumentingAgents* instrumentingAgents = instrumentingAgentsForContext(context))
+        return shouldWaitForDebuggerOnStartImpl(*instrumentingAgents);
+    return false;
+}
+
</ins><span class="cx"> inline void InspectorInstrumentation::workerStarted(ScriptExecutionContext* context, WorkerInspectorProxy* proxy, const URL&amp; url)
</span><span class="cx"> {
</span><span class="cx">     FAST_RETURN_IF_NO_FRONTENDS(void());
</span><span class="lines">@@ -1227,6 +1239,76 @@
</span><span class="cx">         updateApplicationCacheStatusImpl(*instrumentingAgents, frame);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+inline void InspectorInstrumentation::addMessageToConsole(Page&amp; page, std::unique_ptr&lt;Inspector::ConsoleMessage&gt; message)
+{
+    addMessageToConsoleImpl(instrumentingAgentsForPage(page), WTFMove(message));
+}
+
+inline void InspectorInstrumentation::addMessageToConsole(WorkerGlobalScope* workerGlobalScope, std::unique_ptr&lt;Inspector::ConsoleMessage&gt; message)
+{
+    if (InstrumentingAgents* instrumentingAgents = instrumentingAgentsForWorkerGlobalScope(workerGlobalScope))
+        addMessageToConsoleImpl(*instrumentingAgents, WTFMove(message));
+}
+
+inline void InspectorInstrumentation::consoleCount(Page&amp; page, JSC::ExecState* state, RefPtr&lt;Inspector::ScriptArguments&gt;&amp;&amp; arguments)
+{
+    consoleCountImpl(instrumentingAgentsForPage(page), state, WTFMove(arguments));
+}
+
+inline void InspectorInstrumentation::consoleCount(WorkerGlobalScope&amp; workerGlobalScope, JSC::ExecState* state, RefPtr&lt;Inspector::ScriptArguments&gt;&amp;&amp; arguments)
+{
+    if (InstrumentingAgents* instrumentingAgents = instrumentingAgentsForWorkerGlobalScope(&amp;workerGlobalScope))
+        consoleCountImpl(*instrumentingAgents, state, WTFMove(arguments));
+}
+
+inline void InspectorInstrumentation::takeHeapSnapshot(Frame&amp; frame, const String&amp; title)
+{
+    FAST_RETURN_IF_NO_FRONTENDS(void());
+    if (InstrumentingAgents* instrumentingAgents = instrumentingAgentsForFrame(frame))
+        takeHeapSnapshotImpl(*instrumentingAgents, title);
+}
+
+inline void InspectorInstrumentation::startConsoleTiming(Frame&amp; frame, const String&amp; title)
+{
+    if (InstrumentingAgents* instrumentingAgents = instrumentingAgentsForFrame(frame))
+        startConsoleTimingImpl(*instrumentingAgents, frame, title);
+}
+
+inline void InspectorInstrumentation::startConsoleTiming(WorkerGlobalScope&amp; workerGlobalScope, const String&amp; title)
+{
+    if (InstrumentingAgents* instrumentingAgents = instrumentingAgentsForWorkerGlobalScope(&amp;workerGlobalScope))
+        startConsoleTimingImpl(*instrumentingAgents, title);
+}
+
+inline void InspectorInstrumentation::stopConsoleTiming(Frame&amp; frame, const String&amp; title, RefPtr&lt;Inspector::ScriptCallStack&gt;&amp;&amp; stack)
+{
+    if (InstrumentingAgents* instrumentingAgents = instrumentingAgentsForFrame(frame))
+        stopConsoleTimingImpl(*instrumentingAgents, frame, title, WTFMove(stack));
+}
+
+inline void InspectorInstrumentation::stopConsoleTiming(WorkerGlobalScope&amp; workerGlobalScope, const String&amp; title, RefPtr&lt;Inspector::ScriptCallStack&gt;&amp;&amp; stack)
+{
+    if (InstrumentingAgents* instrumentingAgents = instrumentingAgentsForWorkerGlobalScope(&amp;workerGlobalScope))
+        stopConsoleTimingImpl(*instrumentingAgents, title, WTFMove(stack));
+}
+
+inline void InspectorInstrumentation::consoleTimeStamp(Frame&amp; frame, RefPtr&lt;Inspector::ScriptArguments&gt;&amp;&amp; arguments)
+{
+    FAST_RETURN_IF_NO_FRONTENDS(void());
+    if (InstrumentingAgents* instrumentingAgents = instrumentingAgentsForFrame(frame))
+        consoleTimeStampImpl(*instrumentingAgents, frame, WTFMove(arguments));
+}
+
+inline void InspectorInstrumentation::startProfiling(Page&amp; page, JSC::ExecState* exec, const String &amp;title)
+{
+    startProfilingImpl(instrumentingAgentsForPage(page), exec, title);
+}
+
+inline void InspectorInstrumentation::stopProfiling(Page&amp; page, JSC::ExecState* exec, const String &amp;title)
+{
+    stopProfilingImpl(instrumentingAgentsForPage(page), exec, title);
+}
+
</ins><span class="cx"> inline void InspectorInstrumentation::didRequestAnimationFrame(Document* document, int callbackId)
</span><span class="cx"> {
</span><span class="cx">     if (InstrumentingAgents* instrumentingAgents = instrumentingAgentsForDocument(document))
</span></span></pre></div>
<a id="trunkSourceWebCoreinspectorInspectorWorkerAgentcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/inspector/InspectorWorkerAgent.cpp (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/inspector/InspectorWorkerAgent.cpp        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/Source/WebCore/inspector/InspectorWorkerAgent.cpp        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -74,6 +74,17 @@
</span><span class="cx">     disconnectFromAllWorkerInspectorProxies();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void InspectorWorkerAgent::initialized(ErrorString&amp; errorString, const String&amp; workerId)
+{
+    WorkerInspectorProxy* proxy = m_connectedProxies.get(workerId);
+    if (!proxy) {
+        errorString = ASCIILiteral(&quot;Worker not found.&quot;);
+        return;
+    }
+
+    proxy-&gt;resumeWorkerIfPaused();
+}
+
</ins><span class="cx"> void InspectorWorkerAgent::sendMessageToWorker(ErrorString&amp; errorString, const String&amp; workerId, const String&amp; message)
</span><span class="cx"> {
</span><span class="cx">     if (!m_enabled) {
</span><span class="lines">@@ -95,6 +106,11 @@
</span><span class="cx">     m_frontendDispatcher-&gt;dispatchMessageFromWorker(proxy-&gt;identifier(), message);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+bool InspectorWorkerAgent::shouldWaitForDebuggerOnStart() const
+{
+    return m_enabled;
+}
+
</ins><span class="cx"> void InspectorWorkerAgent::workerStarted(WorkerInspectorProxy* proxy, const URL&amp;)
</span><span class="cx"> {
</span><span class="cx">     if (!m_enabled)
</span></span></pre></div>
<a id="trunkSourceWebCoreinspectorInspectorWorkerAgenth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/inspector/InspectorWorkerAgent.h (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/inspector/InspectorWorkerAgent.h        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/Source/WebCore/inspector/InspectorWorkerAgent.h        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -51,6 +51,7 @@
</span><span class="cx">     // WorkerBackendDispatcherHandler
</span><span class="cx">     void enable(ErrorString&amp;) override;
</span><span class="cx">     void disable(ErrorString&amp;) override;
</span><ins>+    void initialized(ErrorString&amp;, const String&amp; workerId) override;
</ins><span class="cx">     void sendMessageToWorker(ErrorString&amp;, const String&amp; workerId, const String&amp; message) override;
</span><span class="cx"> 
</span><span class="cx">     // PageChannel
</span><span class="lines">@@ -57,6 +58,7 @@
</span><span class="cx">     void sendMessageFromWorkerToFrontend(WorkerInspectorProxy*, const String&amp; message) override;
</span><span class="cx"> 
</span><span class="cx">     // InspectorInstrumentation
</span><ins>+    bool shouldWaitForDebuggerOnStart() const;
</ins><span class="cx">     void workerStarted(WorkerInspectorProxy*, const URL&amp;);
</span><span class="cx">     void workerTerminated(WorkerInspectorProxy*);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreinspectorWorkerConsoleAgentcppfromrev208009trunkSourceWebInspectorUIUserInterfaceControllersWorkerManagerjs"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebCore/inspector/WorkerConsoleAgent.cpp (from rev 208009, trunk/Source/WebInspectorUI/UserInterface/Controllers/WorkerManager.js) (0 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/inspector/WorkerConsoleAgent.cpp                                (rev 0)
+++ trunk/Source/WebCore/inspector/WorkerConsoleAgent.cpp        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -0,0 +1,43 @@
</span><ins>+/*
+ * Copyright (C) 2016 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.
+ */
+
+#include &quot;config.h&quot;
+#include &quot;WorkerConsoleAgent.h&quot;
+
+using namespace Inspector;
+
+namespace WebCore {
+
+WorkerConsoleAgent::WorkerConsoleAgent(WorkerAgentContext&amp; context, InspectorHeapAgent* heapAgent)
+    : WebConsoleAgent(context, heapAgent)
+{
+}
+
+void WorkerConsoleAgent::addInspectedNode(ErrorString&amp; errorString, int)
+{
+    errorString = ASCIILiteral(&quot;Unsupported for Workers.&quot;);
+}
+
+} // namespace WebCore
</ins></span></pre></div>
<a id="trunkSourceWebCoreinspectorWorkerConsoleAgenthfromrev208009trunkSourceWebInspectorUIUserInterfaceControllersWorkerManagerjs"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebCore/inspector/WorkerConsoleAgent.h (from rev 208009, trunk/Source/WebInspectorUI/UserInterface/Controllers/WorkerManager.js) (0 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/inspector/WorkerConsoleAgent.h                                (rev 0)
+++ trunk/Source/WebCore/inspector/WorkerConsoleAgent.h        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -0,0 +1,44 @@
</span><ins>+/*
+ * Copyright (C) 2016 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.
+ */
+
+#pragma once
+
+#include &quot;InspectorWebAgentBase.h&quot;
+#include &quot;WebConsoleAgent.h&quot;
+
+namespace WebCore {
+
+class WorkerConsoleAgent final : public WebConsoleAgent {
+    WTF_MAKE_NONCOPYABLE(WorkerConsoleAgent);
+    WTF_MAKE_FAST_ALLOCATED;
+public:
+    WorkerConsoleAgent(WorkerAgentContext&amp;, Inspector::InspectorHeapAgent*);
+    ~WorkerConsoleAgent() { }
+
+private:
+    void addInspectedNode(ErrorString&amp;, int nodeId) override;
+};
+
+} // namespace WebCore
</ins></span></pre></div>
<a id="trunkSourceWebCoreinspectorWorkerInspectorControllercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/inspector/WorkerInspectorController.cpp (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/inspector/WorkerInspectorController.cpp        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/Source/WebCore/inspector/WorkerInspectorController.cpp        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -26,10 +26,12 @@
</span><span class="cx"> #include &quot;config.h&quot;
</span><span class="cx"> #include &quot;WorkerInspectorController.h&quot;
</span><span class="cx"> 
</span><ins>+#include &quot;CommandLineAPIHost.h&quot;
</ins><span class="cx"> #include &quot;InstrumentingAgents.h&quot;
</span><span class="cx"> #include &quot;JSMainThreadExecState.h&quot;
</span><span class="cx"> #include &quot;WebInjectedScriptHost.h&quot;
</span><span class="cx"> #include &quot;WebInjectedScriptManager.h&quot;
</span><ins>+#include &quot;WorkerConsoleAgent.h&quot;
</ins><span class="cx"> #include &quot;WorkerGlobalScope.h&quot;
</span><span class="cx"> #include &quot;WorkerRuntimeAgent.h&quot;
</span><span class="cx"> #include &quot;WorkerThread.h&quot;
</span><span class="lines">@@ -74,8 +76,22 @@
</span><span class="cx">     auto runtimeAgent = std::make_unique&lt;WorkerRuntimeAgent&gt;(workerContext);
</span><span class="cx">     m_agents.append(WTFMove(runtimeAgent));
</span><span class="cx"> 
</span><del>-    // FIXME: ConsoleAgent
</del><ins>+    auto consoleAgent = std::make_unique&lt;WorkerConsoleAgent&gt;(workerContext, nullptr);
+    m_instrumentingAgents-&gt;setWebConsoleAgent(consoleAgent.get());
+    m_agents.append(WTFMove(consoleAgent));
+
</ins><span class="cx">     // FIXME: DebuggerAgent
</span><ins>+    // FIXME: HeapAgent
+
+    if (CommandLineAPIHost* commandLineAPIHost = m_injectedScriptManager-&gt;commandLineAPIHost()) {
+        commandLineAPIHost-&gt;init(
+              nullptr // InspectorAgent
+            , m_instrumentingAgents-&gt;webConsoleAgent()
+            , nullptr // InspectorDOMAgent
+            , nullptr // InspectorDOMStorageAgent
+            , nullptr // InspectorDatabaseAgent
+        );
+    }
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> WorkerInspectorController::~WorkerInspectorController()
</span></span></pre></div>
<a id="trunkSourceWebCorepagePageConsoleClientcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/PageConsoleClient.cpp (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/PageConsoleClient.cpp        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/Source/WebCore/page/PageConsoleClient.cpp        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -33,8 +33,8 @@
</span><span class="cx"> #include &quot;ChromeClient.h&quot;
</span><span class="cx"> #include &quot;Document.h&quot;
</span><span class="cx"> #include &quot;Frame.h&quot;
</span><del>-#include &quot;InspectorConsoleInstrumentation.h&quot;
</del><span class="cx"> #include &quot;InspectorController.h&quot;
</span><ins>+#include &quot;InspectorInstrumentation.h&quot;
</ins><span class="cx"> #include &quot;JSMainThreadExecState.h&quot;
</span><span class="cx"> #include &quot;MainFrame.h&quot;
</span><span class="cx"> #include &quot;Page.h&quot;
</span></span></pre></div>
<a id="trunkSourceWebCoreworkersWorkercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/workers/Worker.cpp (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/workers/Worker.cpp        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/Source/WebCore/workers/Worker.cpp        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -154,7 +154,7 @@
</span><span class="cx">         dispatchEvent(Event::create(eventNames().errorEvent, false, true));
</span><span class="cx">     else {
</span><span class="cx">         const ContentSecurityPolicyResponseHeaders&amp; contentSecurityPolicyResponseHeaders = m_contentSecurityPolicyResponseHeaders ? m_contentSecurityPolicyResponseHeaders.value() : scriptExecutionContext()-&gt;contentSecurityPolicy()-&gt;responseHeaders();
</span><del>-        m_contextProxy-&gt;startWorkerGlobalScope(m_scriptLoader-&gt;url(), scriptExecutionContext()-&gt;userAgent(m_scriptLoader-&gt;url()), m_scriptLoader-&gt;script(), contentSecurityPolicyResponseHeaders, m_shouldBypassMainWorldContentSecurityPolicy, DontPauseWorkerGlobalScopeOnStart);
</del><ins>+        m_contextProxy-&gt;startWorkerGlobalScope(m_scriptLoader-&gt;url(), scriptExecutionContext()-&gt;userAgent(m_scriptLoader-&gt;url()), m_scriptLoader-&gt;script(), contentSecurityPolicyResponseHeaders, m_shouldBypassMainWorldContentSecurityPolicy);
</ins><span class="cx">         InspectorInstrumentation::scriptImported(scriptExecutionContext(), m_scriptLoader-&gt;identifier(), m_scriptLoader-&gt;script());
</span><span class="cx">     }
</span><span class="cx">     m_scriptLoader = nullptr;
</span></span></pre></div>
<a id="trunkSourceWebCoreworkersWorkerConsoleClientcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/workers/WorkerConsoleClient.cpp (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/workers/WorkerConsoleClient.cpp        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/Source/WebCore/workers/WorkerConsoleClient.cpp        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -26,8 +26,11 @@
</span><span class="cx"> #include &quot;config.h&quot;
</span><span class="cx"> #include &quot;WorkerConsoleClient.h&quot;
</span><span class="cx"> 
</span><ins>+#include &quot;InspectorInstrumentation.h&quot;
</ins><span class="cx"> #include &lt;inspector/ConsoleMessage.h&gt;
</span><span class="cx"> #include &lt;inspector/ScriptArguments.h&gt;
</span><ins>+#include &lt;inspector/ScriptCallStack.h&gt;
+#include &lt;inspector/ScriptCallStackFactory.h&gt;
</ins><span class="cx"> 
</span><span class="cx"> using namespace Inspector;
</span><span class="cx"> 
</span><span class="lines">@@ -50,15 +53,28 @@
</span><span class="cx">     m_workerGlobalScope.addConsoleMessage(WTFMove(message));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void WorkerConsoleClient::count(JSC::ExecState* exec, RefPtr&lt;ScriptArguments&gt;&amp;&amp; arguments)
+{
+    InspectorInstrumentation::consoleCount(m_workerGlobalScope, exec, WTFMove(arguments));
+}
+
+void WorkerConsoleClient::time(JSC::ExecState*, const String&amp; title)
+{
+    InspectorInstrumentation::startConsoleTiming(m_workerGlobalScope, title);
+}
+
+void WorkerConsoleClient::timeEnd(JSC::ExecState* exec, const String&amp; title)
+{
+    RefPtr&lt;ScriptCallStack&gt; callStack(createScriptCallStackForConsole(exec, 1));
+    InspectorInstrumentation::stopConsoleTiming(m_workerGlobalScope, title, WTFMove(callStack));
+}
+
</ins><span class="cx"> // FIXME: &lt;https://webkit.org/b/153499&gt; Web Inspector: console.profile should use the new Sampling Profiler
</span><span class="cx"> void WorkerConsoleClient::profile(JSC::ExecState*, const String&amp;) { }
</span><span class="cx"> void WorkerConsoleClient::profileEnd(JSC::ExecState*, const String&amp;) { }
</span><span class="cx"> 
</span><span class="cx"> // FIXME: &lt;https://webkit.org/b/127634&gt; Web Inspector: support debugging web workers
</span><del>-void WorkerConsoleClient::count(JSC::ExecState*, RefPtr&lt;ScriptArguments&gt;&amp;&amp;) { }
</del><span class="cx"> void WorkerConsoleClient::takeHeapSnapshot(JSC::ExecState*, const String&amp;) { }
</span><del>-void WorkerConsoleClient::time(JSC::ExecState*, const String&amp;) { }
-void WorkerConsoleClient::timeEnd(JSC::ExecState*, const String&amp;) { }
</del><span class="cx"> void WorkerConsoleClient::timeStamp(JSC::ExecState*, RefPtr&lt;ScriptArguments&gt;&amp;&amp;) { }
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoreworkersWorkerGlobalScopecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/workers/WorkerGlobalScope.cpp (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/workers/WorkerGlobalScope.cpp        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/Source/WebCore/workers/WorkerGlobalScope.cpp        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -32,7 +32,7 @@
</span><span class="cx"> #include &quot;Crypto.h&quot;
</span><span class="cx"> #include &quot;ExceptionCode.h&quot;
</span><span class="cx"> #include &quot;IDBConnectionProxy.h&quot;
</span><del>-#include &quot;InspectorConsoleInstrumentation.h&quot;
</del><ins>+#include &quot;InspectorInstrumentation.h&quot;
</ins><span class="cx"> #include &quot;ScheduledAction.h&quot;
</span><span class="cx"> #include &quot;ScriptSourceCode.h&quot;
</span><span class="cx"> #include &quot;SecurityOrigin.h&quot;
</span><span class="lines">@@ -45,7 +45,8 @@
</span><span class="cx"> #include &quot;WorkerReportingProxy.h&quot;
</span><span class="cx"> #include &quot;WorkerScriptLoader.h&quot;
</span><span class="cx"> #include &quot;WorkerThread.h&quot;
</span><del>-#include &lt;inspector/ConsoleMessage.h&gt;
</del><ins>+#include &lt;inspector/ScriptArguments.h&gt;
+#include &lt;inspector/ScriptCallStack.h&gt;
</ins><span class="cx"> 
</span><span class="cx"> using namespace Inspector;
</span><span class="cx"> 
</span><span class="lines">@@ -257,7 +258,6 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    thread().workerReportingProxy().postConsoleMessageToWorkerObject(message-&gt;source(), message-&gt;level(), message-&gt;message(), message-&gt;line(), message-&gt;column(), message-&gt;url());
</del><span class="cx">     InspectorInstrumentation::addMessageToConsole(this, WTFMove(message));
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -273,8 +273,6 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    thread().workerReportingProxy().postConsoleMessageToWorkerObject(source, level, messageText, lineNumber, columnNumber, sourceURL);
-
</del><span class="cx">     std::unique_ptr&lt;Inspector::ConsoleMessage&gt; message;
</span><span class="cx">     if (callStack)
</span><span class="cx">         message = std::make_unique&lt;Inspector::ConsoleMessage&gt;(source, MessageType::Log, level, messageText, WTFMove(callStack), requestIdentifier);
</span></span></pre></div>
<a id="trunkSourceWebCoreworkersWorkerGlobalScopeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/workers/WorkerGlobalScope.h (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/workers/WorkerGlobalScope.h        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/Source/WebCore/workers/WorkerGlobalScope.h        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -32,12 +32,9 @@
</span><span class="cx"> #include &quot;URL.h&quot;
</span><span class="cx"> #include &quot;WorkerEventQueue.h&quot;
</span><span class="cx"> #include &quot;WorkerScriptController.h&quot;
</span><ins>+#include &lt;inspector/ConsoleMessage.h&gt;
</ins><span class="cx"> #include &lt;memory&gt;
</span><span class="cx"> 
</span><del>-namespace Inspector {
-class ConsoleMessage;
-}
-
</del><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="cx"> class ContentSecurityPolicyResponseHeaders;
</span></span></pre></div>
<a id="trunkSourceWebCoreworkersWorkerGlobalScopeProxyh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/workers/WorkerGlobalScopeProxy.h (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/workers/WorkerGlobalScopeProxy.h        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/Source/WebCore/workers/WorkerGlobalScopeProxy.h        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -48,7 +48,7 @@
</span><span class="cx"> 
</span><span class="cx">         virtual ~WorkerGlobalScopeProxy() { }
</span><span class="cx"> 
</span><del>-        virtual void startWorkerGlobalScope(const URL&amp; scriptURL, const String&amp; userAgent, const String&amp; sourceCode, const ContentSecurityPolicyResponseHeaders&amp;, bool shouldBypassMainWorldContentSecurityPolicy, WorkerThreadStartMode) = 0;
</del><ins>+        virtual void startWorkerGlobalScope(const URL&amp; scriptURL, const String&amp; userAgent, const String&amp; sourceCode, const ContentSecurityPolicyResponseHeaders&amp;, bool shouldBypassMainWorldContentSecurityPolicy) = 0;
</ins><span class="cx"> 
</span><span class="cx">         virtual void terminateWorkerGlobalScope() = 0;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreworkersWorkerInspectorProxycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/workers/WorkerInspectorProxy.cpp (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/workers/WorkerInspectorProxy.cpp        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/Source/WebCore/workers/WorkerInspectorProxy.cpp        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -30,7 +30,7 @@
</span><span class="cx"> #include &quot;ScriptExecutionContext.h&quot;
</span><span class="cx"> #include &quot;WorkerGlobalScope.h&quot;
</span><span class="cx"> #include &quot;WorkerInspectorController.h&quot;
</span><del>-#include &quot;WorkerThread.h&quot;
</del><ins>+#include &quot;WorkerRunLoop.h&quot;
</ins><span class="cx"> #include &lt;inspector/IdentifiersFactory.h&gt;
</span><span class="cx"> #include &lt;inspector/InspectorAgentBase.h&gt;
</span><span class="cx"> #include &lt;wtf/NeverDestroyed.h&gt;
</span><span class="lines">@@ -56,6 +56,12 @@
</span><span class="cx">     ASSERT(!m_pageChannel);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+WorkerThreadStartMode WorkerInspectorProxy::workerStartMode(ScriptExecutionContext* scriptExecutionContext)
+{
+    bool pauseOnStart = InspectorInstrumentation::shouldWaitForDebuggerOnStart(scriptExecutionContext);
+    return pauseOnStart ? WorkerThreadStartMode::WaitForInspector : WorkerThreadStartMode::Normal;
+}
+
</ins><span class="cx"> void WorkerInspectorProxy::workerStarted(ScriptExecutionContext* scriptExecutionContext, WorkerThread* thread, const URL&amp; url)
</span><span class="cx"> {
</span><span class="cx">     ASSERT(!m_workerThread);
</span><span class="lines">@@ -83,6 +89,13 @@
</span><span class="cx">     m_pageChannel = nullptr;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void WorkerInspectorProxy::resumeWorkerIfPaused()
+{
+    m_workerThread-&gt;runLoop().postTaskForMode([] (ScriptExecutionContext&amp; context) {
+        downcast&lt;WorkerGlobalScope&gt;(context).thread().stopRunningDebuggerTasks();
+    }, WorkerRunLoop::debuggerMode());
+}
+
</ins><span class="cx"> void WorkerInspectorProxy::connectToWorkerInspectorController(PageChannel* channel)
</span><span class="cx"> {
</span><span class="cx">     ASSERT(m_workerThread);
</span><span class="lines">@@ -91,9 +104,9 @@
</span><span class="cx"> 
</span><span class="cx">     m_pageChannel = channel;
</span><span class="cx"> 
</span><del>-    m_workerThread-&gt;runLoop().postTask([] (ScriptExecutionContext&amp; context) {
</del><ins>+    m_workerThread-&gt;runLoop().postTaskForMode([] (ScriptExecutionContext&amp; context) {
</ins><span class="cx">         downcast&lt;WorkerGlobalScope&gt;(context).inspectorController().connectFrontend();
</span><del>-    });
</del><ins>+    }, WorkerRunLoop::debuggerMode());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WorkerInspectorProxy::disconnectFromWorkerInspectorController()
</span><span class="lines">@@ -104,9 +117,9 @@
</span><span class="cx"> 
</span><span class="cx">     m_pageChannel = nullptr;
</span><span class="cx"> 
</span><del>-    m_workerThread-&gt;runLoop().postTask([] (ScriptExecutionContext&amp; context) {
</del><ins>+    m_workerThread-&gt;runLoop().postTaskForMode([] (ScriptExecutionContext&amp; context) {
</ins><span class="cx">         downcast&lt;WorkerGlobalScope&gt;(context).inspectorController().disconnectFrontend(DisconnectReason::InspectorDestroyed);
</span><del>-    });
</del><ins>+    }, WorkerRunLoop::debuggerMode());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WorkerInspectorProxy::sendMessageToWorkerInspectorController(const String&amp; message)
</span><span class="lines">@@ -115,9 +128,9 @@
</span><span class="cx">     if (!m_workerThread)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    m_workerThread-&gt;runLoop().postTask([message = message.isolatedCopy()] (ScriptExecutionContext&amp; context) {
</del><ins>+    m_workerThread-&gt;runLoop().postTaskForMode([message = message.isolatedCopy()] (ScriptExecutionContext&amp; context) {
</ins><span class="cx">         downcast&lt;WorkerGlobalScope&gt;(context).inspectorController().dispatchMessageFromFrontend(message);
</span><del>-    });
</del><ins>+    }, WorkerRunLoop::debuggerMode());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WorkerInspectorProxy::sendMessageFromWorkerToFrontend(const String&amp; message)
</span></span></pre></div>
<a id="trunkSourceWebCoreworkersWorkerInspectorProxyh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/workers/WorkerInspectorProxy.h (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/workers/WorkerInspectorProxy.h        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/Source/WebCore/workers/WorkerInspectorProxy.h        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -26,6 +26,7 @@
</span><span class="cx"> #pragma once
</span><span class="cx"> 
</span><span class="cx"> #include &quot;URL.h&quot;
</span><ins>+#include &quot;WorkerThread.h&quot;
</ins><span class="cx"> #include &lt;wtf/HashSet.h&gt;
</span><span class="cx"> #include &lt;wtf/text/WTFString.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -57,9 +58,11 @@
</span><span class="cx">     const String&amp; identifier() const { return m_identifier; }
</span><span class="cx">     ScriptExecutionContext* scriptExecutionContext() const { return m_scriptExecutionContext.get(); }
</span><span class="cx"> 
</span><ins>+    WorkerThreadStartMode workerStartMode(ScriptExecutionContext*);
</ins><span class="cx">     void workerStarted(ScriptExecutionContext*, WorkerThread*, const URL&amp;);
</span><span class="cx">     void workerTerminated();
</span><span class="cx"> 
</span><ins>+    void resumeWorkerIfPaused();
</ins><span class="cx">     void connectToWorkerInspectorController(PageChannel*);
</span><span class="cx">     void disconnectFromWorkerInspectorController();
</span><span class="cx">     void sendMessageToWorkerInspectorController(const String&amp;);
</span></span></pre></div>
<a id="trunkSourceWebCoreworkersWorkerMessagingProxycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/workers/WorkerMessagingProxy.cpp (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/workers/WorkerMessagingProxy.cpp        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/Source/WebCore/workers/WorkerMessagingProxy.cpp        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -74,11 +74,12 @@
</span><span class="cx">         || (is&lt;WorkerGlobalScope&gt;(*m_scriptExecutionContext) &amp;&amp; currentThread() == downcast&lt;WorkerGlobalScope&gt;(*m_scriptExecutionContext).thread().threadID()));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WorkerMessagingProxy::startWorkerGlobalScope(const URL&amp; scriptURL, const String&amp; userAgent, const String&amp; sourceCode, const ContentSecurityPolicyResponseHeaders&amp; contentSecurityPolicyResponseHeaders, bool shouldBypassMainWorldContentSecurityPolicy, WorkerThreadStartMode startMode)
</del><ins>+void WorkerMessagingProxy::startWorkerGlobalScope(const URL&amp; scriptURL, const String&amp; userAgent, const String&amp; sourceCode, const ContentSecurityPolicyResponseHeaders&amp; contentSecurityPolicyResponseHeaders, bool shouldBypassMainWorldContentSecurityPolicy)
</ins><span class="cx"> {
</span><span class="cx">     // FIXME: This need to be revisited when we support nested worker one day
</span><span class="cx">     ASSERT(m_scriptExecutionContext);
</span><span class="cx">     Document&amp; document = downcast&lt;Document&gt;(*m_scriptExecutionContext);
</span><ins>+    WorkerThreadStartMode startMode = m_inspectorProxy-&gt;workerStartMode(m_scriptExecutionContext.get());
</ins><span class="cx"> 
</span><span class="cx"> #if ENABLE(INDEXED_DATABASE)
</span><span class="cx">     IDBClient::IDBConnectionProxy* proxy = document.idbConnectionProxy();
</span><span class="lines">@@ -165,15 +166,6 @@
</span><span class="cx">     });
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WorkerMessagingProxy::postConsoleMessageToWorkerObject(MessageSource source, MessageLevel level, const String&amp; message, int lineNumber, int columnNumber, const String&amp; sourceURL)
-{
-    m_scriptExecutionContext-&gt;postTask([this, source, level, message = message.isolatedCopy(), sourceURL = sourceURL.isolatedCopy(), lineNumber, columnNumber] (ScriptExecutionContext&amp; context) {
-        if (askedToTerminate())
-            return;
-        context.addConsoleMessage(source, level, message, sourceURL, lineNumber, columnNumber);
-    });
-}
-
</del><span class="cx"> void WorkerMessagingProxy::postMessageToPageInspector(const String&amp; message)
</span><span class="cx"> {
</span><span class="cx">     m_scriptExecutionContext-&gt;postTask([this, message = message.isolatedCopy()] (ScriptExecutionContext&amp;) {
</span></span></pre></div>
<a id="trunkSourceWebCoreworkersWorkerMessagingProxyh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/workers/WorkerMessagingProxy.h (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/workers/WorkerMessagingProxy.h        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/Source/WebCore/workers/WorkerMessagingProxy.h        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -50,7 +50,7 @@
</span><span class="cx"> 
</span><span class="cx">         // Implementations of WorkerGlobalScopeProxy.
</span><span class="cx">         // (Only use these methods in the worker object thread.)
</span><del>-        void startWorkerGlobalScope(const URL&amp; scriptURL, const String&amp; userAgent, const String&amp; sourceCode, const ContentSecurityPolicyResponseHeaders&amp;, bool shouldBypassMainWorldContentSecurityPolicy, WorkerThreadStartMode) override;
</del><ins>+        void startWorkerGlobalScope(const URL&amp; scriptURL, const String&amp; userAgent, const String&amp; sourceCode, const ContentSecurityPolicyResponseHeaders&amp;, bool shouldBypassMainWorldContentSecurityPolicy) override;
</ins><span class="cx">         void terminateWorkerGlobalScope() override;
</span><span class="cx">         void postMessageToWorkerGlobalScope(RefPtr&lt;SerializedScriptValue&gt;&amp;&amp;, std::unique_ptr&lt;MessagePortChannelArray&gt;) override;
</span><span class="cx">         bool hasPendingActivity() const override;
</span><span class="lines">@@ -61,7 +61,6 @@
</span><span class="cx">         // (Only use these methods in the worker context thread.)
</span><span class="cx">         void postMessageToWorkerObject(RefPtr&lt;SerializedScriptValue&gt;&amp;&amp;, std::unique_ptr&lt;MessagePortChannelArray&gt;) override;
</span><span class="cx">         void postExceptionToWorkerObject(const String&amp; errorMessage, int lineNumber, int columnNumber, const String&amp; sourceURL) override;
</span><del>-        void postConsoleMessageToWorkerObject(MessageSource, MessageLevel, const String&amp; message, int lineNumber, int columnNumber, const String&amp; sourceURL) override;
</del><span class="cx">         void postMessageToPageInspector(const String&amp;) override;
</span><span class="cx">         void confirmMessageFromWorkerObject(bool hasPendingActivity) override;
</span><span class="cx">         void reportPendingActivity(bool hasPendingActivity) override;
</span></span></pre></div>
<a id="trunkSourceWebCoreworkersWorkerReportingProxyh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/workers/WorkerReportingProxy.h (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/workers/WorkerReportingProxy.h        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/Source/WebCore/workers/WorkerReportingProxy.h        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -41,7 +41,6 @@
</span><span class="cx"> 
</span><span class="cx">         virtual void postExceptionToWorkerObject(const String&amp; errorMessage, int lineNumber, int columnNumber, const String&amp; sourceURL) = 0;
</span><span class="cx"> 
</span><del>-        virtual void postConsoleMessageToWorkerObject(MessageSource, MessageLevel, const String&amp; message, int lineNumber, int columnNumber, const String&amp; sourceURL) = 0;
</del><span class="cx">         virtual void postMessageToPageInspector(const String&amp;) = 0;
</span><span class="cx"> 
</span><span class="cx">         // Invoked when close() is invoked on the worker context.
</span></span></pre></div>
<a id="trunkSourceWebCoreworkersWorkerRunLoopcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/workers/WorkerRunLoop.cpp (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/workers/WorkerRunLoop.cpp        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/Source/WebCore/workers/WorkerRunLoop.cpp        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -101,6 +101,11 @@
</span><span class="cx">     return String();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+String WorkerRunLoop::debuggerMode()
+{
+    return ASCIILiteral(&quot;debugger&quot;);
+}
+
</ins><span class="cx"> class RunLoopSetup {
</span><span class="cx">     WTF_MAKE_NONCOPYABLE(RunLoopSetup);
</span><span class="cx"> public:
</span></span></pre></div>
<a id="trunkSourceWebCoreworkersWorkerRunLooph"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/workers/WorkerRunLoop.h (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/workers/WorkerRunLoop.h        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/Source/WebCore/workers/WorkerRunLoop.h        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -63,6 +63,7 @@
</span><span class="cx">         unsigned long createUniqueId() { return ++m_uniqueId; }
</span><span class="cx"> 
</span><span class="cx">         static String defaultMode();
</span><ins>+        static String debuggerMode();
</ins><span class="cx"> 
</span><span class="cx">         class Task {
</span><span class="cx">             WTF_MAKE_NONCOPYABLE(Task); WTF_MAKE_FAST_ALLOCATED;
</span></span></pre></div>
<a id="trunkSourceWebCoreworkersWorkerThreadcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/workers/WorkerThread.cpp (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/workers/WorkerThread.cpp        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/Source/WebCore/workers/WorkerThread.cpp        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -167,6 +167,14 @@
</span><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    if (m_startupData-&gt;m_startMode == WorkerThreadStartMode::WaitForInspector) {
+        startRunningDebuggerTasks();
+
+        // If the worker was somehow terminated while processing debugger commands.
+        if (m_runLoop.terminated())
+            m_workerGlobalScope-&gt;script()-&gt;forbidExecution();
+    }
+
</ins><span class="cx">     WorkerScriptController* script = m_workerGlobalScope-&gt;script();
</span><span class="cx">     script-&gt;evaluate(ScriptSourceCode(m_startupData-&gt;m_sourceCode, m_startupData-&gt;m_scriptURL));
</span><span class="cx">     // Free the startup data to cause its member variable deref's happen on the worker's thread (since
</span><span class="lines">@@ -195,6 +203,22 @@
</span><span class="cx">     detachThread(threadID);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void WorkerThread::startRunningDebuggerTasks()
+{
+    ASSERT(!m_pausedForDebugger);
+    m_pausedForDebugger = true;
+
+    MessageQueueWaitResult result;
+    do {
+        result = m_runLoop.runInMode(m_workerGlobalScope.get(), WorkerRunLoop::debuggerMode());
+    } while (result != MessageQueueTerminated &amp;&amp; m_pausedForDebugger);
+}
+
+void WorkerThread::stopRunningDebuggerTasks()
+{
+    m_pausedForDebugger = false;
+}
+
</ins><span class="cx"> void WorkerThread::runEventLoop()
</span><span class="cx"> {
</span><span class="cx">     // Does not return until terminated.
</span></span></pre></div>
<a id="trunkSourceWebCoreworkersWorkerThreadh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/workers/WorkerThread.h (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/workers/WorkerThread.h        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/Source/WebCore/workers/WorkerThread.h        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -42,7 +42,10 @@
</span><span class="cx"> class WorkerLoaderProxy;
</span><span class="cx"> class WorkerReportingProxy;
</span><span class="cx"> 
</span><del>-enum WorkerThreadStartMode { DontPauseWorkerGlobalScopeOnStart, PauseWorkerGlobalScopeOnStart };
</del><ins>+enum class WorkerThreadStartMode {
+    Normal,
+    WaitForInspector,
+};
</ins><span class="cx"> 
</span><span class="cx"> namespace IDBClient {
</span><span class="cx"> class IDBConnectionProxy;
</span><span class="lines">@@ -71,6 +74,9 @@
</span><span class="cx">     void setNotificationClient(NotificationClient* client) { m_notificationClient = client; }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><ins>+    void startRunningDebuggerTasks();
+    void stopRunningDebuggerTasks();
+
</ins><span class="cx"> protected:
</span><span class="cx">     WorkerThread(const URL&amp;, const String&amp; userAgent, const String&amp; sourceCode, WorkerLoaderProxy&amp;, WorkerReportingProxy&amp;, WorkerThreadStartMode, const ContentSecurityPolicyResponseHeaders&amp;, bool shouldBypassMainWorldContentSecurityPolicy, const SecurityOrigin* topOrigin, IDBClient::IDBConnectionProxy*, SocketProvider*);
</span><span class="cx"> 
</span><span class="lines">@@ -94,6 +100,7 @@
</span><span class="cx">     WorkerRunLoop m_runLoop;
</span><span class="cx">     WorkerLoaderProxy&amp; m_workerLoaderProxy;
</span><span class="cx">     WorkerReportingProxy&amp; m_workerReportingProxy;
</span><ins>+    bool m_pausedForDebugger { false };
</ins><span class="cx"> 
</span><span class="cx">     RefPtr&lt;WorkerGlobalScope&gt; m_workerGlobalScope;
</span><span class="cx">     Lock m_threadCreationMutex;
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/ChangeLog (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/ChangeLog        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/Source/WebInspectorUI/ChangeLog        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -1,5 +1,42 @@
</span><span class="cx"> 2016-10-27  Joseph Pecoraro  &lt;pecoraro@apple.com&gt;
</span><span class="cx"> 
</span><ins>+        Web Inspector: Include ConsoleAgent in Workers - real console.log support
+        https://bugs.webkit.org/show_bug.cgi?id=163844
+        &lt;rdar://problem/28903328&gt;
+
+        Reviewed by Brian Burg.
+
+        * UserInterface/Protocol/Target.js:
+        (WebInspector.Target.prototype.get ConsoleAgent):
+        (WebInspector.Target.prototype._initializeNonMainTarget):
+        * UserInterface/Protocol/Connection.js:
+        (InspectorBackend.WorkerConnection):
+        Add ConsoleAgent.
+
+        * UserInterface/Controllers/LogManager.js:
+        (WebInspector.LogManager.prototype.messageWasAdded):
+        (WebInspector.LogManager.prototype.requestClearMessages):
+        Handle ConsoleAgent calls with multiple targets.
+
+        * UserInterface/Protocol/ConsoleObserver.js:
+        (WebInspector.ConsoleObserver.prototype.messageAdded):
+        Dispatch with the target in case we create Model objects.
+
+        * UserInterface/Controllers/WorkerManager.js:
+        (WebInspector.WorkerManager.prototype.workerCreated):
+        The frontend must now call &quot;initialized&quot; on Workers after
+        sending our setup messages (enable, set breakpoints, etc).
+
+        * UserInterface/Protocol/RemoteObject.js:
+        (WebInspector.RemoteObject.prototype.get target):
+        Expose an accessor for tests.
+
+        * UserInterface/Protocol/LoggingProtocolTracer.js:
+        (WebInspector.LoggingProtocolTracer.prototype._processEntry):
+        Actually output the Exception, useful when debugging failures in tests.
+
+2016-10-27  Joseph Pecoraro  &lt;pecoraro@apple.com&gt;
+
</ins><span class="cx">         Web Inspector: Include RuntimeAgent in Workers - evaluate in Worker context
</span><span class="cx">         https://bugs.webkit.org/show_bug.cgi?id=163835
</span><span class="cx">         &lt;rdar://problem/28901465&gt;
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceControllersJavaScriptLogViewControllerjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Controllers/JavaScriptLogViewController.js (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Controllers/JavaScriptLogViewController.js        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/Source/WebInspectorUI/UserInterface/Controllers/JavaScriptLogViewController.js        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -132,7 +132,7 @@
</span><span class="cx"> 
</span><span class="cx">         function saveResultCallback(savedResultIndex)
</span><span class="cx">         {
</span><del>-            let commandResultMessage = new WebInspector.ConsoleCommandResultMessage(result, false, savedResultIndex, shouldRevealConsole);
</del><ins>+            let commandResultMessage = new WebInspector.ConsoleCommandResultMessage(result.target, result, false, savedResultIndex, shouldRevealConsole);
</ins><span class="cx">             let commandResultMessageView = new WebInspector.ConsoleMessageView(commandResultMessage);
</span><span class="cx">             this._appendConsoleMessageView(commandResultMessageView, true);
</span><span class="cx">         }
</span><span class="lines">@@ -231,7 +231,7 @@
</span><span class="cx">                 return;
</span><span class="cx"> 
</span><span class="cx">             let shouldRevealConsole = true;
</span><del>-            let commandResultMessage = new WebInspector.ConsoleCommandResultMessage(result, wasThrown, savedResultIndex, shouldRevealConsole);
</del><ins>+            let commandResultMessage = new WebInspector.ConsoleCommandResultMessage(result.target, result, wasThrown, savedResultIndex, shouldRevealConsole);
</ins><span class="cx">             let commandResultMessageView = new WebInspector.ConsoleMessageView(commandResultMessage);
</span><span class="cx">             this._appendConsoleMessageView(commandResultMessageView, true);
</span><span class="cx">         }
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceControllersLogManagerjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Controllers/LogManager.js (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Controllers/LogManager.js        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/Source/WebInspectorUI/UserInterface/Controllers/LogManager.js        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -40,7 +40,7 @@
</span><span class="cx"> 
</span><span class="cx">     // Public
</span><span class="cx"> 
</span><del>-    messageWasAdded(source, level, text, type, url, line, column, repeatCount, parameters, stackTrace, requestId)
</del><ins>+    messageWasAdded(target, source, level, text, type, url, line, column, repeatCount, parameters, stackTrace, requestId)
</ins><span class="cx">     {
</span><span class="cx">         // Called from WebInspector.ConsoleObserver.
</span><span class="cx"> 
</span><span class="lines">@@ -47,9 +47,9 @@
</span><span class="cx">         // FIXME: Get a request from request ID.
</span><span class="cx"> 
</span><span class="cx">         if (parameters)
</span><del>-            parameters = parameters.map(WebInspector.RemoteObject.fromPayload);
</del><ins>+            parameters = parameters.map((x) =&gt; WebInspector.RemoteObject.fromPayload(x, target));
</ins><span class="cx"> 
</span><del>-        let message = new WebInspector.ConsoleMessage(source, level, text, type, url, line, column, repeatCount, parameters, stackTrace, null);
</del><ins>+        let message = new WebInspector.ConsoleMessage(target, source, level, text, type, url, line, column, repeatCount, parameters, stackTrace, null);
</ins><span class="cx"> 
</span><span class="cx">         this.dispatchEventToListeners(WebInspector.LogManager.Event.MessageAdded, {message});
</span><span class="cx"> 
</span><span class="lines">@@ -100,7 +100,8 @@
</span><span class="cx">     {
</span><span class="cx">         this._clearMessagesRequested = true;
</span><span class="cx"> 
</span><del>-        ConsoleAgent.clearMessages();
</del><ins>+        for (let target of WebInspector.targets)
+            target.ConsoleAgent.clearMessages();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     // Private
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceControllersWorkerManagerjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Controllers/WorkerManager.js (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Controllers/WorkerManager.js        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/Source/WebInspectorUI/UserInterface/Controllers/WorkerManager.js        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -44,6 +44,9 @@
</span><span class="cx">         WebInspector.targetManager.addTarget(workerTarget);
</span><span class="cx"> 
</span><span class="cx">         this._connections.set(workerId, connection);
</span><ins>+
+        // Unpause the worker now that we have sent all initialization messages.
+        WorkerAgent.initialized(workerId);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     workerTerminated(workerId)
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceModelsConsoleCommandResultMessagejs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Models/ConsoleCommandResultMessage.js (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Models/ConsoleCommandResultMessage.js        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/Source/WebInspectorUI/UserInterface/Models/ConsoleCommandResultMessage.js        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -29,13 +29,13 @@
</span><span class="cx"> 
</span><span class="cx"> WebInspector.ConsoleCommandResultMessage = class ConsoleCommandResult extends WebInspector.ConsoleMessage
</span><span class="cx"> {
</span><del>-    constructor(result, wasThrown, savedResultIndex, shouldRevealConsole = true)
</del><ins>+    constructor(target, result, wasThrown, savedResultIndex, shouldRevealConsole = true)
</ins><span class="cx">     {
</span><span class="cx">         let source = WebInspector.ConsoleMessage.MessageSource.JS;
</span><span class="cx">         let level = wasThrown ? WebInspector.ConsoleMessage.MessageLevel.Error : WebInspector.ConsoleMessage.MessageLevel.Log;
</span><span class="cx">         let type = WebInspector.ConsoleMessage.MessageType.Result;
</span><span class="cx"> 
</span><del>-        super(source, level, &quot;&quot;, type, undefined, undefined, undefined, 0, [result], undefined, undefined);
</del><ins>+        super(target, source, level, &quot;&quot;, type, undefined, undefined, undefined, 0, [result], undefined, undefined);
</ins><span class="cx"> 
</span><span class="cx">         this._savedResultIndex = savedResultIndex;
</span><span class="cx">         this._shouldRevealConsole = shouldRevealConsole;
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceModelsConsoleMessagejs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Models/ConsoleMessage.js (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Models/ConsoleMessage.js        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/Source/WebInspectorUI/UserInterface/Models/ConsoleMessage.js        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -25,7 +25,7 @@
</span><span class="cx"> 
</span><span class="cx"> WebInspector.ConsoleMessage = class ConsoleMessage extends WebInspector.Object
</span><span class="cx"> {
</span><del>-    constructor(source, level, message, type, url, line, column, repeatCount, parameters, stackTrace, request)
</del><ins>+    constructor(target, source, level, message, type, url, line, column, repeatCount, parameters, stackTrace, request)
</ins><span class="cx">     {
</span><span class="cx">         super();
</span><span class="cx"> 
</span><span class="lines">@@ -32,8 +32,10 @@
</span><span class="cx">         console.assert(typeof source === &quot;string&quot;);
</span><span class="cx">         console.assert(typeof level === &quot;string&quot;);
</span><span class="cx">         console.assert(typeof message === &quot;string&quot;);
</span><ins>+        console.assert(target instanceof WebInspector.Target);
</ins><span class="cx">         console.assert(!parameters || parameters.every((x) =&gt; x instanceof WebInspector.RemoteObject));
</span><span class="cx"> 
</span><ins>+        this._target = target;
</ins><span class="cx">         this._source = source;
</span><span class="cx">         this._level = level;
</span><span class="cx">         this._messageText = message;
</span><span class="lines">@@ -54,6 +56,7 @@
</span><span class="cx"> 
</span><span class="cx">     // Public
</span><span class="cx"> 
</span><ins>+    get target() { return this._target; }
</ins><span class="cx">     get source() { return this._source; }
</span><span class="cx">     get level() { return this._level; }
</span><span class="cx">     get messageText() { return this._messageText; }
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceProtocolConnectionjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Protocol/Connection.js (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Protocol/Connection.js        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/Source/WebInspectorUI/UserInterface/Protocol/Connection.js        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -296,7 +296,7 @@
</span><span class="cx">         this._workerId = workerId;
</span><span class="cx"> 
</span><span class="cx">         // FIXME: Get this list from generated InspectorBackendCommands / InspectorBackend.
</span><del>-        const workerDomains = [&quot;Runtime&quot;];
</del><ins>+        const workerDomains = [&quot;Runtime&quot;, &quot;Console&quot;];
</ins><span class="cx"> 
</span><span class="cx">         for (let domain of workerDomains) {
</span><span class="cx">             let agent = InspectorBackend._agents[domain];
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceProtocolConsoleObserverjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Protocol/ConsoleObserver.js (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Protocol/ConsoleObserver.js        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/Source/WebInspectorUI/UserInterface/Protocol/ConsoleObserver.js        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -35,7 +35,7 @@
</span><span class="cx">         if (message.type === &quot;assert&quot; &amp;&amp; !message.text)
</span><span class="cx">             message.text = WebInspector.UIString(&quot;Assertion&quot;);
</span><span class="cx"> 
</span><del>-        WebInspector.logManager.messageWasAdded(message.source, message.level, message.text, message.type, message.url, message.line, message.column || 0, message.repeatCount, message.parameters, message.stackTrace, message.networkRequestId);
</del><ins>+        WebInspector.logManager.messageWasAdded(this.target, message.source, message.level, message.text, message.type, message.url, message.line, message.column || 0, message.repeatCount, message.parameters, message.stackTrace, message.networkRequestId);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     messageRepeatCountUpdated(count)
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceProtocolLoggingProtocolTracerjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Protocol/LoggingProtocolTracer.js (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Protocol/LoggingProtocolTracer.js        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/Source/WebInspectorUI/UserInterface/Protocol/LoggingProtocolTracer.js        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -108,7 +108,13 @@
</span><span class="cx">                 this._logToConsole(`time-stats: Handling: ${entry.timings.dispatch || NaN}ms; RTT: ${entry.timings.rtt}ms`);
</span><span class="cx">             else if (entry.timings.dispatch)
</span><span class="cx">                 this._logToConsole(`time-stats: Handling: ${entry.timings.dispatch || NaN}ms`);
</span><del>-        } else if (this._dumpMessagesToConsole &amp;&amp; !entry.timings)
</del><ins>+        } else if (this._dumpMessagesToConsole &amp;&amp; !entry.timings) {
</ins><span class="cx">             this._logToConsole(`${entry.type}: ${JSON.stringify(entry.message)}`);
</span><ins>+            if (entry.exception) {
+                this._logToConsole(entry.exception);
+                if (entry.exception.stack)
+                    this._logToConsole(entry.exception.stack);
+            }
+        }
</ins><span class="cx">     }
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceProtocolRemoteObjectjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Protocol/RemoteObject.js (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Protocol/RemoteObject.js        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/Source/WebInspectorUI/UserInterface/Protocol/RemoteObject.js        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -152,6 +152,11 @@
</span><span class="cx"> 
</span><span class="cx">     // Public
</span><span class="cx"> 
</span><ins>+    get target()
+    {
+        return this._target;
+    }
+
</ins><span class="cx">     get objectId()
</span><span class="cx">     {
</span><span class="cx">         return this._objectId;
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceProtocolTargetjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Protocol/Target.js (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Protocol/Target.js        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/Source/WebInspectorUI/UserInterface/Protocol/Target.js        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -42,6 +42,7 @@
</span><span class="cx">     // Agents
</span><span class="cx"> 
</span><span class="cx">     get RuntimeAgent() { return this._connection._agents.Runtime; }
</span><ins>+    get ConsoleAgent() { return this._connection._agents.Console; }
</ins><span class="cx"> 
</span><span class="cx">     // Public
</span><span class="cx"> 
</span><span class="lines">@@ -98,5 +99,8 @@
</span><span class="cx">             this.RuntimeAgent.enable();
</span><span class="cx">             this._executionContext = new WebInspector.ExecutionContext(this, WebInspector.RuntimeManager.TopLevelContextExecutionIdentifier, this.displayName, false, null);
</span><span class="cx">         }
</span><ins>+
+        if (this.ConsoleAgent)
+            this.ConsoleAgent.enable();
</ins><span class="cx">     }
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsConsoleMessageViewjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js (208009 => 208010)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js        2016-10-27 22:19:12 UTC (rev 208009)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js        2016-10-27 22:19:33 UTC (rev 208010)
</span><span class="lines">@@ -416,7 +416,7 @@
</span><span class="cx">             return parameter;
</span><span class="cx"> 
</span><span class="cx">         if (typeof parameter === &quot;object&quot;)
</span><del>-            return WebInspector.RemoteObject.fromPayload(parameter);
</del><ins>+            return WebInspector.RemoteObject.fromPayload(parameter, this._message.target);
</ins><span class="cx"> 
</span><span class="cx">         return WebInspector.RemoteObject.fromPrimitiveValue(parameter);
</span><span class="cx">     }
</span></span></pre>
</div>
</div>

</body>
</html>