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.