Title: [260523] trunk/Source/WebInspectorUI
Revision
260523
Author
[email protected]
Date
2020-04-22 11:33:32 -0700 (Wed, 22 Apr 2020)

Log Message

Web Inspector: Storage: unable to filter cookies
https://bugs.webkit.org/show_bug.cgi?id=210837

Reviewed by Brian Burg.

* UserInterface/Views/CookieStorageContentView.js:
(WI.CookieStorageContentView):
(WI.CookieStorageContentView.prototype.get navigationItems):
(WI.CookieStorageContentView.prototype.get canFocusFilterBar): Added.
(WI.CookieStorageContentView.prototype.focusFilterBar): Added.
(WI.CookieStorageContentView.prototype.tableIndexForRepresentedObject):
(WI.CookieStorageContentView.prototype.tableRepresentedObjectForIndex):
(WI.CookieStorageContentView.prototype.tableNumberOfRows):
(WI.CookieStorageContentView.prototype.tableSortChanged):
(WI.CookieStorageContentView.prototype.tableCellContextMenuClicked):
(WI.CookieStorageContentView.prototype.tableDidRemoveRows):
(WI.CookieStorageContentView.prototype.tablePopulateCell):
(WI.CookieStorageContentView.prototype._getCookiesForHost): Renamed from `_filterCookies`.
(WI.CookieStorageContentView.prototype.async _willDismissCookiePopover):
(WI.CookieStorageContentView.prototype._handleFilterBarFilterDidChange): Added.
(WI.CookieStorageContentView.prototype._handleClearNavigationItemClicked):
(WI.CookieStorageContentView.prototype._reloadCookies):
(WI.CookieStorageContentView.prototype._updateFilteredCookies): Added.
(WI.CookieStorageContentView.prototype._updateEmptyFilterResultsMessage): Added.
(WI.CookieStorageContentView.prototype._cookiesAtIndexes):
(WI.CookieStorageContentView.prototype._filterCookies): Deleted.
* UserInterface/Views/CookieStorageContentView.css:
(.content-view.cookie-storage > .message-text-view): Added.
(.content-view.cookie-storage > .message-text-view > .message): Added.
(.content-view.cookie-storage > .data-grid): Deleted.
Add a filter bar to the navigation bar that checks the regex-ified filter text against the
formatted text of each cell for each cookie. Also hook it up to the global find shortcut.

* UserInterface/Views/NetworkTableContentView.js:
(WI.NetworkTableContentView.prototype.layout):
(WI.NetworkTableContentView.prototype._showEmptyFilterResultsMessage):
(WI.NetworkTableContentView.prototype._tableNameColumnDidChangeWidth):
(WI.NetworkTableContentView.prototype._positionEmptyFilterMessage): Deleted.
* UserInterface/Views/NetworkTableContentView.css:
(.content-view.network .message-text-view): Added.
Drive-by: instead of having the "No Filter Results" view only cover the "Name" column, it
          should cover the entire table so as to be as noticable as possible (not to mention
          the table will be empty anyways, so it's not like anything is being hidden).
Drive-by: ensure that the "No Filter Results" view doesn't cover the statistics.

Modified Paths

Diff

Modified: trunk/Source/WebInspectorUI/ChangeLog (260522 => 260523)


--- trunk/Source/WebInspectorUI/ChangeLog	2020-04-22 18:12:34 UTC (rev 260522)
+++ trunk/Source/WebInspectorUI/ChangeLog	2020-04-22 18:33:32 UTC (rev 260523)
@@ -1,3 +1,50 @@
+2020-04-22  Devin Rousso  <[email protected]>
+
+        Web Inspector: Storage: unable to filter cookies
+        https://bugs.webkit.org/show_bug.cgi?id=210837
+
+        Reviewed by Brian Burg.
+
+        * UserInterface/Views/CookieStorageContentView.js:
+        (WI.CookieStorageContentView):
+        (WI.CookieStorageContentView.prototype.get navigationItems):
+        (WI.CookieStorageContentView.prototype.get canFocusFilterBar): Added.
+        (WI.CookieStorageContentView.prototype.focusFilterBar): Added.
+        (WI.CookieStorageContentView.prototype.tableIndexForRepresentedObject):
+        (WI.CookieStorageContentView.prototype.tableRepresentedObjectForIndex):
+        (WI.CookieStorageContentView.prototype.tableNumberOfRows):
+        (WI.CookieStorageContentView.prototype.tableSortChanged):
+        (WI.CookieStorageContentView.prototype.tableCellContextMenuClicked):
+        (WI.CookieStorageContentView.prototype.tableDidRemoveRows):
+        (WI.CookieStorageContentView.prototype.tablePopulateCell):
+        (WI.CookieStorageContentView.prototype._getCookiesForHost): Renamed from `_filterCookies`.
+        (WI.CookieStorageContentView.prototype.async _willDismissCookiePopover):
+        (WI.CookieStorageContentView.prototype._handleFilterBarFilterDidChange): Added.
+        (WI.CookieStorageContentView.prototype._handleClearNavigationItemClicked):
+        (WI.CookieStorageContentView.prototype._reloadCookies):
+        (WI.CookieStorageContentView.prototype._updateFilteredCookies): Added.
+        (WI.CookieStorageContentView.prototype._updateEmptyFilterResultsMessage): Added.
+        (WI.CookieStorageContentView.prototype._cookiesAtIndexes):
+        (WI.CookieStorageContentView.prototype._filterCookies): Deleted.
+        * UserInterface/Views/CookieStorageContentView.css:
+        (.content-view.cookie-storage > .message-text-view): Added.
+        (.content-view.cookie-storage > .message-text-view > .message): Added.
+        (.content-view.cookie-storage > .data-grid): Deleted.
+        Add a filter bar to the navigation bar that checks the regex-ified filter text against the
+        formatted text of each cell for each cookie. Also hook it up to the global find shortcut.
+
+        * UserInterface/Views/NetworkTableContentView.js:
+        (WI.NetworkTableContentView.prototype.layout):
+        (WI.NetworkTableContentView.prototype._showEmptyFilterResultsMessage):
+        (WI.NetworkTableContentView.prototype._tableNameColumnDidChangeWidth):
+        (WI.NetworkTableContentView.prototype._positionEmptyFilterMessage): Deleted.
+        * UserInterface/Views/NetworkTableContentView.css:
+        (.content-view.network .message-text-view): Added.
+        Drive-by: instead of having the "No Filter Results" view only cover the "Name" column, it
+                  should cover the entire table so as to be as noticable as possible (not to mention
+                  the table will be empty anyways, so it's not like anything is being hidden).
+        Drive-by: ensure that the "No Filter Results" view doesn't cover the statistics.
+
 2020-04-21  Devin Rousso  <[email protected]>
 
         Web Inspector: REGRESSION(r255396): Graphics: viewing a shader program hides the navigation sidebar

Modified: trunk/Source/WebInspectorUI/UserInterface/Views/CookieStorageContentView.css (260522 => 260523)


--- trunk/Source/WebInspectorUI/UserInterface/Views/CookieStorageContentView.css	2020-04-22 18:12:34 UTC (rev 260522)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/CookieStorageContentView.css	2020-04-22 18:33:32 UTC (rev 260523)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2013 Apple Inc. All rights reserved.
+ * Copyright (C) 2013-2020 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -23,10 +23,11 @@
  * THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-.content-view.cookie-storage > .data-grid {
-    position: absolute;
-    top: 0;
-    left: 0;
-    right: 0;
-    bottom: 0;
+.content-view.cookie-storage > .message-text-view {
+    top: var(--navigation-bar-height);
 }
+
+.content-view.cookie-storage > .message-text-view > .message {
+    font-size: var(--message-text-view-font-size);
+    font-weight: normal;
+}

Modified: trunk/Source/WebInspectorUI/UserInterface/Views/CookieStorageContentView.js (260522 => 260523)


--- trunk/Source/WebInspectorUI/UserInterface/Views/CookieStorageContentView.js	2020-04-22 18:12:34 UTC (rev 260522)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/CookieStorageContentView.js	2020-04-22 18:33:32 UTC (rev 260523)
@@ -32,9 +32,15 @@
         this.element.classList.add("cookie-storage");
 
         this._cookies = [];
+        this._filteredCookies = [];
         this._sortComparator = null;
         this._table = null;
 
+        this._emptyFilterResultsMessageElement = null;
+
+        this._filterBarNavigationItem = new WI.FilterBarNavigationItem;
+        this._filterBarNavigationItem.filterBar.addEventListener(WI.FilterBar.Event.FilterDidChange, this._handleFilterBarFilterDidChange, this);
+
         if (InspectorBackend.hasCommand("Page.setCookie")) {
             this._setCookieButtonNavigationItem = new WI.ButtonNavigationItem("cookie-storage-set-cookie", WI.UIString("Add Cookie"), "Images/Plus15.svg", 15, 15);
             this._setCookieButtonNavigationItem.addEventListener(WI.ButtonNavigationItem.Event.Clicked, this._handleSetCookieButtonClick, this);
@@ -53,6 +59,8 @@
     get navigationItems()
     {
         let navigationItems = [];
+        navigationItems.push(this._filterBarNavigationItem);
+        navigationItems.push(new WI.DividerNavigationItem);
         if (this._setCookieButtonNavigationItem)
             navigationItems.push(this._setCookieButtonNavigationItem);
         navigationItems.push(this._refreshButtonNavigationItem);
@@ -73,6 +81,16 @@
         return [this._table.scrollContainer];
     }
 
+    get canFocusFilterBar()
+    {
+        return true;
+    }
+
+    focusFilterBar()
+    {
+        this._filterBarNavigationItem.filterBar.focus();
+    }
+
     handleCopyEvent(event)
     {
         if (!this._table || !this._table.selectedRows.length)
@@ -91,7 +109,7 @@
 
     tableIndexForRepresentedObject(table, object)
     {
-        let index = this._cookies.indexOf(object);
+        let index = this._filteredCookies.indexOf(object);
         console.assert(index >= 0);
         return index;
     }
@@ -98,13 +116,13 @@
 
     tableRepresentedObjectForIndex(table, index)
     {
-        console.assert(index >= 0 && index < this._cookies.length);
-        return this._cookies[index];
+        console.assert(index >= 0 && index < this._filteredCookies.length);
+        return this._filteredCookies[index];
     }
 
     tableNumberOfRows(table)
     {
-        return this._cookies.length;
+        return this._filteredCookies.length;
     }
 
     tableSortChanged(table)
@@ -115,6 +133,8 @@
             return;
 
         this._updateSort();
+        this._updateFilteredCookies();
+        this._updateEmptyFilterResultsMessage();
         this._table.reloadData();
     }
 
@@ -129,7 +149,7 @@
         if (InspectorBackend.hasCommand("Page.setCookie")) {
             contextMenu.appendItem(WI.UIString("Edit"), () => {
                 console.assert(!this._editingCookie);
-                this._editingCookie = this._cookies[rowIndex];
+                this._editingCookie = this._filteredCookies[rowIndex];
 
                 let popover = new WI.CookiePopover(this);
                 popover.show(this._editingCookie, this._table.cellForRowAndColumn(rowIndex, this._table.columns[0]), [WI.RectEdge.MAX_Y, WI.RectEdge.MIN_X]);
@@ -164,12 +184,13 @@
 
         for (let i = rowIndexes.length - 1; i >= 0; --i) {
             let rowIndex = rowIndexes[i];
-            let cookie = this._cookies[rowIndex];
+            let cookie = this._filteredCookies[rowIndex];
             console.assert(cookie, "Missing cookie for row " + rowIndex);
             if (!cookie)
                 continue;
 
-            this._cookies.splice(rowIndex, 1);
+            this._filteredCookies.splice(rowIndex, 1);
+            this._cookies.remove(cookie);
 
             let target = WI.assumingMainTarget();
             target.PageAgent.deleteCookie(cookie.name, cookie.url);
@@ -178,7 +199,7 @@
 
     tablePopulateCell(table, cell, column, rowIndex)
     {
-        let cookie = this._cookies[rowIndex];
+        let cookie = this._filteredCookies[rowIndex];
         cell.textContent = this._formatCookiePropertyForColumn(cookie, column);
         return cell;
     }
@@ -286,11 +307,11 @@
 
     // Private
 
-    _filterCookies(cookies)
+    _getCookiesForHost(cookies, host)
     {
         let resourceMatchesStorageDomain = (resource) => {
             let urlComponents = resource.urlComponents;
-            return urlComponents && urlComponents.host && urlComponents.host === this.representedObject.host;
+            return urlComponents && urlComponents.host && urlComponents.host === host;
         };
 
         let allResources = [];
@@ -381,11 +402,18 @@
         promises.push(this._reloadCookies());
         await Promise.all(promises);
 
-        let index = this._cookies.findIndex((existingCookie) => cookieToSet.equals(existingCookie));
+        let index = this._filteredCookies.findIndex((existingCookie) => cookieToSet.equals(existingCookie));
         if (index >= 0)
             this._table.selectRow(index);
     }
 
+    _handleFilterBarFilterDidChange(event)
+    {
+        this._updateFilteredCookies();
+        this._updateEmptyFilterResultsMessage();
+        this._table.reloadData();
+    }
+
     _handleSetCookieButtonClick(event)
     {
         let popover = new WI.CookiePopover(this);
@@ -400,10 +428,10 @@
     _handleClearNavigationItemClicked(event)
     {
         let target = WI.assumingMainTarget();
-        for (let cookie of this._cookies.splice(0))
+        for (let cookie of this._cookies)
             target.PageAgent.deleteCookie(cookie.name, cookie.url);
 
-        this._table.reloadData();
+        this._reloadCookies();
     }
 
     _reloadCookies()
@@ -410,8 +438,10 @@
     {
         let target = WI.assumingMainTarget();
         return target.PageAgent.getCookies().then((payload) => {
-            this._cookies = this._filterCookies(payload.cookies.map(WI.Cookie.fromPayload));
+            this._cookies = this._getCookiesForHost(payload.cookies.map(WI.Cookie.fromPayload), this.representedObject.host);
             this._updateSort();
+            this._updateFilteredCookies();
+            this._updateEmptyFilterResultsMessage();
             this._table.reloadData();
         }).catch((error) => {
             console.error("Could not fetch cookies: ", error);
@@ -426,6 +456,45 @@
         this._cookies.sort(this._sortComparator);
     }
 
+    _updateFilteredCookies()
+    {
+        let filterText = this._filterBarNavigationItem.filterBar.filters.text;
+        if (filterText) {
+            let regex = WI.SearchUtilities.filterRegExpForString(filterText, WI.SearchUtilities.defaultSettings);
+            this._filteredCookies = this._cookies.filter((cookie) => {
+                for (let column of this._table.columns) {
+                    let text = this._formatCookiePropertyForColumn(cookie, column);
+                    if (text && regex.test(text))
+                        return true;
+                }
+                return false;
+            });
+        } else
+            this._filteredCookies = this._cookies;
+    }
+
+    _updateEmptyFilterResultsMessage()
+    {
+        if (this._filteredCookies.length || !this._filterBarNavigationItem.filterBar.filters.text) {
+            if (this._emptyFilterResultsMessageElement)
+                this._emptyFilterResultsMessageElement.remove();
+            this._emptyFilterResultsMessageElement = null;
+        } else {
+            if (!this._emptyFilterResultsMessageElement) {
+                let buttonElement = document.createElement("button");
+                buttonElement.textContent = WI.UIString("Clear Filters");
+                buttonElement.addEventListener("click", (event) => {
+                    this._filterBarNavigationItem.filterBar.clear();
+                });
+
+                this._emptyFilterResultsMessageElement = WI.createMessageTextView(WI.UIString("No Filter Results"));
+                this._emptyFilterResultsMessageElement.appendChild(buttonElement);
+            }
+
+            this.element.appendChild(this._emptyFilterResultsMessageElement);
+        }
+    }
+
     _handleTableKeyDown(event)
     {
         if (event.keyCode === WI.KeyboardShortcut.Key.Backspace.keyCode || event.keyCode === WI.KeyboardShortcut.Key.Delete.keyCode)
@@ -434,9 +503,9 @@
 
     _cookiesAtIndexes(indexes)
     {
-        if (!this._cookies.length)
+        if (!this._filteredCookies.length)
             return [];
-        return indexes.map((index) => this._cookies[index]);
+        return indexes.map((index) => this._filteredCookies[index]);
     }
 
     _formatCookiesAsText(cookies)

Modified: trunk/Source/WebInspectorUI/UserInterface/Views/NetworkTableContentView.css (260522 => 260523)


--- trunk/Source/WebInspectorUI/UserInterface/Views/NetworkTableContentView.css	2020-04-22 18:12:34 UTC (rev 260522)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/NetworkTableContentView.css	2020-04-22 18:33:32 UTC (rev 260523)
@@ -227,6 +227,11 @@
     top: calc(var(--navigation-bar-height) - var(--timeline-ruler-height));
 }
 
+.content-view.network .message-text-view {
+    top: var(--navigation-bar-height);
+    bottom: var(--network-statistics-height);
+}
+
 .content-view.network .message-text-view > .message {
     font-size: var(--message-text-view-font-size);
     font-weight: normal;

Modified: trunk/Source/WebInspectorUI/UserInterface/Views/NetworkTableContentView.js (260522 => 260523)


--- trunk/Source/WebInspectorUI/UserInterface/Views/NetworkTableContentView.js	2020-04-22 18:12:34 UTC (rev 260522)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/NetworkTableContentView.js	2020-04-22 18:33:32 UTC (rev 260523)
@@ -1284,7 +1284,6 @@
         this._updateWaterfallTimelineRuler();
         this._processPendingEntries();
         this._positionDetailView();
-        this._positionEmptyFilterMessage();
         this._updateExportButton();
     }
 
@@ -1603,7 +1602,6 @@
         }
 
         this.element.appendChild(this._emptyFilterResultsMessageElement);
-        this._positionEmptyFilterMessage();
     }
 
     _hideEmptyFilterResultsMessage()
@@ -1614,15 +1612,6 @@
         this._emptyFilterResultsMessageElement.remove();
     }
 
-    _positionEmptyFilterMessage()
-    {
-        if (!this._emptyFilterResultsMessageElement)
-            return;
-
-        let width = this._nameColumn.width - 1; // For the 1px border.
-        this._emptyFilterResultsMessageElement.style.width = width + "px";
-    }
-
     _clearNetworkOnNavigateSettingChanged()
     {
         this._clearOnLoadNavigationItem.checked = !WI.settings.clearNetworkOnNavigate.value;
@@ -2494,7 +2483,6 @@
         this._nameColumnWidthSetting.value = event.target.width;
 
         this._positionDetailView();
-        this._positionEmptyFilterMessage();
     }
 
     _tableWaterfallColumnDidChangeWidth(event)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to