Title: [200947] trunk/Source/WebInspectorUI
Revision
200947
Author
timo...@apple.com
Date
2016-05-16 10:41:41 -0700 (Mon, 16 May 2016)

Log Message

Web Inspector: Many DataGrid instances do not save/restore their scroll position
https://bugs.webkit.org/show_bug.cgi?id=157709
rdar://problem/26286090

Reviewed by Brian Burg.

* UserInterface/Models/BackForwardEntry.js:
(WebInspector.BackForwardEntry.prototype.makeCopy): Added.
* UserInterface/Views/ContentViewContainer.js:
(WebInspector.ContentViewContainer.prototype.showContentView): Copy the last entry for the view.
* UserInterface/Views/DOMStorageContentView.js:
(WebInspector.DOMStorageContentView.prototype.get scrollableElements): Added.
* UserInterface/Views/HeapSnapshotContentView.js:
(WebInspector.HeapSnapshotContentView.prototype.get scrollableElements): Added.
* UserInterface/Views/IndexedDatabaseObjectStoreContentView.js:
(WebInspector.IndexedDatabaseObjectStoreContentView.prototype.get scrollableElements): Added.
* UserInterface/Views/MemoryTimelineView.js:
(WebInspector.MemoryTimelineView.prototype.get scrollableElements): Added.
* UserInterface/Views/ProfileView.js:
(WebInspector.ProfileView.prototype.get scrollableElements): Added.
(WebInspector.ProfileView.prototype._repopulateDataGridFromTree): Removed unused skipRefresh argument.
* UserInterface/Views/ScriptClusterTimelineView.js:
(WebInspector.ScriptClusterTimelineView.prototype.get scrollableElements): Added.
* UserInterface/Views/ScriptProfileTimelineView.js:
(WebInspector.ScriptProfileTimelineView.prototype.get scrollableElements): Added.
* UserInterface/Views/TimelineView.js:
(WebInspector.TimelineView.prototype.get scrollableElements): Added.

Modified Paths

Diff

Modified: trunk/Source/WebInspectorUI/ChangeLog (200946 => 200947)


--- trunk/Source/WebInspectorUI/ChangeLog	2016-05-16 17:40:15 UTC (rev 200946)
+++ trunk/Source/WebInspectorUI/ChangeLog	2016-05-16 17:41:41 UTC (rev 200947)
@@ -1,3 +1,33 @@
+2016-05-14  Timothy Hatcher  <timo...@apple.com>
+
+        Web Inspector: Many DataGrid instances do not save/restore their scroll position
+        https://bugs.webkit.org/show_bug.cgi?id=157709
+        rdar://problem/26286090
+
+        Reviewed by Brian Burg.
+
+        * UserInterface/Models/BackForwardEntry.js:
+        (WebInspector.BackForwardEntry.prototype.makeCopy): Added.
+        * UserInterface/Views/ContentViewContainer.js:
+        (WebInspector.ContentViewContainer.prototype.showContentView): Copy the last entry for the view.
+        * UserInterface/Views/DOMStorageContentView.js:
+        (WebInspector.DOMStorageContentView.prototype.get scrollableElements): Added.
+        * UserInterface/Views/HeapSnapshotContentView.js:
+        (WebInspector.HeapSnapshotContentView.prototype.get scrollableElements): Added.
+        * UserInterface/Views/IndexedDatabaseObjectStoreContentView.js:
+        (WebInspector.IndexedDatabaseObjectStoreContentView.prototype.get scrollableElements): Added.
+        * UserInterface/Views/MemoryTimelineView.js:
+        (WebInspector.MemoryTimelineView.prototype.get scrollableElements): Added.
+        * UserInterface/Views/ProfileView.js:
+        (WebInspector.ProfileView.prototype.get scrollableElements): Added.
+        (WebInspector.ProfileView.prototype._repopulateDataGridFromTree): Removed unused skipRefresh argument.
+        * UserInterface/Views/ScriptClusterTimelineView.js:
+        (WebInspector.ScriptClusterTimelineView.prototype.get scrollableElements): Added.
+        * UserInterface/Views/ScriptProfileTimelineView.js:
+        (WebInspector.ScriptProfileTimelineView.prototype.get scrollableElements): Added.
+        * UserInterface/Views/TimelineView.js:
+        (WebInspector.TimelineView.prototype.get scrollableElements): Added.
+
 2016-05-14  Nikita Vasilyev  <nvasil...@apple.com>
 
         Web Inspector: Empty line shows arrow when hovering over Animation Frame Requested in timeline recording

Modified: trunk/Source/WebInspectorUI/UserInterface/Models/BackForwardEntry.js (200946 => 200947)


--- trunk/Source/WebInspectorUI/UserInterface/Models/BackForwardEntry.js	2016-05-16 17:40:15 UTC (rev 200946)
+++ trunk/Source/WebInspectorUI/UserInterface/Models/BackForwardEntry.js	2016-05-16 17:41:41 UTC (rev 200947)
@@ -46,6 +46,14 @@
 
     // Public
 
+    makeCopy(newCookie)
+    {
+        let copy = new WebInspector.BackForwardEntry(this._contentView, newCookie || this.cookie);
+        copy._tombstone = this._tombstone;
+        copy._scrollPositions = this._scrollPositions.slice();
+        return copy;
+    }
+
     get contentView()
     {
         return this._contentView;

Modified: trunk/Source/WebInspectorUI/UserInterface/Views/ContentViewContainer.js (200946 => 200947)


--- trunk/Source/WebInspectorUI/UserInterface/Views/ContentViewContainer.js	2016-05-16 17:40:15 UTC (rev 200946)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/ContentViewContainer.js	2016-05-16 17:41:41 UTC (rev 200947)
@@ -88,8 +88,23 @@
         if (contentView.parentContainer !== this)
             this._takeOwnershipOfContentView(contentView);
 
-        var currentEntry = this.currentBackForwardEntry;
-        var provisionalEntry = new WebInspector.BackForwardEntry(contentView, cookie);
+        let currentEntry = this.currentBackForwardEntry;
+
+        // Try to find the last entry with the same content view so we can copy it
+        // to preserve the last scroll positions. The supplied cookie (if any) could
+        // still change the scroll position afterwards, but in most cases the cookie
+        // is undefined, so we want to show with a state last used.
+        let provisionalEntry = null;
+        for (let i = this._backForwardList.length - 1; i >= 0; --i) {
+            if (this._backForwardList[i].contentView === contentView) {
+                provisionalEntry = this._backForwardList[i].makeCopy(cookie);
+                break;
+            }
+        }
+
+        if (!provisionalEntry)
+            provisionalEntry = new WebInspector.BackForwardEntry(contentView, cookie);
+
         // Don't do anything if we would have added an identical back/forward list entry.
         if (currentEntry && currentEntry.contentView === contentView && Object.shallowEqual(provisionalEntry.cookie, currentEntry.cookie)) {
             const shouldCallShown = false;
@@ -101,18 +116,18 @@
         // at the end of the list. Finally, the current index will be updated to point to the end of the back/forward list.
 
         // Increment the current index to where we will insert the content view.
-        var newIndex = this._currentIndex + 1;
+        let newIndex = this._currentIndex + 1;
 
         // Insert the content view at the new index. This will remove any content views greater than or equal to the index.
-        var removedEntries = this._backForwardList.splice(newIndex, this._backForwardList.length - newIndex, provisionalEntry);
+        let removedEntries = this._backForwardList.splice(newIndex, this._backForwardList.length - newIndex, provisionalEntry);
 
         console.assert(newIndex === this._backForwardList.length - 1);
         console.assert(this._backForwardList[newIndex] === provisionalEntry);
 
         // Disassociate with the removed content views.
-        for (var i = 0; i < removedEntries.length; ++i) {
+        for (let i = 0; i < removedEntries.length; ++i) {
             // Skip disassociation if this content view is still in the back/forward list.
-            var shouldDissociateContentView = !this._backForwardList.some(function(existingEntry) {
+            let shouldDissociateContentView = !this._backForwardList.some(function(existingEntry) {
                 return existingEntry.contentView === removedEntries[i].contentView;
             });
 

Modified: trunk/Source/WebInspectorUI/UserInterface/Views/DOMStorageContentView.js (200946 => 200947)


--- trunk/Source/WebInspectorUI/UserInterface/Views/DOMStorageContentView.js	2016-05-16 17:40:15 UTC (rev 200946)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/DOMStorageContentView.js	2016-05-16 17:41:41 UTC (rev 200947)
@@ -60,6 +60,11 @@
         cookie.host = this.representedObject.host;
     }
 
+    get scrollableElements()
+    {
+        return [this._dataGrid.scrollContainer];
+    }
+
     itemsCleared(event)
     {
         this._dataGrid.removeChildren();

Modified: trunk/Source/WebInspectorUI/UserInterface/Views/HeapSnapshotContentView.js (200946 => 200947)


--- trunk/Source/WebInspectorUI/UserInterface/Views/HeapSnapshotContentView.js	2016-05-16 17:40:15 UTC (rev 200946)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/HeapSnapshotContentView.js	2016-05-16 17:41:41 UTC (rev 200947)
@@ -65,6 +65,11 @@
         this._heapSnapshotDataGridTree.hidden();
     }
 
+    get scrollableElements()
+    {
+        return [this._dataGrid.scrollContainer];
+    }
+
     // Private
 
     _sortDataGrid()

Modified: trunk/Source/WebInspectorUI/UserInterface/Views/IndexedDatabaseObjectStoreContentView.js (200946 => 200947)


--- trunk/Source/WebInspectorUI/UserInterface/Views/IndexedDatabaseObjectStoreContentView.js	2016-05-16 17:40:15 UTC (rev 200946)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/IndexedDatabaseObjectStoreContentView.js	2016-05-16 17:41:41 UTC (rev 200947)
@@ -101,6 +101,11 @@
         cookie.objectStoreIndexName = this._objectStoreIndex && this._objectStoreIndex.name;
     }
 
+    get scrollableElements()
+    {
+        return [this._dataGrid.scrollContainer];
+    }
+
     // Private
 
     _reset()

Modified: trunk/Source/WebInspectorUI/UserInterface/Views/MemoryTimelineView.js (200946 => 200947)


--- trunk/Source/WebInspectorUI/UserInterface/Views/MemoryTimelineView.js	2016-05-16 17:40:15 UTC (rev 200946)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/MemoryTimelineView.js	2016-05-16 17:41:41 UTC (rev 200947)
@@ -151,6 +151,11 @@
             categoryView.clear();
     }
 
+    get scrollableElements()
+    {
+        return [this.element];
+    }
+
     // Protected
 
     get showsFilterBar() { return false; }

Modified: trunk/Source/WebInspectorUI/UserInterface/Views/ProfileView.js (200946 => 200947)


--- trunk/Source/WebInspectorUI/UserInterface/Views/ProfileView.js	2016-05-16 17:40:15 UTC (rev 200946)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/ProfileView.js	2016-05-16 17:41:41 UTC (rev 200947)
@@ -107,6 +107,11 @@
         this._profileDataGridTree.clearFocusNodes();
     }
 
+    get scrollableElements()
+    {
+        return [this._dataGrid.scrollContainer];
+    }
+
     // Protected
 
     get selectionPathComponents()
@@ -142,7 +147,7 @@
             this.dispatchEventToListeners(WebInspector.ContentView.Event.SelectionPathComponentsDidChange);
     }
 
-    _repopulateDataGridFromTree(skipRefresh)
+    _repopulateDataGridFromTree()
     {
         this._dataGrid.removeChildren();
         for (let child of this._profileDataGridTree.children)

Modified: trunk/Source/WebInspectorUI/UserInterface/Views/ScriptClusterTimelineView.js (200946 => 200947)


--- trunk/Source/WebInspectorUI/UserInterface/Views/ScriptClusterTimelineView.js	2016-05-16 17:40:15 UTC (rev 200946)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/ScriptClusterTimelineView.js	2016-05-16 17:41:41 UTC (rev 200947)
@@ -71,7 +71,7 @@
     set endTime(x) { this._contentViewContainer.currentContentView.endTime = x; }
     get currentTime() { return this._contentViewContainer.currentContentView.currentTime; }
     set currentTime(x) { this._contentViewContainer.currentContentView.currentTime = x; }
-
+    get scrollableElements() { return this._contentViewContainer.currentContentView.scrollableElements; }
     selectRecord(record) { this._contentViewContainer.currentContentView.selectRecord(record); }
     updateFilter(filters) { return this._contentViewContainer.currentContentView.updateFilter(filters); }
     filterDidChange() { return this._contentViewContainer.currentContentView.filterDidChange(); }

Modified: trunk/Source/WebInspectorUI/UserInterface/Views/ScriptProfileTimelineView.js (200946 => 200947)


--- trunk/Source/WebInspectorUI/UserInterface/Views/ScriptProfileTimelineView.js	2016-05-16 17:40:15 UTC (rev 200946)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/ScriptProfileTimelineView.js	2016-05-16 17:41:41 UTC (rev 200947)
@@ -62,6 +62,8 @@
 
     // Public
 
+    get scrollableElements() { return this._profileView.scrollableElements; }
+
     get showsLiveRecordingData() { return false; }
 
     // Protected

Modified: trunk/Source/WebInspectorUI/UserInterface/Views/TimelineView.js (200946 => 200947)


--- trunk/Source/WebInspectorUI/UserInterface/Views/TimelineView.js	2016-05-16 17:40:15 UTC (rev 200946)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/TimelineView.js	2016-05-16 17:41:41 UTC (rev 200947)
@@ -43,6 +43,13 @@
 
     // Public
 
+    get scrollableElements()
+    {
+        if (!this._timelineDataGrid)
+            return [];
+        return [this._timelineDataGrid.scrollContainer];
+    }
+
     get showsLiveRecordingData()
     {
         // Implemented by sub-classes if needed.
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to