Index: chrome/browser/history/top_sites_database_unittest.cc |
diff --git a/chrome/browser/history/top_sites_database_unittest.cc b/chrome/browser/history/top_sites_database_unittest.cc |
index bcd119aee1220a76b43e7ad0d96ecd5db6e168c7..40040655ba1e99f1f7be813b2a46d5cc15bcb1de 100644 |
--- a/chrome/browser/history/top_sites_database_unittest.cc |
+++ b/chrome/browser/history/top_sites_database_unittest.cc |
@@ -5,6 +5,7 @@ |
#include "base/files/file_path.h" |
#include "base/files/scoped_temp_dir.h" |
#include "base/path_service.h" |
+#include "base/strings/utf_string_conversions.h" |
#include "chrome/browser/history/top_sites_database.h" |
#include "chrome/common/chrome_paths.h" |
#include "chrome/tools/profiles/thumbnail-inl.h" |
@@ -46,8 +47,8 @@ void VerifyTablesAndColumns(sql::Connection* db) { |
// [url], [url_rank], [title], [thumbnail], [redirects], |
// [boring_score], [good_clipping], [at_top], [last_updated], and |
- // [load_completed]. |
- EXPECT_EQ(10u, sql::test::CountTableColumns(db, "thumbnails")); |
+ // [load_completed], [last_forced] |
+ EXPECT_EQ(11u, sql::test::CountTableColumns(db, "thumbnails")); |
} |
} // namespace |
@@ -120,4 +121,155 @@ TEST_F(TopSitesDatabaseTest, Version2) { |
ASSERT_EQ(2u, thumbnails.size()); |
} |
+TEST_F(TopSitesDatabaseTest, Version3) { |
+ ASSERT_TRUE(CreateDatabaseFromSQL(file_name_, "TopSites.v3.sql")); |
+ |
+ TopSitesDatabase db; |
+ ASSERT_TRUE(db.Init(file_name_)); |
+ |
+ VerifyTablesAndColumns(db.db_.get()); |
+ |
+ // Basic operational check. |
+ MostVisitedURLList urls; |
+ std::map<GURL, Images> thumbnails; |
+ db.GetPageThumbnails(&urls, &thumbnails); |
+ ASSERT_EQ(3u, urls.size()); |
+ ASSERT_EQ(3u, thumbnails.size()); |
+ EXPECT_EQ(kUrl, urls[0].url); // [0] because of url_rank. |
+ // kGoogleThumbnail includes nul terminator. |
+ ASSERT_EQ(sizeof(kGoogleThumbnail) - 1, |
+ thumbnails[urls[0].url].thumbnail->size()); |
+ EXPECT_TRUE(!memcmp(thumbnails[urls[0].url].thumbnail->front(), |
+ kGoogleThumbnail, sizeof(kGoogleThumbnail) - 1)); |
+ |
+ ASSERT_TRUE(db.RemoveURL(urls[1])); |
+ db.GetPageThumbnails(&urls, &thumbnails); |
+ ASSERT_EQ(2u, urls.size()); |
+ ASSERT_EQ(2u, thumbnails.size()); |
+} |
+ |
+TEST_F(TopSitesDatabaseTest, AddRemoveEditThumbnails) { |
+ ASSERT_TRUE(CreateDatabaseFromSQL(file_name_, "TopSites.v3.sql")); |
+ |
+ TopSitesDatabase db; |
+ ASSERT_TRUE(db.Init(file_name_)); |
+ |
+ // Add a new URL, not forced, rank = 1. |
+ GURL mapsUrl = GURL("http://maps.google.com/"); |
+ MostVisitedURL url1(mapsUrl, ASCIIToUTF16("Google Maps")); |
+ db.SetPageThumbnail(url1, 1, Images()); |
+ |
+ MostVisitedURLList urls; |
+ std::map<GURL, Images> thumbnails; |
+ db.GetPageThumbnails(&urls, &thumbnails); |
+ ASSERT_EQ(4u, urls.size()); |
+ ASSERT_EQ(4u, thumbnails.size()); |
+ EXPECT_EQ(kUrl, urls[0].url); |
+ EXPECT_EQ(mapsUrl, urls[1].url); |
+ |
+ // Add a new URL, forced. |
+ GURL driveUrl = GURL("http://drive.google.com/"); |
+ MostVisitedURL url2(driveUrl, ASCIIToUTF16("Google Drive")); |
+ url2.last_forced_time = base::Time::FromJsTime(789714000000); // 10/1/1995 |
+ db.SetPageThumbnail(url2, TopSitesDatabase::kRankOfForcedURL, Images()); |
+ |
+ db.GetPageThumbnails(&urls, &thumbnails); |
+ ASSERT_EQ(5u, urls.size()); |
+ ASSERT_EQ(5u, thumbnails.size()); |
+ EXPECT_EQ(driveUrl, urls[0].url); // Forced URLs always appear first. |
+ EXPECT_EQ(kUrl, urls[1].url); |
+ EXPECT_EQ(mapsUrl, urls[2].url); |
+ |
+ // Add a new URL, forced (earlier). |
+ GURL plusUrl = GURL("http://plus.google.com/"); |
+ MostVisitedURL url3(plusUrl, ASCIIToUTF16("Google Plus")); |
+ url3.last_forced_time = base::Time::FromJsTime(787035600000); // 10/12/1994 |
+ db.SetPageThumbnail(url3, TopSitesDatabase::kRankOfForcedURL, Images()); |
+ |
+ db.GetPageThumbnails(&urls, &thumbnails); |
+ ASSERT_EQ(6u, urls.size()); |
+ ASSERT_EQ(6u, thumbnails.size()); |
+ EXPECT_EQ(plusUrl, urls[0].url); // New forced URL should appear first. |
+ EXPECT_EQ(driveUrl, urls[1].url); |
+ EXPECT_EQ(kUrl, urls[2].url); |
+ EXPECT_EQ(mapsUrl, urls[3].url); |
+ |
+ // Change the last_forced_time of a forced URL. |
+ url3.last_forced_time = base::Time::FromJsTime(792392400000); // 10/2/1995 |
+ db.SetPageThumbnail(url3, TopSitesDatabase::kRankOfForcedURL, Images()); |
+ |
+ db.GetPageThumbnails(&urls, &thumbnails); |
+ ASSERT_EQ(6u, urls.size()); |
+ ASSERT_EQ(6u, thumbnails.size()); |
+ EXPECT_EQ(driveUrl, urls[0].url); |
+ EXPECT_EQ(plusUrl, urls[1].url); // Forced URL should have moved second. |
+ EXPECT_EQ(kUrl, urls[2].url); |
+ EXPECT_EQ(mapsUrl, urls[3].url); |
+ |
+ // Change a non-forced URL to forced using UpdatePageRank. |
+ url1.last_forced_time = base::Time::FromJsTime(792219600000); // 8/2/1995 |
+ db.UpdatePageRank(url1, TopSitesDatabase::kRankOfForcedURL); |
+ |
+ db.GetPageThumbnails(&urls, &thumbnails); |
+ ASSERT_EQ(6u, urls.size()); |
+ ASSERT_EQ(6u, thumbnails.size()); |
+ EXPECT_EQ(driveUrl, urls[0].url); |
+ EXPECT_EQ(mapsUrl, urls[1].url); // Maps moves to second forced URL. |
+ EXPECT_EQ(plusUrl, urls[2].url); |
+ EXPECT_EQ(kUrl, urls[3].url); |
+ |
+ // Change a forced URL to non-forced using SetPageThumbnail. |
+ db.SetPageThumbnail(url3, 1, Images()); |
+ |
+ db.GetPageThumbnails(&urls, &thumbnails); |
+ ASSERT_EQ(6u, urls.size()); |
+ ASSERT_EQ(6u, thumbnails.size()); |
+ EXPECT_EQ(driveUrl, urls[0].url); |
+ EXPECT_EQ(mapsUrl, urls[1].url); |
+ EXPECT_EQ(kUrl, urls[2].url); |
+ EXPECT_EQ(plusUrl, urls[3].url); // Plus moves to second non-forced URL. |
+ |
+ // Change a non-forced URL to earlier non-forced using UpdatePageRank. |
+ url3.last_forced_time = base::Time(); |
+ db.UpdatePageRank(url3, 0); |
+ |
+ db.GetPageThumbnails(&urls, &thumbnails); |
+ ASSERT_EQ(6u, urls.size()); |
+ ASSERT_EQ(6u, thumbnails.size()); |
+ EXPECT_EQ(driveUrl, urls[0].url); |
+ EXPECT_EQ(mapsUrl, urls[1].url); |
+ EXPECT_EQ(plusUrl, urls[2].url); // Plus moves to first non-forced URL. |
+ EXPECT_EQ(kUrl, urls[3].url); |
+ |
+ // Change a non-forced URL to later non-forced using SetPageThumbnail. |
+ db.SetPageThumbnail(url3, 2, Images()); |
+ |
+ db.GetPageThumbnails(&urls, &thumbnails); |
+ ASSERT_EQ(6u, urls.size()); |
+ ASSERT_EQ(6u, thumbnails.size()); |
+ EXPECT_EQ(driveUrl, urls[0].url); |
+ EXPECT_EQ(mapsUrl, urls[1].url); |
+ EXPECT_EQ(kUrl, urls[2].url); |
+ EXPECT_EQ(plusUrl, urls[4].url); // Plus moves to third non-forced URL. |
+ |
+ // Remove a non-forced URL. |
+ db.RemoveURL(url3); |
+ |
+ db.GetPageThumbnails(&urls, &thumbnails); |
+ ASSERT_EQ(5u, urls.size()); |
+ ASSERT_EQ(5u, thumbnails.size()); |
+ EXPECT_EQ(driveUrl, urls[0].url); |
+ EXPECT_EQ(mapsUrl, urls[1].url); |
+ EXPECT_EQ(kUrl, urls[2].url); |
+ |
+ // Remove a forced URL. |
+ db.RemoveURL(url2); |
+ |
+ db.GetPageThumbnails(&urls, &thumbnails); |
+ ASSERT_EQ(4u, urls.size()); |
+ ASSERT_EQ(4u, thumbnails.size()); |
+ EXPECT_EQ(mapsUrl, urls[0].url); |
+ EXPECT_EQ(kUrl, urls[1].url); |
+} |
+ |
} // namespace history |