The pageScaleFactor() should be saved/restored along with the scroll position
authormthole@apple.com <mthole@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 14 Jan 2011 01:16:42 +0000 (01:16 +0000)
committermthole@apple.com <mthole@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 14 Jan 2011 01:16:42 +0000 (01:16 +0000)
https://bugs.webkit.org/show_bug.cgi?id=52406
<rdar://problem/8714412>

Reviewed by Darin Adler and Brady Eidson.

* history/HistoryItem.cpp:
(WebCore::HistoryItem::HistoryItem): Initialize m_pageScaleFactor.
(WebCore::HistoryItem::pageScaleFactor): Added getter.
(WebCore::HistoryItem::setPageScaleFactor): Added setter.
(WebCore::HistoryItem::encodeBackForwardTreeNode): Encode m_pageScaleFactor.
(WebCore::HistoryItem::decodeBackForwardTree): Decode m_pageScaleFactor.
* history/HistoryItem.h:
* loader/HistoryController.cpp:
(WebCore::HistoryController::saveScrollPositionAndViewStateToItem): Save the page scale factor...
(WebCore::HistoryController::restoreScrollPositionAndViewState): ...and restore it here.

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

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

index 482f94d9e475d329d2e94b1f6909c9af6612d396..2ef06c856fcc306516d7bcbecba995d535d9d9de 100644 (file)
@@ -1,3 +1,22 @@
+2011-01-13  Mike Thole  <mthole@apple.com>
+
+        Reviewed by Darin Adler and Brady Eidson.
+
+        The pageScaleFactor() should be saved/restored along with the scroll position
+        https://bugs.webkit.org/show_bug.cgi?id=52406
+        <rdar://problem/8714412>
+
+        * history/HistoryItem.cpp:
+        (WebCore::HistoryItem::HistoryItem): Initialize m_pageScaleFactor.
+        (WebCore::HistoryItem::pageScaleFactor): Added getter.
+        (WebCore::HistoryItem::setPageScaleFactor): Added setter.
+        (WebCore::HistoryItem::encodeBackForwardTreeNode): Encode m_pageScaleFactor.
+        (WebCore::HistoryItem::decodeBackForwardTree): Decode m_pageScaleFactor.
+        * history/HistoryItem.h:
+        * loader/HistoryController.cpp:
+        (WebCore::HistoryController::saveScrollPositionAndViewStateToItem): Save the page scale factor...
+        (WebCore::HistoryController::restoreScrollPositionAndViewState): ...and restore it here.
+
 2011-01-13  Evan Martin  <evan@chromium.org>
 
         Reviewed by Tony Chang.
index 09959134bf9a21365976f965be53c1babc3eadc9..f9e6c96a3ca26cd565b7d7e7b21bc4f6760c95aa 100644 (file)
@@ -40,7 +40,7 @@
 
 namespace WebCore {
 
-const uint32_t backForwardTreeEncodingVersion = 0;
+const uint32_t backForwardTreeEncodingVersion = 1;
 
 static long long generateSequenceNumber()
 {
@@ -59,6 +59,7 @@ void (*notifyHistoryItemChanged)(HistoryItem*) = defaultNotifyHistoryItemChanged
 HistoryItem::HistoryItem()
     : m_lastVisitedTime(0)
     , m_lastVisitWasHTTPNonGet(false)
+    , m_pageScaleFactor(1)
     , m_lastVisitWasFailure(false)
     , m_isTargetItem(false)
     , m_visitCount(0)
@@ -73,6 +74,7 @@ HistoryItem::HistoryItem(const String& urlString, const String& title, double ti
     , m_title(title)
     , m_lastVisitedTime(time)
     , m_lastVisitWasHTTPNonGet(false)
+    , m_pageScaleFactor(1)
     , m_lastVisitWasFailure(false)
     , m_isTargetItem(false)
     , m_visitCount(0)
@@ -89,6 +91,7 @@ HistoryItem::HistoryItem(const String& urlString, const String& title, const Str
     , m_displayTitle(alternateTitle)
     , m_lastVisitedTime(time)
     , m_lastVisitWasHTTPNonGet(false)
+    , m_pageScaleFactor(1)
     , m_lastVisitWasFailure(false)
     , m_isTargetItem(false)
     , m_visitCount(0)
@@ -106,6 +109,7 @@ HistoryItem::HistoryItem(const KURL& url, const String& target, const String& pa
     , m_title(title)
     , m_lastVisitedTime(0)
     , m_lastVisitWasHTTPNonGet(false)
+    , m_pageScaleFactor(1)
     , m_lastVisitWasFailure(false)
     , m_isTargetItem(false)
     , m_visitCount(0)
@@ -137,6 +141,7 @@ inline HistoryItem::HistoryItem(const HistoryItem& item)
     , m_lastVisitedTime(item.m_lastVisitedTime)
     , m_lastVisitWasHTTPNonGet(item.m_lastVisitWasHTTPNonGet)
     , m_scrollPoint(item.m_scrollPoint)
+    , m_pageScaleFactor(item.m_pageScaleFactor)
     , m_lastVisitWasFailure(item.m_lastVisitWasFailure)
     , m_isTargetItem(item.m_isTargetItem)
     , m_visitCount(item.m_visitCount)
@@ -379,6 +384,16 @@ void HistoryItem::clearScrollPoint()
     m_scrollPoint.setY(0);
 }
 
+float HistoryItem::pageScaleFactor() const
+{
+    return m_pageScaleFactor;
+}
+
+void HistoryItem::setPageScaleFactor(float scaleFactor)
+{
+    m_pageScaleFactor = scaleFactor;
+}
+
 void HistoryItem::setDocumentState(const Vector<String>& state)
 {
     m_documentState = state;
@@ -667,6 +682,8 @@ void HistoryItem::encodeBackForwardTreeNode(Encoder& encoder) const
 
     encoder.encodeInt32(m_scrollPoint.x());
     encoder.encodeInt32(m_scrollPoint.y());
+    
+    encoder.encodeFloat(m_pageScaleFactor);
 
     encoder.encodeBool(m_stateObject);
     if (m_stateObject) {
@@ -776,6 +793,9 @@ resume:
     if (!decoder.decodeInt32(y))
         return 0;
     node->m_scrollPoint = IntPoint(x, y);
+    
+    if (!decoder.decodeFloat(node->m_pageScaleFactor))
+        return 0;
 
     bool hasStateObject;
     if (!decoder.decodeBool(hasStateObject))
index 19b33ad23f8285a1c9420ef796bcf9583cee696f..a4622c0238cae49936e9bd9dc8537651412af0d0 100644 (file)
@@ -123,6 +123,10 @@ public:
     const IntPoint& scrollPoint() const;
     void setScrollPoint(const IntPoint&);
     void clearScrollPoint();
+    
+    float pageScaleFactor() const;
+    void setPageScaleFactor(float);
+    
     const Vector<String>& documentState() const;
     void setDocumentState(const Vector<String>&);
     void clearDocumentState();
@@ -245,6 +249,7 @@ private:
     bool m_lastVisitWasHTTPNonGet;
 
     IntPoint m_scrollPoint;
+    float m_pageScaleFactor;
     Vector<String> m_documentState;
     
     HistoryItemVector m_children;
index 89ae80289622d52f71f37d0c504dd25ed174f833..dda4e56918b8709f98e226a4c353ac7e195a6cc2 100644 (file)
@@ -80,6 +80,8 @@ void HistoryController::saveScrollPositionAndViewStateToItem(HistoryItem* item)
         return;
         
     item->setScrollPoint(m_frame->view()->scrollPosition());
+    item->setPageScaleFactor(m_frame->pageScaleFactor());
+    
     // 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);
 }
@@ -114,9 +116,12 @@ void HistoryController::restoreScrollPositionAndViewState()
     // through to the client. It's currently used only for the PDF view on Mac.
     m_frame->loader()->client()->restoreViewState();
     
-    if (FrameView* view = m_frame->view())
-        if (!view->wasScrolledByUser())
+    if (FrameView* view = m_frame->view()) {
+        if (!view->wasScrolledByUser()) {
             view->setScrollPosition(m_currentItem->scrollPoint());
+            m_frame->scalePage(m_currentItem->pageScaleFactor(), m_currentItem->scrollPoint());
+        }
+    }
 }
 
 void HistoryController::updateBackForwardListForFragmentScroll()