OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/bind.h" | 5 #include "base/bind.h" |
6 #include "base/memory/weak_ptr.h" | 6 #include "base/memory/weak_ptr.h" |
7 #include "base/message_loop/message_loop.h" | 7 #include "base/message_loop/message_loop.h" |
8 #include "base/path_service.h" | 8 #include "base/path_service.h" |
9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
10 #include "chrome/browser/history/history_db_task.h" | 10 #include "chrome/browser/history/history_db_task.h" |
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
289 // Wrappers that allow private TopSites functions to be called from the | 289 // Wrappers that allow private TopSites functions to be called from the |
290 // individual tests without making them all be friends. | 290 // individual tests without making them all be friends. |
291 GURL GetCanonicalURL(const GURL& url) { | 291 GURL GetCanonicalURL(const GURL& url) { |
292 return top_sites()->cache_->GetCanonicalURL(url); | 292 return top_sites()->cache_->GetCanonicalURL(url); |
293 } | 293 } |
294 | 294 |
295 void SetTopSites(const MostVisitedURLList& new_top_sites) { | 295 void SetTopSites(const MostVisitedURLList& new_top_sites) { |
296 top_sites()->SetTopSites(new_top_sites); | 296 top_sites()->SetTopSites(new_top_sites); |
297 } | 297 } |
298 | 298 |
| 299 bool AddForcedURL(const GURL& url, base::Time time) { |
| 300 return top_sites()->AddForcedURL(url, time); |
| 301 } |
| 302 |
299 void StartQueryForMostVisited() { | 303 void StartQueryForMostVisited() { |
300 top_sites()->StartQueryForMostVisited(); | 304 top_sites()->StartQueryForMostVisited(); |
301 } | 305 } |
302 | 306 |
303 void SetLastNumUrlsChanged(size_t value) { | 307 void SetLastNumUrlsChanged(size_t value) { |
304 top_sites()->last_num_urls_changed_ = value; | 308 top_sites()->last_num_urls_changed_ = value; |
305 } | 309 } |
306 | 310 |
307 size_t last_num_urls_changed() { return top_sites()->last_num_urls_changed_; } | 311 size_t last_num_urls_changed() { return top_sites()->last_num_urls_changed_; } |
308 | 312 |
(...skipping 932 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1241 EXPECT_FALSE(AddPrepopulatedPages(&pages)); | 1245 EXPECT_FALSE(AddPrepopulatedPages(&pages)); |
1242 | 1246 |
1243 EXPECT_EQ(GetPrepopulatePages().size(), pages.size()); | 1247 EXPECT_EQ(GetPrepopulatePages().size(), pages.size()); |
1244 q.set_urls(pages); | 1248 q.set_urls(pages); |
1245 ASSERT_NO_FATAL_FAILURE(ContainsPrepopulatePages(q, 0)); | 1249 ASSERT_NO_FATAL_FAILURE(ContainsPrepopulatePages(q, 0)); |
1246 } | 1250 } |
1247 | 1251 |
1248 // Ensure calling SetTopSites with forced sites already in the DB works. | 1252 // Ensure calling SetTopSites with forced sites already in the DB works. |
1249 // This test both eviction and | 1253 // This test both eviction and |
1250 TEST_F(TopSitesImplTest, SetForcedTopSites) { | 1254 TEST_F(TopSitesImplTest, SetForcedTopSites) { |
| 1255 // Create forced elements in old URL list. |
| 1256 MostVisitedURLList old_url_list; |
| 1257 AppendForcedMostVisitedURL(&old_url_list, GURL("http://oldforced/0"), 1000); |
| 1258 AppendForcedMostVisitedURL(&old_url_list, GURL("http://oldforced/1"), 4000); |
| 1259 AppendForcedMostVisitedURL(&old_url_list, GURL("http://oldforced/2"), 7000); |
| 1260 AppendForcedMostVisitedURL(&old_url_list, GURL("http://oldforced/3"), 10000); |
| 1261 AppendForcedMostVisitedURL(&old_url_list, GURL("http://oldforced/4"), 11000); |
| 1262 AppendForcedMostVisitedURL(&old_url_list, GURL("http://oldforced/5"), 12000); |
| 1263 AppendForcedMostVisitedURL(&old_url_list, GURL("http://oldforced/6"), 13000); |
| 1264 AppendForcedMostVisitedURL(&old_url_list, GURL("http://oldforced/7"), 18000); |
| 1265 AppendForcedMostVisitedURL(&old_url_list, GURL("http://oldforced/8"), 21000); |
| 1266 const size_t kNumOldForcedURLs = 9; |
1251 | 1267 |
1252 const double old_last_forced_time[] = { | 1268 // Create forced elements in new URL list. |
1253 1000, | 1269 MostVisitedURLList new_url_list; |
1254 4000, | 1270 AppendForcedMostVisitedURL(&new_url_list, GURL("http://newforced/0"), 2000); |
1255 7000, | 1271 AppendForcedMostVisitedURL(&new_url_list, GURL("http://newforced/1"), 3000); |
1256 10000, | 1272 AppendForcedMostVisitedURL(&new_url_list, GURL("http://newforced/2"), 5000); |
1257 11000, | 1273 AppendForcedMostVisitedURL(&new_url_list, GURL("http://newforced/3"), 6000); |
1258 12000, | 1274 AppendForcedMostVisitedURL(&new_url_list, GURL("http://newforced/4"), 8000); |
1259 13000, | 1275 AppendForcedMostVisitedURL(&new_url_list, GURL("http://newforced/5"), 9000); |
1260 18000, | 1276 AppendForcedMostVisitedURL(&new_url_list, GURL("http://newforced/6"), 14000); |
1261 21000 | 1277 AppendForcedMostVisitedURL(&new_url_list, GURL("http://newforced/7"), 15000); |
1262 }; | 1278 AppendForcedMostVisitedURL(&new_url_list, GURL("http://newforced/8"), 16000); |
1263 size_t num_old_forced = arraysize(old_last_forced_time); | 1279 AppendForcedMostVisitedURL(&new_url_list, GURL("http://newforced/9"), 17000); |
| 1280 AppendForcedMostVisitedURL(&new_url_list, GURL("http://newforced/10"), 19000); |
| 1281 AppendForcedMostVisitedURL(&new_url_list, GURL("http://newforced/11"), 20000); |
| 1282 AppendForcedMostVisitedURL(&new_url_list, GURL("http://newforced/12"), 22000); |
1264 | 1283 |
1265 const double new_last_forced_time[] = { | 1284 // Setup a number non-forced URLs in both old and new list. |
1266 2000, | |
1267 3000, | |
1268 5000, | |
1269 6000, | |
1270 8000, | |
1271 9000, | |
1272 14000, | |
1273 15000, | |
1274 16000, | |
1275 17000, | |
1276 19000, | |
1277 20000, | |
1278 22000 | |
1279 }; | |
1280 size_t num_new_forced = arraysize(new_last_forced_time); | |
1281 | |
1282 const size_t kNumNonForcedURLs = 20; // Maximum number of non-forced URLs. | 1285 const size_t kNumNonForcedURLs = 20; // Maximum number of non-forced URLs. |
1283 | 1286 for (size_t i = 0; i < kNumNonForcedURLs; ++i) { |
1284 MostVisitedURLList old_url_list; | |
1285 MostVisitedURLList new_url_list; | |
1286 | |
1287 old_url_list.resize(num_old_forced + kNumNonForcedURLs); | |
1288 new_url_list.resize(num_new_forced + kNumNonForcedURLs); | |
1289 | |
1290 // Setup a number of forced and non-forced URLs. | |
1291 for (size_t i = 0; i < num_old_forced; ++i) { | |
1292 std::ostringstream url; | 1287 std::ostringstream url; |
1293 url << "http://oldforced/" << i; | 1288 url << "http://oldnonforced/" << i; |
1294 old_url_list[i].url = GURL(url.str()); | 1289 AppendMostVisitedURL(&old_url_list, GURL(url.str())); |
1295 old_url_list[i].last_forced_time = | 1290 url.str(""); |
1296 base::Time::FromJsTime(old_last_forced_time[i]); | 1291 url << "http://newnonforced/" << i; |
1297 } | 1292 AppendMostVisitedURL(&new_url_list, GURL(url.str())); |
1298 for (size_t i = num_old_forced; i < old_url_list.size(); ++i) { | |
1299 std::ostringstream url; | |
1300 url << "http://oldnonforced/" << (i - num_old_forced); | |
1301 old_url_list[i].url = GURL(url.str()); | |
1302 } | |
1303 for (size_t i = 0; i < num_new_forced; ++i) { | |
1304 std::ostringstream url; | |
1305 url << "http://newforced/" << i; | |
1306 new_url_list[i].url = GURL(url.str()); | |
1307 new_url_list[i].last_forced_time = | |
1308 base::Time::FromJsTime(new_last_forced_time[i]); | |
1309 } | |
1310 for (size_t i = num_new_forced; i < new_url_list.size(); ++i) { | |
1311 std::ostringstream url; | |
1312 url << "http://newnonforced/" << (i - num_new_forced); | |
1313 new_url_list[i].url = GURL(url.str()); | |
1314 } | 1293 } |
1315 | 1294 |
1316 // Set the initial list of URLs. | 1295 // Set the initial list of URLs. |
1317 SetTopSites(old_url_list); | 1296 SetTopSites(old_url_list); |
1318 EXPECT_EQ(num_old_forced + kNumNonForcedURLs, last_num_urls_changed()); | 1297 EXPECT_EQ(kNumOldForcedURLs + kNumNonForcedURLs, last_num_urls_changed()); |
1319 | 1298 |
1320 TopSitesQuerier querier; | 1299 TopSitesQuerier querier; |
1321 // Query only non-forced URLs first. | 1300 // Query only non-forced URLs first. |
1322 querier.QueryTopSites(top_sites(), false); | 1301 querier.QueryTopSites(top_sites(), false); |
1323 ASSERT_EQ(kNumNonForcedURLs, querier.urls().size()); | 1302 ASSERT_EQ(kNumNonForcedURLs, querier.urls().size()); |
1324 | 1303 |
1325 // Check first URL. | 1304 // Check first URL. |
1326 EXPECT_EQ("http://oldnonforced/0", querier.urls()[0].url.spec()); | 1305 EXPECT_EQ("http://oldnonforced/0", querier.urls()[0].url.spec()); |
1327 | 1306 |
1328 // Query all URLs. | 1307 // Query all URLs. |
1329 querier.QueryAllTopSites(top_sites(), false, true); | 1308 querier.QueryAllTopSites(top_sites(), false, true); |
1330 EXPECT_EQ(num_old_forced + kNumNonForcedURLs, querier.urls().size()); | 1309 EXPECT_EQ(kNumOldForcedURLs + kNumNonForcedURLs, querier.urls().size()); |
1331 | 1310 |
1332 // Check first URLs. | 1311 // Check first URLs. |
1333 EXPECT_EQ("http://oldforced/0", querier.urls()[0].url.spec()); | 1312 EXPECT_EQ("http://oldforced/0", querier.urls()[0].url.spec()); |
1334 EXPECT_EQ("http://oldnonforced/0", querier.urls()[num_old_forced].url.spec()); | 1313 EXPECT_EQ("http://oldnonforced/0", |
| 1314 querier.urls()[kNumOldForcedURLs].url.spec()); |
1335 | 1315 |
1336 // Set the new list of URLs. | 1316 // Set the new list of URLs. |
1337 SetTopSites(new_url_list); | 1317 SetTopSites(new_url_list); |
1338 | 1318 |
1339 // Query all URLs. | 1319 // Query all URLs. |
1340 querier.QueryAllTopSites(top_sites(), false, true); | 1320 querier.QueryAllTopSites(top_sites(), false, true); |
1341 | 1321 |
1342 // We should have reached the maximum of 20 forced URLs. | 1322 // We should have reached the maximum of 20 forced URLs. |
1343 ASSERT_EQ(20 + kNumNonForcedURLs, querier.urls().size()); | 1323 ASSERT_EQ(20 + kNumNonForcedURLs, querier.urls().size()); |
1344 | 1324 |
1345 // Check forced URLs. They follow the order of timestamps above, smaller | 1325 // Check forced URLs. They follow the order of timestamps above, smaller |
1346 // timestamps since they were evicted. | 1326 // timestamps since they were evicted. |
1347 EXPECT_EQ("http://newforced/1", querier.urls()[0].url.spec()); // 3000 | 1327 EXPECT_EQ("http://newforced/1", querier.urls()[0].url.spec()); |
1348 EXPECT_EQ("http://oldforced/1", querier.urls()[1].url.spec()); // 4000 | 1328 EXPECT_EQ(3000, querier.urls()[0].last_forced_time.ToJsTime()); |
1349 EXPECT_EQ("http://newforced/2", querier.urls()[2].url.spec()); // 5000 | 1329 EXPECT_EQ("http://oldforced/1", querier.urls()[1].url.spec()); |
1350 EXPECT_EQ("http://newforced/3", querier.urls()[3].url.spec()); // 6000 | 1330 EXPECT_EQ(4000, querier.urls()[1].last_forced_time.ToJsTime()); |
1351 EXPECT_EQ("http://oldforced/2", querier.urls()[4].url.spec()); // 7000 | 1331 EXPECT_EQ("http://newforced/2", querier.urls()[2].url.spec()); |
1352 EXPECT_EQ("http://newforced/4", querier.urls()[5].url.spec()); // 8000 | 1332 EXPECT_EQ(5000, querier.urls()[2].last_forced_time.ToJsTime()); |
1353 EXPECT_EQ("http://newforced/5", querier.urls()[6].url.spec()); // 9000 | 1333 EXPECT_EQ("http://newforced/3", querier.urls()[3].url.spec()); |
1354 EXPECT_EQ("http://oldforced/3", querier.urls()[7].url.spec()); // 10000 | 1334 EXPECT_EQ(6000, querier.urls()[3].last_forced_time.ToJsTime()); |
1355 EXPECT_EQ("http://oldforced/4", querier.urls()[8].url.spec()); // 11000 | 1335 EXPECT_EQ("http://oldforced/2", querier.urls()[4].url.spec()); |
1356 EXPECT_EQ("http://oldforced/5", querier.urls()[9].url.spec()); // 12000 | 1336 EXPECT_EQ(7000, querier.urls()[4].last_forced_time.ToJsTime()); |
1357 EXPECT_EQ("http://oldforced/6", querier.urls()[10].url.spec()); // 13000 | 1337 EXPECT_EQ("http://newforced/4", querier.urls()[5].url.spec()); |
1358 EXPECT_EQ("http://newforced/6", querier.urls()[11].url.spec()); // 14000 | 1338 EXPECT_EQ(8000, querier.urls()[5].last_forced_time.ToJsTime()); |
1359 EXPECT_EQ("http://newforced/7", querier.urls()[12].url.spec()); // 15000 | 1339 EXPECT_EQ("http://newforced/5", querier.urls()[6].url.spec()); |
1360 EXPECT_EQ("http://newforced/8", querier.urls()[13].url.spec()); // 16000 | 1340 EXPECT_EQ(9000, querier.urls()[6].last_forced_time.ToJsTime()); |
1361 EXPECT_EQ("http://newforced/9", querier.urls()[14].url.spec()); // 17000 | 1341 EXPECT_EQ("http://oldforced/3", querier.urls()[7].url.spec()); |
1362 EXPECT_EQ("http://oldforced/7", querier.urls()[15].url.spec()); // 18000 | 1342 EXPECT_EQ(10000, querier.urls()[7].last_forced_time.ToJsTime()); |
1363 EXPECT_EQ("http://newforced/10", querier.urls()[16].url.spec()); // 19000 | 1343 EXPECT_EQ("http://oldforced/4", querier.urls()[8].url.spec()); |
1364 EXPECT_EQ("http://newforced/11", querier.urls()[17].url.spec()); // 20000 | 1344 EXPECT_EQ(11000, querier.urls()[8].last_forced_time.ToJsTime()); |
1365 EXPECT_EQ("http://oldforced/8", querier.urls()[18].url.spec()); // 21000 | 1345 EXPECT_EQ("http://oldforced/5", querier.urls()[9].url.spec()); |
1366 EXPECT_EQ("http://newforced/12", querier.urls()[19].url.spec()); // 22000 | 1346 EXPECT_EQ(12000, querier.urls()[9].last_forced_time.ToJsTime()); |
| 1347 EXPECT_EQ("http://oldforced/6", querier.urls()[10].url.spec()); |
| 1348 EXPECT_EQ(13000, querier.urls()[10].last_forced_time.ToJsTime()); |
| 1349 EXPECT_EQ("http://newforced/6", querier.urls()[11].url.spec()); |
| 1350 EXPECT_EQ(14000, querier.urls()[11].last_forced_time.ToJsTime()); |
| 1351 EXPECT_EQ("http://newforced/7", querier.urls()[12].url.spec()); |
| 1352 EXPECT_EQ(15000, querier.urls()[12].last_forced_time.ToJsTime()); |
| 1353 EXPECT_EQ("http://newforced/8", querier.urls()[13].url.spec()); |
| 1354 EXPECT_EQ(16000, querier.urls()[13].last_forced_time.ToJsTime()); |
| 1355 EXPECT_EQ("http://newforced/9", querier.urls()[14].url.spec()); |
| 1356 EXPECT_EQ(17000, querier.urls()[14].last_forced_time.ToJsTime()); |
| 1357 EXPECT_EQ("http://oldforced/7", querier.urls()[15].url.spec()); |
| 1358 EXPECT_EQ(18000, querier.urls()[15].last_forced_time.ToJsTime()); |
| 1359 EXPECT_EQ("http://newforced/10", querier.urls()[16].url.spec()); |
| 1360 EXPECT_EQ(19000, querier.urls()[16].last_forced_time.ToJsTime()); |
| 1361 EXPECT_EQ("http://newforced/11", querier.urls()[17].url.spec()); |
| 1362 EXPECT_EQ(20000, querier.urls()[17].last_forced_time.ToJsTime()); |
| 1363 EXPECT_EQ("http://oldforced/8", querier.urls()[18].url.spec()); |
| 1364 EXPECT_EQ(21000, querier.urls()[18].last_forced_time.ToJsTime()); |
| 1365 EXPECT_EQ("http://newforced/12", querier.urls()[19].url.spec()); |
| 1366 EXPECT_EQ(22000, querier.urls()[19].last_forced_time.ToJsTime()); |
1367 | 1367 |
1368 // Check first and last non-forced URLs. | 1368 // Check first and last non-forced URLs. |
1369 EXPECT_EQ("http://newnonforced/0", querier.urls()[20].url.spec()); | 1369 EXPECT_EQ("http://newnonforced/0", querier.urls()[20].url.spec()); |
| 1370 EXPECT_TRUE(querier.urls()[20].last_forced_time.is_null()); |
1370 EXPECT_EQ("http://newnonforced/19", querier.urls()[39].url.spec()); | 1371 EXPECT_EQ("http://newnonforced/19", querier.urls()[39].url.spec()); |
| 1372 EXPECT_TRUE(querier.urls()[39].last_forced_time.is_null()); |
1371 } | 1373 } |
1372 | 1374 |
1373 TEST_F(TopSitesImplTest, SetForcedTopSitesWithCollisions) { | 1375 TEST_F(TopSitesImplTest, SetForcedTopSitesWithCollisions) { |
| 1376 |
| 1377 // Setup an old URL list in order to generate some collisions. |
1374 MostVisitedURLList old_url_list; | 1378 MostVisitedURLList old_url_list; |
1375 MostVisitedURLList new_url_list; | 1379 AppendForcedMostVisitedURL(&old_url_list, GURL("http://url/0"), 1000); |
1376 | 1380 // The following three will be evicted. |
1377 old_url_list.resize(5); | 1381 AppendForcedMostVisitedURL(&old_url_list, GURL("http://collision/0"), 4000); |
1378 old_url_list[0].url = GURL("http://url/0"); | 1382 AppendForcedMostVisitedURL(&old_url_list, GURL("http://collision/1"), 6000); |
1379 old_url_list[0].last_forced_time = base::Time::FromJsTime(1000); | 1383 AppendForcedMostVisitedURL(&old_url_list, GURL("http://collision/2"), 7000); |
1380 old_url_list[1].url = GURL("http://collision/0"); // Evicted | |
1381 old_url_list[1].last_forced_time = base::Time::FromJsTime(4000); | |
1382 old_url_list[2].url = GURL("http://collision/1"); // Evicted | |
1383 old_url_list[2].last_forced_time = base::Time::FromJsTime(6000); | |
1384 old_url_list[3].url = GURL("http://collision/2"); // Evicted | |
1385 old_url_list[3].last_forced_time = base::Time::FromJsTime(7000); | |
1386 // The following is evicted since all non-forced URLs are, therefore it | 1384 // The following is evicted since all non-forced URLs are, therefore it |
1387 // doesn't cause a collision. | 1385 // doesn't cause a collision. |
1388 old_url_list[4].url = GURL("http://noncollision/0"); | 1386 AppendMostVisitedURL(&old_url_list, GURL("http://noncollision/0")); |
1389 | |
1390 new_url_list.resize(6); | |
1391 new_url_list[0].url = GURL("http://collision/1"); | |
1392 new_url_list[0].last_forced_time = base::Time::FromJsTime(2000); | |
1393 new_url_list[1].url = GURL("http://url/2"); | |
1394 new_url_list[1].last_forced_time = base::Time::FromJsTime(3000); | |
1395 new_url_list[2].url = GURL("http://collision/0"); | |
1396 new_url_list[2].last_forced_time = base::Time::FromJsTime(5000); | |
1397 new_url_list[3].url = GURL("http://noncollision/0"); | |
1398 new_url_list[3].last_forced_time = base::Time::FromJsTime(9000); | |
1399 new_url_list[4].url = GURL("http://collision/2"); | |
1400 new_url_list[5].url = GURL("http://url/3"); | |
1401 | |
1402 // Set the initial list of URLs. | |
1403 SetTopSites(old_url_list); | 1387 SetTopSites(old_url_list); |
1404 | 1388 |
1405 // Set the new list of URLs. | 1389 // Setup a new URL list that will cause collisions. |
| 1390 MostVisitedURLList new_url_list; |
| 1391 AppendForcedMostVisitedURL(&new_url_list, GURL("http://collision/1"), 2000); |
| 1392 AppendForcedMostVisitedURL(&new_url_list, GURL("http://url/2"), 3000); |
| 1393 AppendForcedMostVisitedURL(&new_url_list, GURL("http://collision/0"), 5000); |
| 1394 AppendForcedMostVisitedURL(&new_url_list, GURL("http://noncollision/0"), |
| 1395 9000); |
| 1396 AppendMostVisitedURL(&new_url_list, GURL("http://collision/2")); |
| 1397 AppendMostVisitedURL(&new_url_list, GURL("http://url/3")); |
1406 SetTopSites(new_url_list); | 1398 SetTopSites(new_url_list); |
1407 | 1399 |
1408 // Query all URLs. | 1400 // Query all URLs. |
1409 TopSitesQuerier querier; | 1401 TopSitesQuerier querier; |
1410 querier.QueryAllTopSites(top_sites(), false, true); | 1402 querier.QueryAllTopSites(top_sites(), false, true); |
1411 | 1403 |
1412 // Check URLs. When collision occurs, the incoming one is always preferred. | 1404 // Check URLs. When collision occurs, the incoming one is always preferred. |
1413 ASSERT_EQ(7u + GetPrepopulatePages().size(), querier.urls().size()); | 1405 ASSERT_EQ(7u + GetPrepopulatePages().size(), querier.urls().size()); |
1414 EXPECT_EQ("http://url/0", querier.urls()[0].url.spec()); | 1406 EXPECT_EQ("http://url/0", querier.urls()[0].url.spec()); |
1415 EXPECT_EQ(1000u, querier.urls()[0].last_forced_time.ToJsTime()); | 1407 EXPECT_EQ(1000u, querier.urls()[0].last_forced_time.ToJsTime()); |
1416 EXPECT_EQ("http://collision/1", querier.urls()[1].url.spec()); | 1408 EXPECT_EQ("http://collision/1", querier.urls()[1].url.spec()); |
1417 EXPECT_EQ(2000u, querier.urls()[1].last_forced_time.ToJsTime()); | 1409 EXPECT_EQ(2000u, querier.urls()[1].last_forced_time.ToJsTime()); |
1418 EXPECT_EQ("http://url/2", querier.urls()[2].url.spec()); | 1410 EXPECT_EQ("http://url/2", querier.urls()[2].url.spec()); |
1419 EXPECT_EQ(3000u, querier.urls()[2].last_forced_time.ToJsTime()); | 1411 EXPECT_EQ(3000u, querier.urls()[2].last_forced_time.ToJsTime()); |
1420 EXPECT_EQ("http://collision/0", querier.urls()[3].url.spec()); | 1412 EXPECT_EQ("http://collision/0", querier.urls()[3].url.spec()); |
1421 EXPECT_EQ(5000u, querier.urls()[3].last_forced_time.ToJsTime()); | 1413 EXPECT_EQ(5000u, querier.urls()[3].last_forced_time.ToJsTime()); |
1422 EXPECT_EQ("http://noncollision/0", querier.urls()[4].url.spec()); | 1414 EXPECT_EQ("http://noncollision/0", querier.urls()[4].url.spec()); |
1423 EXPECT_EQ(9000u, querier.urls()[4].last_forced_time.ToJsTime()); | 1415 EXPECT_EQ(9000u, querier.urls()[4].last_forced_time.ToJsTime()); |
1424 EXPECT_EQ("http://collision/2", querier.urls()[5].url.spec()); | 1416 EXPECT_EQ("http://collision/2", querier.urls()[5].url.spec()); |
1425 EXPECT_TRUE(querier.urls()[5].last_forced_time.is_null()); | 1417 EXPECT_TRUE(querier.urls()[5].last_forced_time.is_null()); |
1426 EXPECT_EQ("http://url/3", querier.urls()[6].url.spec()); | 1418 EXPECT_EQ("http://url/3", querier.urls()[6].url.spec()); |
1427 EXPECT_TRUE(querier.urls()[6].last_forced_time.is_null()); | 1419 EXPECT_TRUE(querier.urls()[6].last_forced_time.is_null()); |
1428 ASSERT_NO_FATAL_FAILURE(ContainsPrepopulatePages(querier, 7)); | 1420 ASSERT_NO_FATAL_FAILURE(ContainsPrepopulatePages(querier, 7)); |
1429 } | 1421 } |
1430 | 1422 |
1431 | |
1432 TEST_F(TopSitesImplTest, SetTopSitesIdentical) { | 1423 TEST_F(TopSitesImplTest, SetTopSitesIdentical) { |
| 1424 // Set the initial list of URLs. |
1433 MostVisitedURLList url_list; | 1425 MostVisitedURLList url_list; |
1434 url_list.resize(3); | 1426 AppendForcedMostVisitedURL(&url_list, GURL("http://url/0"), 1000); |
1435 url_list[0].url = GURL("http://url/0"); | 1427 AppendMostVisitedURL(&url_list, GURL("http://url/1")); |
1436 url_list[0].last_forced_time = base::Time::FromJsTime(1000); | 1428 AppendMostVisitedURL(&url_list, GURL("http://url/2")); |
1437 url_list[1].url = GURL("http://url/1"); // Evicted | |
1438 url_list[2].url = GURL("http://url/2"); // Evicted | |
1439 | |
1440 // Set the initial list of URLs. | |
1441 SetTopSites(url_list); | 1429 SetTopSites(url_list); |
1442 | 1430 |
1443 // Set the new list of URLs. | 1431 // Set the new list of URLs to be exactly the same. |
1444 SetTopSites(MostVisitedURLList(url_list)); | 1432 SetTopSites(MostVisitedURLList(url_list)); |
1445 | 1433 |
1446 // Query all URLs. | 1434 // Query all URLs. |
1447 TopSitesQuerier querier; | 1435 TopSitesQuerier querier; |
1448 querier.QueryAllTopSites(top_sites(), false, true); | 1436 querier.QueryAllTopSites(top_sites(), false, true); |
1449 | 1437 |
1450 // Check URLs. When collision occurs, the incoming one is always preferred. | 1438 // Check URLs. When collision occurs, the incoming one is always preferred. |
1451 ASSERT_EQ(3u + GetPrepopulatePages().size(), querier.urls().size()); | 1439 ASSERT_EQ(3u + GetPrepopulatePages().size(), querier.urls().size()); |
1452 EXPECT_EQ("http://url/0", querier.urls()[0].url.spec()); | 1440 EXPECT_EQ("http://url/0", querier.urls()[0].url.spec()); |
1453 EXPECT_EQ(1000u, querier.urls()[0].last_forced_time.ToJsTime()); | 1441 EXPECT_EQ(1000u, querier.urls()[0].last_forced_time.ToJsTime()); |
1454 EXPECT_EQ("http://url/1", querier.urls()[1].url.spec()); | 1442 EXPECT_EQ("http://url/1", querier.urls()[1].url.spec()); |
1455 EXPECT_EQ("http://url/2", querier.urls()[2].url.spec()); | 1443 EXPECT_EQ("http://url/2", querier.urls()[2].url.spec()); |
1456 ASSERT_NO_FATAL_FAILURE(ContainsPrepopulatePages(querier, 3)); | 1444 ASSERT_NO_FATAL_FAILURE(ContainsPrepopulatePages(querier, 3)); |
1457 } | 1445 } |
1458 | 1446 |
| 1447 TEST_F(TopSitesImplTest, AddForcedURL) { |
| 1448 // Set the initial list of URLs. |
| 1449 MostVisitedURLList url_list; |
| 1450 AppendForcedMostVisitedURL(&url_list, GURL("http://forced/0"), 2000); |
| 1451 AppendForcedMostVisitedURL(&url_list, GURL("http://forced/1"), 4000); |
| 1452 AppendMostVisitedURL(&url_list, GURL("http://nonforced/0")); |
| 1453 AppendMostVisitedURL(&url_list, GURL("http://nonforced/1")); |
| 1454 AppendMostVisitedURL(&url_list, GURL("http://nonforced/2")); |
| 1455 SetTopSites(url_list); |
| 1456 |
| 1457 // Add forced sites here and there to exercise a couple of cases. |
| 1458 EXPECT_TRUE(AddForcedURL(GURL("http://forced/2"), |
| 1459 base::Time::FromJsTime(5000))); |
| 1460 EXPECT_TRUE(AddForcedURL(GURL("http://forced/3"), |
| 1461 base::Time::FromJsTime(1000))); |
| 1462 EXPECT_TRUE(AddForcedURL(GURL("http://forced/4"), |
| 1463 base::Time::FromJsTime(3000))); |
| 1464 |
| 1465 // Check URLs. |
| 1466 TopSitesQuerier querier; |
| 1467 querier.QueryAllTopSites(top_sites(), false, true); |
| 1468 ASSERT_EQ(8u + GetPrepopulatePages().size(), querier.urls().size()); |
| 1469 EXPECT_EQ("http://forced/3", querier.urls()[0].url.spec()); |
| 1470 EXPECT_EQ(1000u, querier.urls()[0].last_forced_time.ToJsTime()); |
| 1471 EXPECT_EQ("http://forced/0", querier.urls()[1].url.spec()); |
| 1472 EXPECT_EQ(2000u, querier.urls()[1].last_forced_time.ToJsTime()); |
| 1473 EXPECT_EQ("http://forced/4", querier.urls()[2].url.spec()); |
| 1474 EXPECT_EQ(3000u, querier.urls()[2].last_forced_time.ToJsTime()); |
| 1475 EXPECT_EQ("http://forced/1", querier.urls()[3].url.spec()); |
| 1476 EXPECT_EQ(4000u, querier.urls()[3].last_forced_time.ToJsTime()); |
| 1477 EXPECT_EQ("http://forced/2", querier.urls()[4].url.spec()); |
| 1478 EXPECT_EQ(5000u, querier.urls()[4].last_forced_time.ToJsTime()); |
| 1479 EXPECT_EQ("http://nonforced/0", querier.urls()[5].url.spec()); |
| 1480 EXPECT_TRUE(querier.urls()[5].last_forced_time.is_null()); |
| 1481 EXPECT_EQ("http://nonforced/1", querier.urls()[6].url.spec()); |
| 1482 EXPECT_TRUE(querier.urls()[6].last_forced_time.is_null()); |
| 1483 EXPECT_EQ("http://nonforced/2", querier.urls()[7].url.spec()); |
| 1484 EXPECT_TRUE(querier.urls()[7].last_forced_time.is_null()); |
| 1485 ASSERT_NO_FATAL_FAILURE(ContainsPrepopulatePages(querier, 8)); |
| 1486 |
| 1487 // Add some collisions with forced and non-forced. Non-forced URLs are never |
| 1488 // expected to move. |
| 1489 EXPECT_TRUE(AddForcedURL(GURL("http://forced/3"), |
| 1490 base::Time::FromJsTime(4000))); |
| 1491 EXPECT_TRUE(AddForcedURL(GURL("http://forced/1"), |
| 1492 base::Time::FromJsTime(1000))); |
| 1493 EXPECT_FALSE(AddForcedURL(GURL("http://nonforced/0"), |
| 1494 base::Time::FromJsTime(6000))); |
| 1495 |
| 1496 // Check relevant URLs. |
| 1497 querier.QueryAllTopSites(top_sites(), false, true); |
| 1498 ASSERT_EQ(8u + GetPrepopulatePages().size(), querier.urls().size()); |
| 1499 EXPECT_EQ("http://forced/1", querier.urls()[0].url.spec()); |
| 1500 EXPECT_EQ(1000u, querier.urls()[0].last_forced_time.ToJsTime()); |
| 1501 EXPECT_EQ("http://forced/3", querier.urls()[3].url.spec()); |
| 1502 EXPECT_EQ(4000u, querier.urls()[3].last_forced_time.ToJsTime()); |
| 1503 EXPECT_EQ("http://nonforced/0", querier.urls()[5].url.spec()); |
| 1504 EXPECT_TRUE(querier.urls()[5].last_forced_time.is_null()); |
| 1505 |
| 1506 // Add a timestamp collision and make sure things don't break. |
| 1507 EXPECT_TRUE(AddForcedURL(GURL("http://forced/5"), |
| 1508 base::Time::FromJsTime(4000))); |
| 1509 querier.QueryAllTopSites(top_sites(), false, true); |
| 1510 ASSERT_EQ(9u + GetPrepopulatePages().size(), querier.urls().size()); |
| 1511 EXPECT_EQ(4000u, querier.urls()[3].last_forced_time.ToJsTime()); |
| 1512 EXPECT_EQ(4000u, querier.urls()[4].last_forced_time.ToJsTime()); |
| 1513 // We don't care which order they get sorted in. |
| 1514 if (querier.urls()[3].url.spec() == "http://forced/3") { |
| 1515 EXPECT_EQ("http://forced/3", querier.urls()[3].url.spec()); |
| 1516 EXPECT_EQ("http://forced/5", querier.urls()[4].url.spec()); |
| 1517 } else { |
| 1518 EXPECT_EQ("http://forced/5", querier.urls()[3].url.spec()); |
| 1519 EXPECT_EQ("http://forced/3", querier.urls()[4].url.spec()); |
| 1520 } |
| 1521 |
| 1522 // Make sure the thumbnail is not lost when the timestamp is updated. |
| 1523 gfx::Image red_thumbnail(CreateBitmap(SK_ColorRED)); |
| 1524 ASSERT_TRUE(top_sites()->SetPageThumbnail( |
| 1525 GURL("http://forced/5"), red_thumbnail, ThumbnailScore())); |
| 1526 |
| 1527 // Get the original thumbnail for later comparison. Some compression can |
| 1528 // happen in |top_sites| and we don't want to depend on that. |
| 1529 SkBitmap orig_thumbnail = GetThumbnail(GURL("http://forced/5")); |
| 1530 |
| 1531 EXPECT_TRUE(AddForcedURL(GURL("http://forced/5"), |
| 1532 base::Time::FromJsTime(6000))); |
| 1533 |
| 1534 // Ensure the thumbnail is still there even if the timestamp changed. |
| 1535 querier.QueryAllTopSites(top_sites(), false, true); |
| 1536 EXPECT_EQ("http://forced/5", querier.urls()[5].url.spec()); |
| 1537 EXPECT_EQ(6000u, querier.urls()[5].last_forced_time.ToJsTime()); |
| 1538 SkBitmap thumbnail = GetThumbnail(GURL("http://forced/5")); |
| 1539 ASSERT_EQ(orig_thumbnail.getSize(), thumbnail.getSize()); |
| 1540 orig_thumbnail.lockPixels(); |
| 1541 thumbnail.lockPixels(); |
| 1542 EXPECT_EQ(0, memcmp(orig_thumbnail.getPixels(), thumbnail.getPixels(), |
| 1543 orig_thumbnail.getSize())); |
| 1544 thumbnail.unlockPixels(); |
| 1545 orig_thumbnail.unlockPixels(); |
| 1546 } |
| 1547 |
1459 } // namespace history | 1548 } // namespace history |
OLD | NEW |