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

Side by Side Diff: Source/WebKit/chromium/tests/WebFrameTest.cpp

Issue 19281007: Allow zoom-in to a target rect when tapping multiple targets. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 7 years, 4 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
« no previous file with comments | « no previous file | Source/web/WebViewImpl.h » ('j') | Source/web/WebViewImpl.h » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 using namespace WebKit; 85 using namespace WebKit;
86 using WebCore::Document; 86 using WebCore::Document;
87 using WebCore::DocumentMarker; 87 using WebCore::DocumentMarker;
88 using WebCore::Element; 88 using WebCore::Element;
89 using WebCore::FloatRect; 89 using WebCore::FloatRect;
90 using WebCore::HitTestRequest; 90 using WebCore::HitTestRequest;
91 using WebCore::Range; 91 using WebCore::Range;
92 using WebKit::URLTestHelpers::toKURL; 92 using WebKit::URLTestHelpers::toKURL;
93 using WebKit::FrameTestHelpers::runPendingTasks; 93 using WebKit::FrameTestHelpers::runPendingTasks;
94 94
95 static const int touchPointPadding = 32;
jochen (gone - plz use gerrit) 2013/07/30 06:41:11 nit you can just move this into the anonymous name
96
95 namespace { 97 namespace {
96 98
97 #define EXPECT_EQ_RECT(a, b) \ 99 #define EXPECT_EQ_RECT(a, b) \
98 EXPECT_EQ(a.x(), b.x()); \ 100 EXPECT_EQ(a.x(), b.x()); \
99 EXPECT_EQ(a.y(), b.y()); \ 101 EXPECT_EQ(a.y(), b.y()); \
100 EXPECT_EQ(a.width(), b.width()); \ 102 EXPECT_EQ(a.width(), b.width()); \
101 EXPECT_EQ(a.height(), b.height()); 103 EXPECT_EQ(a.height(), b.height());
102 104
103 class FakeWebFrameClient : public WebFrameClient { 105 class FakeWebFrameClient : public WebFrameClient {
104 // To make the destructor public. 106 // To make the destructor public.
(...skipping 1056 matching lines...) Expand 10 before | Expand all | Expand 10 after
1161 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "get_scale_fo r_auto_zoom_into_div_test.html"); // 1163 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "get_scale_fo r_auto_zoom_into_div_test.html"); //
1162 m_webView->setDeviceScaleFactor(deviceScaleFactor); 1164 m_webView->setDeviceScaleFactor(deviceScaleFactor);
1163 m_webView->setPageScaleFactorLimits(0.01f, 4); 1165 m_webView->setPageScaleFactorLimits(0.01f, 4);
1164 m_webView->setPageScaleFactor(0.5f, WebPoint(0, 0)); 1166 m_webView->setPageScaleFactor(0.5f, WebPoint(0, 0));
1165 m_webView->resize(WebSize(viewportWidth, viewportHeight)); 1167 m_webView->resize(WebSize(viewportWidth, viewportHeight));
1166 m_webView->enableFixedLayoutMode(true); 1168 m_webView->enableFixedLayoutMode(true);
1167 m_webView->layout(); 1169 m_webView->layout();
1168 1170
1169 WebRect wideDiv(200, 100, 400, 150); 1171 WebRect wideDiv(200, 100, 400, 150);
1170 WebRect tallDiv(200, 300, 400, 800); 1172 WebRect tallDiv(200, 300, 400, 800);
1171 WebRect doubleTapPointWide(wideDiv.x + 50, wideDiv.y + 50, 0, 0); 1173 WebRect doubleTapPointWide(
1172 WebRect doubleTapPointTall(tallDiv.x + 50, tallDiv.y + 50, 0, 0); 1174 wideDiv.x + 50, wideDiv.y + 50, touchPointPadding, touchPointPadding);
1175 WebRect doubleTapPointTall(
1176 tallDiv.x + 50, tallDiv.y + 50, touchPointPadding, touchPointPadding);
1177 WebRect wideBlockBounds;
1178 WebRect tallBlockBounds;
1173 float scale; 1179 float scale;
1174 WebPoint scroll; 1180 WebPoint scroll;
1175 bool isAnchor; 1181 bool doubleTapShouldZoomOut;
1176 1182
1177 WebViewImpl* webViewImpl = static_cast<WebViewImpl*>(m_webView); 1183 WebViewImpl* webViewImpl = static_cast<WebViewImpl*>(m_webView);
1178 // Test double-tap zooming into wide div. 1184 // Test double-tap zooming into wide div.
1179 webViewImpl->computeScaleAndScrollForHitRect(doubleTapPointWide, WebViewImpl ::DoubleTap, scale, scroll, isAnchor); 1185 wideBlockBounds =
1186 webViewImpl->computeBlockBounds(doubleTapPointWide, false);
1187 webViewImpl->computeScaleAndScrollForBlockRect(
1188 wideBlockBounds, touchPointPadding, scale, scroll,
1189 doubleTapShouldZoomOut);
1180 // The div should horizontally fill the screen (modulo margins), and 1190 // The div should horizontally fill the screen (modulo margins), and
1181 // vertically centered (modulo integer rounding). 1191 // vertically centered (modulo integer rounding).
1182 EXPECT_NEAR(viewportWidth / (float) wideDiv.width, scale, 0.1); 1192 EXPECT_NEAR(viewportWidth / (float) wideDiv.width, scale, 0.1);
1183 EXPECT_NEAR(wideDiv.x, scroll.x, 20); 1193 EXPECT_NEAR(wideDiv.x, scroll.x, 20);
1184 EXPECT_EQ(0, scroll.y); 1194 EXPECT_EQ(0, scroll.y);
1185 EXPECT_FALSE(isAnchor); 1195 EXPECT_FALSE(doubleTapShouldZoomOut);
1186 1196
1187 setScaleAndScrollAndLayout(webViewImpl, scroll, scale); 1197 setScaleAndScrollAndLayout(webViewImpl, scroll, scale);
1188 1198
1189 // Test zoom out back to minimum scale. 1199 // Test zoom out back to minimum scale.
1190 webViewImpl->computeScaleAndScrollForHitRect(doubleTapPointWide, WebViewImpl ::DoubleTap, scale, scroll, isAnchor); 1200 wideBlockBounds =
1191 EXPECT_FLOAT_EQ(webViewImpl->minimumPageScaleFactor(), scale); 1201 webViewImpl->computeBlockBounds(doubleTapPointWide, false);
1192 EXPECT_TRUE(isAnchor); 1202 webViewImpl->computeScaleAndScrollForBlockRect(
1203 wideBlockBounds, touchPointPadding, scale, scroll,
1204 doubleTapShouldZoomOut);
1205 EXPECT_TRUE(doubleTapShouldZoomOut);
1193 1206
1207 scale = webViewImpl->minimumPageScaleFactor();
1194 setScaleAndScrollAndLayout(webViewImpl, WebPoint(0, 0), scale); 1208 setScaleAndScrollAndLayout(webViewImpl, WebPoint(0, 0), scale);
1195 1209
1196 // Test double-tap zooming into tall div. 1210 // Test double-tap zooming into tall div.
1197 webViewImpl->computeScaleAndScrollForHitRect(doubleTapPointTall, WebViewImpl ::DoubleTap, scale, scroll, isAnchor); 1211 tallBlockBounds =
1212 webViewImpl->computeBlockBounds(doubleTapPointTall, false);
1213 webViewImpl->computeScaleAndScrollForBlockRect(
1214 tallBlockBounds, touchPointPadding, scale, scroll,
1215 doubleTapShouldZoomOut);
1198 // The div should start at the top left of the viewport. 1216 // The div should start at the top left of the viewport.
1199 EXPECT_NEAR(viewportWidth / (float) tallDiv.width, scale, 0.1); 1217 EXPECT_NEAR(viewportWidth / (float) tallDiv.width, scale, 0.1);
1200 EXPECT_NEAR(tallDiv.x, scroll.x, 20); 1218 EXPECT_NEAR(tallDiv.x, scroll.x, 20);
1201 EXPECT_NEAR(tallDiv.y, scroll.y, 20); 1219 EXPECT_NEAR(tallDiv.y, scroll.y, 20);
1202 EXPECT_FALSE(isAnchor); 1220 EXPECT_FALSE(doubleTapShouldZoomOut);
1203 1221
1204 // Test for Non-doubletap scaling 1222 // Test for Non-doubletap scaling
1205 // Test zooming into div. 1223 // Test zooming into div.
1206 webViewImpl->computeScaleAndScrollForHitRect(WebRect(250, 250, 10, 10), WebV iewImpl::FindInPage, scale, scroll, isAnchor); 1224 webViewImpl->computeScaleAndScrollForBlockRect(
1225 webViewImpl->computeBlockBounds(WebRect(250, 250, 10, 10), true),
1226 0, scale, scroll, doubleTapShouldZoomOut);
1207 EXPECT_NEAR(viewportWidth / (float) wideDiv.width, scale, 0.1); 1227 EXPECT_NEAR(viewportWidth / (float) wideDiv.width, scale, 0.1);
1208 } 1228 }
1209 1229
1230 void simulatePageScale(WebViewImpl* webViewImpl, float& scale)
1231 {
1232 WebCore::IntSize scrollDelta =
1233 webViewImpl->fakePageScaleAnimationTargetPositionForTesting()
1234 - webViewImpl->mainFrameImpl()->frameView()->scrollPosition();
1235 float scaleDelta =
1236 webViewImpl->fakePageScaleAnimationPageScaleForTesting()
1237 / webViewImpl->pageScaleFactor();
1238 webViewImpl->applyScrollAndScale(scrollDelta, scaleDelta);
1239 scale = webViewImpl->pageScaleFactor();
1240 }
1241
1242 void simulateMultiTargetZoom(
1243 WebViewImpl* webViewImpl,
jochen (gone - plz use gerrit) 2013/07/30 06:41:11 put all parameters in one line (no character limit
1244 const WebRect& rect,
1245 float& scale)
1246 {
1247 if (webViewImpl->zoomToMultipleTargetsRect(rect))
1248 simulatePageScale(webViewImpl, scale);
1249 }
1250
1210 void simulateDoubleTap(WebViewImpl* webViewImpl, WebPoint& point, float& scale) 1251 void simulateDoubleTap(WebViewImpl* webViewImpl, WebPoint& point, float& scale)
1211 { 1252 {
1212 webViewImpl->animateZoomAroundPoint(point, WebViewImpl::DoubleTap); 1253 webViewImpl->animateDoubleTapZoom(point);
1213 EXPECT_TRUE(webViewImpl->fakeDoubleTapAnimationPendingForTesting()); 1254 EXPECT_TRUE(webViewImpl->fakeDoubleTapAnimationPendingForTesting());
1214 WebCore::IntSize scrollDelta = webViewImpl->fakeDoubleTapTargetPositionForTe sting() - webViewImpl->mainFrameImpl()->frameView()->scrollPosition(); 1255 simulatePageScale(webViewImpl, scale);
1215 float scaleDelta = webViewImpl->fakeDoubleTapPageScaleFactorForTesting() / w ebViewImpl->pageScaleFactor();
1216 webViewImpl->applyScrollAndScale(scrollDelta, scaleDelta);
1217 scale = webViewImpl->pageScaleFactor();
1218 } 1256 }
1219 1257
1220 TEST_F(WebFrameTest, DivAutoZoomMultipleDivsTest) 1258 TEST_F(WebFrameTest, DivAutoZoomMultipleDivsTest)
1221 { 1259 {
1222 registerMockedHttpURLLoad("get_multiple_divs_for_auto_zoom_test.html"); 1260 registerMockedHttpURLLoad("get_multiple_divs_for_auto_zoom_test.html");
1223 1261
1224 const float deviceScaleFactor = 2.0f; 1262 const float deviceScaleFactor = 2.0f;
1225 int viewportWidth = 640 / deviceScaleFactor; 1263 int viewportWidth = 640 / deviceScaleFactor;
1226 int viewportHeight = 1280 / deviceScaleFactor; 1264 int viewportHeight = 1280 / deviceScaleFactor;
1227 float doubleTapZoomAlreadyLegibleRatio = 1.2f; 1265 float doubleTapZoomAlreadyLegibleRatio = 1.2f;
1228 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "get_multiple _divs_for_auto_zoom_test.html"); 1266 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "get_multiple _divs_for_auto_zoom_test.html");
1229 m_webView->enableFixedLayoutMode(true); 1267 m_webView->enableFixedLayoutMode(true);
1230 m_webView->resize(WebSize(viewportWidth, viewportHeight)); 1268 m_webView->resize(WebSize(viewportWidth, viewportHeight));
1231 m_webView->setPageScaleFactorLimits(0.5f, 4); 1269 m_webView->setPageScaleFactorLimits(0.5f, 4);
1232 m_webView->setDeviceScaleFactor(deviceScaleFactor); 1270 m_webView->setDeviceScaleFactor(deviceScaleFactor);
1233 m_webView->setPageScaleFactor(0.5f, WebPoint(0, 0)); 1271 m_webView->setPageScaleFactor(0.5f, WebPoint(0, 0));
1234 m_webView->layout(); 1272 m_webView->layout();
1235 1273
1236 WebViewImpl* webViewImpl = static_cast<WebViewImpl*>(m_webView); 1274 WebViewImpl* webViewImpl = static_cast<WebViewImpl*>(m_webView);
1237 webViewImpl->enableFakeDoubleTapAnimationForTesting(true); 1275 webViewImpl->enableFakePageScaleAnimationForTesting(true);
1238 1276
1239 WebRect topDiv(200, 100, 200, 150); 1277 WebRect topDiv(200, 100, 200, 150);
1240 WebRect bottomDiv(200, 300, 200, 150); 1278 WebRect bottomDiv(200, 300, 200, 150);
1241 WebPoint topPoint(topDiv.x + 50, topDiv.y + 50); 1279 WebPoint topPoint(topDiv.x + 50, topDiv.y + 50);
1242 WebPoint bottomPoint(bottomDiv.x + 50, bottomDiv.y + 50); 1280 WebPoint bottomPoint(bottomDiv.x + 50, bottomDiv.y + 50);
1243 float scale; 1281 float scale;
1244 setScaleAndScrollAndLayout(webViewImpl, WebPoint(0, 0), (webViewImpl->minimu mPageScaleFactor()) * (1 + doubleTapZoomAlreadyLegibleRatio) / 2); 1282 setScaleAndScrollAndLayout(webViewImpl, WebPoint(0, 0), (webViewImpl->minimu mPageScaleFactor()) * (1 + doubleTapZoomAlreadyLegibleRatio) / 2);
1245 1283
1246 // Test double tap on two different divs 1284 // Test double tap on two different divs
1247 // After first zoom, we should go back to minimum page scale with a second d ouble tap. 1285 // After first zoom, we should go back to minimum page scale with a second d ouble tap.
1248 simulateDoubleTap(webViewImpl, topPoint, scale); 1286 simulateDoubleTap(webViewImpl, topPoint, scale);
1249 EXPECT_FLOAT_EQ(1, scale); 1287 EXPECT_FLOAT_EQ(1, scale);
1250 simulateDoubleTap(webViewImpl, bottomPoint, scale); 1288 simulateDoubleTap(webViewImpl, bottomPoint, scale);
1251 EXPECT_FLOAT_EQ(webViewImpl->minimumPageScaleFactor(), scale); 1289 EXPECT_FLOAT_EQ(webViewImpl->minimumPageScaleFactor(), scale);
1252 1290
1253 // If the user pinch zooms after double tap, a second double tap should zoom back to the div. 1291 // If the user pinch zooms after double tap, a second double tap should zoom back to the div.
1254 simulateDoubleTap(webViewImpl, topPoint, scale); 1292 simulateDoubleTap(webViewImpl, topPoint, scale);
1255 EXPECT_FLOAT_EQ(1, scale); 1293 EXPECT_FLOAT_EQ(1, scale);
1256 webViewImpl->applyScrollAndScale(WebSize(), 0.6f); 1294 webViewImpl->applyScrollAndScale(WebSize(), 0.6f);
1257 simulateDoubleTap(webViewImpl, bottomPoint, scale); 1295 simulateDoubleTap(webViewImpl, bottomPoint, scale);
1258 EXPECT_FLOAT_EQ(1, scale); 1296 EXPECT_FLOAT_EQ(1, scale);
1259 simulateDoubleTap(webViewImpl, bottomPoint, scale); 1297 simulateDoubleTap(webViewImpl, bottomPoint, scale);
1260 EXPECT_FLOAT_EQ(webViewImpl->minimumPageScaleFactor(), scale); 1298 EXPECT_FLOAT_EQ(webViewImpl->minimumPageScaleFactor(), scale);
1261 1299
1262 // If we didn't yet get an auto-zoom update and a second double-tap arrives, should go back to minimum scale. 1300 // If we didn't yet get an auto-zoom update and a second double-tap arrives, should go back to minimum scale.
1263 webViewImpl->applyScrollAndScale(WebSize(), 1.1f); 1301 webViewImpl->applyScrollAndScale(WebSize(), 1.1f);
1264 webViewImpl->animateZoomAroundPoint(topPoint, WebViewImpl::DoubleTap); 1302 webViewImpl->animateDoubleTapZoom(topPoint);
1265 EXPECT_TRUE(webViewImpl->fakeDoubleTapAnimationPendingForTesting()); 1303 EXPECT_TRUE(webViewImpl->fakeDoubleTapAnimationPendingForTesting());
1266 simulateDoubleTap(webViewImpl, bottomPoint, scale); 1304 simulateDoubleTap(webViewImpl, bottomPoint, scale);
1267 EXPECT_FLOAT_EQ(webViewImpl->minimumPageScaleFactor(), scale); 1305 EXPECT_FLOAT_EQ(webViewImpl->minimumPageScaleFactor(), scale);
1268 } 1306 }
1269 1307
1270 TEST_F(WebFrameTest, DivAutoZoomScaleBoundsTest) 1308 TEST_F(WebFrameTest, DivAutoZoomScaleBoundsTest)
1271 { 1309 {
1272 registerMockedHttpURLLoad("get_scale_bounds_check_for_auto_zoom_test.html"); 1310 registerMockedHttpURLLoad("get_scale_bounds_check_for_auto_zoom_test.html");
1273 1311
1274 int viewportWidth = 320; 1312 int viewportWidth = 320;
1275 int viewportHeight = 480; 1313 int viewportHeight = 480;
1276 float doubleTapZoomAlreadyLegibleRatio = 1.2f; 1314 float doubleTapZoomAlreadyLegibleRatio = 1.2f;
1277 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "get_scale_bo unds_check_for_auto_zoom_test.html"); 1315 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "get_scale_bo unds_check_for_auto_zoom_test.html");
1278 m_webView->enableFixedLayoutMode(true); 1316 m_webView->enableFixedLayoutMode(true);
1279 m_webView->resize(WebSize(viewportWidth, viewportHeight)); 1317 m_webView->resize(WebSize(viewportWidth, viewportHeight));
1280 m_webView->setDeviceScaleFactor(1.5f); 1318 m_webView->setDeviceScaleFactor(1.5f);
1281 m_webView->layout(); 1319 m_webView->layout();
1282 1320
1283 WebViewImpl* webViewImpl = static_cast<WebViewImpl*>(m_webView); 1321 WebViewImpl* webViewImpl = static_cast<WebViewImpl*>(m_webView);
1284 webViewImpl->enableFakeDoubleTapAnimationForTesting(true); 1322 webViewImpl->enableFakePageScaleAnimationForTesting(true);
1285 1323
1286 WebRect div(200, 100, 200, 150); 1324 WebRect div(200, 100, 200, 150);
1287 WebPoint doubleTapPoint(div.x + 50, div.y + 50); 1325 WebPoint doubleTapPoint(div.x + 50, div.y + 50);
1288 float scale; 1326 float scale;
1289 1327
1290 // Test double tap scale bounds. 1328 // Test double tap scale bounds.
1291 // minimumPageScale < doubleTapZoomAlreadyLegibleScale < 1 1329 // minimumPageScale < doubleTapZoomAlreadyLegibleScale < 1
1292 m_webView->setPageScaleFactorLimits(0.5f, 4); 1330 m_webView->setPageScaleFactorLimits(0.5f, 4);
1293 m_webView->layout(); 1331 m_webView->layout();
1294 float doubleTapZoomAlreadyLegibleScale = webViewImpl->minimumPageScaleFactor () * doubleTapZoomAlreadyLegibleRatio; 1332 float doubleTapZoomAlreadyLegibleScale = webViewImpl->minimumPageScaleFactor () * doubleTapZoomAlreadyLegibleRatio;
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1336 int viewportWidth = 320; 1374 int viewportWidth = 320;
1337 int viewportHeight = 480; 1375 int viewportHeight = 480;
1338 float doubleTapZoomAlreadyLegibleRatio = 1.2f; 1376 float doubleTapZoomAlreadyLegibleRatio = 1.2f;
1339 float textAutosizingFontScaleFactor = 1.13f; 1377 float textAutosizingFontScaleFactor = 1.13f;
1340 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "get_scale_bo unds_check_for_auto_zoom_test.html"); 1378 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "get_scale_bo unds_check_for_auto_zoom_test.html");
1341 m_webView->enableFixedLayoutMode(true); 1379 m_webView->enableFixedLayoutMode(true);
1342 m_webView->resize(WebSize(viewportWidth, viewportHeight)); 1380 m_webView->resize(WebSize(viewportWidth, viewportHeight));
1343 m_webView->layout(); 1381 m_webView->layout();
1344 1382
1345 WebViewImpl* webViewImpl = static_cast<WebViewImpl*>(m_webView); 1383 WebViewImpl* webViewImpl = static_cast<WebViewImpl*>(m_webView);
1346 webViewImpl->enableFakeDoubleTapAnimationForTesting(true); 1384 webViewImpl->enableFakePageScaleAnimationForTesting(true);
1347 webViewImpl->page()->settings()->setTextAutosizingFontScaleFactor(textAutosi zingFontScaleFactor); 1385 webViewImpl->page()->settings()->setTextAutosizingFontScaleFactor(textAutosi zingFontScaleFactor);
1348 1386
1349 WebRect div(200, 100, 200, 150); 1387 WebRect div(200, 100, 200, 150);
1350 WebPoint doubleTapPoint(div.x + 50, div.y + 50); 1388 WebPoint doubleTapPoint(div.x + 50, div.y + 50);
1351 float scale; 1389 float scale;
1352 1390
1353 // Test double tap scale bounds. 1391 // Test double tap scale bounds.
1354 // minimumPageScale < doubleTapZoomAlreadyLegibleScale < 1 < textAutosizingF ontScaleFactor 1392 // minimumPageScale < doubleTapZoomAlreadyLegibleScale < 1 < textAutosizingF ontScaleFactor
1355 float legibleScale = textAutosizingFontScaleFactor; 1393 float legibleScale = textAutosizingFontScaleFactor;
1356 setScaleAndScrollAndLayout(webViewImpl, WebPoint(0, 0), (webViewImpl->minimu mPageScaleFactor()) * (1 + doubleTapZoomAlreadyLegibleRatio) / 2); 1394 setScaleAndScrollAndLayout(webViewImpl, WebPoint(0, 0), (webViewImpl->minimu mPageScaleFactor()) * (1 + doubleTapZoomAlreadyLegibleRatio) / 2);
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1400 doubleTapZoomAlreadyLegibleScale = webViewImpl->minimumPageScaleFactor() * d oubleTapZoomAlreadyLegibleRatio; 1438 doubleTapZoomAlreadyLegibleScale = webViewImpl->minimumPageScaleFactor() * d oubleTapZoomAlreadyLegibleRatio;
1401 setScaleAndScrollAndLayout(webViewImpl, WebPoint(0, 0), (webViewImpl->minimu mPageScaleFactor()) * (1 + doubleTapZoomAlreadyLegibleRatio) / 2); 1439 setScaleAndScrollAndLayout(webViewImpl, WebPoint(0, 0), (webViewImpl->minimu mPageScaleFactor()) * (1 + doubleTapZoomAlreadyLegibleRatio) / 2);
1402 simulateDoubleTap(webViewImpl, doubleTapPoint, scale); 1440 simulateDoubleTap(webViewImpl, doubleTapPoint, scale);
1403 EXPECT_FLOAT_EQ(legibleScale, scale); 1441 EXPECT_FLOAT_EQ(legibleScale, scale);
1404 simulateDoubleTap(webViewImpl, doubleTapPoint, scale); 1442 simulateDoubleTap(webViewImpl, doubleTapPoint, scale);
1405 EXPECT_FLOAT_EQ(webViewImpl->minimumPageScaleFactor(), scale); 1443 EXPECT_FLOAT_EQ(webViewImpl->minimumPageScaleFactor(), scale);
1406 simulateDoubleTap(webViewImpl, doubleTapPoint, scale); 1444 simulateDoubleTap(webViewImpl, doubleTapPoint, scale);
1407 EXPECT_FLOAT_EQ(legibleScale, scale); 1445 EXPECT_FLOAT_EQ(legibleScale, scale);
1408 } 1446 }
1409 1447
1448 TEST_F(WebFrameTest, DivMultipleTargetZoomMultipleDivsTest)
1449 {
1450 registerMockedHttpURLLoad("get_multiple_divs_for_auto_zoom_test.html");
1451
1452 const float deviceScaleFactor = 2.0f;
1453 int viewportWidth = 640 / deviceScaleFactor;
1454 int viewportHeight = 1280 / deviceScaleFactor;
1455 float doubleTapZoomAlreadyLegibleRatio = 1.2f;
1456 m_webView = FrameTestHelpers::createWebViewAndLoad(
1457 m_baseURL + "get_multiple_divs_for_auto_zoom_test.html");
1458 m_webView->enableFixedLayoutMode(true);
1459 m_webView->resize(WebSize(viewportWidth, viewportHeight));
1460 m_webView->setPageScaleFactorLimits(0.5f, 4);
1461 m_webView->setDeviceScaleFactor(deviceScaleFactor);
1462 m_webView->setPageScaleFactor(0.5f, WebPoint(0, 0));
1463 m_webView->layout();
1464
1465 WebViewImpl* webViewImpl = static_cast<WebViewImpl*>(m_webView);
1466 webViewImpl->enableFakePageScaleAnimationForTesting(true);
1467
1468 WebRect viewportRect(0, 0, viewportWidth, viewportHeight);
1469 WebRect topDiv(200, 100, 200, 150);
1470 WebRect bottomDiv(200, 300, 200, 150);
1471 float scale;
1472 setScaleAndScrollAndLayout(webViewImpl, WebPoint(0, 0),
1473 (webViewImpl->minimumPageScaleFactor())
1474 * (1 + doubleTapZoomAlreadyLegibleRatio) / 2);
1475
1476 simulateMultiTargetZoom(webViewImpl, topDiv, scale);
1477 EXPECT_FLOAT_EQ(1, scale);
1478 simulateMultiTargetZoom(webViewImpl, bottomDiv, scale);
1479 EXPECT_FLOAT_EQ(1, scale);
1480 simulateMultiTargetZoom(webViewImpl, viewportRect, scale);
1481 EXPECT_FLOAT_EQ(1, scale);
1482 webViewImpl->setPageScaleFactor(
1483 webViewImpl->minimumPageScaleFactor(), WebPoint(0, 0));
1484 simulateMultiTargetZoom(webViewImpl, topDiv, scale);
1485 EXPECT_FLOAT_EQ(1, scale);
1486 }
1487
1410 TEST_F(WebFrameTest, DivScrollIntoEditableTest) 1488 TEST_F(WebFrameTest, DivScrollIntoEditableTest)
1411 { 1489 {
1412 registerMockedHttpURLLoad("get_scale_for_zoom_into_editable_test.html"); 1490 registerMockedHttpURLLoad("get_scale_for_zoom_into_editable_test.html");
1413 1491
1414 int viewportWidth = 450; 1492 int viewportWidth = 450;
1415 int viewportHeight = 300; 1493 int viewportHeight = 300;
1416 float leftBoxRatio = 0.3f; 1494 float leftBoxRatio = 0.3f;
1417 int caretPadding = 10; 1495 int caretPadding = 10;
1418 float minReadableCaretHeight = 18.0f; 1496 float minReadableCaretHeight = 18.0f;
1419 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "get_scale_fo r_zoom_into_editable_test.html"); 1497 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "get_scale_fo r_zoom_into_editable_test.html");
1420 m_webView->enableFixedLayoutMode(true); 1498 m_webView->enableFixedLayoutMode(true);
1421 m_webView->resize(WebSize(viewportWidth, viewportHeight)); 1499 m_webView->resize(WebSize(viewportWidth, viewportHeight));
1422 m_webView->setPageScaleFactorLimits(1, 4); 1500 m_webView->setPageScaleFactorLimits(1, 4);
1423 m_webView->layout(); 1501 m_webView->layout();
1424 m_webView->setDeviceScaleFactor(1.5f); 1502 m_webView->setDeviceScaleFactor(1.5f);
1425 m_webView->settings()->setAutoZoomFocusedNodeToLegibleScale(true); 1503 m_webView->settings()->setAutoZoomFocusedNodeToLegibleScale(true);
1426 1504
1427 WebViewImpl* webViewImpl = static_cast<WebViewImpl*>(m_webView); 1505 WebViewImpl* webViewImpl = static_cast<WebViewImpl*>(m_webView);
1428 webViewImpl->enableFakeDoubleTapAnimationForTesting(true); 1506 webViewImpl->enableFakePageScaleAnimationForTesting(true);
1429 1507
1430 WebRect editBoxWithText(200, 200, 250, 20); 1508 WebRect editBoxWithText(200, 200, 250, 20);
1431 WebRect editBoxWithNoText(200, 250, 250, 20); 1509 WebRect editBoxWithNoText(200, 250, 250, 20);
1432 1510
1433 // Test scrolling the focused node 1511 // Test scrolling the focused node
1434 // The edit box is shorter and narrower than the viewport when legible. 1512 // The edit box is shorter and narrower than the viewport when legible.
1435 m_webView->advanceFocus(false); 1513 m_webView->advanceFocus(false);
1436 // Set the caret to the end of the input box. 1514 // Set the caret to the end of the input box.
1437 m_webView->mainFrame()->document().getElementById("EditBoxWithText").to<WebI nputElement>().setSelectionRange(1000, 1000); 1515 m_webView->mainFrame()->document().getElementById("EditBoxWithText").to<WebI nputElement>().setSelectionRange(1000, 1000);
1438 setScaleAndScrollAndLayout(m_webView, WebPoint(0, 0), 1); 1516 setScaleAndScrollAndLayout(m_webView, WebPoint(0, 0), 1);
(...skipping 1969 matching lines...) Expand 10 before | Expand all | Expand 10 after
3408 frame->reload(); 3486 frame->reload();
3409 Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests(); 3487 Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests();
3410 EXPECT_EQ(WebURLRequest::ReloadIgnoringCacheData, frame->dataSource()->reque st().cachePolicy()); 3488 EXPECT_EQ(WebURLRequest::ReloadIgnoringCacheData, frame->dataSource()->reque st().cachePolicy());
3411 3489
3412 m_webView->close(); 3490 m_webView->close();
3413 m_webView = 0; 3491 m_webView = 0;
3414 } 3492 }
3415 3493
3416 3494
3417 } // namespace 3495 } // namespace
OLDNEW
« no previous file with comments | « no previous file | Source/web/WebViewImpl.h » ('j') | Source/web/WebViewImpl.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698