Title: [217460] trunk/Source/WebInspectorUI
Revision
217460
Author
[email protected]
Date
2017-05-25 17:29:58 -0700 (Thu, 25 May 2017)

Log Message

Web Inspector: Don't create DetailsSidebarPanel classes until they are needed by a Tab
https://bugs.webkit.org/show_bug.cgi?id=172393

Reviewed by Joseph Pecoraro.

* UserInterface/Base/Main.js:
(WebInspector.contentLoaded):
Remove global instantiation of all DetailsSidebarPanel objects.

(WebInspector.instanceForClass):
Utility function for creating and accessing an instance of a given class.

* UserInterface/Views/ContentBrowserTabContentView.js:
(WebInspector.ContentBrowserTabContentView):
* UserInterface/Views/DebuggerTabContentView.js:
(WebInspector.DebuggerTabContentView):
(WebInspector.DebuggerTabContentView.prototype.showDetailsSidebarPanels):
* UserInterface/Views/ElementsTabContentView.js:
(WebInspector.ElementsTabContentView):
* UserInterface/Views/NetworkTabContentView.js:
(WebInspector.NetworkTabContentView):
* UserInterface/Views/ResourcesTabContentView.js:
(WebInspector.ResourcesTabContentView):
* UserInterface/Views/SearchTabContentView.js:
(WebInspector.SearchTabContentView):
* UserInterface/Views/StorageTabContentView.js:
(WebInspector.StorageTabContentView):
* UserInterface/Views/TabContentView.js:
(WebInspector.TabContentView):
(WebInspector.TabContentView.prototype.get detailsSidebarPanels):
* UserInterface/Views/TimelineTabContentView.js:
(WebInspector.TimelineTabContentView):
Now accepts an array of DetailsSidebarPanel classes that are all instantiated when they are
about to be added to the DetailsSidebar.

Modified Paths

Diff

Modified: trunk/Source/WebInspectorUI/ChangeLog (217459 => 217460)


--- trunk/Source/WebInspectorUI/ChangeLog	2017-05-26 00:18:25 UTC (rev 217459)
+++ trunk/Source/WebInspectorUI/ChangeLog	2017-05-26 00:29:58 UTC (rev 217460)
@@ -1,5 +1,42 @@
 2017-05-25  Devin Rousso  <[email protected]>
 
+        Web Inspector: Don't create DetailsSidebarPanel classes until they are needed by a Tab
+        https://bugs.webkit.org/show_bug.cgi?id=172393
+
+        Reviewed by Joseph Pecoraro.
+
+        * UserInterface/Base/Main.js:
+        (WebInspector.contentLoaded):
+        Remove global instantiation of all DetailsSidebarPanel objects.
+
+        (WebInspector.instanceForClass):
+        Utility function for creating and accessing an instance of a given class.
+
+        * UserInterface/Views/ContentBrowserTabContentView.js:
+        (WebInspector.ContentBrowserTabContentView):
+        * UserInterface/Views/DebuggerTabContentView.js:
+        (WebInspector.DebuggerTabContentView):
+        (WebInspector.DebuggerTabContentView.prototype.showDetailsSidebarPanels):
+        * UserInterface/Views/ElementsTabContentView.js:
+        (WebInspector.ElementsTabContentView):
+        * UserInterface/Views/NetworkTabContentView.js:
+        (WebInspector.NetworkTabContentView):
+        * UserInterface/Views/ResourcesTabContentView.js:
+        (WebInspector.ResourcesTabContentView):
+        * UserInterface/Views/SearchTabContentView.js:
+        (WebInspector.SearchTabContentView):
+        * UserInterface/Views/StorageTabContentView.js:
+        (WebInspector.StorageTabContentView):
+        * UserInterface/Views/TabContentView.js:
+        (WebInspector.TabContentView):
+        (WebInspector.TabContentView.prototype.get detailsSidebarPanels):
+        * UserInterface/Views/TimelineTabContentView.js:
+        (WebInspector.TimelineTabContentView):
+        Now accepts an array of DetailsSidebarPanel classes that are all instantiated when they are
+        about to be added to the DetailsSidebar.
+
+2017-05-25  Devin Rousso  <[email protected]>
+
         Web Inspector: Changing the width of a Sidebar when it's collapsed shouldn't trigger a layout
         https://bugs.webkit.org/show_bug.cgi?id=172606
 

Modified: trunk/Source/WebInspectorUI/UserInterface/Base/Main.js (217459 => 217460)


--- trunk/Source/WebInspectorUI/UserInterface/Base/Main.js	2017-05-26 00:18:25 UTC (rev 217459)
+++ trunk/Source/WebInspectorUI/UserInterface/Base/Main.js	2017-05-26 00:29:58 UTC (rev 217460)
@@ -425,17 +425,6 @@
 
     this.toolbar.addToolbarItem(this._searchToolbarItem, WebInspector.Toolbar.Section.Right);
 
-    this.resourceDetailsSidebarPanel = new WebInspector.ResourceDetailsSidebarPanel;
-    this.domNodeDetailsSidebarPanel = new WebInspector.DOMNodeDetailsSidebarPanel;
-    this.cssStyleDetailsSidebarPanel = new WebInspector.CSSStyleDetailsSidebarPanel;
-    this.applicationCacheDetailsSidebarPanel = new WebInspector.ApplicationCacheDetailsSidebarPanel;
-    this.indexedDatabaseDetailsSidebarPanel = new WebInspector.IndexedDatabaseDetailsSidebarPanel;
-    this.scopeChainDetailsSidebarPanel = new WebInspector.ScopeChainDetailsSidebarPanel;
-    this.probeDetailsSidebarPanel = new WebInspector.ProbeDetailsSidebarPanel;
-
-    if (window.LayerTreeAgent)
-        this.layerTreeDetailsSidebarPanel = new WebInspector.LayerTreeDetailsSidebarPanel;
-
     this.modifierKeys = {altKey: false, metaKey: false, shiftKey: false};
 
     let dockedResizerElement = document.getElementById("docked-resizer");
@@ -526,6 +515,20 @@
         this.runBootstrapOperations();
 };
 
+// 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 WebInspector.
+// Currently it is only used for sidebars.
+WebInspector.instanceForClass = function(constructor)
+{
+    console.assert(typeof constructor === "function");
+
+    let key = `__${constructor.name}`;
+    if (!WebInspector[key])
+        WebInspector[key] = new constructor;
+    return WebInspector[key];
+};
+
 WebInspector.isTabTypeAllowed = function(tabType)
 {
     let tabClass = this._knownTabClassesByType.get(tabType);

Modified: trunk/Source/WebInspectorUI/UserInterface/Views/ContentBrowserTabContentView.js (217459 => 217460)


--- trunk/Source/WebInspectorUI/UserInterface/Views/ContentBrowserTabContentView.js	2017-05-26 00:18:25 UTC (rev 217459)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/ContentBrowserTabContentView.js	2017-05-26 00:29:58 UTC (rev 217460)
@@ -25,7 +25,7 @@
 
 WebInspector.ContentBrowserTabContentView = class ContentBrowserTabContentView extends WebInspector.TabContentView
 {
-    constructor(identifier, styleClassNames, tabBarItem, navigationSidebarPanelClass, detailsSidebarPanels, disableBackForward)
+    constructor(identifier, styleClassNames, tabBarItem, navigationSidebarPanelClass, detailsSidebarPanelConstructors, disableBackForward)
     {
         if (typeof styleClassNames === "string")
             styleClassNames = [styleClassNames];
@@ -35,7 +35,7 @@
         var contentBrowser = new WebInspector.ContentBrowser(null, null, disableBackForward);
         var navigationSidebarPanel = navigationSidebarPanelClass ? new navigationSidebarPanelClass(contentBrowser) : null;
 
-        super(identifier, styleClassNames, tabBarItem, navigationSidebarPanel, detailsSidebarPanels);
+        super(identifier, styleClassNames, tabBarItem, navigationSidebarPanel, detailsSidebarPanelConstructors);
 
         this._contentBrowser = contentBrowser;
         this._contentBrowser.delegate = this;
@@ -66,7 +66,7 @@
             WebInspector.navigationSidebar.addEventListener(WebInspector.Sidebar.Event.CollapsedStateDidChange, this._navigationSidebarCollapsedStateDidChange, this);
         }
 
-        if (detailsSidebarPanels && detailsSidebarPanels.length) {
+        if (detailsSidebarPanelConstructors && detailsSidebarPanelConstructors.length) {
             let showToolTip = WebInspector.UIString("Show the details sidebar (%s)").format(WebInspector.detailsSidebarKeyboardShortcut.displayName);
             let hideToolTip = WebInspector.UIString("Hide the details sidebar (%s)").format(WebInspector.detailsSidebarKeyboardShortcut.displayName);
             let image = WebInspector.resolvedLayoutDirection() == WebInspector.LayoutDirection.RTL ? "Images/ToggleLeftSidebar.svg" : "Images/ToggleRightSidebar.svg";

Modified: trunk/Source/WebInspectorUI/UserInterface/Views/DebuggerTabContentView.js (217459 => 217460)


--- trunk/Source/WebInspectorUI/UserInterface/Views/DebuggerTabContentView.js	2017-05-26 00:18:25 UTC (rev 217459)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/DebuggerTabContentView.js	2017-05-26 00:29:58 UTC (rev 217460)
@@ -29,9 +29,9 @@
     {
         let {image, title} = WebInspector.DebuggerTabContentView.tabInfo();
         let tabBarItem = new WebInspector.GeneralTabBarItem(image, title);
-        let detailsSidebarPanels = [WebInspector.scopeChainDetailsSidebarPanel, WebInspector.resourceDetailsSidebarPanel, WebInspector.probeDetailsSidebarPanel];
+        let detailsSidebarPanelConstructors = [WebInspector.ScopeChainDetailsSidebarPanel, WebInspector.ResourceDetailsSidebarPanel, WebInspector.ProbeDetailsSidebarPanel];
 
-        super(identifier || "debugger", "debugger", tabBarItem, WebInspector.DebuggerSidebarPanel, detailsSidebarPanels);
+        super(identifier || "debugger", "debugger", tabBarItem, WebInspector.DebuggerSidebarPanel, detailsSidebarPanelConstructors);
     }
 
     static tabInfo()
@@ -69,11 +69,15 @@
     {
         super.showDetailsSidebarPanels();
 
-        if (!this._showScopeChainDetailsSidebarPanel || !WebInspector.scopeChainDetailsSidebarPanel.parentSidebar)
+        if (!this._showScopeChainDetailsSidebarPanel)
             return;
 
-        WebInspector.scopeChainDetailsSidebarPanel.show();
+        let scopeChainDetailsSidebarPanel = WebInspector.instanceForClass(WebInspector.ScopeChainDetailsSidebarPanel);
+        if (!scopeChainDetailsSidebarPanel.parentSidebar)
+            return;
 
+        scopeChainDetailsSidebarPanel.show();
+
         this._showScopeChainDetailsSidebarPanel = false;
     }
 

Modified: trunk/Source/WebInspectorUI/UserInterface/Views/ElementsTabContentView.js (217459 => 217460)


--- trunk/Source/WebInspectorUI/UserInterface/Views/ElementsTabContentView.js	2017-05-26 00:18:25 UTC (rev 217459)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/ElementsTabContentView.js	2017-05-26 00:29:58 UTC (rev 217460)
@@ -29,12 +29,12 @@
     {
         let {image, title} = WebInspector.ElementsTabContentView.tabInfo();
         let tabBarItem = new WebInspector.GeneralTabBarItem(image, title);
-        let detailsSidebarPanels = [WebInspector.domNodeDetailsSidebarPanel, WebInspector.cssStyleDetailsSidebarPanel];
+        let detailsSidebarPanelConstructors = [WebInspector.DOMNodeDetailsSidebarPanel, WebInspector.CSSStyleDetailsSidebarPanel];
 
-        if (WebInspector.layerTreeDetailsSidebarPanel)
-            detailsSidebarPanels.push(WebInspector.layerTreeDetailsSidebarPanel);
+        if (window.LayerTreeAgent)
+            detailsSidebarPanelConstructors.push(WebInspector.LayerTreeDetailsSidebarPanel);
 
-        super(identifier || "elements", "elements", tabBarItem, null, detailsSidebarPanels, true);
+        super(identifier || "elements", "elements", tabBarItem, null, detailsSidebarPanelConstructors, true);
 
         WebInspector.frameResourceManager.addEventListener(WebInspector.FrameResourceManager.Event.MainFrameDidChange, this._mainFrameDidChange, this);
         WebInspector.Frame.addEventListener(WebInspector.Frame.Event.MainResourceDidChange, this._mainResourceDidChange, this);

Modified: trunk/Source/WebInspectorUI/UserInterface/Views/NetworkTabContentView.js (217459 => 217460)


--- trunk/Source/WebInspectorUI/UserInterface/Views/NetworkTabContentView.js	2017-05-26 00:18:25 UTC (rev 217459)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/NetworkTabContentView.js	2017-05-26 00:29:58 UTC (rev 217460)
@@ -29,9 +29,9 @@
     {
         let {image, title} = WebInspector.NetworkTabContentView.tabInfo();
         let tabBarItem = new WebInspector.GeneralTabBarItem(image, title);
-        let detailsSidebarPanels = [WebInspector.resourceDetailsSidebarPanel, WebInspector.probeDetailsSidebarPanel];
+        let detailsSidebarPanelConstructors = [WebInspector.ResourceDetailsSidebarPanel, WebInspector.ProbeDetailsSidebarPanel];
 
-        super(identifier || "network", "network", tabBarItem, WebInspector.NetworkSidebarPanel, detailsSidebarPanels);
+        super(identifier || "network", "network", tabBarItem, WebInspector.NetworkSidebarPanel, detailsSidebarPanelConstructors);
     }
 
     static tabInfo()

Modified: trunk/Source/WebInspectorUI/UserInterface/Views/ResourcesTabContentView.js (217459 => 217460)


--- trunk/Source/WebInspectorUI/UserInterface/Views/ResourcesTabContentView.js	2017-05-26 00:18:25 UTC (rev 217459)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/ResourcesTabContentView.js	2017-05-26 00:29:58 UTC (rev 217460)
@@ -29,14 +29,14 @@
     {
         let {image, title} = WebInspector.ResourcesTabContentView.tabInfo();
         let tabBarItem = new WebInspector.GeneralTabBarItem(image, title);
-        let detailsSidebarPanels = [WebInspector.resourceDetailsSidebarPanel, WebInspector.probeDetailsSidebarPanel];
+        let detailsSidebarPanelConstructors = [WebInspector.ResourceDetailsSidebarPanel, WebInspector.ProbeDetailsSidebarPanel];
 
         // FIXME: Until ContentFlows are moved to the Elements tab, these details sidebar panels need to be included.
-        detailsSidebarPanels = detailsSidebarPanels.concat([WebInspector.domNodeDetailsSidebarPanel, WebInspector.cssStyleDetailsSidebarPanel]);
-        if (WebInspector.layerTreeDetailsSidebarPanel)
-            detailsSidebarPanels.push(WebInspector.layerTreeDetailsSidebarPanel);
+        detailsSidebarPanelConstructors = detailsSidebarPanelConstructors.concat([WebInspector.DOMNodeDetailsSidebarPanel, WebInspector.CSSStyleDetailsSidebarPanel]);
+        if (window.LayerTreeAgent)
+            detailsSidebarPanelConstructors.push(WebInspector.LayerTreeDetailsSidebarPanel);
 
-        super(identifier || "resources", "resources", tabBarItem, WebInspector.ResourceSidebarPanel, detailsSidebarPanels);
+        super(identifier || "resources", "resources", tabBarItem, WebInspector.ResourceSidebarPanel, detailsSidebarPanelConstructors);
     }
 
     static tabInfo()

Modified: trunk/Source/WebInspectorUI/UserInterface/Views/SearchTabContentView.js (217459 => 217460)


--- trunk/Source/WebInspectorUI/UserInterface/Views/SearchTabContentView.js	2017-05-26 00:18:25 UTC (rev 217459)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/SearchTabContentView.js	2017-05-26 00:29:58 UTC (rev 217460)
@@ -29,13 +29,13 @@
     {
         let {image, title} = WebInspector.SearchTabContentView.tabInfo();
         let tabBarItem = new WebInspector.GeneralTabBarItem(image, title);
-        let detailsSidebarPanels = [WebInspector.resourceDetailsSidebarPanel, WebInspector.probeDetailsSidebarPanel,
-            WebInspector.domNodeDetailsSidebarPanel, WebInspector.cssStyleDetailsSidebarPanel];
+        let detailsSidebarPanelConstructors = [WebInspector.ResourceDetailsSidebarPanel, WebInspector.ProbeDetailsSidebarPanel,
+            WebInspector.DOMNodeDetailsSidebarPanel, WebInspector.CSSStyleDetailsSidebarPanel];
 
-        if (WebInspector.layerTreeDetailsSidebarPanel)
-            detailsSidebarPanels.push(WebInspector.layerTreeDetailsSidebarPanel);
+        if (window.LayerTreeAgent)
+            detailsSidebarPanelConstructors.push(WebInspector.LayerTreeDetailsSidebarPanel);
 
-        super(identifier || "search", "search", tabBarItem, WebInspector.SearchSidebarPanel, detailsSidebarPanels);
+        super(identifier || "search", "search", tabBarItem, WebInspector.SearchSidebarPanel, detailsSidebarPanelConstructors);
 
         this._forcePerformSearch = false;
     }

Modified: trunk/Source/WebInspectorUI/UserInterface/Views/StorageTabContentView.js (217459 => 217460)


--- trunk/Source/WebInspectorUI/UserInterface/Views/StorageTabContentView.js	2017-05-26 00:18:25 UTC (rev 217459)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/StorageTabContentView.js	2017-05-26 00:29:58 UTC (rev 217460)
@@ -29,9 +29,9 @@
     {
         let {image, title} = WebInspector.StorageTabContentView.tabInfo();
         let tabBarItem = new WebInspector.GeneralTabBarItem(image, title);
-        let detailsSidebarPanels = [WebInspector.applicationCacheDetailsSidebarPanel, WebInspector.indexedDatabaseDetailsSidebarPanel];
+        let detailsSidebarPanelConstructors = [WebInspector.ApplicationCacheDetailsSidebarPanel, WebInspector.IndexedDatabaseDetailsSidebarPanel];
 
-        super(identifier || "storage", "storage", tabBarItem, WebInspector.StorageSidebarPanel, detailsSidebarPanels);
+        super(identifier || "storage", "storage", tabBarItem, WebInspector.StorageSidebarPanel, detailsSidebarPanelConstructors);
     }
 
     static tabInfo()

Modified: trunk/Source/WebInspectorUI/UserInterface/Views/TabContentView.js (217459 => 217460)


--- trunk/Source/WebInspectorUI/UserInterface/Views/TabContentView.js	2017-05-26 00:18:25 UTC (rev 217459)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/TabContentView.js	2017-05-26 00:29:58 UTC (rev 217460)
@@ -25,13 +25,13 @@
 
 WebInspector.TabContentView = class TabContentView extends WebInspector.ContentView
 {
-    constructor(identifier, styleClassNames, tabBarItem, navigationSidebarPanel, detailsSidebarPanels)
+    constructor(identifier, styleClassNames, tabBarItem, navigationSidebarPanel, detailsSidebarPanelConstructors)
     {
         console.assert(typeof identifier === "string");
         console.assert(typeof styleClassNames === "string" || styleClassNames.every((className) => typeof className === "string"));
         console.assert(tabBarItem instanceof WebInspector.TabBarItem);
         console.assert(!navigationSidebarPanel || navigationSidebarPanel instanceof WebInspector.NavigationSidebarPanel);
-        console.assert(!detailsSidebarPanels || detailsSidebarPanels.every((detailsSidebarPanel) => detailsSidebarPanel instanceof WebInspector.DetailsSidebarPanel));
+        console.assert(!detailsSidebarPanelConstructors || detailsSidebarPanelConstructors.every((detailsSidebarPanelConstructor) => typeof detailsSidebarPanelConstructor === "function"));
 
         super(null);
 
@@ -45,7 +45,7 @@
         this._identifier = identifier;
         this._tabBarItem = tabBarItem;
         this._navigationSidebarPanel = navigationSidebarPanel || null;
-        this._detailsSidebarPanels = detailsSidebarPanels || [];
+        this._detailsSidebarPanelConstructors = detailsSidebarPanelConstructors || [];
 
         const defaultSidebarWidth = 300;
 
@@ -177,7 +177,13 @@
     get navigationSidebarCollapsedSetting() { return this._navigationSidebarCollapsedSetting; }
     get navigationSidebarWidthSetting() { return this._navigationSidebarWidthSetting; }
 
-    get detailsSidebarPanels() { return this._detailsSidebarPanels; }
+    get detailsSidebarPanels()
+    {
+        if (!this._detailsSidebarPanels)
+            this._detailsSidebarPanels = this._detailsSidebarPanelConstructors.map(constructor => WebInspector.instanceForClass(constructor));
+
+        return this._detailsSidebarPanels;
+    }
     get detailsSidebarCollapsedSetting() { return this._detailsSidebarCollapsedSetting; }
     get detailsSidebarSelectedPanelSetting() { return this._detailsSidebarSelectedPanelSetting; }
     get detailsSidebarWidthSetting() { return this._detailsSidebarWidthSetting; }

Modified: trunk/Source/WebInspectorUI/UserInterface/Views/TimelineTabContentView.js (217459 => 217460)


--- trunk/Source/WebInspectorUI/UserInterface/Views/TimelineTabContentView.js	2017-05-26 00:18:25 UTC (rev 217459)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/TimelineTabContentView.js	2017-05-26 00:29:58 UTC (rev 217460)
@@ -29,9 +29,9 @@
     {
         let {image, title} = WebInspector.TimelineTabContentView.tabInfo();
         let tabBarItem = new WebInspector.GeneralTabBarItem(image, title);
-        let detailsSidebarPanels = [WebInspector.resourceDetailsSidebarPanel, WebInspector.probeDetailsSidebarPanel];
+        let detailsSidebarPanelConstructors = [WebInspector.ResourceDetailsSidebarPanel, WebInspector.ProbeDetailsSidebarPanel];
 
-        super(identifier || "timeline", "timeline", tabBarItem, null, detailsSidebarPanels);
+        super(identifier || "timeline", "timeline", tabBarItem, null, detailsSidebarPanelConstructors);
 
         // Maintain an invisible tree outline containing tree elements for all recordings.
         // The visible recording's tree element is selected when the content view changes.
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to