| 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_));
|
|
|