summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/core/frame/visual_viewport_test.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/blink/renderer/core/frame/visual_viewport_test.cc')
-rw-r--r--chromium/third_party/blink/renderer/core/frame/visual_viewport_test.cc254
1 files changed, 137 insertions, 117 deletions
diff --git a/chromium/third_party/blink/renderer/core/frame/visual_viewport_test.cc b/chromium/third_party/blink/renderer/core/frame/visual_viewport_test.cc
index dc25cd71c75..c0d594da78d 100644
--- a/chromium/third_party/blink/renderer/core/frame/visual_viewport_test.cc
+++ b/chromium/third_party/blink/renderer/core/frame/visual_viewport_test.cc
@@ -13,10 +13,9 @@
#include "cc/trees/transform_node.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/blink/public/common/input/web_input_event.h"
#include "third_party/blink/public/mojom/fetch/fetch_api_request.mojom-blink.h"
#include "third_party/blink/public/platform/web_coalesced_input_event.h"
-#include "third_party/blink/public/platform/web_input_event.h"
-#include "third_party/blink/public/platform/web_scroll_into_view_params.h"
#include "third_party/blink/public/platform/web_url_loader_mock_factory.h"
#include "third_party/blink/public/web/web_ax_context.h"
#include "third_party/blink/public/web/web_context_menu_data.h"
@@ -72,8 +71,8 @@ using blink::url_test_helpers::ToKURL;
namespace blink {
::std::ostream& operator<<(::std::ostream& os, const WebContextMenuData& data) {
- return os << "Context menu location: [" << data.mouse_position.x << ", "
- << data.mouse_position.y << "]";
+ return os << "Context menu location: [" << data.mouse_position.x() << ", "
+ << data.mouse_position.y() << "]";
}
namespace {
@@ -122,13 +121,12 @@ class VisualViewportTest : public testing::Test,
void UpdateAllLifecyclePhases() {
WebView()->MainFrameWidget()->UpdateAllLifecyclePhases(
- WebWidget::LifecycleUpdateReason::kTest);
+ DocumentUpdateReason::kTest);
}
void UpdateAllLifecyclePhasesExceptPaint() {
- WebView()->MainFrameWidget()->UpdateLifecycle(
- WebWidget::LifecycleUpdate::kPrePaint,
- WebWidget::LifecycleUpdateReason::kTest);
+ WebView()->MainFrameWidget()->UpdateLifecycle(WebLifecycleUpdate::kPrePaint,
+ DocumentUpdateReason::kTest);
}
PaintArtifactCompositor* paint_artifact_compositor() {
@@ -240,7 +238,9 @@ INSTANTIATE_PAINT_TEST_SUITE_P(VisualViewportTest);
// WebView resizes the VisualViewport.
TEST_P(VisualViewportTest, TestResize) {
InitializeWithDesktopSettings();
- WebView()->MainFrameWidget()->Resize(IntSize(320, 240));
+ WebView()->ResizeWithBrowserControls(
+ IntSize(320, 240), IntSize(320, 240),
+ WebView()->GetBrowserControls().Params());
NavigateTo("about:blank");
ForceFullCompositingUpdate();
@@ -254,7 +254,8 @@ TEST_P(VisualViewportTest, TestResize) {
// Resizing the WebView should change the VisualViewport.
web_view_size = IntSize(640, 480);
- WebView()->MainFrameWidget()->Resize(web_view_size);
+ WebView()->ResizeWithBrowserControls(
+ web_view_size, web_view_size, WebView()->GetBrowserControls().Params());
EXPECT_EQ(web_view_size, IntSize(WebView()->MainFrameWidget()->Size()));
EXPECT_EQ(web_view_size, visual_viewport.Size());
@@ -278,7 +279,8 @@ TEST_P(VisualViewportTest, TestVisibleContentRect) {
// Vertical scrollbar width and horizontal scrollbar height.
IntSize scrollbar_size = IntSize(15, 15);
- WebView()->MainFrameWidget()->Resize(size);
+ WebView()->ResizeWithBrowserControls(
+ size, size, WebView()->GetBrowserControls().Params());
// Scroll layout viewport and verify visibleContentRect.
WebView()->MainFrameImpl()->SetScrollOffset(WebSize(0, 50));
@@ -308,7 +310,9 @@ TEST_P(VisualViewportTest, TestVisibleContentRect) {
// make it appear to stay still). This caused bugs like crbug.com/453859.
TEST_P(VisualViewportTest, TestResizeAtFullyScrolledPreservesViewportLocation) {
InitializeWithDesktopSettings();
- WebView()->MainFrameWidget()->Resize(IntSize(800, 600));
+ WebView()->ResizeWithBrowserControls(
+ IntSize(800, 600), IntSize(800, 600),
+ WebView()->GetBrowserControls().Params());
RegisterMockedHttpURLLoad("content-width-1000.html");
NavigateTo(base_url_ + "content-width-1000.html");
@@ -319,8 +323,8 @@ TEST_P(VisualViewportTest, TestResizeAtFullyScrolledPreservesViewportLocation) {
visual_viewport.SetScale(2);
// Fully scroll both viewports.
- frame_view.LayoutViewport()->SetScrollOffset(ScrollOffset(10000, 10000),
- kProgrammaticScroll);
+ frame_view.LayoutViewport()->SetScrollOffset(
+ ScrollOffset(10000, 10000), mojom::blink::ScrollType::kProgrammatic);
visual_viewport.Move(FloatSize(10000, 10000));
// Sanity check.
@@ -334,12 +338,16 @@ TEST_P(VisualViewportTest, TestResizeAtFullyScrolledPreservesViewportLocation) {
// Shrink the WebView, this should cause both viewports to shrink and
// WebView should do whatever it needs to do to preserve the visible
// location.
- WebView()->MainFrameWidget()->Resize(IntSize(700, 550));
+ WebView()->ResizeWithBrowserControls(
+ IntSize(700, 550), IntSize(800, 600),
+ WebView()->GetBrowserControls().Params());
EXPECT_EQ(expected_location,
frame_view.GetScrollableArea()->VisibleContentRect().Location());
- WebView()->MainFrameWidget()->Resize(IntSize(800, 600));
+ WebView()->ResizeWithBrowserControls(
+ IntSize(800, 600), IntSize(800, 600),
+ WebView()->GetBrowserControls().Params());
EXPECT_EQ(expected_location,
frame_view.GetScrollableArea()->VisibleContentRect().Location());
@@ -581,10 +589,10 @@ TEST_P(VisualViewportTest, TestFractionalScrollOffsetIsNotOverwritten) {
NavigateTo(base_url_ + "200-by-800-viewport.html");
LocalFrameView& frame_view = *WebView()->MainFrameImpl()->GetFrameView();
- frame_view.LayoutViewport()->SetScrollOffset(ScrollOffset(0, 10.5),
- kProgrammaticScroll);
+ frame_view.LayoutViewport()->SetScrollOffset(
+ ScrollOffset(0, 10.5), mojom::blink::ScrollType::kProgrammatic);
frame_view.LayoutViewport()->ScrollableArea::SetScrollOffset(
- ScrollOffset(10, 30.5), kCompositorScroll);
+ ScrollOffset(10, 30.5), mojom::blink::ScrollType::kCompositor);
EXPECT_EQ(30.5, frame_view.LayoutViewport()->GetScrollOffset().Height());
}
@@ -885,7 +893,7 @@ TEST_P(VisualViewportTest, TestTextSelectionHandles) {
NavigateTo(base_url_ + "pinch-viewport-input-field.html");
VisualViewport& visual_viewport = GetFrame()->GetPage()->GetVisualViewport();
- WebView()->SetInitialFocus(false);
+ To<LocalFrame>(WebView()->GetPage()->MainFrame())->SetInitialFocus(false);
WebRect original_anchor;
WebRect original_focus;
@@ -960,12 +968,12 @@ TEST_P(VisualViewportTest, TestRestoredFromHistoryItem) {
WebURL destination_url(
url_test_helpers::ToKURL(base_url_ + "200-by-300.html"));
item.SetURLString(destination_url.GetString());
- item.SetVisualViewportScrollOffset(WebFloatPoint(100, 120));
+ item.SetVisualViewportScrollOffset(gfx::PointF(100, 120));
item.SetPageScaleFactor(2);
frame_test_helpers::LoadHistoryItem(WebView()->MainFrameImpl(), item,
mojom::FetchCacheMode::kDefault);
-
+ UpdateAllLifecyclePhases();
VisualViewport& visual_viewport = GetFrame()->GetPage()->GetVisualViewport();
EXPECT_EQ(2, visual_viewport.Scale());
@@ -989,13 +997,13 @@ TEST_P(VisualViewportTest, TestRestoredFromLegacyHistoryItem) {
item.SetURLString(destination_url.GetString());
// (-1, -1) will be used if the HistoryItem is an older version prior to
// having visual viewport scroll offset.
- item.SetVisualViewportScrollOffset(WebFloatPoint(-1, -1));
- item.SetScrollOffset(WebPoint(120, 180));
+ item.SetVisualViewportScrollOffset(gfx::PointF(-1, -1));
+ item.SetScrollOffset(gfx::Point(120, 180));
item.SetPageScaleFactor(2);
frame_test_helpers::LoadHistoryItem(WebView()->MainFrameImpl(), item,
mojom::FetchCacheMode::kDefault);
-
+ UpdateAllLifecyclePhases();
VisualViewport& visual_viewport = GetFrame()->GetPage()->GetVisualViewport();
EXPECT_EQ(2, visual_viewport.Scale());
EXPECT_EQ(ScrollOffset(100, 150),
@@ -1016,8 +1024,8 @@ TEST_P(VisualViewportTest,
NavigateTo(base_url_ + "content-width-1000.html");
LocalFrameView* frame_view = WebView()->MainFrameImpl()->GetFrameView();
- frame_view->LayoutViewport()->SetScrollOffset(ScrollOffset(0, 1000),
- kProgrammaticScroll);
+ frame_view->LayoutViewport()->SetScrollOffset(
+ ScrollOffset(0, 1000), mojom::blink::ScrollType::kProgrammatic);
EXPECT_EQ(IntSize(1000, 1000), frame_view->FrameRect().Size());
@@ -1072,8 +1080,8 @@ TEST_P(VisualViewportTest,
EXPECT_EQ("ir", mainFrame->SelectionAsText().Utf8());
WebView()->MainFrameWidget()->SelectionBounds(base_rect, extent_rect);
- WebPoint initialPoint(base_rect.x, base_rect.y);
- WebPoint endPoint(extent_rect.x, extent_rect.y);
+ gfx::Point initialPoint(base_rect.x, base_rect.y);
+ gfx::Point endPoint(extent_rect.x, extent_rect.y);
// Move the visual viewport over and make the selection in the same
// screen-space location. The selection should change to two characters to the
@@ -1115,7 +1123,7 @@ MATCHER_P2(ContextMenuAtLocation,
y,
std::string(negation ? "is" : "isn't") + " at expected location [" +
PrintToString(x) + ", " + PrintToString(y) + "]") {
- return arg.mouse_position.x == x && arg.mouse_position.y == y;
+ return arg.mouse_position.x() == x && arg.mouse_position.y() == y;
}
// Test that the context menu's location is correct in the presence of visual
@@ -1143,8 +1151,8 @@ TEST_P(VisualViewportTest, TestContextMenuShownInCorrectLocation) {
VisualViewportMockWebFrameClient mock_web_frame_client;
EXPECT_CALL(mock_web_frame_client,
ShowContextMenu(ContextMenuAtLocation(
- mouse_down_event.PositionInWidget().x,
- mouse_down_event.PositionInWidget().y)));
+ mouse_down_event.PositionInWidget().x(),
+ mouse_down_event.PositionInWidget().y())));
// Do a sanity check with no scale applied.
WebView()->MainFrameImpl()->SetClient(&mock_web_frame_client);
@@ -1166,8 +1174,8 @@ TEST_P(VisualViewportTest, TestContextMenuShownInCorrectLocation) {
visual_viewport.SetLocation(FloatPoint(60, 80));
EXPECT_CALL(mock_web_frame_client,
ShowContextMenu(ContextMenuAtLocation(
- mouse_down_event.PositionInWidget().x,
- mouse_down_event.PositionInWidget().y)));
+ mouse_down_event.PositionInWidget().x(),
+ mouse_down_event.PositionInWidget().y())));
mouse_down_event.button = WebMouseEvent::Button::kRight;
WebView()->MainFrameWidget()->HandleInputEvent(
@@ -1230,9 +1238,9 @@ TEST_P(VisualViewportTest, ScrollIntoViewFractionalOffset) {
// The element is already in the view so the scrollIntoView shouldn't move
// the viewport at all.
- WebView()->SetVisualViewportOffset(WebFloatPoint(250.25f, 100.25f));
- layout_viewport_scrollable_area->SetScrollOffset(ScrollOffset(0, 900.75),
- kProgrammaticScroll);
+ WebView()->SetVisualViewportOffset(gfx::PointF(250.25f, 100.25f));
+ layout_viewport_scrollable_area->SetScrollOffset(
+ ScrollOffset(0, 900.75), mojom::blink::ScrollType::kProgrammatic);
inputBox->scrollIntoViewIfNeeded(false);
if (RuntimeEnabledFeatures::FractionalScrollOffsetsEnabled()) {
@@ -1245,8 +1253,8 @@ TEST_P(VisualViewportTest, ScrollIntoViewFractionalOffset) {
EXPECT_EQ(FloatSize(250.25f, 100.25f), visual_viewport.GetScrollOffset());
// Change the fractional part of the frameview to one that would round down.
- layout_viewport_scrollable_area->SetScrollOffset(ScrollOffset(0, 900.125),
- kProgrammaticScroll);
+ layout_viewport_scrollable_area->SetScrollOffset(
+ ScrollOffset(0, 900.125), mojom::blink::ScrollType::kProgrammatic);
inputBox->scrollIntoViewIfNeeded(false);
if (RuntimeEnabledFeatures::FractionalScrollOffsetsEnabled()) {
@@ -1259,9 +1267,9 @@ TEST_P(VisualViewportTest, ScrollIntoViewFractionalOffset) {
EXPECT_EQ(FloatSize(250.25f, 100.25f), visual_viewport.GetScrollOffset());
// Repeat both tests above with the visual viewport at a high fractional.
- WebView()->SetVisualViewportOffset(WebFloatPoint(250.875f, 100.875f));
- layout_viewport_scrollable_area->SetScrollOffset(ScrollOffset(0, 900.75),
- kProgrammaticScroll);
+ WebView()->SetVisualViewportOffset(gfx::PointF(250.875f, 100.875f));
+ layout_viewport_scrollable_area->SetScrollOffset(
+ ScrollOffset(0, 900.75), mojom::blink::ScrollType::kProgrammatic);
inputBox->scrollIntoViewIfNeeded(false);
if (RuntimeEnabledFeatures::FractionalScrollOffsetsEnabled()) {
@@ -1274,8 +1282,8 @@ TEST_P(VisualViewportTest, ScrollIntoViewFractionalOffset) {
EXPECT_EQ(FloatSize(250.875f, 100.875f), visual_viewport.GetScrollOffset());
// Change the fractional part of the frameview to one that would round down.
- layout_viewport_scrollable_area->SetScrollOffset(ScrollOffset(0, 900.125),
- kProgrammaticScroll);
+ layout_viewport_scrollable_area->SetScrollOffset(
+ ScrollOffset(0, 900.125), mojom::blink::ScrollType::kProgrammatic);
inputBox->scrollIntoViewIfNeeded(false);
if (RuntimeEnabledFeatures::FractionalScrollOffsetsEnabled()) {
@@ -1288,9 +1296,9 @@ TEST_P(VisualViewportTest, ScrollIntoViewFractionalOffset) {
EXPECT_EQ(FloatSize(250.875f, 100.875f), visual_viewport.GetScrollOffset());
// Both viewports with a 0.5 fraction.
- WebView()->SetVisualViewportOffset(WebFloatPoint(250.5f, 100.5f));
- layout_viewport_scrollable_area->SetScrollOffset(ScrollOffset(0, 900.5),
- kProgrammaticScroll);
+ WebView()->SetVisualViewportOffset(gfx::PointF(250.5f, 100.5f));
+ layout_viewport_scrollable_area->SetScrollOffset(
+ ScrollOffset(0, 900.5), mojom::blink::ScrollType::kProgrammatic);
inputBox->scrollIntoViewIfNeeded(false);
if (RuntimeEnabledFeatures::FractionalScrollOffsetsEnabled()) {
@@ -1330,7 +1338,7 @@ TEST_P(VisualViewportTest, TestBrowserControlsAdjustment) {
EXPECT_EQ(IntSize(1000, 900), frame_view.FrameRect().Size());
// Simulate bringing down the browser controls by 20px.
- WebView()->MainFrameWidget()->ApplyViewportChanges(
+ WebView()->MainFrameWidget()->ApplyViewportChangesForTesting(
{gfx::ScrollOffset(), gfx::Vector2dF(), 1, false, 1, 0,
cc::BrowserControlsState::kBoth});
EXPECT_EQ(FloatSize(500, 430), visual_viewport.VisibleRect().Size());
@@ -1344,12 +1352,12 @@ TEST_P(VisualViewportTest, TestBrowserControlsAdjustment) {
// The outer viewport (LocalFrameView) should be affected as well.
frame_view.LayoutViewport()->ScrollBy(ScrollOffset(10000, 10000),
- kUserScroll);
+ mojom::blink::ScrollType::kUser);
EXPECT_EQ(expectedMaxLayoutViewportScrollOffset(visual_viewport, frame_view),
frame_view.LayoutViewport()->GetScrollOffset());
// Simulate bringing up the browser controls by 10.5px.
- WebView()->MainFrameWidget()->ApplyViewportChanges(
+ WebView()->MainFrameWidget()->ApplyViewportChangesForTesting(
{gfx::ScrollOffset(), gfx::Vector2dF(), 1, false, -10.5f / 20, 0,
cc::BrowserControlsState::kBoth});
EXPECT_FLOAT_SIZE_EQ(FloatSize(500, 440.5f),
@@ -1362,7 +1370,7 @@ TEST_P(VisualViewportTest, TestBrowserControlsAdjustment) {
// The outer viewport (LocalFrameView) should be affected as well.
frame_view.LayoutViewport()->ScrollBy(ScrollOffset(10000, 10000),
- kUserScroll);
+ mojom::blink::ScrollType::kUser);
EXPECT_EQ(expectedMaxLayoutViewportScrollOffset(visual_viewport, frame_view),
frame_view.LayoutViewport()->GetScrollOffset());
}
@@ -1385,7 +1393,7 @@ TEST_P(VisualViewportTest, TestBrowserControlsAdjustmentWithScale) {
// Simulate bringing down the browser controls by 20px. Since we're zoomed in,
// the browser controls take up half as much space (in document-space) than
// they do at an unzoomed level.
- WebView()->MainFrameWidget()->ApplyViewportChanges(
+ WebView()->MainFrameWidget()->ApplyViewportChangesForTesting(
{gfx::ScrollOffset(), gfx::Vector2dF(), 1, false, 1, 0,
cc::BrowserControlsState::kBoth});
EXPECT_EQ(FloatSize(250, 215), visual_viewport.VisibleRect().Size());
@@ -1396,20 +1404,20 @@ TEST_P(VisualViewportTest, TestBrowserControlsAdjustmentWithScale) {
// The outer viewport (LocalFrameView) should be affected as well.
frame_view.LayoutViewport()->ScrollBy(ScrollOffset(10000, 10000),
- kUserScroll);
+ mojom::blink::ScrollType::kUser);
ScrollOffset expected =
expectedMaxLayoutViewportScrollOffset(visual_viewport, frame_view);
EXPECT_EQ(expected, frame_view.LayoutViewport()->GetScrollOffset());
// Scale back out, LocalFrameView max scroll shouldn't have changed. Visual
- // viewport should be moved up to accomodate larger view.
- WebView()->MainFrameWidget()->ApplyViewportChanges(
+ // viewport should be moved up to accommodate larger view.
+ WebView()->MainFrameWidget()->ApplyViewportChangesForTesting(
{gfx::ScrollOffset(), gfx::Vector2dF(), 0.5f, false, 0, 0,
cc::BrowserControlsState::kBoth});
EXPECT_EQ(1, visual_viewport.Scale());
EXPECT_EQ(expected, frame_view.LayoutViewport()->GetScrollOffset());
frame_view.LayoutViewport()->ScrollBy(ScrollOffset(10000, 10000),
- kUserScroll);
+ mojom::blink::ScrollType::kUser);
EXPECT_EQ(expected, frame_view.LayoutViewport()->GetScrollOffset());
EXPECT_EQ(FloatSize(500, 860 - 430), visual_viewport.GetScrollOffset());
@@ -1417,13 +1425,13 @@ TEST_P(VisualViewportTest, TestBrowserControlsAdjustmentWithScale) {
EXPECT_EQ(FloatSize(500, 860 - 430), visual_viewport.GetScrollOffset());
// Scale out, use a scale that causes fractional rects.
- WebView()->MainFrameWidget()->ApplyViewportChanges(
+ WebView()->MainFrameWidget()->ApplyViewportChangesForTesting(
{gfx::ScrollOffset(), gfx::Vector2dF(), 0.8f, false, -1, 0,
cc::BrowserControlsState::kBoth});
EXPECT_EQ(FloatSize(625, 562.5), visual_viewport.VisibleRect().Size());
// Bring out the browser controls by 11
- WebView()->MainFrameWidget()->ApplyViewportChanges(
+ WebView()->MainFrameWidget()->ApplyViewportChangesForTesting(
{gfx::ScrollOffset(), gfx::Vector2dF(), 1, false, 11 / 20.f, 0,
cc::BrowserControlsState::kBoth});
EXPECT_EQ(FloatSize(625, 548.75), visual_viewport.VisibleRect().Size());
@@ -1434,7 +1442,7 @@ TEST_P(VisualViewportTest, TestBrowserControlsAdjustmentWithScale) {
visual_viewport.GetScrollOffset());
frame_view.LayoutViewport()->ScrollBy(ScrollOffset(10000, 10000),
- kUserScroll);
+ mojom::blink::ScrollType::kUser);
EXPECT_EQ(expectedMaxLayoutViewportScrollOffset(visual_viewport, frame_view),
frame_view.LayoutViewport()->GetScrollOffset());
}
@@ -1452,9 +1460,15 @@ TEST_P(VisualViewportTest, TestBrowserControlsAdjustmentAndResize) {
InitializeWithAndroidSettings();
// Initialize with browser controls showing and shrinking the Blink size.
+ cc::BrowserControlsParams controls;
+ controls.top_controls_height = browser_controls_height;
+ controls.browser_controls_shrink_blink_size = true;
+ // TODO(danakj): The browser (RenderWidgetHostImpl) doesn't shrink the widget
+ // size by the browser controls, only the visible_viewport_size, but this test
+ // shrinks and grows both.
WebView()->ResizeWithBrowserControls(
- WebSize(500, visual_viewport_height - browser_controls_height), 20, 0,
- true);
+ WebSize(500, visual_viewport_height - browser_controls_height),
+ WebSize(500, visual_viewport_height - browser_controls_height), controls);
WebView()->GetBrowserControls().SetShownRatio(1, 0);
RegisterMockedHttpURLLoad("content-width-1000.html");
@@ -1478,7 +1492,7 @@ TEST_P(VisualViewportTest, TestBrowserControlsAdjustmentAndResize) {
// process.
visual_viewport.Move(ScrollOffset(10000, 10000));
frame_view.LayoutViewport()->ScrollBy(ScrollOffset(10000, 10000),
- kUserScroll);
+ mojom::blink::ScrollType::kUser);
WebView()->GetBrowserControls().SetShownRatio(0, 0);
EXPECT_EQ(FloatSize(250, visual_viewport_height / page_scale),
@@ -1495,19 +1509,26 @@ TEST_P(VisualViewportTest, TestBrowserControlsAdjustmentAndResize) {
ScrollOffset total_expected = visual_viewport_expected + frame_view_expected;
- // Resize the widget to match the browser controls adjustment. Ensure that the
- // total offset (i.e. what the user sees) doesn't change because of clamping
- // the offsets to valid values.
- WebView()->ResizeWithBrowserControls(WebSize(500, visual_viewport_height), 20,
- 0, false);
+ // Resize the widget and visible viewport to match the browser controls
+ // adjustment. Ensure that the total offset (i.e. what the user sees) doesn't
+ // change because of clamping the offsets to valid values.
+ controls.browser_controls_shrink_blink_size = false;
+ WebView()->ResizeWithBrowserControls(WebSize(500, visual_viewport_height),
+ WebSize(500, visual_viewport_height),
+ controls);
EXPECT_EQ(IntSize(500, visual_viewport_height), visual_viewport.Size());
EXPECT_EQ(FloatSize(250, visual_viewport_height / page_scale),
visual_viewport.VisibleRect().Size());
EXPECT_EQ(IntSize(1000, layout_viewport_height),
frame_view.FrameRect().Size());
+
EXPECT_EQ(total_expected, visual_viewport.GetScrollOffset() +
frame_view.LayoutViewport()->GetScrollOffset());
+
+ EXPECT_EQ(visual_viewport_expected, visual_viewport.GetScrollOffset());
+ EXPECT_EQ(frame_view_expected,
+ frame_view.LayoutViewport()->GetScrollOffset());
}
// Tests that a scroll all the way to the bottom while showing the browser
@@ -1548,7 +1569,7 @@ TEST_P(VisualViewportTest, TestBrowserControlsShrinkAdjustmentAndResize) {
WebView()->GetBrowserControls().SetShownRatio(1, 0);
visual_viewport.Move(ScrollOffset(10000, 10000));
frame_view.LayoutViewport()->ScrollBy(ScrollOffset(10000, 10000),
- kUserScroll);
+ mojom::blink::ScrollType::kUser);
EXPECT_EQ(FloatSize(250, (visual_viewport_height - browser_controls_height) /
page_scale),
@@ -1592,7 +1613,7 @@ TEST_P(VisualViewportTest, TestTopControlHidingResizeDoesntClampMainFrame) {
InitializeWithAndroidSettings();
WebView()->ResizeWithBrowserControls(WebView()->MainFrameWidget()->Size(),
500, 0, false);
- WebView()->MainFrameWidget()->ApplyViewportChanges(
+ WebView()->MainFrameWidget()->ApplyViewportChangesForTesting(
{gfx::ScrollOffset(), gfx::Vector2dF(), 1, false, 1, 0,
cc::BrowserControlsState::kBoth});
WebView()->ResizeWithBrowserControls(WebSize(1000, 1000), 500, 0, true);
@@ -1604,12 +1625,12 @@ TEST_P(VisualViewportTest, TestTopControlHidingResizeDoesntClampMainFrame) {
// Scroll the LocalFrameView to the bottom of the page but "hide" the browser
// controls on the compositor side so the max scroll position should account
// for the full viewport height.
- WebView()->MainFrameWidget()->ApplyViewportChanges(
+ WebView()->MainFrameWidget()->ApplyViewportChangesForTesting(
{gfx::ScrollOffset(), gfx::Vector2dF(), 1, false, -1, 0,
cc::BrowserControlsState::kBoth});
LocalFrameView& frame_view = *WebView()->MainFrameImpl()->GetFrameView();
- frame_view.LayoutViewport()->SetScrollOffset(ScrollOffset(0, 10000),
- kProgrammaticScroll);
+ frame_view.LayoutViewport()->SetScrollOffset(
+ ScrollOffset(0, 10000), mojom::blink::ScrollType::kProgrammatic);
EXPECT_EQ(500, frame_view.LayoutViewport()->GetScrollOffset().Height());
// Now send the resize, make sure the scroll offset doesn't change.
@@ -1663,8 +1684,7 @@ TEST_P(VisualViewportTest, TestChangingContentSizeAffectsScrollBounds) {
WebScriptSource("var content = document.getElementById(\"content\");"
"content.style.width = \"1500px\";"
"content.style.height = \"2400px\";"));
- frame_view.UpdateAllLifecyclePhases(
- DocumentLifecycle::LifecycleUpdateReason::kTest);
+ frame_view.UpdateAllLifecyclePhases(DocumentUpdateReason::kTest);
const auto* scroll_node =
frame_view.GetLayoutView()->FirstFragment().PaintProperties()->Scroll();
@@ -1703,7 +1723,7 @@ TEST_P(VisualViewportTest, ElementBoundsInViewportSpaceAccountsForViewport) {
RegisterMockedHttpURLLoad("pinch-viewport-input-field.html");
NavigateTo(base_url_ + "pinch-viewport-input-field.html");
- WebView()->SetInitialFocus(false);
+ To<LocalFrame>(WebView()->GetPage()->MainFrame())->SetInitialFocus(false);
Element* input_element = WebView()->FocusedElement();
IntRect bounds = input_element->GetLayoutObject()->AbsoluteBoundingBoxRect();
@@ -1732,7 +1752,7 @@ TEST_P(VisualViewportTest, ElementVisibleBoundsInVisualViewport) {
NavigateTo(base_url_ + "viewport-select.html");
ASSERT_EQ(2.0f, WebView()->PageScaleFactor());
- WebView()->SetInitialFocus(false);
+ To<LocalFrame>(WebView()->GetPage()->MainFrame())->SetInitialFocus(false);
Element* element = WebView()->FocusedElement();
EXPECT_FALSE(element->VisibleBoundsInVisualViewport().IsEmpty());
@@ -1785,9 +1805,9 @@ TEST_P(VisualViewportTest, visualViewportIsInert) {
EXPECT_EQ(200, html->clientWidth());
EXPECT_EQ(300, html->clientHeight());
- visual_viewport.SetScrollOffset(ScrollOffset(10, 15), kProgrammaticScroll,
- kScrollBehaviorInstant,
- ScrollableArea::ScrollCallback());
+ visual_viewport.SetScrollOffset(
+ ScrollOffset(10, 15), mojom::blink::ScrollType::kProgrammatic,
+ mojom::blink::ScrollBehavior::kInstant, ScrollableArea::ScrollCallback());
ASSERT_EQ(10, visual_viewport.GetScrollOffset().Width());
ASSERT_EQ(15, visual_viewport.GetScrollOffset().Height());
@@ -1871,7 +1891,7 @@ TEST_P(VisualViewportTest, SlowScrollAfterImplScroll) {
VisualViewport& visual_viewport = GetFrame()->GetPage()->GetVisualViewport();
// Apply some scroll and scale from the impl-side.
- WebView()->MainFrameWidget()->ApplyViewportChanges(
+ WebView()->MainFrameWidget()->ApplyViewportChangesForTesting(
{gfx::ScrollOffset(300, 200), gfx::Vector2dF(0, 0), 2, false, 0, 0,
cc::BrowserControlsState::kBoth});
@@ -1919,9 +1939,9 @@ TEST_P(VisualViewportTest, AccessibilityHitTestWhileZoomedIn) {
WebAXContext ax_context(web_doc);
WebView()->SetPageScaleFactor(2);
- WebView()->SetVisualViewportOffset(WebFloatPoint(200, 230));
- frame_view.LayoutViewport()->SetScrollOffset(ScrollOffset(400, 1100),
- kProgrammaticScroll);
+ WebView()->SetVisualViewportOffset(gfx::PointF(200, 230));
+ frame_view.LayoutViewport()->SetScrollOffset(
+ ScrollOffset(400, 1100), mojom::blink::ScrollType::kProgrammatic);
// FIXME(504057): PaintLayerScrollableArea dirties the compositing state.
ForceFullCompositingUpdate();
@@ -1929,7 +1949,7 @@ TEST_P(VisualViewportTest, AccessibilityHitTestWhileZoomedIn) {
// Because of where the visual viewport is located, this should hit the bottom
// right target (target 4).
WebAXObject hitNode =
- WebAXObject::FromWebDocument(web_doc).HitTest(WebPoint(154, 165));
+ WebAXObject::FromWebDocument(web_doc).HitTest(gfx::Point(154, 165));
ax::mojom::NameFrom name_from;
WebVector<WebAXObject> name_objects;
EXPECT_EQ(std::string("Target4"),
@@ -1980,8 +2000,8 @@ TEST_P(VisualViewportTest, TestCoordinateTransforms) {
visual_viewport.RootFrameToViewport(FloatPoint(50.5, 62.4)));
// Scrolling the main frame should have no effect.
- frame_view.LayoutViewport()->SetScrollOffset(ScrollOffset(100, 120),
- kProgrammaticScroll);
+ frame_view.LayoutViewport()->SetScrollOffset(
+ ScrollOffset(100, 120), mojom::blink::ScrollType::kProgrammatic);
EXPECT_FLOAT_POINT_EQ(FloatPoint(50, 62), visual_viewport.ViewportToRootFrame(
FloatPoint(80, 100)));
EXPECT_FLOAT_POINT_EQ(
@@ -2001,7 +2021,7 @@ TEST_P(VisualViewportTest, WindowDimensionsOnLoad) {
Element* output = GetFrame()->GetDocument()->getElementById("output");
DCHECK(output);
- EXPECT_EQ("1600x1200", output->InnerHTMLAsString());
+ EXPECT_EQ("1600x1200", output->innerHTML());
}
// Similar to above but make sure the initial scale is updated with the content
@@ -2016,7 +2036,7 @@ TEST_P(VisualViewportTest, WindowDimensionsOnLoadWideContent) {
Element* output = GetFrame()->GetDocument()->getElementById("output");
DCHECK(output);
- EXPECT_EQ("2000x1500", output->InnerHTMLAsString());
+ EXPECT_EQ("2000x1500", output->innerHTML());
}
TEST_P(VisualViewportTest, ResizeWithScrollAnchoring) {
@@ -2027,8 +2047,8 @@ TEST_P(VisualViewportTest, ResizeWithScrollAnchoring) {
NavigateTo(base_url_ + "icb-relative-content.html");
LocalFrameView& frame_view = *WebView()->MainFrameImpl()->GetFrameView();
- frame_view.LayoutViewport()->SetScrollOffset(ScrollOffset(700, 500),
- kProgrammaticScroll);
+ frame_view.LayoutViewport()->SetScrollOffset(
+ ScrollOffset(700, 500), mojom::blink::ScrollType::kProgrammatic);
UpdateAllLifecyclePhases();
WebView()->MainFrameWidget()->Resize(IntSize(800, 300));
@@ -2054,13 +2074,13 @@ TEST_P(VisualViewportTest, ResizeAnchoringWithRootScroller) {
GetFrame()->GetDocument()->setRootScroller(scroller, non_throw);
WebView()->SetPageScaleFactor(3.f);
- frame_view.GetScrollableArea()->SetScrollOffset(ScrollOffset(0, 400),
- kProgrammaticScroll);
+ frame_view.GetScrollableArea()->SetScrollOffset(
+ ScrollOffset(0, 400), mojom::blink::ScrollType::kProgrammatic);
VisualViewport& visual_viewport = WebView()->GetPage()->GetVisualViewport();
- visual_viewport.SetScrollOffset(ScrollOffset(0, 400), kProgrammaticScroll,
- kScrollBehaviorInstant,
- ScrollableArea::ScrollCallback());
+ visual_viewport.SetScrollOffset(
+ ScrollOffset(0, 400), mojom::blink::ScrollType::kProgrammatic,
+ mojom::blink::ScrollBehavior::kInstant, ScrollableArea::ScrollCallback());
WebView()->MainFrameWidget()->Resize(IntSize(800, 500));
@@ -2476,7 +2496,7 @@ TEST_F(VisualViewportSimTest, ScrollingContentsSmallerThanContainer) {
visual_viewport.GetScrollNode()->ContainerRect().Size());
EXPECT_EQ(IntSize(320, 480), visual_viewport.GetScrollNode()->ContentsSize());
- WebView().MainFrameWidget()->ApplyViewportChanges(
+ WebView().MainFrameWidget()->ApplyViewportChangesForTesting(
{gfx::ScrollOffset(1, 1), gfx::Vector2dF(), 2, false, 1, 0,
cc::BrowserControlsState::kBoth});
EXPECT_EQ(gfx::Size(320, 480), visual_viewport.LayerForScrolling()->bounds());
@@ -2525,11 +2545,11 @@ class VisualViewportScrollIntoViewTest : public VisualViewportSimTest {
bool is_for_scroll_sequence) {
WebDocument web_doc = WebView().MainFrameImpl()->GetDocument();
Element* bottom_element = web_doc.GetElementById(element_name);
- WebScrollIntoViewParams scroll_params(
- ScrollAlignment::kAlignToEdgeIfNeeded,
- ScrollAlignment::kAlignToEdgeIfNeeded, kProgrammaticScroll,
- /*make_visible_in_visual_viewport=*/true, kScrollBehaviorInstant,
- is_for_scroll_sequence);
+ auto scroll_params = ScrollAlignment::CreateScrollIntoViewParams(
+ ScrollAlignment::ToEdgeIfNeeded(), ScrollAlignment::ToEdgeIfNeeded(),
+ mojom::blink::ScrollType::kProgrammatic,
+ /*make_visible_in_visual_viewport=*/true,
+ mojom::blink::ScrollBehavior::kInstant, is_for_scroll_sequence);
WebView().GetPage()->GetVisualViewport().ScrollIntoView(
bottom_element->BoundingBox(), scroll_params);
}
@@ -2571,7 +2591,7 @@ TEST_P(VisualViewportTest, DeviceEmulation) {
EXPECT_FALSE(GetFrame()->View()->VisualViewportNeedsRepaint());
WebDeviceEmulationParams params;
- params.viewport_offset = WebFloatPoint();
+ params.viewport_offset = gfx::PointF();
params.viewport_scale = 1.f;
WebView()->EnableDeviceEmulation(params);
@@ -2582,19 +2602,20 @@ TEST_P(VisualViewportTest, DeviceEmulation) {
EXPECT_FALSE(GetFrame()->View()->VisualViewportNeedsRepaint());
// Set device mulation with viewport offset should repaint visual viewport.
- params.viewport_offset = WebFloatPoint(314, 159);
+ params.viewport_offset = gfx::PointF(314, 159);
WebView()->EnableDeviceEmulation(params);
UpdateAllLifecyclePhasesExceptPaint();
EXPECT_TRUE(GetFrame()->View()->VisualViewportNeedsRepaint());
ASSERT_TRUE(visual_viewport.GetDeviceEmulationTransformNode());
- EXPECT_EQ(FloatSize(-params.viewport_offset.x, -params.viewport_offset.y),
- visual_viewport.GetDeviceEmulationTransformNode()->Translation2D());
+ EXPECT_EQ(TransformationMatrix().Translate(-params.viewport_offset.x(),
+ -params.viewport_offset.y()),
+ visual_viewport.GetDeviceEmulationTransformNode()->Matrix());
UpdateAllLifecyclePhases();
EXPECT_FALSE(GetFrame()->View()->VisualViewportNeedsRepaint());
// Change device emulation with scale should not repaint visual viewport.
- params.viewport_offset = WebFloatPoint();
+ params.viewport_offset = gfx::PointF();
params.viewport_scale = 1.5f;
WebView()->EnableDeviceEmulation(params);
@@ -2662,7 +2683,7 @@ TEST_P(VisualViewportTest, PaintScrollbar) {
// Apply device emulation scale.
WebDeviceEmulationParams params;
- params.viewport_offset = WebFloatPoint();
+ params.viewport_offset = gfx::PointF();
params.viewport_scale = 1.5f;
WebView()->EnableDeviceEmulation(params);
UpdateAllLifecyclePhases();
@@ -2688,11 +2709,6 @@ TEST_P(VisualViewportTest, PaintScrollbar) {
// When a pinch-zoom occurs, the viewport scale and translation nodes can be
// directly updated without a PaintArtifactCompositor update.
TEST_P(VisualViewportTest, DirectPinchZoomPropertyUpdate) {
- // TODO(crbug.com/953322): Implement this optimization for
- // CompositeAfterPaint.
- if (RuntimeEnabledFeatures::CompositeAfterPaintEnabled())
- return;
-
InitializeWithAndroidSettings();
RegisterMockedHttpURLLoad("200-by-800-viewport.html");
@@ -2752,10 +2768,10 @@ TEST_P(VisualViewportTest, InSubtreeOfPageScale) {
TEST_F(VisualViewportSimTest, UsedColorSchemeFromRootElement) {
ScopedCSSColorSchemeForTest color_scheme_enabled(true);
+ ScopedCSSColorSchemeUARenderingForTest color_scheme_ua_enabled(true);
- ColorSchemeHelper color_scheme_helper;
- color_scheme_helper.SetPreferredColorScheme(*(WebView().GetPage()),
- PreferredColorScheme::kDark);
+ ColorSchemeHelper color_scheme_helper(*(WebView().GetPage()));
+ color_scheme_helper.SetPreferredColorScheme(PreferredColorScheme::kDark);
WebView().MainFrameWidget()->Resize(WebSize(400, 600));
const VisualViewport& visual_viewport =
@@ -2794,8 +2810,12 @@ TEST_P(VisualViewportTest, SetLocationBeforePrePaint) {
EXPECT_EQ(FloatPoint(12, 34), visual_viewport.ScrollPosition());
// When we create the scrolling layer, we should update its scroll offset.
ASSERT_TRUE(visual_viewport.LayerForScrolling());
- EXPECT_EQ(gfx::ScrollOffset(12, 34),
- visual_viewport.LayerForScrolling()->CurrentScrollOffset());
+
+ auto* layer_tree_host = GetFrame()->View()->RootCcLayer()->layer_tree_host();
+ EXPECT_EQ(
+ gfx::ScrollOffset(12, 34),
+ layer_tree_host->property_trees()->scroll_tree.current_scroll_offset(
+ visual_viewport.GetScrollElementId()));
}
TEST_P(VisualViewportTest, ScrollbarGeometryOnSizeChange) {