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

Side by Side Diff: Source/web/tests/WebFrameTest.cpp

Issue 1056983004: OverscrollGlow for mainThread-{BLINK CHANGES} (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: addressed review comments Created 5 years, 6 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 /* 1 /*
2 * Copyright (C) 2010 Google Inc. All rights reserved. 2 * Copyright (C) 2010 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
145 EXPECT_EQ(expected.x(), actual.x()); \ 145 EXPECT_EQ(expected.x(), actual.x()); \
146 EXPECT_EQ(expected.y(), actual.y()); \ 146 EXPECT_EQ(expected.y(), actual.y()); \
147 } while (false) 147 } while (false)
148 148
149 #define EXPECT_FLOAT_POINT_EQ(expected, actual) \ 149 #define EXPECT_FLOAT_POINT_EQ(expected, actual) \
150 do { \ 150 do { \
151 EXPECT_FLOAT_EQ(expected.x(), actual.x()); \ 151 EXPECT_FLOAT_EQ(expected.x(), actual.x()); \
152 EXPECT_FLOAT_EQ(expected.y(), actual.y()); \ 152 EXPECT_FLOAT_EQ(expected.y(), actual.y()); \
153 } while (false) 153 } while (false)
154 154
155 #define EXPECT_FLOAT_SIZE_EQ(expected, actual) \
156 do { \
157 EXPECT_FLOAT_EQ(expected.width(), actual.width()); \
158 EXPECT_FLOAT_EQ(expected.height(), actual.height()); \
159 } while (false)
160
155 class WebFrameTest : public ::testing::Test { 161 class WebFrameTest : public ::testing::Test {
156 protected: 162 protected:
157 WebFrameTest() 163 WebFrameTest()
158 : m_baseURL("http://internal.test/") 164 : m_baseURL("http://internal.test/")
159 , m_notBaseURL("http://external.test/") 165 , m_notBaseURL("http://external.test/")
160 , m_chromeURL("chrome://") 166 , m_chromeURL("chrome://")
161 { 167 {
162 } 168 }
163 169
164 virtual ~WebFrameTest() 170 virtual ~WebFrameTest()
(...skipping 7239 matching lines...) Expand 10 before | Expand all | Expand 10 after
7404 EXPECT_EQ(fourthFrame, parent->lastChild()); 7410 EXPECT_EQ(fourthFrame, parent->lastChild());
7405 7411
7406 EXPECT_EQ(parent, firstFrame->parent()); 7412 EXPECT_EQ(parent, firstFrame->parent());
7407 EXPECT_EQ(parent, secondFrame->parent()); 7413 EXPECT_EQ(parent, secondFrame->parent());
7408 EXPECT_EQ(parent, thirdFrame->parent()); 7414 EXPECT_EQ(parent, thirdFrame->parent());
7409 EXPECT_EQ(parent, fourthFrame->parent()); 7415 EXPECT_EQ(parent, fourthFrame->parent());
7410 7416
7411 view->close(); 7417 view->close();
7412 } 7418 }
7413 7419
7420 class WebFrameOverscrollTest : public WebFrameTest {
7421 protected:
7422 WebGestureEvent generateEvent(WebInputEvent::Type type, int deltaX = 0, int deltaY = 0)
7423 {
7424 WebGestureEvent event;
7425 event.type = type;
7426 event.x = 100;
7427 event.y = 100;
7428 if (type == WebInputEvent::GestureScrollUpdate) {
7429 event.data.scrollUpdate.deltaX = deltaX;
7430 event.data.scrollUpdate.deltaY = deltaY;
7431 }
7432 return event;
7433 }
7434
7435 void ScrollBegin(FrameTestHelpers::WebViewHelper* webViewHelper)
7436 {
7437 webViewHelper->webViewImpl()->handleInputEvent(generateEvent(WebInputEve nt::GestureScrollBegin));
7438 }
7439
7440 void ScrollUpdate(FrameTestHelpers::WebViewHelper* webViewHelper, float delt aX, float deltaY)
7441 {
7442 webViewHelper->webViewImpl()->handleInputEvent(generateEvent(WebInputEve nt::GestureScrollUpdate, deltaX, deltaY));
7443 }
7444
7445 void ScrollEnd(FrameTestHelpers::WebViewHelper* webViewHelper)
7446 {
7447 webViewHelper->webViewImpl()->handleInputEvent(generateEvent(WebInputEve nt::GestureScrollEnd));
7448 }
7449 FloatSize AccumulatedRootOverscroll(FrameTestHelpers::WebViewHelper* webView Helper)
7450 {
7451 return webViewHelper->webViewImpl()->mainFrameImpl()->frame()->eventHand ler().accumulatedRootOverscrollForTesting();
7452 }
7453
7454 FloatSize UnusedDelta(FrameTestHelpers::WebViewHelper* webViewHelper)
7455 {
7456 return webViewHelper->webViewImpl()->mainFrameImpl()->frame()->eventHand ler().unusedDeltaForTesting();
7457 }
7458
7459 };
7460
7461 TEST_F(WebFrameOverscrollTest, AccumulatedRootOverscrollAndUnsedDeltaSetAndUnset )
7462 {
7463 FakeCompositingWebViewClient client;
7464 registerMockedHttpURLLoad("overscroll/overscroll.html");
7465 FrameTestHelpers::WebViewHelper webViewHelper;
7466 WebViewImpl* webViewImpl = webViewHelper.initializeAndLoad(m_baseURL + "over scroll/overscroll.html", true, 0, &client, configureAndroid);
7467 webViewImpl->layout();
7468
7469 // Resets accumulatedRootOverscroll and unusedDelta on scroll end.
7470 ScrollBegin(&webViewHelper);
7471 ScrollUpdate(&webViewHelper, 0, -13);
7472 ScrollEnd(&webViewHelper);
7473 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 0), UnusedDelta(&webViewHelper));
7474 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 0), AccumulatedRootOverscroll(&webViewHelp er));
7475
7476 // Calculation of accumulatedRootOverscroll and unusedDelta on Single scroll Update.
7477 ScrollBegin(&webViewHelper);
7478 ScrollUpdate(&webViewHelper, 0, -13);
7479 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 0), UnusedDelta(&webViewHelper));
7480 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 0), AccumulatedRootOverscroll(&webViewHelp er));
7481 ScrollEnd(&webViewHelper);
7482
7483 // Calculation of accumulatedRootOverscroll and unusedDelta on multiple scro llUpdate.
7484 ScrollBegin(&webViewHelper);
7485 ScrollUpdate(&webViewHelper, -400, -400);
7486 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 0), UnusedDelta(&webViewHelper));
7487 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 0), AccumulatedRootOverscroll(&webViewHelp er));
7488
7489 ScrollUpdate(&webViewHelper, 0, -13);
7490 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 13), UnusedDelta(&webViewHelper));
7491 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 13), AccumulatedRootOverscroll(&webViewHel per));
7492
7493 ScrollUpdate(&webViewHelper, -20, -13);
7494 EXPECT_FLOAT_SIZE_EQ(FloatSize(20, 13), UnusedDelta(&webViewHelper));
7495 EXPECT_FLOAT_SIZE_EQ(FloatSize(20, 26), AccumulatedRootOverscroll(&webViewHe lper));
7496
7497 ScrollUpdate(&webViewHelper, 0, 1);
7498 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 0), UnusedDelta(&webViewHelper));
7499 EXPECT_FLOAT_SIZE_EQ(FloatSize(20, 0), AccumulatedRootOverscroll(&webViewHel per));
7500
7501 ScrollUpdate(&webViewHelper, 1, 0);
7502 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 0), UnusedDelta(&webViewHelper));
7503 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 0), AccumulatedRootOverscroll(&webViewHelp er));
7504
7505 ScrollEnd(&webViewHelper);
7506 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 0), UnusedDelta(&webViewHelper));
7507 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 0), AccumulatedRootOverscroll(&webViewHelp er));
7508 }
7509
7510 TEST_F(WebFrameOverscrollTest, AccumulatedOverscrollAndUnusedDeltaReset)
7511 {
7512 FakeCompositingWebViewClient client;
7513 registerMockedHttpURLLoad("overscroll/div-overscroll.html");
7514 FrameTestHelpers::WebViewHelper webViewHelper;
7515 WebViewImpl* webViewImpl = webViewHelper.initializeAndLoad(m_baseURL + "over scroll/div-overscroll.html", true, 0, &client, configureAndroid);
7516 webViewImpl->layout();
7517
7518 ScrollBegin(&webViewHelper);
7519
7520 // Scroll the Div to the end.
7521 ScrollUpdate(&webViewHelper, 0, -316);
7522 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 0), UnusedDelta(&webViewHelper));
7523 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 0), AccumulatedRootOverscroll(&webViewHelp er));
7524
7525 // Now On Scrolling DIV, scroll is bubbled and root layer is over-scrolled.
7526 ScrollUpdate(&webViewHelper, 0, -50);
7527 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 50), UnusedDelta(&webViewHelper));
7528 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 50), AccumulatedRootOverscroll(&webViewHel per));
7529
7530 // Resets the Accumulated and unusedDelta on scrolling up.
7531 ScrollUpdate(&webViewHelper, 0, 1);
7532 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 0), UnusedDelta(&webViewHelper));
7533 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 0), AccumulatedRootOverscroll(&webViewHelp er));
7534
7535 ScrollUpdate(&webViewHelper, 0, -50);
7536 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 0), UnusedDelta(&webViewHelper));
7537 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 0), AccumulatedRootOverscroll(&webViewHelp er));
7538
7539 // Now On Scrolling DIV, scroll is bubbled and root layer is over-scrolled.
7540 ScrollUpdate(&webViewHelper, 0, -100);
7541 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 100), UnusedDelta(&webViewHelper));
7542 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 100), AccumulatedRootOverscroll(&webViewHe lper));
7543
7544 // Page scrolls vertically, but over-scrolls horizontally.
7545 ScrollUpdate(&webViewHelper, 100, 50);
7546 EXPECT_FLOAT_SIZE_EQ(FloatSize(-100, 0), UnusedDelta(&webViewHelper));
7547 EXPECT_FLOAT_SIZE_EQ(FloatSize(-100, 0), AccumulatedRootOverscroll(&webViewH elper));
7548
7549 ScrollUpdate(&webViewHelper, 0, -50);
7550 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 0), UnusedDelta(&webViewHelper));
7551 EXPECT_FLOAT_SIZE_EQ(FloatSize(-100, 0), AccumulatedRootOverscroll(&webViewH elper));
7552
7553 // Page scrolls horizontally, but over-scrolls vertically.
7554 ScrollUpdate(&webViewHelper, -100, -100);
7555 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 100), UnusedDelta(&webViewHelper));
7556 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 100), AccumulatedRootOverscroll(&webViewHe lper));
7557
7558 ScrollEnd(&webViewHelper);
7559 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 0), UnusedDelta(&webViewHelper));
7560 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 0), AccumulatedRootOverscroll(&webViewHelp er));
7561 }
7562
7563 TEST_F(WebFrameOverscrollTest, RootLayerOverscrolledOnInnerDivOverScroll)
7564 {
7565 FakeCompositingWebViewClient client;
7566 registerMockedHttpURLLoad("overscroll/div-overscroll.html");
7567 FrameTestHelpers::WebViewHelper webViewHelper;
7568 WebViewImpl* webViewImpl = webViewHelper.initializeAndLoad(m_baseURL + "over scroll/div-overscroll.html", true, 0, &client, configureAndroid);
7569 webViewImpl->layout();
7570
7571 ScrollBegin(&webViewHelper);
7572
7573 // Scroll the Div to the end.
7574 ScrollUpdate(&webViewHelper, 0, -316);
7575 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 0), UnusedDelta(&webViewHelper));
7576 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 0), AccumulatedRootOverscroll(&webViewHelp er));
7577
7578 // Now On Scrolling DIV, scroll is bubbled and root layer is over-scrolled.
7579 ScrollUpdate(&webViewHelper, 0, -50);
7580 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 50), UnusedDelta(&webViewHelper));
7581 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 50), AccumulatedRootOverscroll(&webViewHel per));
7582 }
7583
7584 TEST_F(WebFrameOverscrollTest, RootLayerOverscrolledOnInnerIFrameOverScroll)
7585 {
7586 FakeCompositingWebViewClient client;
7587 registerMockedHttpURLLoad("overscroll/iframe-overscroll.html");
7588 registerMockedHttpURLLoad("overscroll/scrollable-iframe.html");
7589 FrameTestHelpers::WebViewHelper webViewHelper;
7590 WebViewImpl* webViewImpl = webViewHelper.initializeAndLoad(m_baseURL + "over scroll/iframe-overscroll.html", true, 0, &client, configureAndroid);
7591 webViewImpl->layout();
7592
7593 ScrollBegin(&webViewHelper);
7594
7595 // Scroll the IFrame to the end.
7596 ScrollUpdate(&webViewHelper, 0, -320);
7597 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 0), UnusedDelta(&webViewHelper));
7598 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 0), AccumulatedRootOverscroll(&webViewHelp er));
7599
7600 // Now On Scrolling IFrame, scroll is bubbled and root layer is over-scrolle d.
7601 ScrollUpdate(&webViewHelper, 0, -50);
7602 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 50), UnusedDelta(&webViewHelper));
7603 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 50), AccumulatedRootOverscroll(&webViewHel per));
7604 }
7605
7606 TEST_F(WebFrameOverscrollTest, NoOverscrollOnNonScrollableaxes)
7607 {
7608 FakeCompositingWebViewClient client;
7609 registerMockedHttpURLLoad("overscroll/no-overscroll-on-nonscrollable-axes.ht ml");
7610 FrameTestHelpers::WebViewHelper webViewHelper;
7611 WebViewImpl* webViewImpl = webViewHelper.initializeAndLoad(m_baseURL + "over scroll/no-overscroll-on-nonscrollable-axes.html", true, 0, &client, configureAnd roid);
7612 webViewImpl->layout();
7613
7614 // Overscroll is not reported in all the directions.
7615 ScrollBegin(&webViewHelper);
7616 ScrollUpdate(&webViewHelper, 0, -1);
7617 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 0), UnusedDelta(&webViewHelper));
7618 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 0), AccumulatedRootOverscroll(&webViewHelp er));
7619
7620 ScrollUpdate(&webViewHelper, 0, 1);
7621 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 0), UnusedDelta(&webViewHelper));
7622 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 0), AccumulatedRootOverscroll(&webViewHelp er));
7623
7624 ScrollUpdate(&webViewHelper, 1, 0);
7625 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 0), UnusedDelta(&webViewHelper));
7626 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 0), AccumulatedRootOverscroll(&webViewHelp er));
7627
7628 ScrollUpdate(&webViewHelper, -1, 0);
7629 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 0), UnusedDelta(&webViewHelper));
7630 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 0), AccumulatedRootOverscroll(&webViewHelp er));
7631
7632 ScrollUpdate(&webViewHelper, 1, 1);
7633 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 0), UnusedDelta(&webViewHelper));
7634 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 0), AccumulatedRootOverscroll(&webViewHelp er));
7635
7636 ScrollUpdate(&webViewHelper, -1, 1);
7637 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 0), UnusedDelta(&webViewHelper));
7638 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 0), AccumulatedRootOverscroll(&webViewHelp er));
7639
7640 ScrollUpdate(&webViewHelper, 1, -1);
7641 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 0), UnusedDelta(&webViewHelper));
7642 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 0), AccumulatedRootOverscroll(&webViewHelp er));
7643
7644 ScrollUpdate(&webViewHelper, -1, -1);
7645 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 0), UnusedDelta(&webViewHelper));
7646 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 0), AccumulatedRootOverscroll(&webViewHelp er));
7647
7648 ScrollEnd(&webViewHelper);
7649 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 0), UnusedDelta(&webViewHelper));
7650 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 0), AccumulatedRootOverscroll(&webViewHelp er));
7651 }
7652
7653 TEST_F(WebFrameOverscrollTest, ScaledPageRootLayerOverscrolled)
7654 {
7655 FakeCompositingWebViewClient client;
7656 registerMockedHttpURLLoad("overscroll/overscroll.html");
7657 FrameTestHelpers::WebViewHelper webViewHelper;
7658 WebViewImpl* webViewImpl = webViewHelper.initializeAndLoad(m_baseURL + "over scroll/overscroll.html", true, 0, &client, configureAndroid);
7659 webViewImpl->setPageScaleFactor(3.f);
7660 webViewImpl->layout();
7661
7662 // Calculation of accumulatedRootOverscroll and unusedDelta on scaled page.
7663 ScrollBegin(&webViewHelper);
7664 ScrollUpdate(&webViewHelper, 0, 30);
7665 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, -10), UnusedDelta(&webViewHelper));
7666 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, -10), AccumulatedRootOverscroll(&webViewHe lper));
7667
7668 ScrollUpdate(&webViewHelper, 0, 30);
7669 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, -10), UnusedDelta(&webViewHelper));
7670 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, -20), AccumulatedRootOverscroll(&webViewHe lper));
7671
7672 ScrollUpdate(&webViewHelper, 30, 30);
7673 EXPECT_FLOAT_SIZE_EQ(FloatSize(-10, -10), UnusedDelta(&webViewHelper));
7674 EXPECT_FLOAT_SIZE_EQ(FloatSize(-10, -30), AccumulatedRootOverscroll(&webView Helper));
7675
7676 ScrollUpdate(&webViewHelper, 30, 0);
7677 EXPECT_FLOAT_SIZE_EQ(FloatSize(-10, 0), UnusedDelta(&webViewHelper));
7678 EXPECT_FLOAT_SIZE_EQ(FloatSize(-20, -30), AccumulatedRootOverscroll(&webView Helper));
7679
7680 ScrollEnd(&webViewHelper);
7681 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 0), UnusedDelta(&webViewHelper));
7682 EXPECT_FLOAT_SIZE_EQ(FloatSize(0, 0), AccumulatedRootOverscroll(&webViewHelp er));
7683 }
7684
7414 } // namespace blink 7685 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698