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

Side by Side Diff: third_party/WebKit/Source/web/tests/VisualViewportTest.cpp

Issue 2387883002: Use float for scroll offset. (Closed)
Patch Set: Fix README.md Created 4 years, 2 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "core/frame/VisualViewport.h" 5 #include "core/frame/VisualViewport.h"
6 6
7 #include "core/dom/Document.h" 7 #include "core/dom/Document.h"
8 #include "core/frame/FrameHost.h" 8 #include "core/frame/FrameHost.h"
9 #include "core/frame/FrameView.h" 9 #include "core/frame/FrameView.h"
10 #include "core/frame/LocalFrame.h" 10 #include "core/frame/LocalFrame.h"
(...skipping 28 matching lines...) Expand all
39 #include "web/tests/FrameTestHelpers.h" 39 #include "web/tests/FrameTestHelpers.h"
40 40
41 #include <string> 41 #include <string>
42 42
43 #define ASSERT_POINT_EQ(expected, actual) \ 43 #define ASSERT_POINT_EQ(expected, actual) \
44 do { \ 44 do { \
45 ASSERT_EQ((expected).x(), (actual).x()); \ 45 ASSERT_EQ((expected).x(), (actual).x()); \
46 ASSERT_EQ((expected).y(), (actual).y()); \ 46 ASSERT_EQ((expected).y(), (actual).y()); \
47 } while (false) 47 } while (false)
48 48
49 #define ASSERT_SIZE_EQ(expected, actual) \
50 do { \
51 ASSERT_EQ((expected).width(), (actual).width()); \
52 ASSERT_EQ((expected).height(), (actual).height()); \
53 } while (false)
54
49 #define EXPECT_POINT_EQ(expected, actual) \ 55 #define EXPECT_POINT_EQ(expected, actual) \
50 do { \ 56 do { \
51 EXPECT_EQ((expected).x(), (actual).x()); \ 57 EXPECT_EQ((expected).x(), (actual).x()); \
52 EXPECT_EQ((expected).y(), (actual).y()); \ 58 EXPECT_EQ((expected).y(), (actual).y()); \
53 } while (false) 59 } while (false)
54 60
55 #define EXPECT_FLOAT_POINT_EQ(expected, actual) \ 61 #define EXPECT_FLOAT_POINT_EQ(expected, actual) \
56 do { \ 62 do { \
57 EXPECT_FLOAT_EQ((expected).x(), (actual).x()); \ 63 EXPECT_FLOAT_EQ((expected).x(), (actual).x()); \
58 EXPECT_FLOAT_EQ((expected).y(), (actual).y()); \ 64 EXPECT_FLOAT_EQ((expected).y(), (actual).y()); \
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 registerMockedHttpURLLoad("content-width-1000.html"); 239 registerMockedHttpURLLoad("content-width-1000.html");
234 navigateTo(m_baseURL + "content-width-1000.html"); 240 navigateTo(m_baseURL + "content-width-1000.html");
235 241
236 FrameView& frameView = *webViewImpl()->mainFrameImpl()->frameView(); 242 FrameView& frameView = *webViewImpl()->mainFrameImpl()->frameView();
237 VisualViewport& visualViewport = 243 VisualViewport& visualViewport =
238 frame()->page()->frameHost().visualViewport(); 244 frame()->page()->frameHost().visualViewport();
239 245
240 visualViewport.setScale(2); 246 visualViewport.setScale(2);
241 247
242 // Fully scroll both viewports. 248 // Fully scroll both viewports.
243 frameView.layoutViewportScrollableArea()->setScrollPosition( 249 frameView.layoutViewportScrollableArea()->setScrollOffset(
244 DoublePoint(10000, 10000), ProgrammaticScroll); 250 ScrollOffset(10000, 10000), ProgrammaticScroll);
245 visualViewport.move(FloatSize(10000, 10000)); 251 visualViewport.move(FloatSize(10000, 10000));
246 252
247 // Sanity check. 253 // Sanity check.
248 ASSERT_POINT_EQ(FloatPoint(400, 300), visualViewport.location()); 254 ASSERT_SIZE_EQ(FloatSize(400, 300), visualViewport.scrollOffset());
249 ASSERT_POINT_EQ( 255 ASSERT_SIZE_EQ(ScrollOffset(200, 1400),
250 DoublePoint(200, 1400), 256 frameView.layoutViewportScrollableArea()->scrollOffset());
251 frameView.layoutViewportScrollableArea()->scrollPositionDouble());
252 257
253 DoublePoint expectedLocation = 258 IntPoint expectedLocation =
254 frameView.getScrollableArea()->visibleContentRectDouble().location(); 259 frameView.getScrollableArea()->visibleContentRect().location();
255 260
256 // Shrink the WebView, this should cause both viewports to shrink and 261 // Shrink the WebView, this should cause both viewports to shrink and
257 // WebView should do whatever it needs to do to preserve the visible 262 // WebView should do whatever it needs to do to preserve the visible
258 // location. 263 // location.
259 webViewImpl()->resize(IntSize(700, 550)); 264 webViewImpl()->resize(IntSize(700, 550));
260 265
261 EXPECT_POINT_EQ( 266 EXPECT_POINT_EQ(
262 expectedLocation, 267 expectedLocation,
263 frameView.getScrollableArea()->visibleContentRectDouble().location()); 268 frameView.getScrollableArea()->visibleContentRect().location());
264 269
265 webViewImpl()->resize(IntSize(800, 600)); 270 webViewImpl()->resize(IntSize(800, 600));
266 271
267 EXPECT_POINT_EQ( 272 EXPECT_POINT_EQ(
268 expectedLocation, 273 expectedLocation,
269 frameView.getScrollableArea()->visibleContentRectDouble().location()); 274 frameView.getScrollableArea()->visibleContentRect().location());
270 } 275 }
271 276
272 // Test that the VisualViewport works as expected in case of a scaled 277 // Test that the VisualViewport works as expected in case of a scaled
273 // and scrolled viewport - scroll down. 278 // and scrolled viewport - scroll down.
274 TEST_P(ParameterizedVisualViewportTest, TestResizeAfterVerticalScroll) { 279 TEST_P(ParameterizedVisualViewportTest, TestResizeAfterVerticalScroll) {
275 /* 280 /*
276 200 200 281 200 200
277 | | | | 282 | | | |
278 | | | | 283 | | | |
279 | | 800 | | 800 284 | | 800 | | 800
(...skipping 25 matching lines...) Expand all
305 310
306 initializeWithAndroidSettings(); 311 initializeWithAndroidSettings();
307 312
308 registerMockedHttpURLLoad("200-by-800-viewport.html"); 313 registerMockedHttpURLLoad("200-by-800-viewport.html");
309 navigateTo(m_baseURL + "200-by-800-viewport.html"); 314 navigateTo(m_baseURL + "200-by-800-viewport.html");
310 315
311 webViewImpl()->resize(IntSize(100, 200)); 316 webViewImpl()->resize(IntSize(100, 200));
312 317
313 // Scroll main frame to the bottom of the document 318 // Scroll main frame to the bottom of the document
314 webViewImpl()->mainFrame()->setScrollOffset(WebSize(0, 400)); 319 webViewImpl()->mainFrame()->setScrollOffset(WebSize(0, 400));
315 EXPECT_POINT_EQ( 320 EXPECT_SIZE_EQ(
316 IntPoint(0, 400), 321 ScrollOffset(0, 400),
317 frame()->view()->layoutViewportScrollableArea()->scrollPosition()); 322 frame()->view()->layoutViewportScrollableArea()->scrollOffset());
318 323
319 webViewImpl()->setPageScaleFactor(2.0); 324 webViewImpl()->setPageScaleFactor(2.0);
320 325
321 // Scroll visual viewport to the bottom of the main frame 326 // Scroll visual viewport to the bottom of the main frame
322 VisualViewport& visualViewport = 327 VisualViewport& visualViewport =
323 frame()->page()->frameHost().visualViewport(); 328 frame()->page()->frameHost().visualViewport();
324 visualViewport.setLocation(FloatPoint(0, 300)); 329 visualViewport.setLocation(FloatPoint(0, 300));
325 EXPECT_FLOAT_POINT_EQ(FloatPoint(0, 300), visualViewport.location()); 330 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 300), visualViewport.scrollOffset());
326 331
327 // Verify the initial size of the visual viewport in the CSS pixels 332 // Verify the initial size of the visual viewport in the CSS pixels
328 EXPECT_FLOAT_SIZE_EQ(FloatSize(50, 100), visualViewport.visibleRect().size()); 333 EXPECT_FLOAT_SIZE_EQ(FloatSize(50, 100), visualViewport.visibleRect().size());
329 334
330 // Perform the resizing 335 // Perform the resizing
331 webViewImpl()->resize(IntSize(200, 100)); 336 webViewImpl()->resize(IntSize(200, 100));
332 337
333 // After resizing the scale changes 2.0 -> 4.0 338 // After resizing the scale changes 2.0 -> 4.0
334 EXPECT_FLOAT_SIZE_EQ(FloatSize(50, 25), visualViewport.visibleRect().size()); 339 EXPECT_FLOAT_SIZE_EQ(FloatSize(50, 25), visualViewport.visibleRect().size());
335 340
336 EXPECT_POINT_EQ( 341 EXPECT_SIZE_EQ(
337 IntPoint(0, 625), 342 ScrollOffset(0, 625),
338 frame()->view()->layoutViewportScrollableArea()->scrollPosition()); 343 frame()->view()->layoutViewportScrollableArea()->scrollOffset());
339 EXPECT_FLOAT_POINT_EQ(FloatPoint(0, 75), visualViewport.location()); 344 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 75), visualViewport.scrollOffset());
340 } 345 }
341 346
342 // Test that the VisualViewport works as expected in case if a scaled 347 // Test that the VisualViewport works as expected in case if a scaled
343 // and scrolled viewport - scroll right. 348 // and scrolled viewport - scroll right.
344 TEST_P(ParameterizedVisualViewportTest, TestResizeAfterHorizontalScroll) { 349 TEST_P(ParameterizedVisualViewportTest, TestResizeAfterHorizontalScroll) {
345 /* 350 /*
346 200 200 351 200 200
347 ---------------o----- ---------------o----- 352 ---------------o----- ---------------o-----
348 | | | | 25| | 353 | | | | 25| |
349 | | | | -----| 354 | | | | -----|
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
383 webViewImpl()->resize(IntSize(100, 200)); 388 webViewImpl()->resize(IntSize(100, 200));
384 389
385 // Outer viewport takes the whole width of the document. 390 // Outer viewport takes the whole width of the document.
386 391
387 webViewImpl()->setPageScaleFactor(2.0); 392 webViewImpl()->setPageScaleFactor(2.0);
388 393
389 // Scroll visual viewport to the right edge of the frame 394 // Scroll visual viewport to the right edge of the frame
390 VisualViewport& visualViewport = 395 VisualViewport& visualViewport =
391 frame()->page()->frameHost().visualViewport(); 396 frame()->page()->frameHost().visualViewport();
392 visualViewport.setLocation(FloatPoint(150, 0)); 397 visualViewport.setLocation(FloatPoint(150, 0));
393 EXPECT_FLOAT_POINT_EQ(FloatPoint(150, 0), visualViewport.location()); 398 EXPECT_FLOAT_SIZE_EQ(FloatSize(150, 0), visualViewport.scrollOffset());
394 399
395 // Verify the initial size of the visual viewport in the CSS pixels 400 // Verify the initial size of the visual viewport in the CSS pixels
396 EXPECT_FLOAT_SIZE_EQ(FloatSize(50, 100), visualViewport.visibleRect().size()); 401 EXPECT_FLOAT_SIZE_EQ(FloatSize(50, 100), visualViewport.visibleRect().size());
397 402
398 webViewImpl()->resize(IntSize(200, 100)); 403 webViewImpl()->resize(IntSize(200, 100));
399 404
400 // After resizing the scale changes 2.0 -> 4.0 405 // After resizing the scale changes 2.0 -> 4.0
401 EXPECT_FLOAT_SIZE_EQ(FloatSize(50, 25), visualViewport.visibleRect().size()); 406 EXPECT_FLOAT_SIZE_EQ(FloatSize(50, 25), visualViewport.visibleRect().size());
402 407
403 EXPECT_POINT_EQ(IntPoint(0, 0), frame()->view()->scrollPosition()); 408 EXPECT_SIZE_EQ(ScrollOffset(0, 0), frame()->view()->scrollOffset());
404 EXPECT_FLOAT_POINT_EQ(FloatPoint(150, 0), visualViewport.location()); 409 EXPECT_FLOAT_SIZE_EQ(FloatSize(150, 0), visualViewport.scrollOffset());
405 } 410 }
406 411
407 // Test that the container layer gets sized properly if the WebView is resized 412 // Test that the container layer gets sized properly if the WebView is resized
408 // prior to the VisualViewport being attached to the layer tree. 413 // prior to the VisualViewport being attached to the layer tree.
409 TEST_P(ParameterizedVisualViewportTest, TestWebViewResizedBeforeAttachment) { 414 TEST_P(ParameterizedVisualViewportTest, TestWebViewResizedBeforeAttachment) {
410 initializeWithDesktopSettings(); 415 initializeWithDesktopSettings();
411 FrameView& frameView = *webViewImpl()->mainFrameImpl()->frameView(); 416 FrameView& frameView = *webViewImpl()->mainFrameImpl()->frameView();
412 GraphicsLayer* rootGraphicsLayer = 417 GraphicsLayer* rootGraphicsLayer =
413 frameView.layoutViewItem().compositor()->rootGraphicsLayer(); 418 frameView.layoutViewItem().compositor()->rootGraphicsLayer();
414 419
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
494 499
495 // Scale the viewport to 2X and move it. 500 // Scale the viewport to 2X and move it.
496 visualViewport.setScale(2); 501 visualViewport.setScale(2);
497 visualViewport.setLocation(FloatPoint(10, 15)); 502 visualViewport.setLocation(FloatPoint(10, 15));
498 EXPECT_FLOAT_RECT_EQ(FloatRect(10, 15, 50, 200), 503 EXPECT_FLOAT_RECT_EQ(FloatRect(10, 15, 50, 200),
499 visualViewport.visibleRectInDocument()); 504 visualViewport.visibleRectInDocument());
500 505
501 // Scroll the layout viewport. Ensure its offset is reflected in 506 // Scroll the layout viewport. Ensure its offset is reflected in
502 // visibleRectInDocument(). 507 // visibleRectInDocument().
503 FrameView& frameView = *webViewImpl()->mainFrameImpl()->frameView(); 508 FrameView& frameView = *webViewImpl()->mainFrameImpl()->frameView();
504 frameView.layoutViewportScrollableArea()->setScrollPosition( 509 frameView.layoutViewportScrollableArea()->setScrollOffset(
505 DoublePoint(40, 100), ProgrammaticScroll); 510 ScrollOffset(40, 100), ProgrammaticScroll);
506 EXPECT_FLOAT_RECT_EQ(FloatRect(50, 115, 50, 200), 511 EXPECT_FLOAT_RECT_EQ(FloatRect(50, 115, 50, 200),
507 visualViewport.visibleRectInDocument()); 512 visualViewport.visibleRectInDocument());
508 } 513 }
509 514
510 TEST_P(ParameterizedVisualViewportTest, 515 TEST_P(ParameterizedVisualViewportTest,
511 TestFractionalScrollOffsetIsNotOverwritten) { 516 TestFractionalScrollOffsetIsNotOverwritten) {
512 bool origFractionalOffsetsEnabled = 517 bool origFractionalOffsetsEnabled =
513 RuntimeEnabledFeatures::fractionalScrollOffsetsEnabled(); 518 RuntimeEnabledFeatures::fractionalScrollOffsetsEnabled();
514 RuntimeEnabledFeatures::setFractionalScrollOffsetsEnabled(true); 519 RuntimeEnabledFeatures::setFractionalScrollOffsetsEnabled(true);
515 520
516 initializeWithAndroidSettings(); 521 initializeWithAndroidSettings();
517 webViewImpl()->resize(IntSize(200, 250)); 522 webViewImpl()->resize(IntSize(200, 250));
518 523
519 registerMockedHttpURLLoad("200-by-800-viewport.html"); 524 registerMockedHttpURLLoad("200-by-800-viewport.html");
520 navigateTo(m_baseURL + "200-by-800-viewport.html"); 525 navigateTo(m_baseURL + "200-by-800-viewport.html");
521 526
522 FrameView& frameView = *webViewImpl()->mainFrameImpl()->frameView(); 527 FrameView& frameView = *webViewImpl()->mainFrameImpl()->frameView();
523 frameView.layoutViewportScrollableArea()->setScrollPosition( 528 frameView.layoutViewportScrollableArea()->setScrollOffset(
524 DoublePoint(0, 10.5), ProgrammaticScroll); 529 ScrollOffset(0, 10.5), ProgrammaticScroll);
525 frameView.layoutViewportScrollableArea()->ScrollableArea::setScrollPosition( 530 frameView.layoutViewportScrollableArea()->ScrollableArea::setScrollOffset(
526 DoublePoint(10, 30.5), CompositorScroll); 531 ScrollOffset(10, 30.5), CompositorScroll);
527 532
528 EXPECT_EQ( 533 EXPECT_EQ(30.5,
529 30.5, 534 frameView.layoutViewportScrollableArea()->scrollOffset().height());
530 frameView.layoutViewportScrollableArea()->scrollPositionDouble().y());
531 535
532 RuntimeEnabledFeatures::setFractionalScrollOffsetsEnabled( 536 RuntimeEnabledFeatures::setFractionalScrollOffsetsEnabled(
533 origFractionalOffsetsEnabled); 537 origFractionalOffsetsEnabled);
534 } 538 }
535 539
536 // Test that the viewport's scroll offset is always appropriately bounded such 540 // Test that the viewport's scroll offset is always appropriately bounded such
537 // that the visual viewport always stays within the bounds of the main frame. 541 // that the visual viewport always stays within the bounds of the main frame.
538 TEST_P(ParameterizedVisualViewportTest, TestOffsetClamping) { 542 TEST_P(ParameterizedVisualViewportTest, TestOffsetClamping) {
539 initializeWithDesktopSettings(); 543 initializeWithDesktopSettings();
540 webViewImpl()->resize(IntSize(320, 240)); 544 webViewImpl()->resize(IntSize(320, 240));
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
759 763
760 // Load a wider page first, the navigation should resize the scroll layer to 764 // Load a wider page first, the navigation should resize the scroll layer to
761 // the smaller size on the second navigation. 765 // the smaller size on the second navigation.
762 registerMockedHttpURLLoad("content-width-1000.html"); 766 registerMockedHttpURLLoad("content-width-1000.html");
763 navigateTo(m_baseURL + "content-width-1000.html"); 767 navigateTo(m_baseURL + "content-width-1000.html");
764 webViewImpl()->updateAllLifecyclePhases(); 768 webViewImpl()->updateAllLifecyclePhases();
765 769
766 VisualViewport& visualViewport = 770 VisualViewport& visualViewport =
767 frame()->page()->frameHost().visualViewport(); 771 frame()->page()->frameHost().visualViewport();
768 visualViewport.setScale(2); 772 visualViewport.setScale(2);
769 visualViewport.move(FloatPoint(50, 60)); 773 visualViewport.move(ScrollOffset(50, 60));
770 774
771 // Move and scale the viewport to make sure it gets reset in the navigation. 775 // Move and scale the viewport to make sure it gets reset in the navigation.
772 EXPECT_POINT_EQ(FloatPoint(50, 60), visualViewport.location()); 776 EXPECT_SIZE_EQ(FloatSize(50, 60), visualViewport.scrollOffset());
773 EXPECT_EQ(2, visualViewport.scale()); 777 EXPECT_EQ(2, visualViewport.scale());
774 778
775 // Navigate again, this time the FrameView should be smaller. 779 // Navigate again, this time the FrameView should be smaller.
776 registerMockedHttpURLLoad("viewport-device-width.html"); 780 registerMockedHttpURLLoad("viewport-device-width.html");
777 navigateTo(m_baseURL + "viewport-device-width.html"); 781 navigateTo(m_baseURL + "viewport-device-width.html");
778 782
779 // Ensure the scroll layer matches the frame view's size. 783 // Ensure the scroll layer matches the frame view's size.
780 EXPECT_SIZE_EQ(FloatSize(320, 240), visualViewport.scrollLayer()->size()); 784 EXPECT_SIZE_EQ(FloatSize(320, 240), visualViewport.scrollLayer()->size());
781 785
782 // Ensure the location and scale were reset. 786 // Ensure the location and scale were reset.
783 EXPECT_POINT_EQ(FloatPoint(), visualViewport.location()); 787 EXPECT_SIZE_EQ(FloatSize(), visualViewport.scrollOffset());
784 EXPECT_EQ(1, visualViewport.scale()); 788 EXPECT_EQ(1, visualViewport.scale());
785 } 789 }
786 790
787 // The main FrameView's size should be set such that its the size of the visual 791 // The main FrameView's size should be set such that its the size of the visual
788 // viewport at minimum scale. Test that the FrameView is appropriately sized in 792 // viewport at minimum scale. Test that the FrameView is appropriately sized in
789 // the presence of a viewport <meta> tag. 793 // the presence of a viewport <meta> tag.
790 TEST_P(ParameterizedVisualViewportTest, 794 TEST_P(ParameterizedVisualViewportTest,
791 TestFrameViewSizedToViewportMetaMinimumScale) { 795 TestFrameViewSizedToViewportMetaMinimumScale) {
792 initializeWithAndroidSettings(); 796 initializeWithAndroidSettings();
793 webViewImpl()->resize(IntSize(320, 240)); 797 webViewImpl()->resize(IntSize(320, 240));
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
859 // Test that the HistoryItem for the page stores the visual viewport's offset 863 // Test that the HistoryItem for the page stores the visual viewport's offset
860 // and scale. 864 // and scale.
861 TEST_P(ParameterizedVisualViewportTest, TestSavedToHistoryItem) { 865 TEST_P(ParameterizedVisualViewportTest, TestSavedToHistoryItem) {
862 initializeWithDesktopSettings(); 866 initializeWithDesktopSettings();
863 webViewImpl()->resize(IntSize(200, 300)); 867 webViewImpl()->resize(IntSize(200, 300));
864 webViewImpl()->updateAllLifecyclePhases(); 868 webViewImpl()->updateAllLifecyclePhases();
865 869
866 registerMockedHttpURLLoad("200-by-300.html"); 870 registerMockedHttpURLLoad("200-by-300.html");
867 navigateTo(m_baseURL + "200-by-300.html"); 871 navigateTo(m_baseURL + "200-by-300.html");
868 872
869 EXPECT_FLOAT_POINT_EQ(FloatPoint(0, 0), 873 EXPECT_SIZE_EQ(ScrollOffset(0, 0),
870 toLocalFrame(webViewImpl()->page()->mainFrame()) 874 toLocalFrame(webViewImpl()->page()->mainFrame())
871 ->loader() 875 ->loader()
872 .currentItem() 876 .currentItem()
873 ->visualViewportScrollPoint()); 877 ->visualViewportScrollOffset());
874 878
875 VisualViewport& visualViewport = 879 VisualViewport& visualViewport =
876 frame()->page()->frameHost().visualViewport(); 880 frame()->page()->frameHost().visualViewport();
877 visualViewport.setScale(2); 881 visualViewport.setScale(2);
878 882
879 EXPECT_EQ(2, toLocalFrame(webViewImpl()->page()->mainFrame()) 883 EXPECT_EQ(2, toLocalFrame(webViewImpl()->page()->mainFrame())
880 ->loader() 884 ->loader()
881 .currentItem() 885 .currentItem()
882 ->pageScaleFactor()); 886 ->pageScaleFactor());
883 887
884 visualViewport.setLocation(FloatPoint(10, 20)); 888 visualViewport.setLocation(FloatPoint(10, 20));
885 889
886 EXPECT_FLOAT_POINT_EQ(FloatPoint(10, 20), 890 EXPECT_SIZE_EQ(ScrollOffset(10, 20),
887 toLocalFrame(webViewImpl()->page()->mainFrame()) 891 toLocalFrame(webViewImpl()->page()->mainFrame())
888 ->loader() 892 ->loader()
889 .currentItem() 893 .currentItem()
890 ->visualViewportScrollPoint()); 894 ->visualViewportScrollOffset());
891 } 895 }
892 896
893 // Test restoring a HistoryItem properly restores the visual viewport's state. 897 // Test restoring a HistoryItem properly restores the visual viewport's state.
894 TEST_P(ParameterizedVisualViewportTest, TestRestoredFromHistoryItem) { 898 TEST_P(ParameterizedVisualViewportTest, TestRestoredFromHistoryItem) {
895 initializeWithDesktopSettings(); 899 initializeWithDesktopSettings();
896 webViewImpl()->resize(IntSize(200, 300)); 900 webViewImpl()->resize(IntSize(200, 300));
897 901
898 registerMockedHttpURLLoad("200-by-300.html"); 902 registerMockedHttpURLLoad("200-by-300.html");
899 903
900 WebHistoryItem item; 904 WebHistoryItem item;
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
936 item.setScrollOffset(WebPoint(120, 180)); 940 item.setScrollOffset(WebPoint(120, 180));
937 item.setPageScaleFactor(2); 941 item.setPageScaleFactor(2);
938 942
939 FrameTestHelpers::loadHistoryItem(webViewImpl()->mainFrame(), item, 943 FrameTestHelpers::loadHistoryItem(webViewImpl()->mainFrame(), item,
940 WebHistoryDifferentDocumentLoad, 944 WebHistoryDifferentDocumentLoad,
941 WebCachePolicy::UseProtocolCachePolicy); 945 WebCachePolicy::UseProtocolCachePolicy);
942 946
943 VisualViewport& visualViewport = 947 VisualViewport& visualViewport =
944 frame()->page()->frameHost().visualViewport(); 948 frame()->page()->frameHost().visualViewport();
945 EXPECT_EQ(2, visualViewport.scale()); 949 EXPECT_EQ(2, visualViewport.scale());
946 EXPECT_POINT_EQ(IntPoint(100, 150), frame()->view()->scrollPosition()); 950 EXPECT_SIZE_EQ(ScrollOffset(100, 150), frame()->view()->scrollOffset());
947 EXPECT_FLOAT_POINT_EQ(FloatPoint(20, 30), 951 EXPECT_FLOAT_POINT_EQ(FloatPoint(20, 30),
948 visualViewport.visibleRect().location()); 952 visualViewport.visibleRect().location());
949 } 953 }
950 954
951 // Test that navigation to a new page with a different sized main frame doesn't 955 // Test that navigation to a new page with a different sized main frame doesn't
952 // clobber the history item's main frame scroll offset. crbug.com/371867 956 // clobber the history item's main frame scroll offset. crbug.com/371867
953 TEST_P(ParameterizedVisualViewportTest, 957 TEST_P(ParameterizedVisualViewportTest,
954 TestNavigateToSmallerFrameViewHistoryItemClobberBug) { 958 TestNavigateToSmallerFrameViewHistoryItemClobberBug) {
955 initializeWithAndroidSettings(); 959 initializeWithAndroidSettings();
956 webViewImpl()->resize(IntSize(400, 400)); 960 webViewImpl()->resize(IntSize(400, 400));
957 webViewImpl()->updateAllLifecyclePhases(); 961 webViewImpl()->updateAllLifecyclePhases();
958 962
959 registerMockedHttpURLLoad("content-width-1000.html"); 963 registerMockedHttpURLLoad("content-width-1000.html");
960 navigateTo(m_baseURL + "content-width-1000.html"); 964 navigateTo(m_baseURL + "content-width-1000.html");
961 965
962 FrameView* frameView = webViewImpl()->mainFrameImpl()->frameView(); 966 FrameView* frameView = webViewImpl()->mainFrameImpl()->frameView();
963 frameView->layoutViewportScrollableArea()->setScrollPosition( 967 frameView->layoutViewportScrollableArea()->setScrollOffset(
964 IntPoint(0, 1000), ProgrammaticScroll); 968 ScrollOffset(0, 1000), ProgrammaticScroll);
965 969
966 EXPECT_SIZE_EQ(IntSize(1000, 1000), frameView->frameRect().size()); 970 EXPECT_SIZE_EQ(IntSize(1000, 1000), frameView->frameRect().size());
967 971
968 VisualViewport& visualViewport = 972 VisualViewport& visualViewport =
969 frame()->page()->frameHost().visualViewport(); 973 frame()->page()->frameHost().visualViewport();
970 visualViewport.setScale(2); 974 visualViewport.setScale(2);
971 visualViewport.setLocation(FloatPoint(350, 350)); 975 visualViewport.setLocation(FloatPoint(350, 350));
972 976
973 Persistent<HistoryItem> firstItem = 977 Persistent<HistoryItem> firstItem =
974 webViewImpl()->mainFrameImpl()->frame()->loader().currentItem(); 978 webViewImpl()->mainFrameImpl()->frame()->loader().currentItem();
975 EXPECT_POINT_EQ(IntPoint(0, 1000), firstItem->scrollPoint()); 979 EXPECT_SIZE_EQ(ScrollOffset(0, 1000), firstItem->scrollOffset());
976 980
977 // Now navigate to a page which causes a smaller frameView. Make sure that 981 // Now navigate to a page which causes a smaller frameView. Make sure that
978 // navigating doesn't cause the history item to set a new scroll offset 982 // navigating doesn't cause the history item to set a new scroll offset
979 // before the item was replaced. 983 // before the item was replaced.
980 navigateTo("about:blank"); 984 navigateTo("about:blank");
981 frameView = webViewImpl()->mainFrameImpl()->frameView(); 985 frameView = webViewImpl()->mainFrameImpl()->frameView();
982 986
983 EXPECT_NE(firstItem, 987 EXPECT_NE(firstItem,
984 webViewImpl()->mainFrameImpl()->frame()->loader().currentItem()); 988 webViewImpl()->mainFrameImpl()->frame()->loader().currentItem());
985 EXPECT_LT(frameView->frameRect().size().width(), 1000); 989 EXPECT_LT(frameView->frameRect().size().width(), 1000);
986 EXPECT_POINT_EQ(IntPoint(0, 1000), firstItem->scrollPoint()); 990 EXPECT_SIZE_EQ(ScrollOffset(0, 1000), firstItem->scrollOffset());
987 } 991 }
988 992
989 // Test that the coordinates sent into moveRangeSelection are offset by the 993 // Test that the coordinates sent into moveRangeSelection are offset by the
990 // visual viewport's location. 994 // visual viewport's location.
991 TEST_P(ParameterizedVisualViewportTest, 995 TEST_P(ParameterizedVisualViewportTest,
992 DISABLED_TestWebFrameRangeAccountsForVisualViewportScroll) { 996 DISABLED_TestWebFrameRangeAccountsForVisualViewportScroll) {
993 initializeWithDesktopSettings(); 997 initializeWithDesktopSettings();
994 webViewImpl()->settings()->setDefaultFontSize(12); 998 webViewImpl()->settings()->setDefaultFontSize(12);
995 webViewImpl()->resize(WebSize(640, 480)); 999 webViewImpl()->resize(WebSize(640, 480));
996 registerMockedHttpURLLoad("move_range.html"); 1000 registerMockedHttpURLLoad("move_range.html");
(...skipping 13 matching lines...) Expand all
1010 1014
1011 webViewImpl()->selectionBounds(baseRect, extentRect); 1015 webViewImpl()->selectionBounds(baseRect, extentRect);
1012 WebPoint initialPoint(baseRect.x, baseRect.y); 1016 WebPoint initialPoint(baseRect.x, baseRect.y);
1013 WebPoint endPoint(extentRect.x, extentRect.y); 1017 WebPoint endPoint(extentRect.x, extentRect.y);
1014 1018
1015 // Move the visual viewport over and make the selection in the same 1019 // Move the visual viewport over and make the selection in the same
1016 // screen-space location. The selection should change to two characters to the 1020 // screen-space location. The selection should change to two characters to the
1017 // right and down one line. 1021 // right and down one line.
1018 VisualViewport& visualViewport = 1022 VisualViewport& visualViewport =
1019 frame()->page()->frameHost().visualViewport(); 1023 frame()->page()->frameHost().visualViewport();
1020 visualViewport.move(FloatPoint(60, 25)); 1024 visualViewport.move(ScrollOffset(60, 25));
1021 mainFrame->toWebLocalFrame()->moveRangeSelection(initialPoint, endPoint); 1025 mainFrame->toWebLocalFrame()->moveRangeSelection(initialPoint, endPoint);
1022 EXPECT_EQ("t ", mainFrame->toWebLocalFrame()->selectionAsText().utf8()); 1026 EXPECT_EQ("t ", mainFrame->toWebLocalFrame()->selectionAsText().utf8());
1023 } 1027 }
1024 1028
1025 // Test that the scrollFocusedEditableElementIntoRect method works with the 1029 // Test that the scrollFocusedEditableElementIntoRect method works with the
1026 // visual viewport. 1030 // visual viewport.
1027 TEST_P(ParameterizedVisualViewportTest, 1031 TEST_P(ParameterizedVisualViewportTest,
1028 DISABLED_TestScrollFocusedEditableElementIntoRect) { 1032 DISABLED_TestScrollFocusedEditableElementIntoRect) {
1029 initializeWithDesktopSettings(); 1033 initializeWithDesktopSettings();
1030 webViewImpl()->resize(IntSize(500, 300)); 1034 webViewImpl()->resize(IntSize(500, 300));
1031 1035
1032 registerMockedHttpURLLoad("pinch-viewport-input-field.html"); 1036 registerMockedHttpURLLoad("pinch-viewport-input-field.html");
1033 navigateTo(m_baseURL + "pinch-viewport-input-field.html"); 1037 navigateTo(m_baseURL + "pinch-viewport-input-field.html");
1034 1038
1035 VisualViewport& visualViewport = 1039 VisualViewport& visualViewport =
1036 frame()->page()->frameHost().visualViewport(); 1040 frame()->page()->frameHost().visualViewport();
1037 webViewImpl()->resizeVisualViewport(IntSize(200, 100)); 1041 webViewImpl()->resizeVisualViewport(IntSize(200, 100));
1038 webViewImpl()->setInitialFocus(false); 1042 webViewImpl()->setInitialFocus(false);
1039 visualViewport.setLocation(FloatPoint()); 1043 visualViewport.setLocation(FloatPoint());
1040 webViewImpl()->scrollFocusedEditableElementIntoRect(IntRect(0, 0, 500, 200)); 1044 webViewImpl()->scrollFocusedEditableElementIntoRect(IntRect(0, 0, 500, 200));
1041 1045
1042 EXPECT_POINT_EQ(IntPoint(0, frame()->view()->maximumScrollPosition().y()), 1046 EXPECT_SIZE_EQ(
1043 frame()->view()->scrollPosition()); 1047 ScrollOffset(0, frame()->view()->maximumScrollOffset().height()),
1048 frame()->view()->scrollOffset());
1044 EXPECT_FLOAT_POINT_EQ(FloatPoint(150, 200), 1049 EXPECT_FLOAT_POINT_EQ(FloatPoint(150, 200),
1045 visualViewport.visibleRect().location()); 1050 visualViewport.visibleRect().location());
1046 1051
1047 // Try it again but with the page zoomed in 1052 // Try it again but with the page zoomed in
1048 frame()->view()->setScrollPosition(IntPoint(0, 0), ProgrammaticScroll); 1053 frame()->view()->setScrollOffset(ScrollOffset(0, 0), ProgrammaticScroll);
1049 webViewImpl()->resizeVisualViewport(IntSize(500, 300)); 1054 webViewImpl()->resizeVisualViewport(IntSize(500, 300));
1050 visualViewport.setLocation(FloatPoint(0, 0)); 1055 visualViewport.setLocation(FloatPoint(0, 0));
1051 1056
1052 webViewImpl()->setPageScaleFactor(2); 1057 webViewImpl()->setPageScaleFactor(2);
1053 webViewImpl()->scrollFocusedEditableElementIntoRect(IntRect(0, 0, 500, 200)); 1058 webViewImpl()->scrollFocusedEditableElementIntoRect(IntRect(0, 0, 500, 200));
1054 EXPECT_POINT_EQ(IntPoint(0, frame()->view()->maximumScrollPosition().y()), 1059 EXPECT_SIZE_EQ(
1055 frame()->view()->scrollPosition()); 1060 ScrollOffset(0, frame()->view()->maximumScrollOffset().height()),
1061 frame()->view()->scrollOffset());
1056 EXPECT_FLOAT_POINT_EQ(FloatPoint(125, 150), 1062 EXPECT_FLOAT_POINT_EQ(FloatPoint(125, 150),
1057 visualViewport.visibleRect().location()); 1063 visualViewport.visibleRect().location());
1058 1064
1059 // Once more but make sure that we don't move the visual viewport unless 1065 // Once more but make sure that we don't move the visual viewport unless
1060 // necessary. 1066 // necessary.
1061 registerMockedHttpURLLoad("pinch-viewport-input-field-long-and-wide.html"); 1067 registerMockedHttpURLLoad("pinch-viewport-input-field-long-and-wide.html");
1062 navigateTo(m_baseURL + "pinch-viewport-input-field-long-and-wide.html"); 1068 navigateTo(m_baseURL + "pinch-viewport-input-field-long-and-wide.html");
1063 webViewImpl()->setInitialFocus(false); 1069 webViewImpl()->setInitialFocus(false);
1064 visualViewport.setLocation(FloatPoint()); 1070 visualViewport.setLocation(FloatPoint());
1065 frame()->view()->setScrollPosition(IntPoint(0, 0), ProgrammaticScroll); 1071 frame()->view()->setScrollOffset(ScrollOffset(0, 0), ProgrammaticScroll);
1066 webViewImpl()->resizeVisualViewport(IntSize(500, 300)); 1072 webViewImpl()->resizeVisualViewport(IntSize(500, 300));
1067 visualViewport.setLocation(FloatPoint(30, 50)); 1073 visualViewport.setLocation(FloatPoint(30, 50));
1068 1074
1069 webViewImpl()->setPageScaleFactor(2); 1075 webViewImpl()->setPageScaleFactor(2);
1070 webViewImpl()->scrollFocusedEditableElementIntoRect(IntRect(0, 0, 500, 200)); 1076 webViewImpl()->scrollFocusedEditableElementIntoRect(IntRect(0, 0, 500, 200));
1071 EXPECT_POINT_EQ(IntPoint(200 - 30 - 75, 600 - 50 - 65), 1077 EXPECT_SIZE_EQ(ScrollOffset(200 - 30 - 75, 600 - 50 - 65),
1072 frame()->view()->scrollPosition()); 1078 frame()->view()->scrollOffset());
1073 EXPECT_FLOAT_POINT_EQ(FloatPoint(30, 50), 1079 EXPECT_FLOAT_POINT_EQ(FloatPoint(30, 50),
1074 visualViewport.visibleRect().location()); 1080 visualViewport.visibleRect().location());
1075 } 1081 }
1076 1082
1077 // Test that resizing the WebView causes ViewportConstrained objects to 1083 // Test that resizing the WebView causes ViewportConstrained objects to
1078 // relayout. 1084 // relayout.
1079 TEST_P(ParameterizedVisualViewportTest, 1085 TEST_P(ParameterizedVisualViewportTest,
1080 TestWebViewResizeCausesViewportConstrainedLayout) { 1086 TestWebViewResizeCausesViewportConstrainedLayout) {
1081 initializeWithDesktopSettings(); 1087 initializeWithDesktopSettings();
1082 webViewImpl()->resize(IntSize(500, 300)); 1088 webViewImpl()->resize(IntSize(500, 300));
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
1214 frameView.layoutViewportScrollableArea(); 1220 frameView.layoutViewportScrollableArea();
1215 VisualViewport& visualViewport = 1221 VisualViewport& visualViewport =
1216 frame()->page()->frameHost().visualViewport(); 1222 frame()->page()->frameHost().visualViewport();
1217 Element* inputBox = frame()->document()->getElementById("box"); 1223 Element* inputBox = frame()->document()->getElementById("box");
1218 1224
1219 webViewImpl()->setPageScaleFactor(2); 1225 webViewImpl()->setPageScaleFactor(2);
1220 1226
1221 // The element is already in the view so the scrollIntoView shouldn't move 1227 // The element is already in the view so the scrollIntoView shouldn't move
1222 // the viewport at all. 1228 // the viewport at all.
1223 webViewImpl()->setVisualViewportOffset(WebFloatPoint(250.25f, 100.25f)); 1229 webViewImpl()->setVisualViewportOffset(WebFloatPoint(250.25f, 100.25f));
1224 layoutViewportScrollableArea->setScrollPosition(DoublePoint(0, 900.75), 1230 layoutViewportScrollableArea->setScrollOffset(ScrollOffset(0, 900.75),
1225 ProgrammaticScroll); 1231 ProgrammaticScroll);
1226 inputBox->scrollIntoViewIfNeeded(false); 1232 inputBox->scrollIntoViewIfNeeded(false);
1227 1233
1228 EXPECT_POINT_EQ(DoublePoint(0, 900), 1234 EXPECT_SIZE_EQ(ScrollOffset(0, 900),
1229 layoutViewportScrollableArea->scrollPositionDouble()); 1235 layoutViewportScrollableArea->scrollOffset());
1230 EXPECT_POINT_EQ(FloatPoint(250.25f, 100.25f), visualViewport.location()); 1236 EXPECT_SIZE_EQ(FloatSize(250.25f, 100.25f), visualViewport.scrollOffset());
1231 1237
1232 // Change the fractional part of the frameview to one that would round down. 1238 // Change the fractional part of the frameview to one that would round down.
1233 layoutViewportScrollableArea->setScrollPosition(DoublePoint(0, 900.125), 1239 layoutViewportScrollableArea->setScrollOffset(ScrollOffset(0, 900.125),
1234 ProgrammaticScroll); 1240 ProgrammaticScroll);
1235 inputBox->scrollIntoViewIfNeeded(false); 1241 inputBox->scrollIntoViewIfNeeded(false);
1236 1242
1237 EXPECT_POINT_EQ(DoublePoint(0, 900), 1243 EXPECT_SIZE_EQ(ScrollOffset(0, 900),
1238 layoutViewportScrollableArea->scrollPositionDouble()); 1244 layoutViewportScrollableArea->scrollOffset());
1239 EXPECT_POINT_EQ(FloatPoint(250.25f, 100.25f), visualViewport.location()); 1245 EXPECT_SIZE_EQ(FloatSize(250.25f, 100.25f), visualViewport.scrollOffset());
1240 1246
1241 // Repeat both tests above with the visual viewport at a high fractional. 1247 // Repeat both tests above with the visual viewport at a high fractional.
1242 webViewImpl()->setVisualViewportOffset(WebFloatPoint(250.875f, 100.875f)); 1248 webViewImpl()->setVisualViewportOffset(WebFloatPoint(250.875f, 100.875f));
1243 layoutViewportScrollableArea->setScrollPosition(DoublePoint(0, 900.75), 1249 layoutViewportScrollableArea->setScrollOffset(ScrollOffset(0, 900.75),
1244 ProgrammaticScroll); 1250 ProgrammaticScroll);
1245 inputBox->scrollIntoViewIfNeeded(false); 1251 inputBox->scrollIntoViewIfNeeded(false);
1246 1252
1247 EXPECT_POINT_EQ(DoublePoint(0, 900), 1253 EXPECT_SIZE_EQ(ScrollOffset(0, 900),
1248 layoutViewportScrollableArea->scrollPositionDouble()); 1254 layoutViewportScrollableArea->scrollOffset());
1249 EXPECT_POINT_EQ(FloatPoint(250.875f, 100.875f), visualViewport.location()); 1255 EXPECT_SIZE_EQ(FloatSize(250.875f, 100.875f), visualViewport.scrollOffset());
1250 1256
1251 // Change the fractional part of the frameview to one that would round down. 1257 // Change the fractional part of the frameview to one that would round down.
1252 layoutViewportScrollableArea->setScrollPosition(DoublePoint(0, 900.125), 1258 layoutViewportScrollableArea->setScrollOffset(ScrollOffset(0, 900.125),
1253 ProgrammaticScroll); 1259 ProgrammaticScroll);
1254 inputBox->scrollIntoViewIfNeeded(false); 1260 inputBox->scrollIntoViewIfNeeded(false);
1255 1261
1256 EXPECT_POINT_EQ(DoublePoint(0, 900), 1262 EXPECT_SIZE_EQ(ScrollOffset(0, 900),
1257 layoutViewportScrollableArea->scrollPositionDouble()); 1263 layoutViewportScrollableArea->scrollOffset());
1258 EXPECT_POINT_EQ(FloatPoint(250.875f, 100.875f), visualViewport.location()); 1264 EXPECT_SIZE_EQ(FloatSize(250.875f, 100.875f), visualViewport.scrollOffset());
1259 1265
1260 // Both viewports with a 0.5 fraction. 1266 // Both viewports with a 0.5 fraction.
1261 webViewImpl()->setVisualViewportOffset(WebFloatPoint(250.5f, 100.5f)); 1267 webViewImpl()->setVisualViewportOffset(WebFloatPoint(250.5f, 100.5f));
1262 layoutViewportScrollableArea->setScrollPosition(DoublePoint(0, 900.5), 1268 layoutViewportScrollableArea->setScrollOffset(ScrollOffset(0, 900.5),
1263 ProgrammaticScroll); 1269 ProgrammaticScroll);
1264 inputBox->scrollIntoViewIfNeeded(false); 1270 inputBox->scrollIntoViewIfNeeded(false);
1265 1271
1266 EXPECT_POINT_EQ(DoublePoint(0, 900), 1272 EXPECT_SIZE_EQ(ScrollOffset(0, 900),
1267 layoutViewportScrollableArea->scrollPositionDouble()); 1273 layoutViewportScrollableArea->scrollOffset());
1268 EXPECT_POINT_EQ(FloatPoint(250.5f, 100.5f), visualViewport.location()); 1274 EXPECT_SIZE_EQ(FloatSize(250.5f, 100.5f), visualViewport.scrollOffset());
1269 } 1275 }
1270 1276
1271 static IntPoint expectedMaxFrameViewScrollOffset(VisualViewport& visualViewport, 1277 static ScrollOffset expectedMaxFrameViewScrollOffset(
1272 FrameView& frameView) { 1278 VisualViewport& visualViewport,
1279 FrameView& frameView) {
1273 float aspectRatio = visualViewport.visibleRect().width() / 1280 float aspectRatio = visualViewport.visibleRect().width() /
1274 visualViewport.visibleRect().height(); 1281 visualViewport.visibleRect().height();
1275 float newHeight = frameView.frameRect().width() / aspectRatio; 1282 float newHeight = frameView.frameRect().width() / aspectRatio;
1276 return IntPoint( 1283 return ScrollOffset(
1277 frameView.contentsSize().width() - frameView.frameRect().width(), 1284 frameView.contentsSize().width() - frameView.frameRect().width(),
1278 frameView.contentsSize().height() - newHeight); 1285 frameView.contentsSize().height() - newHeight);
1279 } 1286 }
1280 1287
1281 TEST_F(VisualViewportTest, TestTopControlsAdjustment) { 1288 TEST_F(VisualViewportTest, TestTopControlsAdjustment) {
1282 initializeWithAndroidSettings(); 1289 initializeWithAndroidSettings();
1283 webViewImpl()->resizeWithTopControls(IntSize(500, 450), 20, false); 1290 webViewImpl()->resizeWithTopControls(IntSize(500, 450), 20, false);
1284 1291
1285 registerMockedHttpURLLoad("content-width-1000.html"); 1292 registerMockedHttpURLLoad("content-width-1000.html");
1286 navigateTo(m_baseURL + "content-width-1000.html"); 1293 navigateTo(m_baseURL + "content-width-1000.html");
1287 1294
1288 VisualViewport& visualViewport = 1295 VisualViewport& visualViewport =
1289 frame()->page()->frameHost().visualViewport(); 1296 frame()->page()->frameHost().visualViewport();
1290 FrameView& frameView = *webViewImpl()->mainFrameImpl()->frameView(); 1297 FrameView& frameView = *webViewImpl()->mainFrameImpl()->frameView();
1291 1298
1292 visualViewport.setScale(1); 1299 visualViewport.setScale(1);
1293 EXPECT_SIZE_EQ(IntSize(500, 450), visualViewport.visibleRect().size()); 1300 EXPECT_SIZE_EQ(IntSize(500, 450), visualViewport.visibleRect().size());
1294 EXPECT_SIZE_EQ(IntSize(1000, 900), frameView.frameRect().size()); 1301 EXPECT_SIZE_EQ(IntSize(1000, 900), frameView.frameRect().size());
1295 1302
1296 // Simulate bringing down the top controls by 20px. 1303 // Simulate bringing down the top controls by 20px.
1297 webViewImpl()->applyViewportDeltas(WebFloatSize(), WebFloatSize(), 1304 webViewImpl()->applyViewportDeltas(WebFloatSize(), WebFloatSize(),
1298 WebFloatSize(), 1, 1); 1305 WebFloatSize(), 1, 1);
1299 EXPECT_SIZE_EQ(IntSize(500, 430), visualViewport.visibleRect().size()); 1306 EXPECT_SIZE_EQ(IntSize(500, 430), visualViewport.visibleRect().size());
1300 1307
1301 // Test that the scroll bounds are adjusted appropriately: the visual viewport 1308 // Test that the scroll bounds are adjusted appropriately: the visual viewport
1302 // should be shrunk by 20px to 430px. The outer viewport was shrunk to 1309 // should be shrunk by 20px to 430px. The outer viewport was shrunk to
1303 // maintain the aspect ratio so it's height is 860px. 1310 // maintain the
1304 visualViewport.move(FloatPoint(10000, 10000)); 1311 // aspect ratio so it's height is 860px.
1305 EXPECT_POINT_EQ(FloatPoint(500, 860 - 430), visualViewport.location()); 1312 visualViewport.move(ScrollOffset(10000, 10000));
1313 EXPECT_SIZE_EQ(FloatSize(500, 860 - 430), visualViewport.scrollOffset());
1306 1314
1307 // The outer viewport (FrameView) should be affected as well. 1315 // The outer viewport (FrameView) should be affected as well.
1308 frameView.scrollBy(IntSize(10000, 10000), UserScroll); 1316 frameView.scrollBy(ScrollOffset(10000, 10000), UserScroll);
1309 EXPECT_POINT_EQ(expectedMaxFrameViewScrollOffset(visualViewport, frameView), 1317 EXPECT_SIZE_EQ(expectedMaxFrameViewScrollOffset(visualViewport, frameView),
1310 frameView.scrollPosition()); 1318 frameView.scrollOffset());
1311 1319
1312 // Simulate bringing up the top controls by 10.5px. 1320 // Simulate bringing up the top controls by 10.5px.
1313 webViewImpl()->applyViewportDeltas(WebFloatSize(), WebFloatSize(), 1321 webViewImpl()->applyViewportDeltas(WebFloatSize(), WebFloatSize(),
1314 WebFloatSize(), 1, -10.5f / 20); 1322 WebFloatSize(), 1, -10.5f / 20);
1315 EXPECT_FLOAT_SIZE_EQ(FloatSize(500, 440.5f), 1323 EXPECT_FLOAT_SIZE_EQ(FloatSize(500, 440.5f),
1316 visualViewport.visibleRect().size()); 1324 visualViewport.visibleRect().size());
1317 1325
1318 // maximumScrollPosition |ceil|s the top controls adjustment. 1326 // maximumScrollPosition |ceil|s the top controls adjustment.
1319 visualViewport.move(FloatPoint(10000, 10000)); 1327 visualViewport.move(ScrollOffset(10000, 10000));
1320 EXPECT_FLOAT_POINT_EQ(FloatPoint(500, 881 - 441), visualViewport.location()); 1328 EXPECT_FLOAT_SIZE_EQ(FloatSize(500, 881 - 441),
1329 visualViewport.scrollOffset());
1321 1330
1322 // The outer viewport (FrameView) should be affected as well. 1331 // The outer viewport (FrameView) should be affected as well.
1323 frameView.scrollBy(IntSize(10000, 10000), UserScroll); 1332 frameView.scrollBy(ScrollOffset(10000, 10000), UserScroll);
1324 EXPECT_POINT_EQ(expectedMaxFrameViewScrollOffset(visualViewport, frameView), 1333 EXPECT_SIZE_EQ(expectedMaxFrameViewScrollOffset(visualViewport, frameView),
1325 frameView.scrollPosition()); 1334 frameView.scrollOffset());
1326 } 1335 }
1327 1336
1328 TEST_F(VisualViewportTest, TestTopControlsAdjustmentWithScale) { 1337 TEST_F(VisualViewportTest, TestTopControlsAdjustmentWithScale) {
1329 initializeWithAndroidSettings(); 1338 initializeWithAndroidSettings();
1330 webViewImpl()->resizeWithTopControls(IntSize(500, 450), 20, false); 1339 webViewImpl()->resizeWithTopControls(IntSize(500, 450), 20, false);
1331 1340
1332 registerMockedHttpURLLoad("content-width-1000.html"); 1341 registerMockedHttpURLLoad("content-width-1000.html");
1333 navigateTo(m_baseURL + "content-width-1000.html"); 1342 navigateTo(m_baseURL + "content-width-1000.html");
1334 1343
1335 VisualViewport& visualViewport = 1344 VisualViewport& visualViewport =
1336 frame()->page()->frameHost().visualViewport(); 1345 frame()->page()->frameHost().visualViewport();
1337 FrameView& frameView = *webViewImpl()->mainFrameImpl()->frameView(); 1346 FrameView& frameView = *webViewImpl()->mainFrameImpl()->frameView();
1338 1347
1339 visualViewport.setScale(2); 1348 visualViewport.setScale(2);
1340 EXPECT_SIZE_EQ(IntSize(250, 225), visualViewport.visibleRect().size()); 1349 EXPECT_SIZE_EQ(IntSize(250, 225), visualViewport.visibleRect().size());
1341 EXPECT_SIZE_EQ(IntSize(1000, 900), frameView.frameRect().size()); 1350 EXPECT_SIZE_EQ(IntSize(1000, 900), frameView.frameRect().size());
1342 1351
1343 // Simulate bringing down the top controls by 20px. Since we're zoomed in, the 1352 // Simulate bringing down the top controls by 20px. Since we're zoomed in, the
1344 // top controls take up half as much space (in document-space) than they do at 1353 // top controls take up half as much space (in document-space) than they do at
1345 // an unzoomed level. 1354 // an unzoomed level.
1346 webViewImpl()->applyViewportDeltas(WebFloatSize(), WebFloatSize(), 1355 webViewImpl()->applyViewportDeltas(WebFloatSize(), WebFloatSize(),
1347 WebFloatSize(), 1, 1); 1356 WebFloatSize(), 1, 1);
1348 EXPECT_SIZE_EQ(IntSize(250, 215), visualViewport.visibleRect().size()); 1357 EXPECT_SIZE_EQ(IntSize(250, 215), visualViewport.visibleRect().size());
1349 1358
1350 // Test that the scroll bounds are adjusted appropriately. 1359 // Test that the scroll bounds are adjusted appropriately.
1351 visualViewport.move(FloatPoint(10000, 10000)); 1360 visualViewport.move(ScrollOffset(10000, 10000));
1352 EXPECT_POINT_EQ(FloatPoint(750, 860 - 215), visualViewport.location()); 1361 EXPECT_SIZE_EQ(FloatSize(750, 860 - 215), visualViewport.scrollOffset());
1353 1362
1354 // The outer viewport (FrameView) should be affected as well. 1363 // The outer viewport (FrameView) should be affected as well.
1355 frameView.scrollBy(IntSize(10000, 10000), UserScroll); 1364 frameView.scrollBy(ScrollOffset(10000, 10000), UserScroll);
1356 IntPoint expected = 1365 ScrollOffset expected =
1357 expectedMaxFrameViewScrollOffset(visualViewport, frameView); 1366 expectedMaxFrameViewScrollOffset(visualViewport, frameView);
1358 EXPECT_POINT_EQ(expected, frameView.scrollPosition()); 1367 EXPECT_SIZE_EQ(expected, frameView.scrollOffset());
1359 1368
1360 // Scale back out, FrameView max scroll shouldn't have changed. Visual 1369 // Scale back out, FrameView max scroll shouldn't have changed. Visual
1361 // viewport should be moved up to accomodate larger view. 1370 // viewport should be moved up to accomodate larger view.
1362 webViewImpl()->applyViewportDeltas(WebFloatSize(), WebFloatSize(), 1371 webViewImpl()->applyViewportDeltas(WebFloatSize(), WebFloatSize(),
1363 WebFloatSize(), 0.5f, 0); 1372 WebFloatSize(), 0.5f, 0);
1364 EXPECT_EQ(1, visualViewport.scale()); 1373 EXPECT_EQ(1, visualViewport.scale());
1365 EXPECT_POINT_EQ(expected, frameView.scrollPosition()); 1374 EXPECT_SIZE_EQ(expected, frameView.scrollOffset());
1366 frameView.scrollBy(IntSize(10000, 10000), UserScroll); 1375 frameView.scrollBy(ScrollOffset(10000, 10000), UserScroll);
1367 EXPECT_POINT_EQ(expected, frameView.scrollPosition()); 1376 EXPECT_SIZE_EQ(expected, frameView.scrollOffset());
1368 1377
1369 EXPECT_POINT_EQ(FloatPoint(500, 860 - 430), visualViewport.location()); 1378 EXPECT_SIZE_EQ(FloatSize(500, 860 - 430), visualViewport.scrollOffset());
1370 visualViewport.move(FloatPoint(10000, 10000)); 1379 visualViewport.move(ScrollOffset(10000, 10000));
1371 EXPECT_POINT_EQ(FloatPoint(500, 860 - 430), visualViewport.location()); 1380 EXPECT_SIZE_EQ(FloatSize(500, 860 - 430), visualViewport.scrollOffset());
1372 1381
1373 // Scale out, use a scale that causes fractional rects. 1382 // Scale out, use a scale that causes fractional rects.
1374 webViewImpl()->applyViewportDeltas(WebFloatSize(), WebFloatSize(), 1383 webViewImpl()->applyViewportDeltas(WebFloatSize(), WebFloatSize(),
1375 WebFloatSize(), 0.8f, -1); 1384 WebFloatSize(), 0.8f, -1);
1376 EXPECT_SIZE_EQ(FloatSize(625, 562.5), visualViewport.visibleRect().size()); 1385 EXPECT_SIZE_EQ(FloatSize(625, 562.5), visualViewport.visibleRect().size());
1377 1386
1378 // Bring out the top controls by 11 1387 // Bring out the top controls by 11
1379 webViewImpl()->applyViewportDeltas(WebFloatSize(), WebFloatSize(), 1388 webViewImpl()->applyViewportDeltas(WebFloatSize(), WebFloatSize(),
1380 WebFloatSize(), 1, 11 / 20.f); 1389 WebFloatSize(), 1, 11 / 20.f);
1381 EXPECT_SIZE_EQ(FloatSize(625, 548.75), visualViewport.visibleRect().size()); 1390 EXPECT_SIZE_EQ(FloatSize(625, 548.75), visualViewport.visibleRect().size());
1382 1391
1383 // Ensure max scroll offsets are updated properly. 1392 // Ensure max scroll offsets are updated properly.
1384 visualViewport.move(FloatPoint(10000, 10000)); 1393 visualViewport.move(ScrollOffset(10000, 10000));
1385 EXPECT_FLOAT_POINT_EQ(FloatPoint(375, 877.5 - 548.75), 1394 EXPECT_FLOAT_SIZE_EQ(FloatSize(375, 877.5 - 548.75),
1386 visualViewport.location()); 1395 visualViewport.scrollOffset());
1387 1396
1388 frameView.scrollBy(IntSize(10000, 10000), UserScroll); 1397 frameView.scrollBy(ScrollOffset(10000, 10000), UserScroll);
1389 EXPECT_POINT_EQ(expectedMaxFrameViewScrollOffset(visualViewport, frameView), 1398 EXPECT_SIZE_EQ(expectedMaxFrameViewScrollOffset(visualViewport, frameView),
1390 frameView.scrollPosition()); 1399 frameView.scrollOffset());
1391 } 1400 }
1392 1401
1393 // Tests that a scroll all the way to the bottom of the page, while hiding the 1402 // Tests that a scroll all the way to the bottom of the page, while hiding the
1394 // top controls doesn't cause a clamp in the viewport scroll offset when the top 1403 // top controls doesn't cause a clamp in the viewport scroll offset when the top
1395 // controls initiated resize occurs. 1404 // controls initiated resize occurs.
1396 TEST_F(VisualViewportTest, TestTopControlsAdjustmentAndResize) { 1405 TEST_F(VisualViewportTest, TestTopControlsAdjustmentAndResize) {
1397 int topControlsHeight = 20; 1406 int topControlsHeight = 20;
1398 int visualViewportHeight = 450; 1407 int visualViewportHeight = 450;
1399 int layoutViewportHeight = 900; 1408 int layoutViewportHeight = 900;
1400 float pageScale = 2; 1409 float pageScale = 2;
(...skipping 17 matching lines...) Expand all
1418 EXPECT_SIZE_EQ( 1427 EXPECT_SIZE_EQ(
1419 IntSize(250, (visualViewportHeight - topControlsHeight) / pageScale), 1428 IntSize(250, (visualViewportHeight - topControlsHeight) / pageScale),
1420 visualViewport.visibleRect().size()); 1429 visualViewport.visibleRect().size());
1421 EXPECT_SIZE_EQ( 1430 EXPECT_SIZE_EQ(
1422 IntSize(1000, layoutViewportHeight - topControlsHeight / minPageScale), 1431 IntSize(1000, layoutViewportHeight - topControlsHeight / minPageScale),
1423 frameView.frameRect().size()); 1432 frameView.frameRect().size());
1424 EXPECT_SIZE_EQ(IntSize(500, visualViewportHeight - topControlsHeight), 1433 EXPECT_SIZE_EQ(IntSize(500, visualViewportHeight - topControlsHeight),
1425 visualViewport.size()); 1434 visualViewport.size());
1426 1435
1427 // Scroll all the way to the bottom, hiding the top controls in the process. 1436 // Scroll all the way to the bottom, hiding the top controls in the process.
1428 visualViewport.move(FloatPoint(10000, 10000)); 1437 visualViewport.move(ScrollOffset(10000, 10000));
1429 frameView.scrollBy(IntSize(10000, 10000), UserScroll); 1438 frameView.scrollBy(ScrollOffset(10000, 10000), UserScroll);
1430 webViewImpl()->topControls().setShownRatio(0); 1439 webViewImpl()->topControls().setShownRatio(0);
1431 1440
1432 EXPECT_SIZE_EQ(IntSize(250, visualViewportHeight / pageScale), 1441 EXPECT_SIZE_EQ(IntSize(250, visualViewportHeight / pageScale),
1433 visualViewport.visibleRect().size()); 1442 visualViewport.visibleRect().size());
1434 1443
1435 IntPoint frameViewExpected = 1444 ScrollOffset frameViewExpected =
1436 expectedMaxFrameViewScrollOffset(visualViewport, frameView); 1445 expectedMaxFrameViewScrollOffset(visualViewport, frameView);
1437 FloatPoint visualViewportExpected = 1446 ScrollOffset visualViewportExpected = ScrollOffset(
1438 FloatPoint(750, layoutViewportHeight - visualViewportHeight / pageScale); 1447 750, layoutViewportHeight - visualViewportHeight / pageScale);
1439 1448
1440 EXPECT_POINT_EQ(visualViewportExpected, visualViewport.location()); 1449 EXPECT_SIZE_EQ(visualViewportExpected, visualViewport.scrollOffset());
1441 EXPECT_POINT_EQ(frameViewExpected, frameView.scrollPosition()); 1450 EXPECT_SIZE_EQ(frameViewExpected, frameView.scrollOffset());
1442 1451
1443 FloatPoint totalExpected = visualViewportExpected + frameViewExpected; 1452 ScrollOffset totalExpected = visualViewportExpected + frameViewExpected;
1444 1453
1445 // Resize the widget to match the top controls adjustment. Ensure that the 1454 // Resize the widget to match the top controls adjustment. Ensure that the
1446 // total offset (i.e. what the user sees) doesn't change because of clamping 1455 // total offset (i.e. what the user sees) doesn't change because of clamping
1447 // the offsets to valid values. 1456 // the offsets to valid values.
1448 webViewImpl()->resizeWithTopControls(WebSize(500, visualViewportHeight), 20, 1457 webViewImpl()->resizeWithTopControls(WebSize(500, visualViewportHeight), 20,
1449 false); 1458 false);
1450 1459
1451 EXPECT_SIZE_EQ(IntSize(500, visualViewportHeight), visualViewport.size()); 1460 EXPECT_SIZE_EQ(IntSize(500, visualViewportHeight), visualViewport.size());
1452 EXPECT_SIZE_EQ(IntSize(250, visualViewportHeight / pageScale), 1461 EXPECT_SIZE_EQ(IntSize(250, visualViewportHeight / pageScale),
1453 visualViewport.visibleRect().size()); 1462 visualViewport.visibleRect().size());
1454 EXPECT_SIZE_EQ(IntSize(1000, layoutViewportHeight), 1463 EXPECT_SIZE_EQ(IntSize(1000, layoutViewportHeight),
1455 frameView.frameRect().size()); 1464 frameView.frameRect().size());
1456 EXPECT_POINT_EQ(totalExpected, 1465 EXPECT_SIZE_EQ(totalExpected,
1457 frameView.scrollPosition() + visualViewport.location()); 1466 visualViewport.scrollOffset() + frameView.scrollOffset());
1458 } 1467 }
1459 1468
1460 // Tests that a scroll all the way to the bottom while showing the top controls 1469 // Tests that a scroll all the way to the bottom while showing the top controls
1461 // doesn't cause a clamp to the viewport scroll offset when the top controls 1470 // doesn't cause a clamp to the viewport scroll offset when the top controls
1462 // initiated resize occurs. 1471 // initiated resize occurs.
1463 TEST_F(VisualViewportTest, TestTopControlsShrinkAdjustmentAndResize) { 1472 TEST_F(VisualViewportTest, TestTopControlsShrinkAdjustmentAndResize) {
1464 int topControlsHeight = 20; 1473 int topControlsHeight = 20;
1465 int visualViewportHeight = 500; 1474 int visualViewportHeight = 500;
1466 int layoutViewportHeight = 1000; 1475 int layoutViewportHeight = 1000;
1467 int contentHeight = 2000; 1476 int contentHeight = 2000;
(...skipping 18 matching lines...) Expand all
1486 EXPECT_SIZE_EQ(IntSize(250, visualViewportHeight / pageScale), 1495 EXPECT_SIZE_EQ(IntSize(250, visualViewportHeight / pageScale),
1487 visualViewport.visibleRect().size()); 1496 visualViewport.visibleRect().size());
1488 EXPECT_SIZE_EQ(IntSize(1000, layoutViewportHeight), 1497 EXPECT_SIZE_EQ(IntSize(1000, layoutViewportHeight),
1489 frameView.frameRect().size()); 1498 frameView.frameRect().size());
1490 EXPECT_SIZE_EQ(IntSize(500, visualViewportHeight), visualViewport.size()); 1499 EXPECT_SIZE_EQ(IntSize(500, visualViewportHeight), visualViewport.size());
1491 1500
1492 // Scroll all the way to the bottom, showing the the top controls in the 1501 // Scroll all the way to the bottom, showing the the top controls in the
1493 // process. (This could happen via window.scrollTo during a scroll, for 1502 // process. (This could happen via window.scrollTo during a scroll, for
1494 // example). 1503 // example).
1495 webViewImpl()->topControls().setShownRatio(1); 1504 webViewImpl()->topControls().setShownRatio(1);
1496 visualViewport.move(FloatPoint(10000, 10000)); 1505 visualViewport.move(ScrollOffset(10000, 10000));
1497 frameView.scrollBy(IntSize(10000, 10000), UserScroll); 1506 frameView.scrollBy(ScrollOffset(10000, 10000), UserScroll);
1498 1507
1499 EXPECT_SIZE_EQ( 1508 EXPECT_SIZE_EQ(
1500 IntSize(250, (visualViewportHeight - topControlsHeight) / pageScale), 1509 IntSize(250, (visualViewportHeight - topControlsHeight) / pageScale),
1501 visualViewport.visibleRect().size()); 1510 visualViewport.visibleRect().size());
1502 1511
1503 IntPoint frameViewExpected = IntPoint( 1512 ScrollOffset frameViewExpected(
1504 0, contentHeight - 1513 0, contentHeight -
1505 (layoutViewportHeight - topControlsHeight / minPageScale)); 1514 (layoutViewportHeight - topControlsHeight / minPageScale));
1506 FloatPoint visualViewportExpected = 1515 ScrollOffset visualViewportExpected = ScrollOffset(
1507 FloatPoint(750, (layoutViewportHeight - topControlsHeight / minPageScale - 1516 750, (layoutViewportHeight - topControlsHeight / minPageScale -
1508 visualViewport.visibleRect().height())); 1517 visualViewport.visibleRect().height()));
1509 1518
1510 EXPECT_POINT_EQ(visualViewportExpected, visualViewport.location()); 1519 EXPECT_SIZE_EQ(visualViewportExpected, visualViewport.scrollOffset());
1511 EXPECT_POINT_EQ(frameViewExpected, frameView.scrollPosition()); 1520 EXPECT_SIZE_EQ(frameViewExpected, frameView.scrollOffset());
1512 1521
1513 FloatPoint totalExpected = visualViewportExpected + frameViewExpected; 1522 ScrollOffset totalExpected = visualViewportExpected + frameViewExpected;
1514 1523
1515 // Resize the widget to match the top controls adjustment. Ensure that the 1524 // Resize the widget to match the top controls adjustment. Ensure that the
1516 // total offset (i.e. what the user sees) doesn't change because of clamping 1525 // total offset (i.e. what the user sees) doesn't change because of clamping
1517 // the offsets to valid values. 1526 // the offsets to valid values.
1518 webViewImpl()->resizeWithTopControls( 1527 webViewImpl()->resizeWithTopControls(
1519 WebSize(500, visualViewportHeight - topControlsHeight), 20, true); 1528 WebSize(500, visualViewportHeight - topControlsHeight), 20, true);
1520 1529
1521 EXPECT_SIZE_EQ(IntSize(500, visualViewportHeight - topControlsHeight), 1530 EXPECT_SIZE_EQ(IntSize(500, visualViewportHeight - topControlsHeight),
1522 visualViewport.size()); 1531 visualViewport.size());
1523 EXPECT_SIZE_EQ( 1532 EXPECT_SIZE_EQ(
1524 IntSize(250, (visualViewportHeight - topControlsHeight) / pageScale), 1533 IntSize(250, (visualViewportHeight - topControlsHeight) / pageScale),
1525 visualViewport.visibleRect().size()); 1534 visualViewport.visibleRect().size());
1526 EXPECT_SIZE_EQ( 1535 EXPECT_SIZE_EQ(
1527 IntSize(1000, layoutViewportHeight - topControlsHeight / minPageScale), 1536 IntSize(1000, layoutViewportHeight - topControlsHeight / minPageScale),
1528 frameView.frameRect().size()); 1537 frameView.frameRect().size());
1529 EXPECT_POINT_EQ(totalExpected, 1538 EXPECT_SIZE_EQ(totalExpected,
1530 frameView.scrollPosition() + visualViewport.location()); 1539 visualViewport.scrollOffset() + frameView.scrollOffset());
1531 } 1540 }
1532 1541
1533 // Tests that a resize due to top controls hiding doesn't incorrectly clamp the 1542 // Tests that a resize due to top controls hiding doesn't incorrectly clamp the
1534 // main frame's scroll offset. crbug.com/428193. 1543 // main frame's scroll offset. crbug.com/428193.
1535 TEST_F(VisualViewportTest, TestTopControlHidingResizeDoesntClampMainFrame) { 1544 TEST_F(VisualViewportTest, TestTopControlHidingResizeDoesntClampMainFrame) {
1536 initializeWithAndroidSettings(); 1545 initializeWithAndroidSettings();
1537 webViewImpl()->resizeWithTopControls(webViewImpl()->size(), 500, false); 1546 webViewImpl()->resizeWithTopControls(webViewImpl()->size(), 500, false);
1538 webViewImpl()->applyViewportDeltas(WebFloatSize(), WebFloatSize(), 1547 webViewImpl()->applyViewportDeltas(WebFloatSize(), WebFloatSize(),
1539 WebFloatSize(), 1, 1); 1548 WebFloatSize(), 1, 1);
1540 webViewImpl()->resizeWithTopControls(WebSize(1000, 1000), 500, true); 1549 webViewImpl()->resizeWithTopControls(WebSize(1000, 1000), 500, true);
1541 1550
1542 registerMockedHttpURLLoad("content-width-1000.html"); 1551 registerMockedHttpURLLoad("content-width-1000.html");
1543 navigateTo(m_baseURL + "content-width-1000.html"); 1552 navigateTo(m_baseURL + "content-width-1000.html");
1544 1553
1545 // Scroll the FrameView to the bottom of the page but "hide" the top controls 1554 // Scroll the FrameView to the bottom of the page but "hide" the top controls
1546 // on the compositor side so the max scroll position should account for the 1555 // on the compositor side so the max scroll position should account for the
1547 // full viewport height. 1556 // full viewport height.
1548 webViewImpl()->applyViewportDeltas(WebFloatSize(), WebFloatSize(), 1557 webViewImpl()->applyViewportDeltas(WebFloatSize(), WebFloatSize(),
1549 WebFloatSize(), 1, -1); 1558 WebFloatSize(), 1, -1);
1550 FrameView& frameView = *webViewImpl()->mainFrameImpl()->frameView(); 1559 FrameView& frameView = *webViewImpl()->mainFrameImpl()->frameView();
1551 frameView.setScrollPosition(IntPoint(0, 10000), ProgrammaticScroll); 1560 frameView.setScrollOffset(ScrollOffset(0, 10000), ProgrammaticScroll);
1552 EXPECT_EQ(500, frameView.scrollPositionDouble().y()); 1561 EXPECT_EQ(500, frameView.scrollOffset().height());
1553 1562
1554 // Now send the resize, make sure the scroll offset doesn't change. 1563 // Now send the resize, make sure the scroll offset doesn't change.
1555 webViewImpl()->resizeWithTopControls(WebSize(1000, 1500), 500, false); 1564 webViewImpl()->resizeWithTopControls(WebSize(1000, 1500), 500, false);
1556 EXPECT_EQ(500, frameView.scrollPositionDouble().y()); 1565 EXPECT_EQ(500, frameView.scrollOffset().height());
1557 } 1566 }
1558 1567
1559 static void configureHiddenScrollbarsSettings(WebSettings* settings) { 1568 static void configureHiddenScrollbarsSettings(WebSettings* settings) {
1560 VisualViewportTest::configureAndroidSettings(settings); 1569 VisualViewportTest::configureAndroidSettings(settings);
1561 settings->setHideScrollbars(true); 1570 settings->setHideScrollbars(true);
1562 } 1571 }
1563 1572
1564 // Tests that scrollbar layers are not attached to the inner viewport container 1573 // Tests that scrollbar layers are not attached to the inner viewport container
1565 // layer when hideScrollbars WebSetting is true. 1574 // layer when hideScrollbars WebSetting is true.
1566 TEST_F(VisualViewportTest, 1575 TEST_F(VisualViewportTest,
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
1618 initializeWithDesktopSettings(); 1627 initializeWithDesktopSettings();
1619 webViewImpl()->resize(IntSize(100, 200)); 1628 webViewImpl()->resize(IntSize(100, 200));
1620 1629
1621 navigateTo("about:blank"); 1630 navigateTo("about:blank");
1622 webViewImpl()->updateAllLifecyclePhases(); 1631 webViewImpl()->updateAllLifecyclePhases();
1623 1632
1624 webViewImpl()->resizeVisualViewport(IntSize(100, 100)); 1633 webViewImpl()->resizeVisualViewport(IntSize(100, 100));
1625 1634
1626 VisualViewport& visualViewport = 1635 VisualViewport& visualViewport =
1627 frame()->page()->frameHost().visualViewport(); 1636 frame()->page()->frameHost().visualViewport();
1628 visualViewport.move(FloatPoint(0, 100)); 1637 visualViewport.move(ScrollOffset(0, 100));
1629 1638
1630 EXPECT_EQ(100, visualViewport.location().y()); 1639 EXPECT_EQ(100, visualViewport.scrollOffset().height());
1631 1640
1632 webViewImpl()->resizeVisualViewport(IntSize(100, 200)); 1641 webViewImpl()->resizeVisualViewport(IntSize(100, 200));
1633 1642
1634 EXPECT_EQ(0, visualViewport.location().y()); 1643 EXPECT_EQ(0, visualViewport.scrollOffset().height());
1635 } 1644 }
1636 1645
1637 TEST_P(ParameterizedVisualViewportTest, 1646 TEST_P(ParameterizedVisualViewportTest,
1638 ElementBoundsInViewportSpaceAccountsForViewport) { 1647 ElementBoundsInViewportSpaceAccountsForViewport) {
1639 initializeWithAndroidSettings(); 1648 initializeWithAndroidSettings();
1640 1649
1641 webViewImpl()->resize(IntSize(500, 800)); 1650 webViewImpl()->resize(IntSize(500, 800));
1642 1651
1643 registerMockedHttpURLLoad("pinch-viewport-input-field.html"); 1652 registerMockedHttpURLLoad("pinch-viewport-input-field.html");
1644 navigateTo(m_baseURL + "pinch-viewport-input-field.html"); 1653 navigateTo(m_baseURL + "pinch-viewport-input-field.html");
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
1698 1707
1699 // Chrome's quirky behavior regarding viewport scrolling means we treat the 1708 // Chrome's quirky behavior regarding viewport scrolling means we treat the
1700 // body element as the viewport and don't apply scrolling to the HTML element. 1709 // body element as the viewport and don't apply scrolling to the HTML element.
1701 RuntimeEnabledFeatures::setScrollTopLeftInteropEnabled(false); 1710 RuntimeEnabledFeatures::setScrollTopLeftInteropEnabled(false);
1702 1711
1703 LocalDOMWindow* window = 1712 LocalDOMWindow* window =
1704 webViewImpl()->mainFrameImpl()->frame()->localDOMWindow(); 1713 webViewImpl()->mainFrameImpl()->frame()->localDOMWindow();
1705 window->scrollTo(100, 150); 1714 window->scrollTo(100, 150);
1706 EXPECT_EQ(100, window->scrollX()); 1715 EXPECT_EQ(100, window->scrollX());
1707 EXPECT_EQ(150, window->scrollY()); 1716 EXPECT_EQ(150, window->scrollY());
1708 EXPECT_FLOAT_POINT_EQ(FloatPoint(100, 150), visualViewport.location()); 1717 EXPECT_FLOAT_SIZE_EQ(FloatSize(100, 150), visualViewport.scrollOffset());
1709 1718
1710 HTMLElement* body = toHTMLBodyElement(window->document()->body()); 1719 HTMLElement* body = toHTMLBodyElement(window->document()->body());
1711 body->setScrollLeft(50); 1720 body->setScrollLeft(50);
1712 body->setScrollTop(130); 1721 body->setScrollTop(130);
1713 EXPECT_EQ(50, body->scrollLeft()); 1722 EXPECT_EQ(50, body->scrollLeft());
1714 EXPECT_EQ(130, body->scrollTop()); 1723 EXPECT_EQ(130, body->scrollTop());
1715 EXPECT_FLOAT_POINT_EQ(FloatPoint(50, 130), visualViewport.location()); 1724 EXPECT_FLOAT_SIZE_EQ(FloatSize(50, 130), visualViewport.scrollOffset());
1716 1725
1717 HTMLElement* documentElement = 1726 HTMLElement* documentElement =
1718 toHTMLElement(window->document()->documentElement()); 1727 toHTMLElement(window->document()->documentElement());
1719 documentElement->setScrollLeft(40); 1728 documentElement->setScrollLeft(40);
1720 documentElement->setScrollTop(50); 1729 documentElement->setScrollTop(50);
1721 EXPECT_EQ(0, documentElement->scrollLeft()); 1730 EXPECT_EQ(0, documentElement->scrollLeft());
1722 EXPECT_EQ(0, documentElement->scrollTop()); 1731 EXPECT_EQ(0, documentElement->scrollTop());
1723 EXPECT_FLOAT_POINT_EQ(FloatPoint(50, 130), visualViewport.location()); 1732 EXPECT_FLOAT_SIZE_EQ(FloatSize(50, 130), visualViewport.scrollOffset());
1724 1733
1725 visualViewport.setLocation(FloatPoint(10, 20)); 1734 visualViewport.setLocation(FloatPoint(10, 20));
1726 EXPECT_EQ(10, body->scrollLeft()); 1735 EXPECT_EQ(10, body->scrollLeft());
1727 EXPECT_EQ(20, body->scrollTop()); 1736 EXPECT_EQ(20, body->scrollTop());
1728 EXPECT_EQ(0, documentElement->scrollLeft()); 1737 EXPECT_EQ(0, documentElement->scrollLeft());
1729 EXPECT_EQ(0, documentElement->scrollTop()); 1738 EXPECT_EQ(0, documentElement->scrollTop());
1730 EXPECT_EQ(10, window->scrollX()); 1739 EXPECT_EQ(10, window->scrollX());
1731 EXPECT_EQ(20, window->scrollY()); 1740 EXPECT_EQ(20, window->scrollY());
1732 1741
1733 // Turning on the standards-compliant viewport scrolling impl should make the 1742 // Turning on the standards-compliant viewport scrolling impl should make the
1734 // document element the viewport and not body. 1743 // document element the viewport and not body.
1735 RuntimeEnabledFeatures::setScrollTopLeftInteropEnabled(true); 1744 RuntimeEnabledFeatures::setScrollTopLeftInteropEnabled(true);
1736 1745
1737 window->scrollTo(100, 150); 1746 window->scrollTo(100, 150);
1738 EXPECT_EQ(100, window->scrollX()); 1747 EXPECT_EQ(100, window->scrollX());
1739 EXPECT_EQ(150, window->scrollY()); 1748 EXPECT_EQ(150, window->scrollY());
1740 EXPECT_FLOAT_POINT_EQ(FloatPoint(100, 150), visualViewport.location()); 1749 EXPECT_FLOAT_SIZE_EQ(FloatSize(100, 150), visualViewport.scrollOffset());
1741 1750
1742 body->setScrollLeft(50); 1751 body->setScrollLeft(50);
1743 body->setScrollTop(130); 1752 body->setScrollTop(130);
1744 EXPECT_EQ(0, body->scrollLeft()); 1753 EXPECT_EQ(0, body->scrollLeft());
1745 EXPECT_EQ(0, body->scrollTop()); 1754 EXPECT_EQ(0, body->scrollTop());
1746 EXPECT_FLOAT_POINT_EQ(FloatPoint(100, 150), visualViewport.location()); 1755 EXPECT_FLOAT_SIZE_EQ(FloatSize(100, 150), visualViewport.scrollOffset());
1747 1756
1748 documentElement->setScrollLeft(40); 1757 documentElement->setScrollLeft(40);
1749 documentElement->setScrollTop(50); 1758 documentElement->setScrollTop(50);
1750 EXPECT_EQ(40, documentElement->scrollLeft()); 1759 EXPECT_EQ(40, documentElement->scrollLeft());
1751 EXPECT_EQ(50, documentElement->scrollTop()); 1760 EXPECT_EQ(50, documentElement->scrollTop());
1752 EXPECT_FLOAT_POINT_EQ(FloatPoint(40, 50), visualViewport.location()); 1761 EXPECT_FLOAT_SIZE_EQ(FloatSize(40, 50), visualViewport.scrollOffset());
1753 1762
1754 visualViewport.setLocation(FloatPoint(10, 20)); 1763 visualViewport.setLocation(FloatPoint(10, 20));
1755 EXPECT_EQ(0, body->scrollLeft()); 1764 EXPECT_EQ(0, body->scrollLeft());
1756 EXPECT_EQ(0, body->scrollTop()); 1765 EXPECT_EQ(0, body->scrollTop());
1757 EXPECT_EQ(10, documentElement->scrollLeft()); 1766 EXPECT_EQ(10, documentElement->scrollLeft());
1758 EXPECT_EQ(20, documentElement->scrollTop()); 1767 EXPECT_EQ(20, documentElement->scrollTop());
1759 EXPECT_EQ(10, window->scrollX()); 1768 EXPECT_EQ(10, window->scrollX());
1760 EXPECT_EQ(20, window->scrollY()); 1769 EXPECT_EQ(20, window->scrollY());
1761 } 1770 }
1762 1771
(...skipping 22 matching lines...) Expand all
1785 TEST_P(ParameterizedVisualViewportTest, FractionalMaxScrollOffset) { 1794 TEST_P(ParameterizedVisualViewportTest, FractionalMaxScrollOffset) {
1786 initializeWithDesktopSettings(); 1795 initializeWithDesktopSettings();
1787 webViewImpl()->resize(IntSize(101, 201)); 1796 webViewImpl()->resize(IntSize(101, 201));
1788 navigateTo("about:blank"); 1797 navigateTo("about:blank");
1789 1798
1790 VisualViewport& visualViewport = 1799 VisualViewport& visualViewport =
1791 frame()->page()->frameHost().visualViewport(); 1800 frame()->page()->frameHost().visualViewport();
1792 ScrollableArea* scrollableArea = &visualViewport; 1801 ScrollableArea* scrollableArea = &visualViewport;
1793 1802
1794 webViewImpl()->setPageScaleFactor(1.0); 1803 webViewImpl()->setPageScaleFactor(1.0);
1795 EXPECT_FLOAT_POINT_EQ(DoublePoint(), 1804 EXPECT_SIZE_EQ(ScrollOffset(), scrollableArea->maximumScrollOffset());
1796 scrollableArea->maximumScrollPositionDouble());
1797 1805
1798 webViewImpl()->setPageScaleFactor(2); 1806 webViewImpl()->setPageScaleFactor(2);
1799 EXPECT_FLOAT_POINT_EQ(DoublePoint(101. / 2., 201. / 2.), 1807 EXPECT_SIZE_EQ(ScrollOffset(101. / 2., 201. / 2.),
1800 scrollableArea->maximumScrollPositionDouble()); 1808 scrollableArea->maximumScrollOffset());
1801 } 1809 }
1802 1810
1803 // Tests that the slow scrolling after an impl scroll on the visual viewport is 1811 // Tests that the slow scrolling after an impl scroll on the visual viewport is
1804 // continuous. crbug.com/453460 was caused by the impl-path not updating the 1812 // continuous. crbug.com/453460 was caused by the impl-path not updating the
1805 // ScrollAnimatorBase class. 1813 // ScrollAnimatorBase class.
1806 TEST_P(ParameterizedVisualViewportTest, SlowScrollAfterImplScroll) { 1814 TEST_P(ParameterizedVisualViewportTest, SlowScrollAfterImplScroll) {
1807 initializeWithDesktopSettings(); 1815 initializeWithDesktopSettings();
1808 webViewImpl()->resize(IntSize(800, 600)); 1816 webViewImpl()->resize(IntSize(800, 600));
1809 navigateTo("about:blank"); 1817 navigateTo("about:blank");
1810 1818
1811 VisualViewport& visualViewport = 1819 VisualViewport& visualViewport =
1812 frame()->page()->frameHost().visualViewport(); 1820 frame()->page()->frameHost().visualViewport();
1813 1821
1814 // Apply some scroll and scale from the impl-side. 1822 // Apply some scroll and scale from the impl-side.
1815 webViewImpl()->applyViewportDeltas(WebFloatSize(300, 200), WebFloatSize(0, 0), 1823 webViewImpl()->applyViewportDeltas(WebFloatSize(300, 200), WebFloatSize(0, 0),
1816 WebFloatSize(0, 0), 2, 0); 1824 WebFloatSize(0, 0), 2, 0);
1817 1825
1818 EXPECT_POINT_EQ(FloatPoint(300, 200), visualViewport.location()); 1826 EXPECT_SIZE_EQ(FloatSize(300, 200), visualViewport.scrollOffset());
1819 1827
1820 // Send a scroll event on the main thread path. 1828 // Send a scroll event on the main thread path.
1821 PlatformGestureEvent gsu(PlatformEvent::GestureScrollUpdate, IntPoint(0, 0), 1829 PlatformGestureEvent gsu(PlatformEvent::GestureScrollUpdate, IntPoint(0, 0),
1822 IntPoint(0, 0), IntSize(5, 5), 0, 1830 IntPoint(0, 0), IntSize(5, 5), 0,
1823 PlatformEvent::NoModifiers, 1831 PlatformEvent::NoModifiers,
1824 PlatformGestureSourceTouchpad); 1832 PlatformGestureSourceTouchpad);
1825 gsu.setScrollGestureData(-50, -60, ScrollByPrecisePixel, 1, 1, 1833 gsu.setScrollGestureData(-50, -60, ScrollByPrecisePixel, 1, 1,
1826 ScrollInertialPhaseUnknown, false, 1834 ScrollInertialPhaseUnknown, false,
1827 -1 /* null plugin id */); 1835 -1 /* null plugin id */);
1828 1836
1829 frame()->eventHandler().handleGestureEvent(gsu); 1837 frame()->eventHandler().handleGestureEvent(gsu);
1830 1838
1831 // The scroll sent from the impl-side must not be overwritten. 1839 // The scroll sent from the impl-side must not be overwritten.
1832 EXPECT_POINT_EQ(FloatPoint(350, 260), visualViewport.location()); 1840 EXPECT_SIZE_EQ(FloatSize(350, 260), visualViewport.scrollOffset());
1833 } 1841 }
1834 1842
1835 static void accessibilitySettings(WebSettings* settings) { 1843 static void accessibilitySettings(WebSettings* settings) {
1836 VisualViewportTest::configureSettings(settings); 1844 VisualViewportTest::configureSettings(settings);
1837 settings->setAccessibilityEnabled(true); 1845 settings->setAccessibilityEnabled(true);
1838 } 1846 }
1839 1847
1840 TEST_P(ParameterizedVisualViewportTest, AccessibilityHitTestWhileZoomedIn) { 1848 TEST_P(ParameterizedVisualViewportTest, AccessibilityHitTestWhileZoomedIn) {
1841 initializeWithDesktopSettings(accessibilitySettings); 1849 initializeWithDesktopSettings(accessibilitySettings);
1842 1850
1843 registerMockedHttpURLLoad("hit-test.html"); 1851 registerMockedHttpURLLoad("hit-test.html");
1844 navigateTo(m_baseURL + "hit-test.html"); 1852 navigateTo(m_baseURL + "hit-test.html");
1845 1853
1846 webViewImpl()->resize(IntSize(500, 500)); 1854 webViewImpl()->resize(IntSize(500, 500));
1847 webViewImpl()->updateAllLifecyclePhases(); 1855 webViewImpl()->updateAllLifecyclePhases();
1848 1856
1849 WebDocument webDoc = webViewImpl()->mainFrame()->document(); 1857 WebDocument webDoc = webViewImpl()->mainFrame()->document();
1850 FrameView& frameView = *webViewImpl()->mainFrameImpl()->frameView(); 1858 FrameView& frameView = *webViewImpl()->mainFrameImpl()->frameView();
1851 1859
1852 webViewImpl()->setPageScaleFactor(2); 1860 webViewImpl()->setPageScaleFactor(2);
1853 webViewImpl()->setVisualViewportOffset(WebFloatPoint(200, 230)); 1861 webViewImpl()->setVisualViewportOffset(WebFloatPoint(200, 230));
1854 frameView.layoutViewportScrollableArea()->setScrollPosition( 1862 frameView.layoutViewportScrollableArea()->setScrollOffset(
1855 DoublePoint(400, 1100), ProgrammaticScroll); 1863 ScrollOffset(400, 1100), ProgrammaticScroll);
1856 1864
1857 // FIXME(504057): PaintLayerScrollableArea dirties the compositing state. 1865 // FIXME(504057): PaintLayerScrollableArea dirties the compositing state.
1858 forceFullCompositingUpdate(); 1866 forceFullCompositingUpdate();
1859 1867
1860 // Because of where the visual viewport is located, this should hit the bottom 1868 // Because of where the visual viewport is located, this should hit the bottom
1861 // right target (target 4). 1869 // right target (target 4).
1862 WebAXObject hitNode = 1870 WebAXObject hitNode =
1863 webDoc.accessibilityObject().hitTest(WebPoint(154, 165)); 1871 webDoc.accessibilityObject().hitTest(WebPoint(154, 165));
1864 WebAXNameFrom nameFrom; 1872 WebAXNameFrom nameFrom;
1865 WebVector<WebAXObject> nameObjects; 1873 WebVector<WebAXObject> nameObjects;
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1902 1910
1903 // Test points that will cause non-integer values. 1911 // Test points that will cause non-integer values.
1904 EXPECT_FLOAT_POINT_EQ( 1912 EXPECT_FLOAT_POINT_EQ(
1905 FloatPoint(50.5, 62.4), 1913 FloatPoint(50.5, 62.4),
1906 visualViewport.viewportToRootFrame(FloatPoint(81, 100.8))); 1914 visualViewport.viewportToRootFrame(FloatPoint(81, 100.8)));
1907 EXPECT_FLOAT_POINT_EQ( 1915 EXPECT_FLOAT_POINT_EQ(
1908 FloatPoint(81, 100.8), 1916 FloatPoint(81, 100.8),
1909 visualViewport.rootFrameToViewport(FloatPoint(50.5, 62.4))); 1917 visualViewport.rootFrameToViewport(FloatPoint(50.5, 62.4)));
1910 1918
1911 // Scrolling the main frame should have no effect. 1919 // Scrolling the main frame should have no effect.
1912 frameView.layoutViewportScrollableArea()->setScrollPosition( 1920 frameView.layoutViewportScrollableArea()->setScrollOffset(
1913 DoublePoint(100, 120), ProgrammaticScroll); 1921 ScrollOffset(100, 120), ProgrammaticScroll);
1914 EXPECT_FLOAT_POINT_EQ(FloatPoint(50, 62), visualViewport.viewportToRootFrame( 1922 EXPECT_FLOAT_POINT_EQ(FloatPoint(50, 62), visualViewport.viewportToRootFrame(
1915 FloatPoint(80, 100))); 1923 FloatPoint(80, 100)));
1916 EXPECT_FLOAT_POINT_EQ(FloatPoint(80, 100), 1924 EXPECT_FLOAT_POINT_EQ(FloatPoint(80, 100),
1917 visualViewport.rootFrameToViewport(FloatPoint(50, 62))); 1925 visualViewport.rootFrameToViewport(FloatPoint(50, 62)));
1918 } 1926 }
1919 1927
1920 // Tests that the window dimensions are available before a full layout occurs. 1928 // Tests that the window dimensions are available before a full layout occurs.
1921 // More specifically, it checks that the innerWidth and innerHeight window 1929 // More specifically, it checks that the innerWidth and innerHeight window
1922 // properties will trigger a layout which will cause an update to viewport 1930 // properties will trigger a layout which will cause an update to viewport
1923 // constraints and a refreshed initial scale. crbug.com/466718 1931 // constraints and a refreshed initial scale. crbug.com/466718
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
1964 pinchUpdate.y = 100; 1972 pinchUpdate.y = 100;
1965 pinchUpdate.data.pinchUpdate.scale = 2; 1973 pinchUpdate.data.pinchUpdate.scale = 2;
1966 pinchUpdate.data.pinchUpdate.zoomDisabled = false; 1974 pinchUpdate.data.pinchUpdate.zoomDisabled = false;
1967 1975
1968 webViewImpl()->handleInputEvent(pinchUpdate); 1976 webViewImpl()->handleInputEvent(pinchUpdate);
1969 1977
1970 VisualViewport& visualViewport = 1978 VisualViewport& visualViewport =
1971 webViewImpl()->page()->frameHost().visualViewport(); 1979 webViewImpl()->page()->frameHost().visualViewport();
1972 FrameView& frameView = *webViewImpl()->mainFrameImpl()->frameView(); 1980 FrameView& frameView = *webViewImpl()->mainFrameImpl()->frameView();
1973 1981
1974 EXPECT_FLOAT_POINT_EQ(FloatPoint(50, 50), visualViewport.location()); 1982 EXPECT_FLOAT_SIZE_EQ(FloatSize(50, 50), visualViewport.scrollOffset());
1975 EXPECT_FLOAT_POINT_EQ(FloatPoint(0, 0), frameView.scrollPositionDouble()); 1983 EXPECT_SIZE_EQ(ScrollOffset(0, 0), frameView.scrollOffset());
1976 } 1984 }
1977 1985
1978 TEST_P(ParameterizedVisualViewportTest, ResizeWithScrollAnchoring) { 1986 TEST_P(ParameterizedVisualViewportTest, ResizeWithScrollAnchoring) {
1979 bool wasScrollAnchoringEnabled = 1987 bool wasScrollAnchoringEnabled =
1980 RuntimeEnabledFeatures::scrollAnchoringEnabled(); 1988 RuntimeEnabledFeatures::scrollAnchoringEnabled();
1981 RuntimeEnabledFeatures::setScrollAnchoringEnabled(true); 1989 RuntimeEnabledFeatures::setScrollAnchoringEnabled(true);
1982 1990
1983 initializeWithDesktopSettings(); 1991 initializeWithDesktopSettings();
1984 webViewImpl()->resize(IntSize(800, 600)); 1992 webViewImpl()->resize(IntSize(800, 600));
1985 1993
1986 registerMockedHttpURLLoad("icb-relative-content.html"); 1994 registerMockedHttpURLLoad("icb-relative-content.html");
1987 navigateTo(m_baseURL + "icb-relative-content.html"); 1995 navigateTo(m_baseURL + "icb-relative-content.html");
1988 1996
1989 FrameView& frameView = *webViewImpl()->mainFrameImpl()->frameView(); 1997 FrameView& frameView = *webViewImpl()->mainFrameImpl()->frameView();
1990 frameView.layoutViewportScrollableArea()->setScrollPosition( 1998 frameView.layoutViewportScrollableArea()->setScrollOffset(
1991 DoublePoint(700, 500), ProgrammaticScroll); 1999 ScrollOffset(700, 500), ProgrammaticScroll);
1992 2000
1993 webViewImpl()->resize(IntSize(800, 300)); 2001 webViewImpl()->resize(IntSize(800, 300));
1994 EXPECT_POINT_EQ( 2002 EXPECT_SIZE_EQ(ScrollOffset(700, 200),
1995 DoublePoint(700, 200), 2003 frameView.layoutViewportScrollableArea()->scrollOffset());
1996 frameView.layoutViewportScrollableArea()->scrollPositionDouble());
1997 2004
1998 RuntimeEnabledFeatures::setScrollAnchoringEnabled(wasScrollAnchoringEnabled); 2005 RuntimeEnabledFeatures::setScrollAnchoringEnabled(wasScrollAnchoringEnabled);
1999 } 2006 }
2000 2007
2001 // Ensure that resize anchoring as happens when top controls hide/show affects 2008 // Ensure that resize anchoring as happens when top controls hide/show affects
2002 // the scrollable area that's currently set as the root scroller. 2009 // the scrollable area that's currently set as the root scroller.
2003 TEST_P(ParameterizedVisualViewportTest, ResizeAnchoringWithRootScroller) { 2010 TEST_P(ParameterizedVisualViewportTest, ResizeAnchoringWithRootScroller) {
2004 bool wasRootScrollerEnabled = 2011 bool wasRootScrollerEnabled =
2005 RuntimeEnabledFeatures::setRootScrollerEnabled(); 2012 RuntimeEnabledFeatures::setRootScrollerEnabled();
2006 RuntimeEnabledFeatures::setSetRootScrollerEnabled(true); 2013 RuntimeEnabledFeatures::setSetRootScrollerEnabled(true);
2007 2014
2008 initializeWithAndroidSettings(); 2015 initializeWithAndroidSettings();
2009 webViewImpl()->resize(IntSize(800, 600)); 2016 webViewImpl()->resize(IntSize(800, 600));
2010 2017
2011 registerMockedHttpURLLoad("root-scroller-div.html"); 2018 registerMockedHttpURLLoad("root-scroller-div.html");
2012 navigateTo(m_baseURL + "root-scroller-div.html"); 2019 navigateTo(m_baseURL + "root-scroller-div.html");
2013 2020
2014 FrameView& frameView = *webViewImpl()->mainFrameImpl()->frameView(); 2021 FrameView& frameView = *webViewImpl()->mainFrameImpl()->frameView();
2015 2022
2016 Element* scroller = frame()->document()->getElementById("rootScroller"); 2023 Element* scroller = frame()->document()->getElementById("rootScroller");
2017 NonThrowableExceptionState nonThrow; 2024 NonThrowableExceptionState nonThrow;
2018 frame()->document()->setRootScroller(scroller, nonThrow); 2025 frame()->document()->setRootScroller(scroller, nonThrow);
2019 2026
2020 webViewImpl()->setPageScaleFactor(3.f); 2027 webViewImpl()->setPageScaleFactor(3.f);
2021 frameView.getScrollableArea()->setScrollPosition(DoublePoint(0, 400), 2028 frameView.getScrollableArea()->setScrollOffset(ScrollOffset(0, 400),
2022 ProgrammaticScroll); 2029 ProgrammaticScroll);
2023 2030
2024 VisualViewport& visualViewport = 2031 VisualViewport& visualViewport =
2025 webViewImpl()->page()->frameHost().visualViewport(); 2032 webViewImpl()->page()->frameHost().visualViewport();
2026 visualViewport.setScrollPosition(DoublePoint(0, 400), ProgrammaticScroll); 2033 visualViewport.setScrollOffset(ScrollOffset(0, 400), ProgrammaticScroll);
2027 2034
2028 webViewImpl()->resize(IntSize(800, 500)); 2035 webViewImpl()->resize(IntSize(800, 500));
2029 2036
2030 EXPECT_POINT_EQ( 2037 EXPECT_SIZE_EQ(ScrollOffset(),
2031 DoublePoint(), 2038 frameView.layoutViewportScrollableArea()->scrollOffset());
2032 frameView.layoutViewportScrollableArea()->scrollPositionDouble());
2033 2039
2034 RuntimeEnabledFeatures::setSetRootScrollerEnabled(wasRootScrollerEnabled); 2040 RuntimeEnabledFeatures::setSetRootScrollerEnabled(wasRootScrollerEnabled);
2035 } 2041 }
2036 2042
2037 // Ensure that resize anchoring as happens when the device is rotated affects 2043 // Ensure that resize anchoring as happens when the device is rotated affects
2038 // the scrollable area that's currently set as the root scroller. 2044 // the scrollable area that's currently set as the root scroller.
2039 TEST_P(ParameterizedVisualViewportTest, RotationAnchoringWithRootScroller) { 2045 TEST_P(ParameterizedVisualViewportTest, RotationAnchoringWithRootScroller) {
2040 bool wasRootScrollerEnabled = 2046 bool wasRootScrollerEnabled =
2041 RuntimeEnabledFeatures::setRootScrollerEnabled(); 2047 RuntimeEnabledFeatures::setRootScrollerEnabled();
2042 RuntimeEnabledFeatures::setSetRootScrollerEnabled(true); 2048 RuntimeEnabledFeatures::setSetRootScrollerEnabled(true);
2043 2049
2044 initializeWithAndroidSettings(); 2050 initializeWithAndroidSettings();
2045 webViewImpl()->resize(IntSize(800, 600)); 2051 webViewImpl()->resize(IntSize(800, 600));
2046 2052
2047 registerMockedHttpURLLoad("root-scroller-div.html"); 2053 registerMockedHttpURLLoad("root-scroller-div.html");
2048 navigateTo(m_baseURL + "root-scroller-div.html"); 2054 navigateTo(m_baseURL + "root-scroller-div.html");
2049 2055
2050 FrameView& frameView = *webViewImpl()->mainFrameImpl()->frameView(); 2056 FrameView& frameView = *webViewImpl()->mainFrameImpl()->frameView();
2051 2057
2052 Element* scroller = frame()->document()->getElementById("rootScroller"); 2058 Element* scroller = frame()->document()->getElementById("rootScroller");
2053 NonThrowableExceptionState nonThrow; 2059 NonThrowableExceptionState nonThrow;
2054 frame()->document()->setRootScroller(scroller, nonThrow); 2060 frame()->document()->setRootScroller(scroller, nonThrow);
2055 webViewImpl()->updateAllLifecyclePhases(); 2061 webViewImpl()->updateAllLifecyclePhases();
2056 2062
2057 scroller->setScrollTop(800); 2063 scroller->setScrollTop(800);
2058 2064
2059 webViewImpl()->resize(IntSize(600, 800)); 2065 webViewImpl()->resize(IntSize(600, 800));
2060 2066
2061 EXPECT_POINT_EQ( 2067 EXPECT_SIZE_EQ(ScrollOffset(),
2062 DoublePoint(), 2068 frameView.layoutViewportScrollableArea()->scrollOffset());
2063 frameView.layoutViewportScrollableArea()->scrollPositionDouble());
2064 EXPECT_EQ(600, scroller->scrollTop()); 2069 EXPECT_EQ(600, scroller->scrollTop());
2065 2070
2066 RuntimeEnabledFeatures::setSetRootScrollerEnabled(wasRootScrollerEnabled); 2071 RuntimeEnabledFeatures::setSetRootScrollerEnabled(wasRootScrollerEnabled);
2067 } 2072 }
2068 2073
2069 } // namespace 2074 } // namespace
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/web/tests/TouchActionTest.cpp ('k') | third_party/WebKit/Source/web/tests/WebFrameTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698