Index: Source/web/tests/WebFrameTest.cpp |
diff --git a/Source/web/tests/WebFrameTest.cpp b/Source/web/tests/WebFrameTest.cpp |
index 4351904cb1b84dd03fb324d86810f34742c2a423..76554b0ae90e028ed6745674e5075eba62be3e8d 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; |
@@ -7411,4 +7410,129 @@ 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_EQ(unUsedWidth, unUsedDelta.width()); |
+ EXPECT_EQ(unUsedHeight, unUsedDelta.height()); |
+ EXPECT_EQ(accumulatedWidth, accumulatedRootOverscroll.width()); |
+ EXPECT_EQ(accumulatedHeight, accumulatedRootOverscroll.height()); |
+ } |
+}; |
+ |
+TEST_F(WebFrameOverscrollTest, AccumulatedRootOverscrollAndUnsedDeltaSetAndUnset) |
+{ |
+ FakeCompositingWebViewClient client; |
+ registerMockedHttpURLLoad("mainthread-scrolling.html"); |
+ FrameTestHelpers::WebViewHelper webViewHelper; |
+ WebViewImpl* webViewImpl = webViewHelper.initializeAndLoad(m_baseURL + "mainthread-scrolling.html", true, 0, &client, configureAndroid); |
+ webViewImpl->layout(); |
+ |
+ ScrollBegin(&webViewHelper); |
+ |
+ ScrollUpdate(&webViewHelper, 0, -13); |
+ CompareUnusedDeltaAndAccumulatedRootOverscroll(&webViewHelper, 0, 13, 0, 13); |
+ |
+ ScrollUpdate(&webViewHelper, 0, -13); |
+ CompareUnusedDeltaAndAccumulatedRootOverscroll(&webViewHelper, 0, 13, 0, 26); |
+ |
+ ScrollUpdate(&webViewHelper, -20, -13); |
+ CompareUnusedDeltaAndAccumulatedRootOverscroll(&webViewHelper, 20, 13, 20, 39); |
+ |
+ ScrollEnd(&webViewHelper); |
+ CompareUnusedDeltaAndAccumulatedRootOverscroll(&webViewHelper, 0, 0, 0, 0); |
+ |
+ ScrollBegin(&webViewHelper); |
+ ScrollUpdate(&webViewHelper, 0, -13); |
+ ScrollEnd(&webViewHelper); |
+ CompareUnusedDeltaAndAccumulatedRootOverscroll(&webViewHelper, 0, 0, 0, 0); |
+ |
+ ScrollBegin(&webViewHelper); |
+ ScrollUpdate(&webViewHelper, 0, -13); |
+ CompareUnusedDeltaAndAccumulatedRootOverscroll(&webViewHelper, 0, 13, 0, 13); |
+} |
+ |
+TEST_F(WebFrameOverscrollTest, RootLayerOverscrolledOnInnerDivOverScroll) |
+{ |
+ FakeCompositingWebViewClient client; |
+ registerMockedHttpURLLoad("mainthread-inner-div-overscroll.html"); |
+ FrameTestHelpers::WebViewHelper webViewHelper; |
+ WebViewImpl* webViewImpl = webViewHelper.initializeAndLoad(m_baseURL + "mainthread-inner-div-overscroll.html", true, 0, &client, configureAndroid); |
+ webViewImpl->layout(); |
+ |
+ ScrollBegin(&webViewHelper); |
+ |
+ ScrollUpdate(&webViewHelper, 0, 13); |
+ CompareUnusedDeltaAndAccumulatedRootOverscroll(&webViewHelper, 0, -13, 0, -13); |
+ |
+ ScrollUpdate(&webViewHelper, 0, 13); |
+ CompareUnusedDeltaAndAccumulatedRootOverscroll(&webViewHelper, 0, -13, 0, -26); |
+ |
+ ScrollUpdate(&webViewHelper, 13, 13); |
+ CompareUnusedDeltaAndAccumulatedRootOverscroll(&webViewHelper, -13, -13, -13, -39); |
+ |
+ ScrollUpdate(&webViewHelper, 13, 0); |
+ CompareUnusedDeltaAndAccumulatedRootOverscroll(&webViewHelper, -13, 0, -26, -39); |
+ |
+ ScrollEnd(&webViewHelper); |
+ CompareUnusedDeltaAndAccumulatedRootOverscroll(&webViewHelper, 0, 0, 0, 0); |
+} |
+ |
+TEST_F(WebFrameOverscrollTest, RootLayerOverscrolledOnInnerIFrameOverScroll) |
+{ |
+ FakeCompositingWebViewClient client; |
+ registerMockedHttpURLLoad("mainthread-inner-iframe-overscroll.html"); |
+ FrameTestHelpers::WebViewHelper webViewHelper; |
+ WebViewImpl* webViewImpl = webViewHelper.initializeAndLoad(m_baseURL + "mainthread-inner-iframe-overscroll.html", true, 0, &client, configureAndroid); |
+ webViewImpl->layout(); |
+ |
+ ScrollBegin(&webViewHelper); |
+ |
+ ScrollUpdate(&webViewHelper, 0, 13); |
+ CompareUnusedDeltaAndAccumulatedRootOverscroll(&webViewHelper, 0, -13, 0, -13); |
+ |
+ ScrollUpdate(&webViewHelper, 0, 13); |
+ CompareUnusedDeltaAndAccumulatedRootOverscroll(&webViewHelper, 0, -13, 0, -26); |
+ |
+ ScrollUpdate(&webViewHelper, 13, 13); |
+ CompareUnusedDeltaAndAccumulatedRootOverscroll(&webViewHelper, -13, -13, -13, -39); |
+ |
+ ScrollUpdate(&webViewHelper, 13, 0); |
+ CompareUnusedDeltaAndAccumulatedRootOverscroll(&webViewHelper, -13, 0, -26, -39); |
+ |
+ ScrollEnd(&webViewHelper); |
+ CompareUnusedDeltaAndAccumulatedRootOverscroll(&webViewHelper, 0, 0, 0, 0); |
+} |
+ |
} // namespace blink |