Index: Source/web/tests/WebFrameTest.cpp |
diff --git a/Source/web/tests/WebFrameTest.cpp b/Source/web/tests/WebFrameTest.cpp |
index 5a07739bca5fa37141c2a6de3287e96a0ab60a76..495821d2ba701bfcf4c32573d6da8525c067c090 100644 |
--- a/Source/web/tests/WebFrameTest.cpp |
+++ b/Source/web/tests/WebFrameTest.cpp |
@@ -2871,13 +2871,14 @@ TEST_F(WebFrameTest, DivScrollIntoEditableTest) |
int viewportHeight = 300; |
float leftBoxRatio = 0.3f; |
int caretPadding = 10; |
- float minReadableCaretHeight = 18.0f; |
+ float minReadableCaretHeight = 16.0f; |
FrameTestHelpers::WebViewHelper webViewHelper; |
webViewHelper.initializeAndLoad(m_baseURL + "get_scale_for_zoom_into_editable_test.html"); |
+ webViewHelper.webViewImpl()->page()->settings().setTextAutosizingEnabled(false); |
webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight)); |
- webViewHelper.webView()->setPageScaleFactorLimits(1, 4); |
- webViewHelper.webView()->layout(); |
+ webViewHelper.webView()->setPageScaleFactorLimits(0.25f, 4); |
webViewHelper.webView()->setDeviceScaleFactor(1.5f); |
+ webViewHelper.webView()->layout(); |
webViewHelper.webView()->settings()->setAutoZoomFocusedNodeToLegibleScale(true); |
webViewHelper.webViewImpl()->enableFakePageScaleAnimationForTesting(true); |
@@ -2894,6 +2895,10 @@ TEST_F(WebFrameTest, DivScrollIntoEditableTest) |
WebRect rect, caret; |
webViewHelper.webViewImpl()->selectionBounds(caret, rect); |
+ // Set the page scale to be smaller than the minimal readable scale. |
+ float initialScale = minReadableCaretHeight / caret.height * 0.5f; |
+ setScaleAndScrollAndLayout(webViewHelper.webView(), WebPoint(0, 0), initialScale); |
+ |
float scale; |
IntPoint scroll; |
bool needAnimation; |
@@ -2901,43 +2906,44 @@ TEST_F(WebFrameTest, DivScrollIntoEditableTest) |
EXPECT_TRUE(needAnimation); |
// The edit box should be left aligned with a margin for possible label. |
int hScroll = editBoxWithText.x - leftBoxRatio * viewportWidth / scale; |
- EXPECT_NEAR(hScroll, scroll.x(), 5); |
+ EXPECT_NEAR(hScroll, scroll.x(), 2); |
int vScroll = editBoxWithText.y - (viewportHeight / scale - editBoxWithText.height) / 2; |
- EXPECT_NEAR(vScroll, scroll.y(), 1); |
+ EXPECT_NEAR(vScroll, scroll.y(), 2); |
EXPECT_NEAR(minReadableCaretHeight / caret.height, scale, 0.1); |
// The edit box is wider than the viewport when legible. |
viewportWidth = 200; |
viewportHeight = 150; |
webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight)); |
- setScaleAndScrollAndLayout(webViewHelper.webView(), WebPoint(0, 0), 1); |
- webViewHelper.webViewImpl()->selectionBounds(caret, rect); |
+ setScaleAndScrollAndLayout(webViewHelper.webView(), WebPoint(0, 0), initialScale); |
webViewHelper.webViewImpl()->computeScaleAndScrollForFocusedNode(webViewHelper.webViewImpl()->focusedElement(), scale, scroll, needAnimation); |
EXPECT_TRUE(needAnimation); |
// The caret should be right aligned since the caret would be offscreen when the edit box is left aligned. |
hScroll = caret.x + caret.width + caretPadding - viewportWidth / scale; |
- EXPECT_NEAR(hScroll, scroll.x(), 1); |
+ EXPECT_NEAR(hScroll, scroll.x(), 2); |
EXPECT_NEAR(minReadableCaretHeight / caret.height, scale, 0.1); |
- setScaleAndScrollAndLayout(webViewHelper.webView(), WebPoint(0, 0), 1); |
+ setScaleAndScrollAndLayout(webViewHelper.webView(), WebPoint(0, 0), initialScale); |
// Move focus to edit box with text. |
webViewHelper.webView()->advanceFocus(false); |
- webViewHelper.webViewImpl()->selectionBounds(caret, rect); |
webViewHelper.webViewImpl()->computeScaleAndScrollForFocusedNode(webViewHelper.webViewImpl()->focusedElement(), scale, scroll, needAnimation); |
EXPECT_TRUE(needAnimation); |
// The edit box should be left aligned. |
hScroll = editBoxWithNoText.x; |
- EXPECT_NEAR(hScroll, scroll.x(), 1); |
+ EXPECT_NEAR(hScroll, scroll.x(), 2); |
vScroll = editBoxWithNoText.y - (viewportHeight / scale - editBoxWithNoText.height) / 2; |
- EXPECT_NEAR(vScroll, scroll.y(), 1); |
+ EXPECT_NEAR(vScroll, scroll.y(), 2); |
EXPECT_NEAR(minReadableCaretHeight / caret.height, scale, 0.1); |
- setScaleAndScrollAndLayout(webViewHelper.webViewImpl(), scroll, scale); |
- |
// Move focus back to the first edit box. |
webViewHelper.webView()->advanceFocus(true); |
+ // Zoom out slightly. |
+ const float withinToleranceScale = scale * 0.9f; |
+ setScaleAndScrollAndLayout(webViewHelper.webViewImpl(), scroll, withinToleranceScale); |
+ // Move focus back to the second edit box. |
+ webViewHelper.webView()->advanceFocus(false); |
webViewHelper.webViewImpl()->computeScaleAndScrollForFocusedNode(webViewHelper.webViewImpl()->focusedElement(), scale, scroll, needAnimation); |
- // The position should have stayed the same since this box was already on screen with the right scale. |
+ // The scale should not be adjusted as the zoomed out scale was sufficiently close to the previously focused scale. |
EXPECT_FALSE(needAnimation); |
} |
@@ -2947,13 +2953,14 @@ TEST_F(WebFrameTest, DivScrollIntoEditablePreservePageScaleTest) |
const int viewportWidth = 450; |
const int viewportHeight = 300; |
- const float minReadableCaretHeight = 18.0f; |
+ const float minReadableCaretHeight = 16.0f; |
FrameTestHelpers::WebViewHelper webViewHelper; |
webViewHelper.initializeAndLoad(m_baseURL + "get_scale_for_zoom_into_editable_test.html"); |
+ webViewHelper.webViewImpl()->page()->settings().setTextAutosizingEnabled(false); |
webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight)); |
- webViewHelper.webView()->setPageScaleFactorLimits(1, 4); |
- webViewHelper.webView()->layout(); |
+ webViewHelper.webView()->setPageScaleFactorLimits(1.f, 4); |
webViewHelper.webView()->setDeviceScaleFactor(1.5f); |
+ webViewHelper.webView()->layout(); |
webViewHelper.webView()->settings()->setAutoZoomFocusedNodeToLegibleScale(true); |
webViewHelper.webViewImpl()->enableFakePageScaleAnimationForTesting(true); |
@@ -2966,7 +2973,7 @@ TEST_F(WebFrameTest, DivScrollIntoEditablePreservePageScaleTest) |
WebRect rect, caret; |
webViewHelper.webViewImpl()->selectionBounds(caret, rect); |
- // Set page scale twice larger then minimal readable scale |
+ // Set the page scale to be twice as large as the minimal readable scale. |
float newScale = minReadableCaretHeight / caret.height * 2.0; |
setScaleAndScrollAndLayout(webViewHelper.webView(), WebPoint(0, 0), newScale); |