Chromium Code Reviews| Index: Source/web/tests/WebFrameTest.cpp |
| diff --git a/Source/web/tests/WebFrameTest.cpp b/Source/web/tests/WebFrameTest.cpp |
| index a9b8a62910172d7c6ce7b7f96546b23979721e0e..4918cacdc04df3c42270f8e39b81c858125e80e6 100644 |
| --- a/Source/web/tests/WebFrameTest.cpp |
| +++ b/Source/web/tests/WebFrameTest.cpp |
| @@ -236,7 +236,6 @@ protected: |
| Element* element = frame->document()->getElementById(testcase.c_str()); |
| return frame->nodeImage(*element); |
| } |
| - |
| std::string m_baseURL; |
| std::string m_notBaseURL; |
| std::string m_chromeURL; |
| @@ -7341,4 +7340,146 @@ TEST_F(WebFrameTest, CreateLocalChildWithPreviousSibling) |
| view->close(); |
| } |
| +class WebFrameOverscrollTest : public WebFrameTest { |
| +protected: |
| + WebGestureEvent generateEvent(WebInputEvent::Type type, int deltaX = 0, int deltaY = 0) |
| + { |
| + WebGestureEvent event; |
| + event.type = type; |
| + event.x = 100; |
| + event.y = 100; |
| + if (type == WebInputEvent::GestureScrollUpdate) { |
| + event.data.scrollUpdate.deltaX = deltaX; |
| + event.data.scrollUpdate.deltaY = deltaY; |
| + } |
| + return event; |
| + } |
| + |
| + void ScrollBegin(FrameTestHelpers::WebViewHelper* webViewHelper) |
| + { |
| + webViewHelper->webViewImpl()->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin)); |
| + } |
| + |
| + void ScrollUpdate(FrameTestHelpers::WebViewHelper* webViewHelper, float deltaX, float deltaY) |
| + { |
| + webViewHelper->webViewImpl()->handleInputEvent(generateEvent(WebInputEvent::GestureScrollUpdate, deltaX, deltaY)); |
| + } |
| + |
| + void ScrollEnd(FrameTestHelpers::WebViewHelper* webViewHelper) |
| + { |
| + webViewHelper->webViewImpl()->handleInputEvent(generateEvent(WebInputEvent::GestureScrollEnd)); |
| + } |
| + |
| + void CompareUnusedDeltaAndAccumulatedRootOverscroll(FrameTestHelpers::WebViewHelper* webViewHelper, float unUsedWidth, float unUsedHeight, float accumulatedWidth, float accumulatedHeight) |
| + { |
| + FloatSize unUsedDelta = webViewHelper->webViewImpl()->mainFrameImpl()->frame()->eventHandler().unusedDeltaForTesting(); |
| + FloatSize accumulatedRootOverscroll = webViewHelper->webViewImpl()->mainFrameImpl()->frame()->eventHandler().accumulatedRootOverscrollForTesting(); |
| + EXPECT_FLOAT_EQ(unUsedWidth, unUsedDelta.width()); |
| + EXPECT_FLOAT_EQ(unUsedHeight, unUsedDelta.height()); |
| + EXPECT_FLOAT_EQ(accumulatedWidth, accumulatedRootOverscroll.width()); |
| + EXPECT_FLOAT_EQ(accumulatedHeight, accumulatedRootOverscroll.height()); |
| + } |
| +}; |
| + |
| +TEST_F(WebFrameOverscrollTest, AccumulatedRootOverscrollAndUnsedDeltaSetAndUnset) |
| +{ |
| + FakeCompositingWebViewClient client; |
| + registerMockedHttpURLLoad("overscroll/overscroll.html"); |
| + FrameTestHelpers::WebViewHelper webViewHelper; |
| + WebViewImpl* webViewImpl = webViewHelper.initializeAndLoad(m_baseURL + "overscroll/overscroll.html", true, 0, &client, configureAndroid); |
| + webViewImpl->layout(); |
| + |
| + // Resets accumulatedRootOverscroll and unusedDelta on scroll end. |
| + ScrollBegin(&webViewHelper); |
| + ScrollUpdate(&webViewHelper, 0, -13); |
| + ScrollEnd(&webViewHelper); |
| + CompareUnusedDeltaAndAccumulatedRootOverscroll(&webViewHelper, 0, 0, 0, 0); |
| + |
| + // Calculation of accumulatedRootOverscroll and unusedDelta on Single scrollUpdate. |
| + ScrollBegin(&webViewHelper); |
| + ScrollUpdate(&webViewHelper, 0, -13); |
| + CompareUnusedDeltaAndAccumulatedRootOverscroll(&webViewHelper, 0, 13, 0, 13); |
| + ScrollEnd(&webViewHelper); |
| + |
| + // Calculation of accumulatedRootOverscroll and unusedDelta on multiple scrollUpdate. |
| + ScrollBegin(&webViewHelper); |
| + ScrollUpdate(&webViewHelper, 0, -13); |
| + CompareUnusedDeltaAndAccumulatedRootOverscroll(&webViewHelper, 0, 13, 0, 13); |
| + ScrollUpdate(&webViewHelper, -20, -13); |
| + CompareUnusedDeltaAndAccumulatedRootOverscroll(&webViewHelper, 20, 13, 20, 26); |
|
majidvp
2015/05/28 20:30:46
To test reset logic in middle of a single gesture
MuVen
2015/05/29 09:37:15
Done.
|
| + ScrollUpdate(&webViewHelper, -20, 0); |
| + CompareUnusedDeltaAndAccumulatedRootOverscroll(&webViewHelper, 20, 0, 40, 26); |
| + ScrollEnd(&webViewHelper); |
| + CompareUnusedDeltaAndAccumulatedRootOverscroll(&webViewHelper, 0, 0, 0, 0); |
| +} |
| + |
| +TEST_F(WebFrameOverscrollTest, RootLayerOverscrolledOnInnerDivOverScroll) |
| +{ |
| + FakeCompositingWebViewClient client; |
| + registerMockedHttpURLLoad("overscroll/div-overscroll.html"); |
| + FrameTestHelpers::WebViewHelper webViewHelper; |
| + WebViewImpl* webViewImpl = webViewHelper.initializeAndLoad(m_baseURL + "overscroll/div-overscroll.html", true, 0, &client, configureAndroid); |
| + webViewImpl->layout(); |
| + |
| + ScrollBegin(&webViewHelper); |
| + |
| + // Scroll the Div to the end. |
| + ScrollUpdate(&webViewHelper, 0, -316); |
| + CompareUnusedDeltaAndAccumulatedRootOverscroll(&webViewHelper, 0, 0, 0, 0); |
| + |
| + // Now On Scrolling DIV, scroll is bubbled and root layer is over-scrolled. |
| + ScrollUpdate(&webViewHelper, 0, -50); |
| + CompareUnusedDeltaAndAccumulatedRootOverscroll(&webViewHelper, 0, 50, 0, 50); |
| + |
| + ScrollEnd(&webViewHelper); |
| + CompareUnusedDeltaAndAccumulatedRootOverscroll(&webViewHelper, 0, 0, 0, 0); |
| +} |
| + |
| +TEST_F(WebFrameOverscrollTest, RootLayerOverscrolledOnInnerIFrameOverScroll) |
| +{ |
| + FakeCompositingWebViewClient client; |
| + registerMockedHttpURLLoad("overscroll/iframe-overscroll.html"); |
| + registerMockedHttpURLLoad("overscroll/scrollable-iframe.html"); |
| + FrameTestHelpers::WebViewHelper webViewHelper; |
| + WebViewImpl* webViewImpl = webViewHelper.initializeAndLoad(m_baseURL + "overscroll/iframe-overscroll.html", true, 0, &client, configureAndroid); |
| + webViewImpl->layout(); |
| + |
| + ScrollBegin(&webViewHelper); |
| + |
| + // Scroll the IFrame to the end. |
| + ScrollUpdate(&webViewHelper, 0, -320); |
| + CompareUnusedDeltaAndAccumulatedRootOverscroll(&webViewHelper, 0, 0, 0, 0); |
| + |
| + // Now On Scrolling IFrame, scroll is bubbled and root layer is over-scrolled. |
| + ScrollUpdate(&webViewHelper, 0, -50); |
| + CompareUnusedDeltaAndAccumulatedRootOverscroll(&webViewHelper, 0, 50, 0, 50); |
| +} |
| + |
| +TEST_F(WebFrameOverscrollTest, ScaledPageRootLayerOverscrolled) |
| +{ |
| + FakeCompositingWebViewClient client; |
| + registerMockedHttpURLLoad("overscroll/overscroll.html"); |
| + FrameTestHelpers::WebViewHelper webViewHelper; |
| + WebViewImpl* webViewImpl = webViewHelper.initializeAndLoad(m_baseURL + "overscroll/overscroll.html", true, 0, &client, configureAndroid); |
| + webViewImpl->setPageScaleFactor(3.f); |
| + webViewImpl->layout(); |
| + |
| + // Calculation of accumulatedRootOverscroll and unusedDelta on scaled page. |
| + ScrollBegin(&webViewHelper); |
| + ScrollUpdate(&webViewHelper, 0, 30); |
| + CompareUnusedDeltaAndAccumulatedRootOverscroll(&webViewHelper, 0, -10, 0, -10); |
| + |
| + ScrollUpdate(&webViewHelper, 0, 30); |
| + CompareUnusedDeltaAndAccumulatedRootOverscroll(&webViewHelper, 0, -10, 0, -20); |
| + |
| + ScrollUpdate(&webViewHelper, 30, 30); |
| + CompareUnusedDeltaAndAccumulatedRootOverscroll(&webViewHelper, -10, -10, -10, -30); |
| + |
| + ScrollUpdate(&webViewHelper, 30, 0); |
| + CompareUnusedDeltaAndAccumulatedRootOverscroll(&webViewHelper, -10, 0, -20, -30); |
| + |
| + ScrollEnd(&webViewHelper); |
| + CompareUnusedDeltaAndAccumulatedRootOverscroll(&webViewHelper, 0, 0, 0, 0); |
| +} |
| + |
| } // namespace blink |