Index: chrome/browser/history/thumbnail_database_unittest.cc |
diff --git a/chrome/browser/history/thumbnail_database_unittest.cc b/chrome/browser/history/thumbnail_database_unittest.cc |
index 0b2c6ab9bd06463515e6698613766555b8b47540..9ff959d8b012f0fb8a4eb87d3d1c010a3d9e0246 100644 |
--- a/chrome/browser/history/thumbnail_database_unittest.cc |
+++ b/chrome/browser/history/thumbnail_database_unittest.cc |
@@ -66,7 +66,7 @@ WARN_UNUSED_RESULT bool CreateDatabaseFromSQL(const base::FilePath &db_path, |
// negatively with future schema changes. |
void VerifyTablesAndColumns(sql::Connection* db) { |
// [meta], [favicons], [favicon_bitmaps], and [icon_mapping]. |
- EXPECT_EQ(4u, sql::test::CountSQLTables(db)); |
+ EXPECT_EQ(5u, sql::test::CountSQLTables(db)); |
// Implicit index on [meta], index on [favicons], index on |
// [favicon_bitmaps], two indices on [icon_mapping]. |
@@ -83,6 +83,9 @@ void VerifyTablesAndColumns(sql::Connection* db) { |
// [id], [page_url], and [icon_id]. |
EXPECT_EQ(3u, sql::test::CountTableColumns(db, "icon_mapping")); |
+ |
+ // [bitmap_id], [last_requested]. |
+ EXPECT_EQ(2u, sql::test::CountTableColumns(db, "favicon_bitmap_usage")); |
} |
void VerifyDatabaseEmpty(sql::Connection* db) { |
@@ -93,6 +96,8 @@ void VerifyDatabaseEmpty(sql::Connection* db) { |
EXPECT_EQ(0u, rows); |
EXPECT_TRUE(sql::test::CountTableRows(db, "icon_mapping", &rows)); |
EXPECT_EQ(0u, rows); |
+ EXPECT_TRUE(sql::test::CountTableRows(db, "favicon_bitmap_usage", &rows)); |
+ EXPECT_EQ(0u, rows); |
} |
// Helper to check that an expected mapping exists. |
@@ -156,6 +161,51 @@ WARN_UNUSED_RESULT bool CheckPageHasIcon( |
return true; |
} |
+WARN_UNUSED_RESULT bool CheckBitmapLastRequestTime( |
+ ThumbnailDatabase* db, |
+ const GURL& page_url, |
+ favicon_base::IconType icon_type, |
+ const gfx::Size& icon_size, |
+ base::Time* request_timestamp) { |
+ std::vector<IconMapping> icon_mappings; |
+ if (!db->GetIconMappingsForPageURL(page_url, &icon_mappings)) { |
+ ADD_FAILURE() << "failed GetIconMappingsForPageURL()"; |
+ return false; |
+ } |
+ |
+ // Scan for the expected type. |
+ std::vector<IconMapping>::const_iterator icon_iter = icon_mappings.begin(); |
+ for (; icon_iter != icon_mappings.end(); ++icon_iter) { |
+ if (icon_iter->icon_type == icon_type) |
+ break; |
+ } |
+ if (icon_iter == icon_mappings.end()) { |
+ ADD_FAILURE() << "failed to find |icon_type|"; |
+ return false; |
+ } |
+ |
+ std::vector<FaviconBitmap> favicon_bitmaps; |
+ if (!db->GetFaviconBitmaps(icon_iter->icon_id, &favicon_bitmaps)) { |
+ ADD_FAILURE() << "failed GetFaviconBitmaps()"; |
+ return false; |
+ } |
+ |
+ std::vector<FaviconBitmap>::const_iterator bitmap_iter = |
+ favicon_bitmaps.begin(); |
+ for (; bitmap_iter != favicon_bitmaps.end(); ++bitmap_iter) { |
+ if (bitmap_iter->pixel_size == icon_size) |
+ break; |
+ } |
+ |
+ if (bitmap_iter == favicon_bitmaps.end()) { |
+ ADD_FAILURE() << "failed to find |icon_size|"; |
+ return false; |
+ } |
+ |
+ return db->GetFaviconBitmapLastRequestedTime(bitmap_iter->bitmap_id, |
+ request_timestamp); |
+} |
+ |
} // namespace |
class ThumbnailDatabaseTest : public testing::Test { |
@@ -766,6 +816,42 @@ TEST_F(ThumbnailDatabaseTest, Version7) { |
kBlob2)); |
} |
+// Test loading version 8 database. |
+TEST_F(ThumbnailDatabaseTest, Version8) { |
+ scoped_ptr<ThumbnailDatabase> db = LoadFromGolden("Favicons.v8.sql"); |
+ ASSERT_TRUE(db.get() != NULL); |
+ VerifyTablesAndColumns(&db->db_); |
+ |
+ EXPECT_TRUE(CheckPageHasIcon(db.get(), |
+ kPageUrl1, |
+ favicon_base::FAVICON, |
+ kIconUrl1, |
+ kLargeSize, |
+ sizeof(kBlob1), |
+ kBlob1)); |
+ EXPECT_TRUE(CheckPageHasIcon(db.get(), |
+ kPageUrl2, |
+ favicon_base::FAVICON, |
+ kIconUrl2, |
+ kLargeSize, |
+ sizeof(kBlob2), |
+ kBlob2)); |
+ EXPECT_TRUE(CheckPageHasIcon(db.get(), |
+ kPageUrl3, |
+ favicon_base::FAVICON, |
+ kIconUrl1, |
+ kLargeSize, |
+ sizeof(kBlob1), |
+ kBlob1)); |
+ EXPECT_TRUE(CheckPageHasIcon(db.get(), |
+ kPageUrl3, |
+ favicon_base::TOUCH_ICON, |
+ kIconUrl3, |
+ kLargeSize, |
+ sizeof(kBlob2), |
+ kBlob2)); |
+} |
+ |
TEST_F(ThumbnailDatabaseTest, Recovery) { |
// This code tests the recovery module in concert with Chromium's |
// custom recover virtual table. Under USE_SYSTEM_SQLITE, this is |
@@ -778,7 +864,7 @@ TEST_F(ThumbnailDatabaseTest, Recovery) { |
// Create an example database. |
{ |
- EXPECT_TRUE(CreateDatabaseFromSQL(file_name_, "Favicons.v7.sql")); |
+ EXPECT_TRUE(CreateDatabaseFromSQL(file_name_, "Favicons.v8.sql")); |
sql::Connection raw_db; |
EXPECT_TRUE(raw_db.Open(file_name_)); |