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

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

Issue 560623002: Adjust maximum scroll bounds on FrameView to account for top controls. (Blink-side) (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 3 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
Index: Source/web/tests/WebFrameTest.cpp
diff --git a/Source/web/tests/WebFrameTest.cpp b/Source/web/tests/WebFrameTest.cpp
index d95da729465af4e13ce8c37168ead70d74dd3090..0d7215e4d7a6bce26704ce0df5230d2a3e663cc7 100644
--- a/Source/web/tests/WebFrameTest.cpp
+++ b/Source/web/tests/WebFrameTest.cpp
@@ -121,6 +121,10 @@ const int touchPointPadding = 32;
EXPECT_EQ(a.width(), b.width()); \
EXPECT_EQ(a.height(), b.height());
+#define EXPECT_EQ_POINT(a, b) \
+ EXPECT_EQ(a.x(), b.x()); \
+ EXPECT_EQ(a.y(), b.y());
+
class FakeCompositingWebViewClient : public FrameTestHelpers::TestWebViewClient {
public:
virtual bool enterFullScreen() OVERRIDE { return true; }
@@ -5730,6 +5734,50 @@ TEST_F(WebFrameTest, FrameViewSetFrameRect)
EXPECT_EQ_RECT(IntRect(100, 100, 200, 200), frameView->frameRect());
}
+TEST_F(WebFrameTest, FrameViewScrollAccountsForTopControls)
+{
+ FrameTestHelpers::WebViewHelper webViewHelper;
+ webViewHelper.initializeAndLoad("about:blank");
+
+ WebViewImpl* webView = webViewHelper.webViewImpl();
+ FrameView* frameView = webViewHelper.webViewImpl()->mainFrameImpl()->frameView();
+
+ webView->setTopControlsLayoutHeight(0);
+ webView->resize(WebSize(100, 100));
+ webView->setPageScaleFactor(2.0f);
+ webView->layout();
+
+ webView->setMainFrameScrollOffset(WebPoint(20, 100));
+ EXPECT_EQ_POINT(IntPoint(20, 50), IntPoint(frameView->scrollOffset()));
+
+ // Simulate the top controls showing by 20px, thus shrinking the viewport
+ // and allowing it to scroll an additional 10px (since we're 2X zoomed).
+ webView->applyViewportDeltas(WebSize(0, 0), 1.0f, 20.0f);
+ EXPECT_EQ_POINT(IntPoint(50, 60), frameView->maximumScrollPosition());
+
+ // Show more, make sure the scroll actually gets clamped. Horizontal
+ // direction shouldn't be affected.
+ webView->applyViewportDeltas(WebSize(0, 0), 1.0f, 20.0f);
+ webView->setMainFrameScrollOffset(WebPoint(100, 100));
+ EXPECT_EQ_POINT(IntPoint(50, 70), IntPoint(frameView->scrollOffset()));
+
+ // Hide until there's 10px showing.
+ webView->applyViewportDeltas(WebSize(0, 0), 1.0f, -30.0f);
+ EXPECT_EQ_POINT(IntPoint(50, 55), frameView->maximumScrollPosition());
+
+ // Simulate a RenderWidget::resize. The frame is resized to accomodate
+ // the top controls and Blink's view of the top controls matches that of
+ // the CC
+ webView->setTopControlsLayoutHeight(10.0f);
+ webView->resize(WebSize(100, 90));
+ webView->layout();
+ EXPECT_EQ_POINT(IntPoint(50, 45), frameView->maximumScrollPosition());
+
+ // Now simulate hiding.
+ webView->applyViewportDeltas(WebSize(0, 0), 1.0f, -10.0f);
+ EXPECT_EQ_POINT(IntPoint(50, 40), frameView->maximumScrollPosition());
+}
+
TEST_F(WebFrameTest, FullscreenLayerNonScrollable)
{
FakeCompositingWebViewClient client;

Powered by Google App Engine
This is Rietveld 408576698