| Index: Source/web/tests/WebFrameTest.cpp
|
| diff --git a/Source/web/tests/WebFrameTest.cpp b/Source/web/tests/WebFrameTest.cpp
|
| index d174a6ec5bcff68719b4a7c71f89ddc20f2f823b..ab606a8bf0fcdbde9082fa99429792e173ca4378 100644
|
| --- a/Source/web/tests/WebFrameTest.cpp
|
| +++ b/Source/web/tests/WebFrameTest.cpp
|
| @@ -2750,6 +2750,62 @@ TEST_F(WebFrameTest, DivScrollIntoEditableTest)
|
| EXPECT_FALSE(needAnimation);
|
| }
|
|
|
| +TEST_F(WebFrameTest, DivScrollIntoEditablePreservePageScaleTest)
|
| +{
|
| + registerMockedHttpURLLoad("get_scale_for_zoom_into_editable_test.html");
|
| +
|
| + const int viewportWidth = 450;
|
| + const int viewportHeight = 300;
|
| + const float minReadableCaretHeight = 18.0f;
|
| + FrameTestHelpers::WebViewHelper webViewHelper;
|
| + webViewHelper.initializeAndLoad(m_baseURL + "get_scale_for_zoom_into_editable_test.html");
|
| + webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight));
|
| + webViewHelper.webView()->setPageScaleFactorLimits(1, 4);
|
| + webViewHelper.webView()->layout();
|
| + webViewHelper.webView()->setDeviceScaleFactor(1.5f);
|
| + webViewHelper.webView()->settings()->setAutoZoomFocusedNodeToLegibleScale(true);
|
| + webViewHelper.webViewImpl()->enableFakePageScaleAnimationForTesting(true);
|
| +
|
| + const WebRect editBoxWithText(200, 200, 250, 20);
|
| +
|
| + webViewHelper.webView()->advanceFocus(false);
|
| + // Set the caret to the begining of the input box.
|
| + webViewHelper.webView()->mainFrame()->document().getElementById("EditBoxWithText").to<WebInputElement>().setSelectionRange(0, 0);
|
| + setScaleAndScrollAndLayout(webViewHelper.webView(), WebPoint(0, 0), 1);
|
| + WebRect rect, caret;
|
| + webViewHelper.webViewImpl()->selectionBounds(caret, rect);
|
| +
|
| + // Set page scale twice larger then minimal readable scale
|
| + float newScale = minReadableCaretHeight / caret.height * 2.0;
|
| + setScaleAndScrollAndLayout(webViewHelper.webView(), WebPoint(0, 0), newScale);
|
| +
|
| + float scale;
|
| + IntPoint scroll;
|
| + bool needAnimation;
|
| + webViewHelper.webViewImpl()->computeScaleAndScrollForFocusedNode(webViewHelper.webViewImpl()->focusedElement(), scale, scroll, needAnimation);
|
| + EXPECT_TRUE(needAnimation);
|
| + // Edit box and caret should be left alinged
|
| + int hScroll = editBoxWithText.x;
|
| + EXPECT_NEAR(hScroll, scroll.x(), 1);
|
| + int vScroll = editBoxWithText.y - (viewportHeight / scale - editBoxWithText.height) / 2;
|
| + EXPECT_NEAR(vScroll, scroll.y(), 1);
|
| + // Page scale have to be unchanged
|
| + EXPECT_EQ(newScale, scale);
|
| +
|
| + // Set page scale and scroll such that edit box will be under the screen
|
| + newScale = 3.0;
|
| + hScroll = 200;
|
| + setScaleAndScrollAndLayout(webViewHelper.webView(), WebPoint(hScroll, 0), newScale);
|
| + webViewHelper.webViewImpl()->computeScaleAndScrollForFocusedNode(webViewHelper.webViewImpl()->focusedElement(), scale, scroll, needAnimation);
|
| + EXPECT_TRUE(needAnimation);
|
| + // Horizontal scroll have to be the same
|
| + EXPECT_NEAR(hScroll, scroll.x(), 1);
|
| + vScroll = editBoxWithText.y - (viewportHeight / scale - editBoxWithText.height) / 2;
|
| + EXPECT_NEAR(vScroll, scroll.y(), 1);
|
| + // Page scale have to be unchanged
|
| + EXPECT_EQ(newScale, scale);
|
| +}
|
| +
|
| class TestReloadDoesntRedirectWebFrameClient : public FrameTestHelpers::TestWebFrameClient {
|
| public:
|
| virtual WebNavigationPolicy decidePolicyForNavigation(const NavigationPolicyInfo& info) OVERRIDE
|
|
|