diff options
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.cc | 254 |
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) { |