[WK2] WebBackForwardListItems' pageState is not kept up-to-date
authorcdumez@apple.com <cdumez@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 5 Jul 2015 08:15:03 +0000 (08:15 +0000)
committercdumez@apple.com <cdumez@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 5 Jul 2015 08:15:03 +0000 (08:15 +0000)
https://bugs.webkit.org/show_bug.cgi?id=146614
<rdar://problem/21585268>

Reviewed by Gavin Barraclough.

WebBackForwardListItems' pageState on UIProcess-side were not kept
up-to-date when it was updated on WebContent process side. This meant
that we were losing the scroll position (among other things) when
transferring the session state over from one view to another.

We now call notifyHistoryItemChanged(item) after saving the scroll
position and the view state on the HistoryItem. As a result, the
WebBackForwardListProxy will send the updated pageState to the
UIProcess.

* history/HistoryItem.cpp:
(WebCore::HistoryItem::notifyChanged):
* history/HistoryItem.h:
* loader/HistoryController.cpp:
(WebCore::HistoryController::saveScrollPositionAndViewStateToItem):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@186287 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/history/HistoryItem.cpp
Source/WebCore/history/HistoryItem.h
Source/WebCore/loader/HistoryController.cpp

index eea9ae7..f6eb7e8 100644 (file)
@@ -1,3 +1,27 @@
+2015-07-05  Chris Dumez  <cdumez@apple.com>
+
+        [WK2] WebBackForwardListItems' pageState is not kept up-to-date
+        https://bugs.webkit.org/show_bug.cgi?id=146614
+        <rdar://problem/21585268>
+
+        Reviewed by Gavin Barraclough.
+
+        WebBackForwardListItems' pageState on UIProcess-side were not kept
+        up-to-date when it was updated on WebContent process side. This meant
+        that we were losing the scroll position (among other things) when
+        transferring the session state over from one view to another.
+
+        We now call notifyHistoryItemChanged(item) after saving the scroll
+        position and the view state on the HistoryItem. As a result, the
+        WebBackForwardListProxy will send the updated pageState to the
+        UIProcess.
+
+        * history/HistoryItem.cpp:
+        (WebCore::HistoryItem::notifyChanged):
+        * history/HistoryItem.h:
+        * loader/HistoryController.cpp:
+        (WebCore::HistoryController::saveScrollPositionAndViewStateToItem):
+
 2015-07-04  Chris Dumez  <cdumez@apple.com>
 
         Unreviewed Windows build fix after r186279.
index 829573f..8ab5e86 100644 (file)
@@ -571,6 +571,11 @@ void HistoryItem::setRedirectURLs(std::unique_ptr<Vector<String>> redirectURLs)
     m_redirectURLs = WTF::move(redirectURLs);
 }
 
+void HistoryItem::notifyChanged()
+{
+    notifyHistoryItemChanged(this);
+}
+
 #ifndef NDEBUG
 
 int HistoryItem::showTree() const
index b5078a0..3aacc2a 100644 (file)
@@ -206,6 +206,8 @@ public:
     void setSharedLinkUniqueIdentifier(const String& sharedLinkUniqueidentifier) { m_sharedLinkUniqueIdentifier = sharedLinkUniqueidentifier; }
 #endif
 
+    void notifyChanged();
+
 private:
     WEBCORE_EXPORT HistoryItem();
     WEBCORE_EXPORT HistoryItem(const String& urlString, const String& title);
index ae7db3d..454dd0a 100644 (file)
@@ -90,6 +90,9 @@ void HistoryController::saveScrollPositionAndViewStateToItem(HistoryItem* item)
 
     // FIXME: It would be great to work out a way to put this code in WebCore instead of calling through to the client.
     m_frame.loader().client().saveViewStateToItem(item);
+
+    // Notify clients that the HistoryItem has changed.
+    item->notifyChanged();
 }
 
 void HistoryController::clearScrollPositionAndViewState()