Title: [260375] trunk/Source/WebInspectorUI
Revision
260375
Author
drou...@apple.com
Date
2020-04-20 11:02:03 -0700 (Mon, 20 Apr 2020)

Log Message

Web Inspector: removing a `WI.TreeElement` in a `WI.NavigationSidebar` doesn't check if the `WI.TreeOutline` still matches the current filter
https://bugs.webkit.org/show_bug.cgi?id=210672

Reviewed by Joseph Pecoraro.

* UserInterface/Views/NavigationSidebarPanel.js:
(WI.NavigationSidebarPanel.prototype.createContentTreeOutline):
(WI.NavigationSidebarPanel.prototype.updateFilter):
(WI.NavigationSidebarPanel.prototype._checkForEmptyFilterResults):
(WI.NavigationSidebarPanel.prototype._treeElementAddedOrChanged):
(WI.NavigationSidebarPanel.prototype._handleTreeElementRemoved): Added.

Modified Paths

Diff

Modified: trunk/Source/WebInspectorUI/ChangeLog (260374 => 260375)


--- trunk/Source/WebInspectorUI/ChangeLog	2020-04-20 17:59:42 UTC (rev 260374)
+++ trunk/Source/WebInspectorUI/ChangeLog	2020-04-20 18:02:03 UTC (rev 260375)
@@ -1,3 +1,17 @@
+2020-04-20  Devin Rousso  <drou...@apple.com>
+
+        Web Inspector: removing a `WI.TreeElement` in a `WI.NavigationSidebar` doesn't check if the `WI.TreeOutline` still matches the current filter
+        https://bugs.webkit.org/show_bug.cgi?id=210672
+
+        Reviewed by Joseph Pecoraro.
+
+        * UserInterface/Views/NavigationSidebarPanel.js:
+        (WI.NavigationSidebarPanel.prototype.createContentTreeOutline):
+        (WI.NavigationSidebarPanel.prototype.updateFilter):
+        (WI.NavigationSidebarPanel.prototype._checkForEmptyFilterResults):
+        (WI.NavigationSidebarPanel.prototype._treeElementAddedOrChanged):
+        (WI.NavigationSidebarPanel.prototype._handleTreeElementRemoved): Added.
+
 2020-04-17  Devin Rousso  <drou...@apple.com>
 
         Web Inspector: REGRESSION(r242018): using `RegExp.prototype.test` with a global `RegExp` will ignore one potential match after each successful match

Modified: trunk/Source/WebInspectorUI/UserInterface/Views/NavigationSidebarPanel.js (260374 => 260375)


--- trunk/Source/WebInspectorUI/UserInterface/Views/NavigationSidebarPanel.js	2020-04-20 17:59:42 UTC (rev 260374)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/NavigationSidebarPanel.js	2020-04-20 18:02:03 UTC (rev 260375)
@@ -144,6 +144,7 @@
             contentTreeOutline.addEventListener(WI.TreeOutline.Event.ElementAdded, this._treeElementAddedOrChanged, this);
             contentTreeOutline.addEventListener(WI.TreeOutline.Event.ElementDidChange, this._treeElementAddedOrChanged, this);
             contentTreeOutline.addEventListener(WI.TreeOutline.Event.ElementDisclosureDidChanged, this._treeElementDisclosureDidChange, this);
+            contentTreeOutline.addEventListener(WI.TreeOutline.Event.ElementRemoved, this._handleTreeElementRemoved, this);
         }
 
         contentTreeOutline[WI.NavigationSidebarPanel.IgnoreCookieRestoration] = ignoreCookieRestoration;
@@ -315,16 +316,6 @@
 
     updateFilter()
     {
-        let selectedTreeElement;
-        for (let treeOutline of this.contentTreeOutlines) {
-            if (treeOutline.hidden || treeOutline[WI.NavigationSidebarPanel.SuppressFilteringSymbol])
-                continue;
-
-            selectedTreeElement = treeOutline.selectedTreeElement;
-            if (selectedTreeElement)
-                break;
-        }
-
         let filters = this._filterBar.filters;
         this._textFilterRegex = simpleGlobStringToRegExp(filters.text, "i");
         this._filtersSetting.value = filters;
@@ -350,9 +341,10 @@
 
                 currentTreeElement = currentTreeElement.traverseNextTreeElement(false, null, dontPopulate);
             }
+
+            this._checkForEmptyFilterResults(treeOutline);
         }
 
-        this._checkForEmptyFilterResults();
         this._updateContentOverflowShadowVisibilityDebouncer.force();
     }
 
@@ -536,57 +528,50 @@
         this._bottomOverflowShadowElement.style.opacity = (1 - (bottomCoverage / edgeThreshold)).toFixed(1);
     }
 
-    _checkForEmptyFilterResults()
+    _checkForEmptyFilterResults(treeOutline)
     {
-        function checkTreeOutlineForEmptyFilterResults(treeOutline)
-        {
-            // No tree elements, so don't touch the empty content placeholder.
-            if (!treeOutline.children.length)
-                return;
+        if (treeOutline[WI.NavigationSidebarPanel.SuppressFilteringSymbol])
+            return;
 
-            // Iterate over all the top level tree elements. If any filterable elements are visible, return early.
-            let filterableTreeElementFound = false;
-            let unfilteredTreeElementFound = false;
-            let currentTreeElement = treeOutline.children[0];
-            while (currentTreeElement) {
-                let suppressFilteringForTreeElement = currentTreeElement[WI.NavigationSidebarPanel.SuppressFilteringSymbol];
-                if (!suppressFilteringForTreeElement) {
-                    filterableTreeElementFound = true;
+        // No tree elements, so don't touch the empty content placeholder.
+        if (!treeOutline.children.length)
+            return;
 
-                    if (!currentTreeElement.hidden) {
-                        unfilteredTreeElementFound = true;
-                        break;
-                    }
+        // Iterate over all the top level tree elements. If any filterable elements are visible, return early.
+        let filterableTreeElementFound = false;
+        let unfilteredTreeElementFound = false;
+        let currentTreeElement = treeOutline.children[0];
+        while (currentTreeElement) {
+            let suppressFilteringForTreeElement = currentTreeElement[WI.NavigationSidebarPanel.SuppressFilteringSymbol];
+            if (!suppressFilteringForTreeElement) {
+                filterableTreeElementFound = true;
+
+                if (!currentTreeElement.hidden) {
+                    unfilteredTreeElementFound = true;
+                    break;
                 }
-
-                currentTreeElement = currentTreeElement.nextSibling;
             }
 
-            if (unfilteredTreeElementFound || !filterableTreeElementFound) {
-                this.hideEmptyContentPlaceholder(treeOutline);
-                this._emptyFilterResults.delete(treeOutline);
-                return;
-            }
+            currentTreeElement = currentTreeElement.nextSibling;
+        }
 
-            let message = WI.createMessageTextView(WI.UIString("No Filter Results"));
+        if (unfilteredTreeElementFound || !filterableTreeElementFound) {
+            this.hideEmptyContentPlaceholder(treeOutline);
+            this._emptyFilterResults.delete(treeOutline);
+            return;
+        }
 
-            let buttonElement = message.appendChild(document.createElement("button"));
-            buttonElement.textContent = WI.UIString("Clear Filters");
-            buttonElement.addEventListener("click", () => {
-                this.resetFilter();
-            });
+        let message = WI.createMessageTextView(WI.UIString("No Filter Results"));
 
-            // All top level tree elements are hidden, so filtering hid everything. Show a message.
-            this.showEmptyContentPlaceholder(message, treeOutline);
-            this._emptyFilterResults.add(treeOutline);
-        }
+        let buttonElement = message.appendChild(document.createElement("button"));
+        buttonElement.textContent = WI.UIString("Clear Filters");
+        buttonElement.addEventListener("click", () => {
+            this.resetFilter();
+        });
 
-        for (let treeOutline of this.contentTreeOutlines) {
-            if (treeOutline[WI.NavigationSidebarPanel.SuppressFilteringSymbol])
-                continue;
-
-            checkTreeOutlineForEmptyFilterResults.call(this, treeOutline);
-        }
+        // All top level tree elements are hidden, so filtering hid everything. Show a message.
+        this.showEmptyContentPlaceholder(message, treeOutline);
+        this._emptyFilterResults.add(treeOutline);
     }
 
     _filterDidChange()
@@ -614,7 +599,7 @@
             currentTreeElement = currentTreeElement.traverseNextTreeElement(false, treeElement, dontPopulate);
         }
 
-        this._checkForEmptyFilterResults();
+        this._checkForEmptyFilterResults(event.target);
 
         if (this.visible)
             this._updateContentOverflowShadowVisibilityDebouncer.delayForTime(0);
@@ -628,6 +613,14 @@
         this._updateContentOverflowShadowVisibilityDebouncer.delayForTime(0);
     }
 
+    _handleTreeElementRemoved(event)
+    {
+        this._checkForEmptyFilterResults(event.target);
+
+        if (this.visible)
+            this._updateContentOverflowShadowVisibilityDebouncer.delayForTime(0);
+    }
+
     _checkForStaleResourcesIfNeeded()
     {
         if (!this._checkForStaleResourcesTimeoutIdentifier || !this._shouldAutoPruneStaleTopLevelResourceTreeElements)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to