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.