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

Unified Diff: third_party/WebKit/Source/web/tests/RootScrollerTest.cpp

Issue 2622103002: Generalize browser controls adjustment for arbitrary scrollers. (Closed)
Patch Set: Fixed some comments Created 3 years, 11 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 | « third_party/WebKit/Source/web/WebViewImpl.cpp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/web/tests/RootScrollerTest.cpp
diff --git a/third_party/WebKit/Source/web/tests/RootScrollerTest.cpp b/third_party/WebKit/Source/web/tests/RootScrollerTest.cpp
index f0551847ec0d31e24905612675f95c6ee4abfe12..230727d51733a778b4330c06332876ffffbc32b4 100644
--- a/third_party/WebKit/Source/web/tests/RootScrollerTest.cpp
+++ b/third_party/WebKit/Source/web/tests/RootScrollerTest.cpp
@@ -58,22 +58,15 @@ class RootScrollerTest : public ::testing::Test {
WebViewImpl* initialize(const std::string& pageName,
FrameTestHelpers::TestWebViewClient* client) {
- RuntimeEnabledFeatures::setSetRootScrollerEnabled(true);
-
- m_helper.initializeAndLoad(m_baseURL + pageName, true, nullptr, client,
- nullptr, &configureSettings);
-
- // Initialize browser controls to be shown.
- webViewImpl()->resizeWithBrowserControls(IntSize(400, 400), 50, true);
- webViewImpl()->browserControls().setShownRatio(1);
-
- mainFrameView()->updateAllLifecyclePhases();
-
- return webViewImpl();
+ return initializeInternal(m_baseURL + pageName, client);
}
WebViewImpl* initialize(const std::string& pageName) {
- return initialize(pageName, &m_client);
+ return initializeInternal(m_baseURL + pageName, &m_client);
+ }
+
+ WebViewImpl* initialize() {
+ return initializeInternal("about:blank", &m_client);
}
static void configureSettings(WebSettings* settings) {
@@ -161,6 +154,22 @@ class RootScrollerTest : public ::testing::Test {
return event;
}
+ WebViewImpl* initializeInternal(const std::string& url,
+ FrameTestHelpers::TestWebViewClient* client) {
+ RuntimeEnabledFeatures::setSetRootScrollerEnabled(true);
+
+ m_helper.initializeAndLoad(url, true, nullptr, client, nullptr,
+ &configureSettings);
+
+ // Initialize browser controls to be shown.
+ webViewImpl()->resizeWithBrowserControls(IntSize(400, 400), 50, true);
+ webViewImpl()->browserControls().setShownRatio(1);
+
+ mainFrameView()->updateAllLifecyclePhases();
+
+ return webViewImpl();
+ }
+
std::string m_baseURL;
FrameTestHelpers::TestWebViewClient m_client;
FrameTestHelpers::WebViewHelper m_helper;
@@ -229,8 +238,9 @@ TEST_F(RootScrollerTest, TestSetRootScroller) {
mainFrame()->document()->setRootScroller(container, exceptionState);
ASSERT_EQ(container, mainFrame()->document()->rootScroller());
- // Content is 1000x1000, WebView size is 400x400 so max scroll is 600px.
- double maximumScroll = 600;
+ // Content is 1000x1000, WebView size is 400x400 but hiding the top controls
+ // makes it 400x450 so max scroll is 550px.
+ double maximumScroll = 550;
webViewImpl()->handleInputEvent(
generateTouchGestureEvent(WebInputEvent::GestureScrollBegin));
@@ -258,7 +268,7 @@ TEST_F(RootScrollerTest, TestSetRootScroller) {
EXPECT_CALL(client, didOverscroll(WebFloatSize(0, 50), WebFloatSize(0, 50),
WebFloatPoint(100, 100), WebFloatSize()));
webViewImpl()->handleInputEvent(
- generateTouchGestureEvent(WebInputEvent::GestureScrollUpdate, 0, -550));
+ generateTouchGestureEvent(WebInputEvent::GestureScrollUpdate, 0, -500));
EXPECT_FLOAT_EQ(maximumScroll, container->scrollTop());
EXPECT_FLOAT_EQ(0, mainFrameView()->getScrollOffset().height());
Mock::VerifyAndClearExpectations(&client);
@@ -1145,6 +1155,63 @@ TEST_F(RootScrollerTest, UseVisualViewportScrollbarsIframe) {
EXPECT_GT(containerScroller->maximumScrollOffset().height(), 0);
}
+TEST_F(RootScrollerTest, TopControlsAdjustmentAppliedToRootScroller) {
+ initialize();
+
+ WebURL baseURL = URLTestHelpers::toKURL("http://www.test.com/");
+ FrameTestHelpers::loadHTMLString(webViewImpl()->mainFrame(),
+ "<!DOCTYPE html>"
+ "<style>"
+ " body, html {"
+ " width: 100%;"
+ " height: 100%;"
+ " margin: 0px;"
+ " }"
+ " #container {"
+ " width: 100%;"
+ " height: 100%;"
+ " overflow: auto;"
+ " }"
+ "</style>"
+ "<div id='container'>"
+ " <div style='height:1000px'>test</div>"
+ "</div>",
+ baseURL);
+
+ webViewImpl()->resizeWithBrowserControls(IntSize(400, 400), 50, true);
+ mainFrameView()->updateAllLifecyclePhases();
+
+ Element* container = mainFrame()->document()->getElementById("container");
+ mainFrame()->document()->setRootScroller(container, ASSERT_NO_EXCEPTION);
+
+ ScrollableArea* containerScroller =
+ static_cast<PaintInvalidationCapableScrollableArea*>(
+ toLayoutBox(container->layoutObject())->getScrollableArea());
+
+ // Hide the top controls and scroll down maximally. We should account for the
+ // change in maximum scroll offset due to the top controls hiding. That is,
+ // since the controls are hidden, the "content area" is taller so the maximum
+ // scroll offset should shrink.
+ ASSERT_EQ(1000 - 400, containerScroller->maximumScrollOffset().height());
+
+ webViewImpl()->handleInputEvent(
+ generateTouchGestureEvent(WebInputEvent::GestureScrollBegin));
+ ASSERT_EQ(1, browserControls().shownRatio());
+ webViewImpl()->handleInputEvent(generateTouchGestureEvent(
+ WebInputEvent::GestureScrollUpdate, 0, -browserControls().height()));
+ ASSERT_EQ(0, browserControls().shownRatio());
+ EXPECT_EQ(1000 - 450, containerScroller->maximumScrollOffset().height());
+
+ webViewImpl()->handleInputEvent(
+ generateTouchGestureEvent(WebInputEvent::GestureScrollUpdate, 0, -3000));
+ EXPECT_EQ(1000 - 450, containerScroller->getScrollOffset().height());
+
+ webViewImpl()->handleInputEvent(
+ generateTouchGestureEvent(WebInputEvent::GestureScrollEnd));
+ webViewImpl()->resizeWithBrowserControls(IntSize(400, 450), 50, false);
+ EXPECT_EQ(1000 - 450, containerScroller->maximumScrollOffset().height());
+}
+
TEST_F(RootScrollerTest, RotationAnchoring) {
initialize("root-scroller-rotation.html");
« no previous file with comments | « third_party/WebKit/Source/web/WebViewImpl.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698