Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(30)

Unified Diff: Source/web/tests/PinchViewportTest.cpp

Issue 263853008: Added pinch viewport offset to history item. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/web/WebViewImpl.cpp ('k') | Source/web/tests/data/200-by-300-viewport.html » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/web/tests/PinchViewportTest.cpp
diff --git a/Source/web/tests/PinchViewportTest.cpp b/Source/web/tests/PinchViewportTest.cpp
index 1558189c45f76218f83d38ab29b4df61c2e26e31..0b1821794951c1c4b7ce3d9f8d860c79d1bac27a 100644
--- a/Source/web/tests/PinchViewportTest.cpp
+++ b/Source/web/tests/PinchViewportTest.cpp
@@ -1,3 +1,4 @@
+
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -23,6 +24,12 @@
#include <gmock/gmock.h>
#include <gtest/gtest.h>
+#define EXPECT_POINT_EQ(expected, actual) \
+ do { \
+ EXPECT_EQ((expected).x(), (actual).x()); \
+ EXPECT_EQ((expected).y(), (actual).y()); \
+ } while (false)
+
#define EXPECT_FLOAT_POINT_EQ(expected, actual) \
do { \
EXPECT_FLOAT_EQ((expected).x(), (actual).x()); \
@@ -478,4 +485,80 @@ TEST_F(PinchViewportTest, TestTextSelectionHandles)
// as well rather than just carret.
}
+// Test that the HistoryItem for the page stores the pinch viewport's offset and scale.
+TEST_F(PinchViewportTest, TestSavedToHistoryItem)
+{
+ initializeWithDesktopSettings();
+ webViewImpl()->resize(IntSize(200, 300));
+ webViewImpl()->layout();
+
+ registerMockedHttpURLLoad("200-by-300.html");
+ navigateTo(m_baseURL + "200-by-300.html");
+
+ EXPECT_FLOAT_POINT_EQ(FloatPoint(0, 0),
+ webViewImpl()->page()->mainFrame()->loader().currentItem()->pinchViewportScrollPoint());
+
+ PinchViewport& pinchViewport = frame()->page()->frameHost().pinchViewport();
+ pinchViewport.setScale(2);
+
+ EXPECT_EQ(2, webViewImpl()->page()->mainFrame()->loader().currentItem()->pageScaleFactor());
+
+ pinchViewport.setLocation(FloatPoint(10, 20));
+
+ EXPECT_FLOAT_POINT_EQ(FloatPoint(10, 20),
+ webViewImpl()->page()->mainFrame()->loader().currentItem()->pinchViewportScrollPoint());
+}
+
+// Test restoring a HistoryItem properly restores the pinch viewport's state.
+TEST_F(PinchViewportTest, TestRestoredFromHistoryItem)
+{
+ initializeWithDesktopSettings();
+ webViewImpl()->resize(IntSize(200, 300));
+
+ registerMockedHttpURLLoad("200-by-300.html");
+
+ WebHistoryItem item;
+ item.initialize();
+ WebURL destinationURL(blink::URLTestHelpers::toKURL(m_baseURL + "200-by-300.html"));
+ item.setURLString(destinationURL.string());
+ item.setPinchViewportScrollOffset(WebFloatPoint(100, 120));
+ item.setPageScaleFactor(2);
+
+ webViewImpl()->mainFrame()->loadHistoryItem(item, WebHistoryDifferentDocumentLoad, WebURLRequest::UseProtocolCachePolicy);
+ Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests();
+
+ PinchViewport& pinchViewport = frame()->page()->frameHost().pinchViewport();
+ EXPECT_EQ(2, pinchViewport.scale());
+
+ EXPECT_FLOAT_POINT_EQ(FloatPoint(100, 120), pinchViewport.visibleRect().location());
+}
+
+// Test restoring a HistoryItem without the pinch viewport offset falls back to distributing
+// the scroll offset between the main frame and the pinch viewport.
+TEST_F(PinchViewportTest, TestRestoredFromLegacyHistoryItem)
+{
+ initializeWithDesktopSettings();
+ webViewImpl()->resize(IntSize(100, 150));
+
+ registerMockedHttpURLLoad("200-by-300-viewport.html");
+
+ WebHistoryItem item;
+ item.initialize();
+ WebURL destinationURL(blink::URLTestHelpers::toKURL(m_baseURL + "200-by-300-viewport.html"));
+ item.setURLString(destinationURL.string());
+ // (-1, -1) will be used if the HistoryItem is an older version prior to having
+ // pinch viewport scroll offset.
+ item.setPinchViewportScrollOffset(WebFloatPoint(-1, -1));
+ item.setScrollOffset(WebPoint(120, 180));
+ item.setPageScaleFactor(2);
+
+ webViewImpl()->mainFrame()->loadHistoryItem(item, WebHistoryDifferentDocumentLoad, WebURLRequest::UseProtocolCachePolicy);
+ Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests();
+
+ PinchViewport& pinchViewport = frame()->page()->frameHost().pinchViewport();
+ EXPECT_EQ(2, pinchViewport.scale());
+ EXPECT_POINT_EQ(IntPoint(100, 150), frame()->view()->scrollPosition());
+ EXPECT_FLOAT_POINT_EQ(FloatPoint(20, 30), pinchViewport.visibleRect().location());
+}
+
} // namespace
« no previous file with comments | « Source/web/WebViewImpl.cpp ('k') | Source/web/tests/data/200-by-300-viewport.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698