<!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>[175478] trunk/Source</title>
</head>
<body>

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

<h3>Log Message</h3>
<pre>Web Inspector: ALTERNATE_DISPATCHERS Let the frontend know about extra agents
https://bugs.webkit.org/show_bug.cgi?id=138236

Reviewed by Brian Burg.

Source/JavaScriptCore:

Inform the frontend about any extra domains the backend may have
above and beyond the default list of domains for the debuggable type.
This approach means there is almost no cost to normal debugging.
When a JSContext is debugged with extra agents, a message is sent
to the frontend letting it know which domains to then activate,
and perform any initialization work that may be required.

* inspector/InspectorAgentBase.h:
(Inspector::InspectorAgentBase::domainName):
* inspector/InspectorAgentRegistry.cpp:
(Inspector::InspectorAgentRegistry::appendExtraAgent):
* inspector/InspectorAgentRegistry.h:
* inspector/scripts/codegen/generator_templates.py:
Provide a way to get a list of just the extra domains.
To aggregate this list provide a different &quot;append&quot;
specifically for extra agents.

* inspector/JSGlobalObjectInspectorController.h:
* inspector/JSGlobalObjectInspectorController.cpp:
(Inspector::JSGlobalObjectInspectorController::JSGlobalObjectInspectorController):
(Inspector::JSGlobalObjectInspectorController::connectFrontend):
When a frontend connects, inform it of the extra domains.

* inspector/protocol/Inspector.json:
* inspector/agents/InspectorAgent.h:
* inspector/agents/InspectorAgent.cpp:
(Inspector::InspectorAgent::enable):
(Inspector::InspectorAgent::activateExtraDomains):
Send an event with the extra domains to activate.

Source/WebInspectorUI:

* UserInterface/Protocol/InspectorBackend.js:
(InspectorBackendClass.prototype.activateDomain):
* UserInterface/Protocol/InspectorObserver.js:
(WebInspector.InspectorObserver.prototype.activateExtraDomains):
* UserInterface/Base/Object.js:
* UserInterface/Base/Test.js:
* UserInterface/Base/Main.js:
(WebInspector.activateExtraDomains):
Default state is that there are no extra domains. When extra domains
are activated, some agents need to be re-initialized. Dispatch a
model event so views also know to re-initialize.

* UserInterface/Controllers/ApplicationCacheManager.js:
(WebInspector.ApplicationCacheManager.prototype._mainResourceDidChange):
* UserInterface/Controllers/DOMTreeManager.js:
Be more careful about direct agent use during main resource changes.
That can happen with a JSContext extended with a Page agent.

* UserInterface/Controllers/FrameResourceManager.js:
(WebInspector.FrameResourceManager):
(WebInspector.FrameResourceManager.prototype._mainFrameDidChange):
(WebInspector.FrameResourceManager.prototype._extraDomainsActivated):
* UserInterface/Controllers/StorageManager.js:
(WebInspector.StorageManager):
(WebInspector.StorageManager.prototype._databaseForIdentifier):
(WebInspector.StorageManager.prototype._extraDomainsActivated):
It is possible new window.FooAgent's are available. Perform expected
initialization re-checking if the agents are now available.

* UserInterface/Models/CSSCompletions.js:
Avoid re-initialization if we already did it. This should never
happen but this is just to be safe.

* UserInterface/Views/ResourceSidebarPanel.js:
(WebInspector.ResourceSidebarPanel):
(WebInspector.ResourceSidebarPanel.prototype._extraDomainsActivated):
Don't disallow expandable tree elements if this is a JSContext with
extra domains. If that JSContext has resources, we would have been
unable to see child resources.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectorInspectorAgentBaseh">trunk/Source/JavaScriptCore/inspector/InspectorAgentBase.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectorInspectorAgentRegistrycpp">trunk/Source/JavaScriptCore/inspector/InspectorAgentRegistry.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectorInspectorAgentRegistryh">trunk/Source/JavaScriptCore/inspector/InspectorAgentRegistry.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectorJSGlobalObjectInspectorControllercpp">trunk/Source/JavaScriptCore/inspector/JSGlobalObjectInspectorController.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectorJSGlobalObjectInspectorControllerh">trunk/Source/JavaScriptCore/inspector/JSGlobalObjectInspectorController.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectoragentsInspectorAgentcpp">trunk/Source/JavaScriptCore/inspector/agents/InspectorAgent.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectoragentsInspectorAgenth">trunk/Source/JavaScriptCore/inspector/agents/InspectorAgent.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectorprotocolInspectorjson">trunk/Source/JavaScriptCore/inspector/protocol/Inspector.json</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectorscriptscodegengenerate_objective_cpy">trunk/Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c.py</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectorscriptscodegengenerator_templatespy">trunk/Source/JavaScriptCore/inspector/scripts/codegen/generator_templates.py</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectorscriptstestsexpectedcommandswithasyncattributejsonresult">trunk/Source/JavaScriptCore/inspector/scripts/tests/expected/commands-with-async-attribute.json-result</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectorscriptstestsexpectedcommandswithoptionalcallreturnparametersjsonresult">trunk/Source/JavaScriptCore/inspector/scripts/tests/expected/commands-with-optional-call-return-parameters.json-result</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectorscriptstestsexpecteddomainswithvaryingcommandsizesjsonresult">trunk/Source/JavaScriptCore/inspector/scripts/tests/expected/domains-with-varying-command-sizes.json-result</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectorscriptstestsexpectedgeneratedomainswithfeatureguardsjsonresult">trunk/Source/JavaScriptCore/inspector/scripts/tests/expected/generate-domains-with-feature-guards.json-result</a></li>
<li><a href="#trunkSourceWebInspectorUIChangeLog">trunk/Source/WebInspectorUI/ChangeLog</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceBaseMainjs">trunk/Source/WebInspectorUI/UserInterface/Base/Main.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceBaseObjectjs">trunk/Source/WebInspectorUI/UserInterface/Base/Object.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceBaseTestjs">trunk/Source/WebInspectorUI/UserInterface/Base/Test.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceControllersApplicationCacheManagerjs">trunk/Source/WebInspectorUI/UserInterface/Controllers/ApplicationCacheManager.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceControllersDOMTreeManagerjs">trunk/Source/WebInspectorUI/UserInterface/Controllers/DOMTreeManager.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceControllersFrameResourceManagerjs">trunk/Source/WebInspectorUI/UserInterface/Controllers/FrameResourceManager.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceControllersStorageManagerjs">trunk/Source/WebInspectorUI/UserInterface/Controllers/StorageManager.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceModelsCSSCompletionsjs">trunk/Source/WebInspectorUI/UserInterface/Models/CSSCompletions.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceProtocolInspectorBackendjs">trunk/Source/WebInspectorUI/UserInterface/Protocol/InspectorBackend.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceProtocolInspectorObserverjs">trunk/Source/WebInspectorUI/UserInterface/Protocol/InspectorObserver.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsResourceSidebarPaneljs">trunk/Source/WebInspectorUI/UserInterface/Views/ResourceSidebarPanel.js</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (175477 => 175478)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2014-11-03 19:19:55 UTC (rev 175477)
+++ trunk/Source/JavaScriptCore/ChangeLog        2014-11-03 19:36:14 UTC (rev 175478)
</span><span class="lines">@@ -1,3 +1,40 @@
</span><ins>+2014-11-03  Joseph Pecoraro  &lt;pecoraro@apple.com&gt;
+
+        Web Inspector: ALTERNATE_DISPATCHERS Let the frontend know about extra agents
+        https://bugs.webkit.org/show_bug.cgi?id=138236
+
+        Reviewed by Brian Burg.
+
+        Inform the frontend about any extra domains the backend may have
+        above and beyond the default list of domains for the debuggable type.
+        This approach means there is almost no cost to normal debugging.
+        When a JSContext is debugged with extra agents, a message is sent
+        to the frontend letting it know which domains to then activate,
+        and perform any initialization work that may be required.
+
+        * inspector/InspectorAgentBase.h:
+        (Inspector::InspectorAgentBase::domainName):
+        * inspector/InspectorAgentRegistry.cpp:
+        (Inspector::InspectorAgentRegistry::appendExtraAgent):
+        * inspector/InspectorAgentRegistry.h:
+        * inspector/scripts/codegen/generator_templates.py:
+        Provide a way to get a list of just the extra domains.
+        To aggregate this list provide a different &quot;append&quot;
+        specifically for extra agents.
+
+        * inspector/JSGlobalObjectInspectorController.h:
+        * inspector/JSGlobalObjectInspectorController.cpp:
+        (Inspector::JSGlobalObjectInspectorController::JSGlobalObjectInspectorController):
+        (Inspector::JSGlobalObjectInspectorController::connectFrontend):
+        When a frontend connects, inform it of the extra domains.
+
+        * inspector/protocol/Inspector.json:
+        * inspector/agents/InspectorAgent.h:
+        * inspector/agents/InspectorAgent.cpp:
+        (Inspector::InspectorAgent::enable):
+        (Inspector::InspectorAgent::activateExtraDomains):
+        Send an event with the extra domains to activate.
+
</ins><span class="cx"> 2014-11-01  Michael Saboff  &lt;msaboff@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Add scope operand to op_resolve_scope
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectorInspectorAgentBaseh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/InspectorAgentBase.h (175477 => 175478)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/InspectorAgentBase.h        2014-11-03 19:19:55 UTC (rev 175477)
+++ trunk/Source/JavaScriptCore/inspector/InspectorAgentBase.h        2014-11-03 19:36:14 UTC (rev 175478)
</span><span class="lines">@@ -43,6 +43,8 @@
</span><span class="cx"> public:
</span><span class="cx">     virtual ~InspectorAgentBase() { }
</span><span class="cx"> 
</span><ins>+    String domainName() const { return m_name; }
+
</ins><span class="cx">     virtual void didCreateFrontendAndBackend(InspectorFrontendChannel*, InspectorBackendDispatcher*) = 0;
</span><span class="cx">     virtual void willDestroyFrontendAndBackend(InspectorDisconnectReason reason) = 0;
</span><span class="cx">     virtual void discardAgent() { }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectorInspectorAgentRegistrycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/InspectorAgentRegistry.cpp (175477 => 175478)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/InspectorAgentRegistry.cpp        2014-11-03 19:19:55 UTC (rev 175477)
+++ trunk/Source/JavaScriptCore/inspector/InspectorAgentRegistry.cpp        2014-11-03 19:36:14 UTC (rev 175478)
</span><span class="lines">@@ -42,6 +42,15 @@
</span><span class="cx">     m_agents.append(WTF::move(agent));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+#if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
+void InspectorAgentRegistry::appendExtraAgent(std::unique_ptr&lt;InspectorAgentBase&gt; agent)
+{
+    m_extraDomains.append(agent-&gt;domainName());
+
+    append(WTF::move(agent));
+}
+#endif
+
</ins><span class="cx"> void InspectorAgentRegistry::didCreateFrontendAndBackend(InspectorFrontendChannel* frontendChannel, InspectorBackendDispatcher* backendDispatcher)
</span><span class="cx"> {
</span><span class="cx">     for (size_t i = 0; i &lt; m_agents.size(); i++)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectorInspectorAgentRegistryh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/InspectorAgentRegistry.h (175477 => 175478)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/InspectorAgentRegistry.h        2014-11-03 19:19:55 UTC (rev 175477)
+++ trunk/Source/JavaScriptCore/inspector/InspectorAgentRegistry.h        2014-11-03 19:36:14 UTC (rev 175478)
</span><span class="lines">@@ -28,6 +28,7 @@
</span><span class="cx"> #define InspectorAgentRegistry_h
</span><span class="cx"> 
</span><span class="cx"> #include &lt;wtf/Vector.h&gt;
</span><ins>+#include &lt;wtf/text/WTFString.h&gt;
</ins><span class="cx"> 
</span><span class="cx"> namespace Inspector {
</span><span class="cx"> 
</span><span class="lines">@@ -46,6 +47,11 @@
</span><span class="cx">     void willDestroyFrontendAndBackend(InspectorDisconnectReason reason);
</span><span class="cx">     void discardAgents();
</span><span class="cx"> 
</span><ins>+#if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
+    void appendExtraAgent(std::unique_ptr&lt;InspectorAgentBase&gt;);
+    Vector&lt;String&gt; extraDomains() const { return m_extraDomains; }
+#endif
+
</ins><span class="cx"> private:
</span><span class="cx">     // These are declared here to avoid MSVC from trying to create default iplementations which would
</span><span class="cx">     // involve generating a copy constructor and copy assignment operator for the Vector of std::unique_ptrs.
</span><span class="lines">@@ -53,6 +59,9 @@
</span><span class="cx">     InspectorAgentRegistry&amp; operator=(const InspectorAgentRegistry&amp;) = delete;
</span><span class="cx"> 
</span><span class="cx">     Vector&lt;std::unique_ptr&lt;InspectorAgentBase&gt;&gt; m_agents;
</span><ins>+#if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
+    Vector&lt;String&gt; m_extraDomains;
+#endif
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace Inspector
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectorJSGlobalObjectInspectorControllercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/JSGlobalObjectInspectorController.cpp (175477 => 175478)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/JSGlobalObjectInspectorController.cpp        2014-11-03 19:19:55 UTC (rev 175477)
+++ trunk/Source/JavaScriptCore/inspector/JSGlobalObjectInspectorController.cpp        2014-11-03 19:36:14 UTC (rev 175478)
</span><span class="lines">@@ -68,17 +68,19 @@
</span><span class="cx">     , m_augmentingClient(nullptr)
</span><span class="cx"> #endif
</span><span class="cx"> {
</span><ins>+    auto inspectorAgent = std::make_unique&lt;InspectorAgent&gt;(*this);
</ins><span class="cx">     auto runtimeAgent = std::make_unique&lt;JSGlobalObjectRuntimeAgent&gt;(m_injectedScriptManager.get(), m_globalObject);
</span><span class="cx">     auto consoleAgent = std::make_unique&lt;JSGlobalObjectConsoleAgent&gt;(m_injectedScriptManager.get());
</span><span class="cx">     auto debuggerAgent = std::make_unique&lt;JSGlobalObjectDebuggerAgent&gt;(m_injectedScriptManager.get(), m_globalObject, consoleAgent.get());
</span><span class="cx"> 
</span><ins>+    m_inspectorAgent = inspectorAgent.get();
</ins><span class="cx">     m_debuggerAgent = debuggerAgent.get();
</span><span class="cx">     m_consoleAgent = consoleAgent.get();
</span><span class="cx">     m_consoleClient = std::make_unique&lt;JSGlobalObjectConsoleClient&gt;(m_consoleAgent);
</span><span class="cx"> 
</span><span class="cx">     runtimeAgent-&gt;setScriptDebugServer(&amp;debuggerAgent-&gt;scriptDebugServer());
</span><span class="cx"> 
</span><del>-    m_agents.append(std::make_unique&lt;InspectorAgent&gt;(*this));
</del><ins>+    m_agents.append(WTF::move(inspectorAgent));
</ins><span class="cx">     m_agents.append(WTF::move(runtimeAgent));
</span><span class="cx">     m_agents.append(WTF::move(consoleAgent));
</span><span class="cx">     m_agents.append(WTF::move(debuggerAgent));
</span><span class="lines">@@ -111,6 +113,8 @@
</span><span class="cx">     m_agents.didCreateFrontendAndBackend(frontendChannel, m_inspectorBackendDispatcher.get());
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
</span><ins>+    m_inspectorAgent-&gt;activateExtraDomains(m_agents.extraDomains());
+
</ins><span class="cx">     if (m_augmentingClient)
</span><span class="cx">         m_augmentingClient-&gt;inspectorConnected();
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectorJSGlobalObjectInspectorControllerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/JSGlobalObjectInspectorController.h (175477 => 175478)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/JSGlobalObjectInspectorController.h        2014-11-03 19:19:55 UTC (rev 175477)
+++ trunk/Source/JavaScriptCore/inspector/JSGlobalObjectInspectorController.h        2014-11-03 19:36:14 UTC (rev 175478)
</span><span class="lines">@@ -53,7 +53,7 @@
</span><span class="cx"> namespace Inspector {
</span><span class="cx"> 
</span><span class="cx"> class InjectedScriptManager;
</span><del>-class InspectorConsoleAgent;
</del><ins>+class InspectorAgent;
</ins><span class="cx"> class InspectorBackendDispatcher;
</span><span class="cx"> class InspectorConsoleAgent;
</span><span class="cx"> class InspectorDebuggerAgent;
</span><span class="lines">@@ -110,6 +110,7 @@
</span><span class="cx">     JSC::JSGlobalObject&amp; m_globalObject;
</span><span class="cx">     std::unique_ptr&lt;InjectedScriptManager&gt; m_injectedScriptManager;
</span><span class="cx">     std::unique_ptr&lt;JSGlobalObjectConsoleClient&gt; m_consoleClient;
</span><ins>+    InspectorAgent* m_inspectorAgent;
</ins><span class="cx">     InspectorConsoleAgent* m_consoleAgent;
</span><span class="cx">     InspectorDebuggerAgent* m_debuggerAgent;
</span><span class="cx">     InspectorAgentRegistry m_agents;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectoragentsInspectorAgentcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/agents/InspectorAgent.cpp (175477 => 175478)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/agents/InspectorAgent.cpp        2014-11-03 19:19:55 UTC (rev 175477)
+++ trunk/Source/JavaScriptCore/inspector/agents/InspectorAgent.cpp        2014-11-03 19:36:14 UTC (rev 175478)
</span><span class="lines">@@ -74,6 +74,11 @@
</span><span class="cx">     if (m_pendingInspectData.first)
</span><span class="cx">         inspect(m_pendingInspectData.first, m_pendingInspectData.second);
</span><span class="cx"> 
</span><ins>+#if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
+    if (m_pendingExtraDomainsData)
+        m_frontendDispatcher-&gt;activateExtraDomains(m_pendingExtraDomainsData);
+#endif
+
</ins><span class="cx">     for (auto&amp; testCommand : m_pendingEvaluateTestCommands) {
</span><span class="cx">         if (!m_frontendDispatcher)
</span><span class="cx">             break;
</span><span class="lines">@@ -115,6 +120,23 @@
</span><span class="cx">         m_pendingEvaluateTestCommands.append(script);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+#if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
+void InspectorAgent::activateExtraDomains(const Vector&lt;String&gt;&amp; extraDomains)
+{
+    if (extraDomains.isEmpty())
+        return;
+
+    RefPtr&lt;Inspector::Protocol::Array&lt;String&gt;&gt; domainNames = Inspector::Protocol::Array&lt;String&gt;::create();
+    for (auto domainName : extraDomains)
+        domainNames-&gt;addItem(domainName);
+
+    if (!m_enabled)
+        m_pendingExtraDomainsData = domainNames.release();
+    else
+        m_frontendDispatcher-&gt;activateExtraDomains(domainNames.release());
+}
+#endif
+
</ins><span class="cx"> } // namespace Inspector
</span><span class="cx"> 
</span><span class="cx"> #endif // ENABLE(INSPECTOR)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectoragentsInspectorAgenth"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/agents/InspectorAgent.h (175477 => 175478)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/agents/InspectorAgent.h        2014-11-03 19:19:55 UTC (rev 175477)
+++ trunk/Source/JavaScriptCore/inspector/agents/InspectorAgent.h        2014-11-03 19:36:14 UTC (rev 175478)
</span><span class="lines">@@ -64,12 +64,19 @@
</span><span class="cx">     void inspect(PassRefPtr&lt;Protocol::Runtime::RemoteObject&gt; objectToInspect, PassRefPtr&lt;InspectorObject&gt; hints);
</span><span class="cx">     void evaluateForTestInFrontend(const String&amp; script);
</span><span class="cx"> 
</span><ins>+#if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
+    void activateExtraDomains(const Vector&lt;String&gt;&amp;);
+#endif
+
</ins><span class="cx"> private:
</span><span class="cx">     InspectorEnvironment&amp; m_environment;
</span><span class="cx">     std::unique_ptr&lt;InspectorInspectorFrontendDispatcher&gt; m_frontendDispatcher;
</span><span class="cx">     RefPtr&lt;InspectorInspectorBackendDispatcher&gt; m_backendDispatcher;
</span><span class="cx">     Vector&lt;String&gt; m_pendingEvaluateTestCommands;
</span><span class="cx">     std::pair&lt;RefPtr&lt;Protocol::Runtime::RemoteObject&gt;, RefPtr&lt;InspectorObject&gt;&gt; m_pendingInspectData;
</span><ins>+#if ENABLE(INSPECTOR_ALTERNATE_DISPATCHERS)
+    RefPtr&lt;Inspector::Protocol::Array&lt;String&gt;&gt; m_pendingExtraDomainsData;
+#endif
</ins><span class="cx">     bool m_enabled;
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectorprotocolInspectorjson"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/protocol/Inspector.json (175477 => 175478)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/protocol/Inspector.json        2014-11-03 19:19:55 UTC (rev 175477)
+++ trunk/Source/JavaScriptCore/inspector/protocol/Inspector.json        2014-11-03 19:36:14 UTC (rev 175478)
</span><span class="lines">@@ -37,6 +37,13 @@
</span><span class="cx">             ]
</span><span class="cx">         },
</span><span class="cx">         {
</span><ins>+            &quot;name&quot;: &quot;activateExtraDomains&quot;,
+            &quot;description&quot;: &quot;Fired when the backend has alternate domains that need to be activated.&quot;,
+            &quot;parameters&quot;: [
+                { &quot;name&quot;: &quot;domains&quot;, &quot;type&quot;: &quot;array&quot;, &quot;items&quot;: { &quot;type&quot;: &quot;string&quot; }, &quot;description&quot;: &quot;Domain names that need activation&quot; }
+            ]
+        },
+        {
</ins><span class="cx">             &quot;name&quot;: &quot;targetCrashed&quot;,
</span><span class="cx">             &quot;description&quot;: &quot;Fired when debugging target has crashed&quot;
</span><span class="cx">         }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectorscriptscodegengenerate_objective_cpy"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c.py (175477 => 175478)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c.py        2014-11-03 19:19:55 UTC (rev 175477)
+++ trunk/Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c.py        2014-11-03 19:36:14 UTC (rev 175478)
</span><span class="lines">@@ -342,7 +342,7 @@
</span><span class="cx">         if category is ObjCTypeCategory.Array:
</span><span class="cx">             protocol_type = ObjCGenerator.protocol_type_for_type(var_type.element_type)
</span><span class="cx">             objc_class = ObjCGenerator.objc_class_for_type(var_type.element_type)
</span><del>-            if protocol_type is 'Inspector::Protocol::Array&lt;String&gt;':
</del><ins>+            if protocol_type == 'Inspector::Protocol::Array&lt;String&gt;':
</ins><span class="cx">                 return 'inspectorStringArrayArray(%s)' % var_name
</span><span class="cx">             if protocol_type is 'String' and objc_class is 'NSString':
</span><span class="cx">                 return 'inspectorStringArray(%s)' % var_name
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectorscriptscodegengenerator_templatespy"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/scripts/codegen/generator_templates.py (175477 => 175478)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/scripts/codegen/generator_templates.py        2014-11-03 19:19:55 UTC (rev 175477)
+++ trunk/Source/JavaScriptCore/inspector/scripts/codegen/generator_templates.py        2014-11-03 19:36:14 UTC (rev 175478)
</span><span class="lines">@@ -415,7 +415,7 @@
</span><span class="cx"> 
</span><span class="cx">     auto alternateDispatcher = std::make_unique&lt;ObjCInspector${domainName}BackendDispatcher&gt;(handler);
</span><span class="cx">     auto alternateAgent = std::make_unique&lt;AlternateDispatchableAgent&lt;Inspector${domainName}BackendDispatcher, AlternateInspector${domainName}BackendDispatcher&gt;&gt;(ASCIILiteral(&quot;${domainName}&quot;), WTF::move(alternateDispatcher));
</span><del>-    _controller-&gt;agentRegistry().append(WTF::move(alternateAgent));
</del><ins>+    _controller-&gt;agentRegistry().appendExtraAgent(WTF::move(alternateAgent));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (id&lt;${objcPrefix}${domainName}DomainHandler&gt;)${variableNamePrefix}Handler
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectorscriptstestsexpectedcommandswithasyncattributejsonresult"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/scripts/tests/expected/commands-with-async-attribute.json-result (175477 => 175478)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/scripts/tests/expected/commands-with-async-attribute.json-result        2014-11-03 19:19:55 UTC (rev 175477)
+++ trunk/Source/JavaScriptCore/inspector/scripts/tests/expected/commands-with-async-attribute.json-result        2014-11-03 19:36:14 UTC (rev 175478)
</span><span class="lines">@@ -963,7 +963,7 @@
</span><span class="cx"> 
</span><span class="cx">     auto alternateDispatcher = std::make_unique&lt;ObjCInspectorDatabaseBackendDispatcher&gt;(handler);
</span><span class="cx">     auto alternateAgent = std::make_unique&lt;AlternateDispatchableAgent&lt;InspectorDatabaseBackendDispatcher, AlternateInspectorDatabaseBackendDispatcher&gt;&gt;(ASCIILiteral(&quot;Database&quot;), WTF::move(alternateDispatcher));
</span><del>-    _controller-&gt;agentRegistry().append(WTF::move(alternateAgent));
</del><ins>+    _controller-&gt;agentRegistry().appendExtraAgent(WTF::move(alternateAgent));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (id&lt;RWIProtocolDatabaseDomainHandler&gt;)databaseHandler
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectorscriptstestsexpectedcommandswithoptionalcallreturnparametersjsonresult"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/scripts/tests/expected/commands-with-optional-call-return-parameters.json-result (175477 => 175478)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/scripts/tests/expected/commands-with-optional-call-return-parameters.json-result        2014-11-03 19:19:55 UTC (rev 175477)
+++ trunk/Source/JavaScriptCore/inspector/scripts/tests/expected/commands-with-optional-call-return-parameters.json-result        2014-11-03 19:36:14 UTC (rev 175478)
</span><span class="lines">@@ -852,7 +852,7 @@
</span><span class="cx"> 
</span><span class="cx">     auto alternateDispatcher = std::make_unique&lt;ObjCInspectorDatabaseBackendDispatcher&gt;(handler);
</span><span class="cx">     auto alternateAgent = std::make_unique&lt;AlternateDispatchableAgent&lt;InspectorDatabaseBackendDispatcher, AlternateInspectorDatabaseBackendDispatcher&gt;&gt;(ASCIILiteral(&quot;Database&quot;), WTF::move(alternateDispatcher));
</span><del>-    _controller-&gt;agentRegistry().append(WTF::move(alternateAgent));
</del><ins>+    _controller-&gt;agentRegistry().appendExtraAgent(WTF::move(alternateAgent));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (id&lt;RWIProtocolDatabaseDomainHandler&gt;)databaseHandler
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectorscriptstestsexpecteddomainswithvaryingcommandsizesjsonresult"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/scripts/tests/expected/domains-with-varying-command-sizes.json-result (175477 => 175478)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/scripts/tests/expected/domains-with-varying-command-sizes.json-result        2014-11-03 19:19:55 UTC (rev 175477)
+++ trunk/Source/JavaScriptCore/inspector/scripts/tests/expected/domains-with-varying-command-sizes.json-result        2014-11-03 19:36:14 UTC (rev 175478)
</span><span class="lines">@@ -869,7 +869,7 @@
</span><span class="cx"> 
</span><span class="cx">     auto alternateDispatcher = std::make_unique&lt;ObjCInspectorNetwork1BackendDispatcher&gt;(handler);
</span><span class="cx">     auto alternateAgent = std::make_unique&lt;AlternateDispatchableAgent&lt;InspectorNetwork1BackendDispatcher, AlternateInspectorNetwork1BackendDispatcher&gt;&gt;(ASCIILiteral(&quot;Network1&quot;), WTF::move(alternateDispatcher));
</span><del>-    _controller-&gt;agentRegistry().append(WTF::move(alternateAgent));
</del><ins>+    _controller-&gt;agentRegistry().appendExtraAgent(WTF::move(alternateAgent));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (id&lt;RWIProtocolNetwork1DomainHandler&gt;)network1Handler
</span><span class="lines">@@ -887,7 +887,7 @@
</span><span class="cx"> 
</span><span class="cx">     auto alternateDispatcher = std::make_unique&lt;ObjCInspectorNetwork3BackendDispatcher&gt;(handler);
</span><span class="cx">     auto alternateAgent = std::make_unique&lt;AlternateDispatchableAgent&lt;InspectorNetwork3BackendDispatcher, AlternateInspectorNetwork3BackendDispatcher&gt;&gt;(ASCIILiteral(&quot;Network3&quot;), WTF::move(alternateDispatcher));
</span><del>-    _controller-&gt;agentRegistry().append(WTF::move(alternateAgent));
</del><ins>+    _controller-&gt;agentRegistry().appendExtraAgent(WTF::move(alternateAgent));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (id&lt;RWIProtocolNetwork3DomainHandler&gt;)network3Handler
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectorscriptstestsexpectedgeneratedomainswithfeatureguardsjsonresult"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/scripts/tests/expected/generate-domains-with-feature-guards.json-result (175477 => 175478)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/scripts/tests/expected/generate-domains-with-feature-guards.json-result        2014-11-03 19:19:55 UTC (rev 175477)
+++ trunk/Source/JavaScriptCore/inspector/scripts/tests/expected/generate-domains-with-feature-guards.json-result        2014-11-03 19:36:14 UTC (rev 175478)
</span><span class="lines">@@ -750,7 +750,7 @@
</span><span class="cx"> 
</span><span class="cx">     auto alternateDispatcher = std::make_unique&lt;ObjCInspectorNetwork1BackendDispatcher&gt;(handler);
</span><span class="cx">     auto alternateAgent = std::make_unique&lt;AlternateDispatchableAgent&lt;InspectorNetwork1BackendDispatcher, AlternateInspectorNetwork1BackendDispatcher&gt;&gt;(ASCIILiteral(&quot;Network1&quot;), WTF::move(alternateDispatcher));
</span><del>-    _controller-&gt;agentRegistry().append(WTF::move(alternateAgent));
</del><ins>+    _controller-&gt;agentRegistry().appendExtraAgent(WTF::move(alternateAgent));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (id&lt;RWIProtocolNetwork1DomainHandler&gt;)network1Handler
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/ChangeLog (175477 => 175478)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/ChangeLog        2014-11-03 19:19:55 UTC (rev 175477)
+++ trunk/Source/WebInspectorUI/ChangeLog        2014-11-03 19:36:14 UTC (rev 175478)
</span><span class="lines">@@ -1,3 +1,50 @@
</span><ins>+2014-11-03  Joseph Pecoraro  &lt;pecoraro@apple.com&gt;
+
+        Web Inspector: ALTERNATE_DISPATCHERS Let the frontend know about extra agents
+        https://bugs.webkit.org/show_bug.cgi?id=138236
+
+        Reviewed by Brian Burg.
+
+        * UserInterface/Protocol/InspectorBackend.js:
+        (InspectorBackendClass.prototype.activateDomain):
+        * UserInterface/Protocol/InspectorObserver.js:
+        (WebInspector.InspectorObserver.prototype.activateExtraDomains):
+        * UserInterface/Base/Object.js:
+        * UserInterface/Base/Test.js:
+        * UserInterface/Base/Main.js:
+        (WebInspector.activateExtraDomains):
+        Default state is that there are no extra domains. When extra domains
+        are activated, some agents need to be re-initialized. Dispatch a
+        model event so views also know to re-initialize.
+
+        * UserInterface/Controllers/ApplicationCacheManager.js:
+        (WebInspector.ApplicationCacheManager.prototype._mainResourceDidChange):
+        * UserInterface/Controllers/DOMTreeManager.js:
+        Be more careful about direct agent use during main resource changes.
+        That can happen with a JSContext extended with a Page agent.
+
+        * UserInterface/Controllers/FrameResourceManager.js:
+        (WebInspector.FrameResourceManager):
+        (WebInspector.FrameResourceManager.prototype._mainFrameDidChange):
+        (WebInspector.FrameResourceManager.prototype._extraDomainsActivated):
+        * UserInterface/Controllers/StorageManager.js:
+        (WebInspector.StorageManager):
+        (WebInspector.StorageManager.prototype._databaseForIdentifier):
+        (WebInspector.StorageManager.prototype._extraDomainsActivated):
+        It is possible new window.FooAgent's are available. Perform expected
+        initialization re-checking if the agents are now available.
+
+        * UserInterface/Models/CSSCompletions.js:
+        Avoid re-initialization if we already did it. This should never
+        happen but this is just to be safe.
+
+        * UserInterface/Views/ResourceSidebarPanel.js:
+        (WebInspector.ResourceSidebarPanel):
+        (WebInspector.ResourceSidebarPanel.prototype._extraDomainsActivated):
+        Don't disallow expandable tree elements if this is a JSContext with
+        extra domains. If that JSContext has resources, we would have been
+        unable to see child resources.
+
</ins><span class="cx"> 2014-10-30  Dana Burkart  &lt;dburkart@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         &lt;rdar://problem/18821260&gt; Prepare for the mysterious future
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceBaseMainjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Base/Main.js (175477 => 175478)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Base/Main.js        2014-11-03 19:19:55 UTC (rev 175477)
+++ trunk/Source/WebInspectorUI/UserInterface/Base/Main.js        2014-11-03 19:36:14 UTC (rev 175478)
</span><span class="lines">@@ -23,12 +23,6 @@
</span><span class="cx">  * THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx">  */
</span><span class="cx"> 
</span><del>-WebInspector.Notification = {
-    GlobalModifierKeysDidChange: &quot;global-modifiers-did-change&quot;,
-    PageArchiveStarted: &quot;page-archive-started&quot;,
-    PageArchiveEnded: &quot;page-archive-ended&quot;
-};
-
</del><span class="cx"> WebInspector.ContentViewCookieType = {
</span><span class="cx">     ApplicationCache: &quot;application-cache&quot;,
</span><span class="cx">     CookieStorage: &quot;cookie-storage&quot;,
</span><span class="lines">@@ -53,6 +47,7 @@
</span><span class="cx">     this._initializeWebSocketIfNeeded();
</span><span class="cx"> 
</span><span class="cx">     this.debuggableType = InspectorFrontendHost.debuggableType() === &quot;web&quot; ? WebInspector.DebuggableType.Web : WebInspector.DebuggableType.JavaScript;
</span><ins>+    this.hasExtraDomains = false;
</ins><span class="cx"> 
</span><span class="cx">     // Register observers for events from the InspectorBackend.
</span><span class="cx">     if (InspectorBackend.registerInspectorDispatcher)
</span><span class="lines">@@ -359,6 +354,22 @@
</span><span class="cx">     this._contentLoaded = true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+WebInspector.activateExtraDomains = function(domains)
+{
+    console.assert(!this.hasExtraDomains);
+    this.hasExtraDomains = true;
+
+    for (var domain of domains) {
+        var agent = InspectorBackend.activateDomain(domain);
+        if (agent.enable)
+            agent.enable();
+    }
+
+    this.notifications.dispatchEventToListeners(WebInspector.Notification.ExtraDomainsActivated);
+
+    WebInspector.CSSCompletions.requestCSSNameCompletions();
+}
+
</ins><span class="cx"> WebInspector.sidebarPanelForCurrentContentView = function()
</span><span class="cx"> {
</span><span class="cx">     var currentContentView = this.contentBrowser.currentContentView;
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceBaseObjectjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Base/Object.js (175477 => 175478)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Base/Object.js        2014-11-03 19:19:55 UTC (rev 175477)
+++ trunk/Source/WebInspectorUI/UserInterface/Base/Object.js        2014-11-03 19:36:14 UTC (rev 175478)
</span><span class="lines">@@ -189,3 +189,10 @@
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> WebInspector.notifications = new WebInspector.Object;
</span><ins>+
+WebInspector.Notification = {
+    GlobalModifierKeysDidChange: &quot;global-modifiers-did-change&quot;,
+    PageArchiveStarted: &quot;page-archive-started&quot;,
+    PageArchiveEnded: &quot;page-archive-ended&quot;,
+    ExtraDomainsActivated: &quot;extra-domains-activated&quot;,
+};
</ins></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceBaseTestjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Base/Test.js (175477 => 175478)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Base/Test.js        2014-11-03 19:19:55 UTC (rev 175477)
+++ trunk/Source/WebInspectorUI/UserInterface/Base/Test.js        2014-11-03 19:36:14 UTC (rev 175478)
</span><span class="lines">@@ -23,8 +23,16 @@
</span><span class="cx">  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx">  */
</span><span class="cx"> 
</span><ins>+WebInspector.DebuggableType = {
+    Web: &quot;web&quot;,
+    JavaScript: &quot;javascript&quot;
+};
+
</ins><span class="cx"> WebInspector.loaded = function()
</span><span class="cx"> {
</span><ins>+    this.debuggableType = WebInspector.DebuggableType.Web;
+    this.hasExtraDomains = false;
+
</ins><span class="cx">     // Register observers for events from the InspectorBackend.
</span><span class="cx">     // The initialization order should match the same in Main.js.
</span><span class="cx">     InspectorBackend.registerInspectorDispatcher(new WebInspector.InspectorObserver);
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceControllersApplicationCacheManagerjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Controllers/ApplicationCacheManager.js (175477 => 175478)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Controllers/ApplicationCacheManager.js        2014-11-03 19:19:55 UTC (rev 175477)
+++ trunk/Source/WebInspectorUI/UserInterface/Controllers/ApplicationCacheManager.js        2014-11-03 19:36:14 UTC (rev 175478)
</span><span class="lines">@@ -119,7 +119,8 @@
</span><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        ApplicationCacheAgent.getManifestForFrame(event.target.id, this._manifestForFrameLoaded.bind(this, event.target.id));
</del><ins>+        if (window.ApplicationCacheAgent)
+            ApplicationCacheAgent.getManifestForFrame(event.target.id, this._manifestForFrameLoaded.bind(this, event.target.id));
</ins><span class="cx">     },
</span><span class="cx"> 
</span><span class="cx">     _childFrameWasRemoved: function(event)
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceControllersDOMTreeManagerjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Controllers/DOMTreeManager.js (175477 => 175478)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Controllers/DOMTreeManager.js        2014-11-03 19:19:55 UTC (rev 175477)
+++ trunk/Source/WebInspectorUI/UserInterface/Controllers/DOMTreeManager.js        2014-11-03 19:36:14 UTC (rev 175478)
</span><span class="lines">@@ -471,7 +471,7 @@
</span><span class="cx">             this.dispatchEventToListeners(WebInspector.DOMTreeManager.Event.ContentFlowListWasUpdated, {documentNodeIdentifier: documentNodeIdentifier, flows: contentFlows});
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        if (CSSAgent.getNamedFlowCollection)
</del><ins>+        if (window.CSSAgent &amp;&amp; CSSAgent.getNamedFlowCollection)
</ins><span class="cx">             CSSAgent.getNamedFlowCollection(documentNodeIdentifier, onNamedFlowCollectionAvailable.bind(this));
</span><span class="cx">     },
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceControllersFrameResourceManagerjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Controllers/FrameResourceManager.js (175477 => 175478)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Controllers/FrameResourceManager.js        2014-11-03 19:19:55 UTC (rev 175477)
+++ trunk/Source/WebInspectorUI/UserInterface/Controllers/FrameResourceManager.js        2014-11-03 19:36:14 UTC (rev 175478)
</span><span class="lines">@@ -32,6 +32,8 @@
</span><span class="cx">     if (window.NetworkAgent)
</span><span class="cx">         NetworkAgent.enable();
</span><span class="cx"> 
</span><ins>+    WebInspector.notifications.addEventListener(WebInspector.Notification.ExtraDomainsActivated, this._extraDomainsActivated, this);
+
</ins><span class="cx">     this.initialize();
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="lines">@@ -583,6 +585,12 @@
</span><span class="cx">         if (this._mainFrame)
</span><span class="cx">             this._mainFrame.markAsMainFrame();
</span><span class="cx">         this.dispatchEventToListeners(WebInspector.FrameResourceManager.Event.MainFrameDidChange, {oldMainFrame: oldMainFrame});
</span><ins>+    },
+
+    _extraDomainsActivated: function()
+    {
+        if (window.PageAgent)
+            PageAgent.getResourceTree(this._processMainFrameResourceTreePayload.bind(this));
</ins><span class="cx">     }
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceControllersStorageManagerjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Controllers/StorageManager.js (175477 => 175478)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Controllers/StorageManager.js        2014-11-03 19:19:55 UTC (rev 175477)
+++ trunk/Source/WebInspectorUI/UserInterface/Controllers/StorageManager.js        2014-11-03 19:36:14 UTC (rev 175478)
</span><span class="lines">@@ -37,6 +37,8 @@
</span><span class="cx"> 
</span><span class="cx">     WebInspector.Frame.addEventListener(WebInspector.Frame.Event.MainResourceDidChange, this._mainResourceDidChange, this);
</span><span class="cx"> 
</span><ins>+    WebInspector.notifications.addEventListener(WebInspector.Notification.ExtraDomainsActivated, this._extraDomainsActivated, this);
+
</ins><span class="cx">     // COMPATIBILITY (iOS 6): DOMStorage was discovered via a DOMStorageObserver event. Now DOM Storage
</span><span class="cx">     // is added whenever a new securityOrigin is discovered. Check for DOMStorageAgent.getDOMStorageItems,
</span><span class="cx">     // which was renamed at the same time the change to start using securityOrigin was made.
</span><span class="lines">@@ -304,5 +306,11 @@
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         return null;
</span><ins>+    },
+
+    _extraDomainsActivated: function()
+    {
+        if (window.DOMStorageAgent &amp;&amp; DOMStorageAgent.getDOMStorageItems)
+            WebInspector.Frame.addEventListener(WebInspector.Frame.Event.SecurityOriginDidChange, this._securityOriginDidChange, this);
</ins><span class="cx">     }
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceModelsCSSCompletionsjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Models/CSSCompletions.js (175477 => 175478)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Models/CSSCompletions.js        2014-11-03 19:19:55 UTC (rev 175477)
+++ trunk/Source/WebInspectorUI/UserInterface/Models/CSSCompletions.js        2014-11-03 19:36:14 UTC (rev 175478)
</span><span class="lines">@@ -76,6 +76,9 @@
</span><span class="cx"> 
</span><span class="cx"> WebInspector.CSSCompletions.requestCSSNameCompletions = function()
</span><span class="cx"> {
</span><ins>+    if (WebInspector.CSSCompletions.cssNameCompletions)
+        return;
+
</ins><span class="cx">     function propertyNamesCallback(error, names)
</span><span class="cx">     {
</span><span class="cx">         if (error)
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceProtocolInspectorBackendjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Protocol/InspectorBackend.js (175477 => 175478)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Protocol/InspectorBackend.js        2014-11-03 19:19:55 UTC (rev 175477)
+++ trunk/Source/WebInspectorUI/UserInterface/Protocol/InspectorBackend.js        2014-11-03 19:36:14 UTC (rev 175478)
</span><span class="lines">@@ -101,8 +101,13 @@
</span><span class="cx"> 
</span><span class="cx">     activateDomain: function(domainName, activationDebuggableType)
</span><span class="cx">     {
</span><del>-        if (!activationDebuggableType || InspectorFrontendHost.debuggableType() === activationDebuggableType)
-            this._agents[domainName].activate();
</del><ins>+        if (!activationDebuggableType || InspectorFrontendHost.debuggableType() === activationDebuggableType) {
+            var agent = this._agents[domainName];
+            agent.activate();
+            return agent;
+        }
+
+        return null;
</ins><span class="cx">     },
</span><span class="cx"> 
</span><span class="cx">     // Private
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceProtocolInspectorObserverjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Protocol/InspectorObserver.js (175477 => 175478)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Protocol/InspectorObserver.js        2014-11-03 19:19:55 UTC (rev 175477)
+++ trunk/Source/WebInspectorUI/UserInterface/Protocol/InspectorObserver.js        2014-11-03 19:36:14 UTC (rev 175478)
</span><span class="lines">@@ -65,6 +65,11 @@
</span><span class="cx">     detached: function(reason)
</span><span class="cx">     {
</span><span class="cx">         // FIXME: Not implemented.
</span><ins>+    },
+
+    activateExtraDomains: function(domains)
+    {
+        WebInspector.activateExtraDomains(domains);
</ins><span class="cx">     }
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsResourceSidebarPaneljs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/ResourceSidebarPanel.js (175477 => 175478)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/ResourceSidebarPanel.js        2014-11-03 19:19:55 UTC (rev 175477)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/ResourceSidebarPanel.js        2014-11-03 19:36:14 UTC (rev 175478)
</span><span class="lines">@@ -83,6 +83,8 @@
</span><span class="cx">     WebInspector.debuggerManager.addEventListener(WebInspector.DebuggerManager.Event.ScriptAdded, this._scriptWasAdded, this);
</span><span class="cx">     WebInspector.debuggerManager.addEventListener(WebInspector.DebuggerManager.Event.ScriptsCleared, this._scriptsCleared, this);
</span><span class="cx"> 
</span><ins>+    WebInspector.notifications.addEventListener(WebInspector.Notification.ExtraDomainsActivated, this._extraDomainsActivated, this);
+
</ins><span class="cx">     this._resourcesContentTreeOutline = this.contentTreeOutline;
</span><span class="cx">     this._searchContentTreeOutline = this.createContentTreeOutline();
</span><span class="cx"> 
</span><span class="lines">@@ -623,7 +625,7 @@
</span><span class="cx">                 this._extensionScriptsFolderTreeElement = new WebInspector.FolderTreeElement(WebInspector.UIString(&quot;Extension Scripts&quot;));
</span><span class="cx">             var parentFolderTreeElement = this._extensionScriptsFolderTreeElement;
</span><span class="cx">         } else {
</span><del>-            if (WebInspector.debuggableType === WebInspector.DebuggableType.JavaScript)
</del><ins>+            if (WebInspector.debuggableType === WebInspector.DebuggableType.JavaScript &amp;&amp; !WebInspector.hasExtraDomains)
</ins><span class="cx">                 insertIntoTopLevel = true;
</span><span class="cx">             else {
</span><span class="cx">                 if (!this._extraScriptsFolderTreeElement)
</span><span class="lines">@@ -864,6 +866,12 @@
</span><span class="cx">         this._cookieStorageRootTreeElement = null;
</span><span class="cx">         this._applicationCacheRootTreeElement = null;
</span><span class="cx">         this._applicationCacheURLTreeElementMap = {};
</span><ins>+    },
+
+    _extraDomainsActivated: function()
+    {
+        if (WebInspector.debuggableType === WebInspector.DebuggableType.JavaScript)
+            this._resourcesContentTreeOutline.element.classList.remove(WebInspector.NavigationSidebarPanel.HideDisclosureButtonsStyleClassName);
</ins><span class="cx">     }
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>