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

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

Issue 2506473004: Fixed rotation anchoring while using a document.rootScroller. (Closed)
Patch Set: Rebase Created 4 years, 1 month 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: 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 d9b834039bbf12d79ddf73ad4da3dc0a46fd631c..cdfaa2c31f21059d82ab43bda0afbd21b547f1fc 100644
--- a/third_party/WebKit/Source/web/tests/RootScrollerTest.cpp
+++ b/third_party/WebKit/Source/web/tests/RootScrollerTest.cpp
@@ -2,10 +2,12 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include "core/dom/ClientRect.h"
#include "core/frame/BrowserControls.h"
#include "core/frame/FrameHost.h"
#include "core/frame/FrameView.h"
#include "core/frame/RootFrameViewport.h"
+#include "core/frame/VisualViewport.h"
#include "core/html/HTMLFrameOwnerElement.h"
#include "core/layout/LayoutBox.h"
#include "core/layout/api/LayoutViewItem.h"
@@ -41,6 +43,7 @@ class RootScrollerTest : public ::testing::Test {
RootScrollerTest() : m_baseURL("http://www.test.com/") {
registerMockedHttpURLLoad("overflow-scrolling.html");
registerMockedHttpURLLoad("root-scroller.html");
+ registerMockedHttpURLLoad("root-scroller-rotation.html");
registerMockedHttpURLLoad("root-scroller-iframe.html");
registerMockedHttpURLLoad("root-scroller-child.html");
}
@@ -987,6 +990,61 @@ TEST_F(RootScrollerTest, UseVisualViewportScrollbarsIframe) {
EXPECT_GT(containerScroller->maximumScrollOffset().height(), 0);
}
+TEST_F(RootScrollerTest, RotationAnchoring) {
+ initialize("root-scroller-rotation.html");
+
+ ScrollableArea* containerScroller;
+
+ {
+ webViewImpl()->resizeWithBrowserControls(IntSize(250, 1000), 0, true);
+ mainFrameView()->updateAllLifecyclePhases();
+
+ Element* container = mainFrame()->document()->getElementById("container");
+ NonThrowableExceptionState nonThrow;
+ mainFrame()->document()->setRootScroller(container, nonThrow);
+ mainFrameView()->updateAllLifecyclePhases();
+
+ containerScroller = static_cast<PaintInvalidationCapableScrollableArea*>(
+ toLayoutBox(container->layoutObject())->getScrollableArea());
+ }
+
+ Element* target = mainFrame()->document()->getElementById("target");
+
+ // Zoom in and scroll the viewport so that the target is fully in the
+ // viewport and the visual viewport is fully scrolled within the layout
+ // viepwort.
+ {
+ int scrollX = 250 * 4;
+ int scrollY = 1000 * 4;
+
+ webViewImpl()->setPageScaleFactor(2);
+ webViewImpl()->handleInputEvent(
+ generateTouchGestureEvent(WebInputEvent::GestureScrollBegin));
+ webViewImpl()->handleInputEvent(generateTouchGestureEvent(
+ WebInputEvent::GestureScrollUpdate, -scrollX, -scrollY));
+ webViewImpl()->handleInputEvent(
+ generateTouchGestureEvent(WebInputEvent::GestureScrollEnd));
+
+ // The visual viewport should be 1.5 screens scrolled so that the target
+ // occupies the bottom quadrant of the layout viewport.
+ ASSERT_EQ((250 * 3) / 2, containerScroller->scrollOffset().width());
+ ASSERT_EQ((1000 * 3) / 2, containerScroller->scrollOffset().height());
+
+ // The visual viewport should have scrolled the last half layout viewport.
+ ASSERT_EQ((250) / 2, visualViewport().scrollOffset().width());
+ ASSERT_EQ((1000) / 2, visualViewport().scrollOffset().height());
+ }
+
+ // Now do a rotation resize.
+ webViewImpl()->resizeWithBrowserControls(IntSize(1000, 250), 50, false);
+ mainFrameView()->updateAllLifecyclePhases();
+
+ // The visual viewport should remain fully filled by the target.
+ ClientRect* rect = target->getBoundingClientRect();
+ EXPECT_EQ(rect->left(), visualViewport().scrollOffset().width());
+ EXPECT_EQ(rect->top(), visualViewport().scrollOffset().height());
+}
+
} // namespace
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698