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

Side by Side Diff: chrome/browser/history/top_sites_impl_unittest.cc

Issue 59903010: Ensure using chrome://thumb2/... adds the URL as a forced URL in TopSites so that a thumbnail is ca… (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Take 2. Created 7 years, 1 month 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 | Annotate | Revision Log
« no previous file with comments | « chrome/browser/history/top_sites_impl.cc ('k') | chrome/browser/thumbnails/thumbnail_service.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
OLDNEW
« no previous file with comments | « chrome/browser/history/top_sites_impl.cc ('k') | chrome/browser/thumbnails/thumbnail_service.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698