<!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>[224981] trunk/Source/WebInspectorUI</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/224981">224981</a></dd>
<dt>Author</dt> <dd>mattbaker@apple.com</dd>
<dt>Date</dt> <dd>2017-11-17 13:29:43 -0800 (Fri, 17 Nov 2017)</dd>
</dl>

<h3>Log Message</h3>
<pre>Web Inspector: Remove WI.instanceForClass
https://bugs.webkit.org/show_bug.cgi?id=179746

Reviewed by Timothy Hatcher.

The implementations of DetailsSidebarPanel subclasses assume that panels
are closed and released when no longer needed. Keeping them alive with
instanceForClass isn't the right choice, since sidebar panels remove their
event listeners when closed.

* UserInterface/Base/Main.js:
(WI.instanceForClass): Deleted.
* UserInterface/Views/DebuggerTabContentView.js:
(WI.DebuggerTabContentView.prototype.showDetailsSidebarPanels):
* UserInterface/Views/TabContentView.js:
(WI.TabContentView.prototype.get detailsSidebarPanels):</pre>

<h3>Modified Paths</h3>
<ul>
<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="#trunkSourceWebInspectorUIUserInterfaceViewsDebuggerTabContentViewjs">trunk/Source/WebInspectorUI/UserInterface/Views/DebuggerTabContentView.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsTabContentViewjs">trunk/Source/WebInspectorUI/UserInterface/Views/TabContentView.js</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebInspectorUIChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/ChangeLog (224980 => 224981)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/ChangeLog    2017-11-17 21:11:46 UTC (rev 224980)
+++ trunk/Source/WebInspectorUI/ChangeLog       2017-11-17 21:29:43 UTC (rev 224981)
</span><span class="lines">@@ -1,5 +1,24 @@
</span><span class="cx"> 2017-11-17  Matt Baker  <mattbaker@apple.com>
</span><span class="cx"> 
</span><ins>+        Web Inspector: Remove WI.instanceForClass
+        https://bugs.webkit.org/show_bug.cgi?id=179746
+
+        Reviewed by Timothy Hatcher.
+
+        The implementations of DetailsSidebarPanel subclasses assume that panels
+        are closed and released when no longer needed. Keeping them alive with
+        instanceForClass isn't the right choice, since sidebar panels remove their
+        event listeners when closed.
+
+        * UserInterface/Base/Main.js:
+        (WI.instanceForClass): Deleted.
+        * UserInterface/Views/DebuggerTabContentView.js:
+        (WI.DebuggerTabContentView.prototype.showDetailsSidebarPanels):
+        * UserInterface/Views/TabContentView.js:
+        (WI.TabContentView.prototype.get detailsSidebarPanels):
+
+2017-11-17  Matt Baker  <mattbaker@apple.com>
+
</ins><span class="cx">         Web Inspector: ButtonNavigationItem should support image and text button style
</span><span class="cx">         https://bugs.webkit.org/show_bug.cgi?id=179625
</span><span class="cx">         <rdar://problem/35512238>
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceBaseMainjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Base/Main.js (224980 => 224981)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Base/Main.js   2017-11-17 21:11:46 UTC (rev 224980)
+++ trunk/Source/WebInspectorUI/UserInterface/Base/Main.js      2017-11-17 21:29:43 UTC (rev 224981)
</span><span class="lines">@@ -502,24 +502,6 @@
</span><span class="cx">         this.runBootstrapOperations();
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-// This function returns a lazily constructed instance of a class scoped to this WebInspector
-// instance. In the unlikely event that we ever need to construct multiple WebInspector instances
-// this allows us to scope objects within the WI.
-// Classes can prevent usage of this function via a static `disallowInstanceForClass` function that
-// returns true. It is then their responsibility to ensure that the returned value is tracked.
-// Currently it is only used for sidebars.
-WI.instanceForClass = function(constructor)
-{
-    console.assert(typeof constructor === "function");
-    if (typeof constructor.disallowInstanceForClass === "function" && constructor.disallowInstanceForClass())
-        return new constructor;
-
-    let key = `__${constructor.name}`;
-    if (!WI[key])
-        WI[key] = new constructor;
-    return WI[key];
-};
-
</del><span class="cx"> WI.isTabTypeAllowed = function(tabType)
</span><span class="cx"> {
</span><span class="cx">     let tabClass = this._knownTabClassesByType.get(tabType);
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsDebuggerTabContentViewjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/DebuggerTabContentView.js (224980 => 224981)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/DebuggerTabContentView.js        2017-11-17 21:11:46 UTC (rev 224980)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/DebuggerTabContentView.js   2017-11-17 21:29:43 UTC (rev 224981)
</span><span class="lines">@@ -72,7 +72,10 @@
</span><span class="cx">         if (!this._showScopeChainDetailsSidebarPanel)
</span><span class="cx">             return;
</span><span class="cx"> 
</span><del>-        let scopeChainDetailsSidebarPanel = WI.instanceForClass(WI.ScopeChainDetailsSidebarPanel);
</del><ins>+        let scopeChainDetailsSidebarPanel = this.detailsSidebarPanels.find((item) => item instanceof WI.ScopeChainDetailsSidebarPanel);
+        if (!scopeChainDetailsSidebarPanel)
+            return;
+
</ins><span class="cx">         let sidebar = scopeChainDetailsSidebarPanel.parentSidebar;
</span><span class="cx">         if (!sidebar)
</span><span class="cx">             return;
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsTabContentViewjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/TabContentView.js (224980 => 224981)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/TabContentView.js        2017-11-17 21:11:46 UTC (rev 224980)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/TabContentView.js   2017-11-17 21:29:43 UTC (rev 224981)
</span><span class="lines">@@ -189,7 +189,7 @@
</span><span class="cx">     get detailsSidebarPanels()
</span><span class="cx">     {
</span><span class="cx">         if (!this._detailsSidebarPanels)
</span><del>-            this._detailsSidebarPanels = this._detailsSidebarPanelConstructors.map(constructor => WI.instanceForClass(constructor));
</del><ins>+            this._detailsSidebarPanels = this._detailsSidebarPanelConstructors.map((constructor) => new constructor);
</ins><span class="cx"> 
</span><span class="cx">         return this._detailsSidebarPanels;
</span><span class="cx">     }
</span></span></pre>
</div>
</div>

</body>
</html>