Chromium Code Reviews| 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 011772907e47d200bde7f0f38e317793d9ad3f29..8a4b20a305c2171a8e83e8812d78ec63bfea7d8d 100644 |
| --- a/chrome/browser/history/thumbnail_database_unittest.cc |
| +++ b/chrome/browser/history/thumbnail_database_unittest.cc |
| @@ -121,7 +121,7 @@ TEST_F(ThumbnailDatabaseTest, GetFaviconAfterMigrationToTopSites) { |
| GURL url("http://google.com"); |
| FaviconID id = db.AddFavicon(url, FAVICON); |
| base::Time time = base::Time::Now(); |
| - db.SetFavicon(id, favicon, time); |
| + db.AddFaviconFrame(id, favicon, time); |
| EXPECT_TRUE(db.RenameAndDropThumbnails(file_name_, new_file_name_)); |
| EXPECT_TRUE(db.IsLatestVersion()); |
| @@ -152,7 +152,7 @@ TEST_F(ThumbnailDatabaseTest, AddIconMapping) { |
| FaviconID id = db.AddFavicon(url, TOUCH_ICON); |
| EXPECT_NE(0, id); |
| base::Time time = base::Time::Now(); |
| - db.SetFavicon(id, favicon, time); |
| + db.AddFaviconFrame(id, favicon, time); |
| EXPECT_NE(0, db.AddIconMapping(url, id)); |
| std::vector<IconMapping> icon_mapping; |
| @@ -173,7 +173,7 @@ TEST_F(ThumbnailDatabaseTest, UpdateIconMapping) { |
| GURL url("http://google.com"); |
| FaviconID id = db.AddFavicon(url, TOUCH_ICON); |
| base::Time time = base::Time::Now(); |
| - db.SetFavicon(id, favicon, time); |
| + db.AddFaviconFrame(id, favicon, time); |
| EXPECT_TRUE(0 < db.AddIconMapping(url, id)); |
| std::vector<IconMapping> icon_mapping; |
| @@ -205,11 +205,11 @@ TEST_F(ThumbnailDatabaseTest, DeleteIconMappings) { |
| GURL url("http://google.com"); |
| FaviconID id = db.AddFavicon(url, TOUCH_ICON); |
| base::Time time = base::Time::Now(); |
| - db.SetFavicon(id, favicon, time); |
| + db.AddFaviconFrame(id, favicon, time); |
| EXPECT_TRUE(0 < db.AddIconMapping(url, id)); |
| FaviconID id2 = db.AddFavicon(url, FAVICON); |
| - db.SetFavicon(id2, favicon, time); |
| + db.AddFaviconFrame(id2, favicon, time); |
| EXPECT_TRUE(0 < db.AddIconMapping(url, id2)); |
| ASSERT_NE(id, id2); |
| @@ -237,12 +237,12 @@ TEST_F(ThumbnailDatabaseTest, GetIconMappingsForPageURL) { |
| FaviconID id1 = db.AddFavicon(url, TOUCH_ICON); |
| base::Time time = base::Time::Now(); |
| - db.SetFavicon(id1, favicon, time); |
| + db.AddFaviconFrame(id1, favicon, time); |
| EXPECT_TRUE(0 < db.AddIconMapping(url, id1)); |
| FaviconID id2 = db.AddFavicon(url, FAVICON); |
| EXPECT_NE(id1, id2); |
| - db.SetFavicon(id2, favicon, time); |
| + db.AddFaviconFrame(id2, favicon, time); |
| EXPECT_TRUE(0 < db.AddIconMapping(url, id2)); |
| std::vector<IconMapping> icon_mapping; |
| @@ -275,19 +275,20 @@ TEST_F(ThumbnailDatabaseTest, UpgradeToVersion4) { |
| EXPECT_TRUE(db.UpgradeToVersion4()); |
| - std::vector<unsigned char> data(blob1, blob1 + sizeof(blob1)); |
| - scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); |
| - |
| GURL url("http://google.com"); |
| - FaviconID id = db.AddFavicon(url, TOUCH_ICON); |
| - base::Time time = base::Time::Now(); |
| - db.SetFavicon(id, favicon, time); |
| - EXPECT_TRUE(0 < db.AddIconMapping(url, id)); |
| - IconMapping icon_mapping; |
| - EXPECT_TRUE(db.GetIconMappingForPageURL(url, TOUCH_ICON, &icon_mapping)); |
| - EXPECT_EQ(url, icon_mapping.page_url); |
| - EXPECT_EQ(id, icon_mapping.icon_id); |
| + sql::Statement statement; |
| + statement.Assign(db.db_.GetCachedStatement(SQL_FROM_HERE, |
| + "INSERT INTO favicons (url, icon_type) VALUES (?, ?)")); |
| + statement.BindString(0, URLDatabase::GURLToDatabaseURL(url)); |
| + statement.BindInt(1, TOUCH_ICON); |
| + EXPECT_TRUE(statement.Run()); |
| + |
| + statement.Assign(db.db_.GetCachedStatement(SQL_FROM_HERE, |
| + "SELECT icon_type FROM favicons")); |
| + EXPECT_TRUE(statement.Step()); |
| + |
| + EXPECT_EQ(TOUCH_ICON, static_cast<IconType>(statement.ColumnInt(0))); |
| } |
| TEST_F(ThumbnailDatabaseTest, UpgradeToVersion5) { |
| @@ -318,6 +319,71 @@ TEST_F(ThumbnailDatabaseTest, UpgradeToVersion5) { |
| EXPECT_TRUE(db.db_.Execute(sql.c_str())); |
| } |
| +TEST_F(ThumbnailDatabaseTest, UpgradeToVersion6) { |
| + ThumbnailDatabase db; |
| + ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL)); |
| + db.BeginTransaction(); |
| + |
| + const char* name = "favicons"; |
| + std::string sql; |
| + sql.append("DROP TABLE IF EXISTS "); |
| + sql.append(name); |
| + EXPECT_TRUE(db.db_.Execute(sql.c_str())); |
| + |
| + sql.resize(0); |
| + sql.append("CREATE TABLE "); |
| + sql.append(name); |
| + sql.append("(" |
| + "id INTEGER PRIMARY KEY," |
| + "url LONGVARCHAR NOT NULL," |
| + "last_updated INTEGER DEFAULT 0," |
| + "image_data BLOB," |
| + "icon_type INTEGER DEFAULT 1," |
| + "sizes LONGVARCHAR)"); |
| + EXPECT_TRUE(db.db_.Execute(sql.c_str())); |
| + |
| + int favicon_id = 1; |
| + GURL url("http://google.com"); |
| + time_t last_updated = Time::Now().ToTimeT(); |
| + std::vector<unsigned char> data(blob1, blob1 + sizeof(blob1)); |
| + scoped_refptr<base::RefCountedBytes> bitmap_data( |
| + new base::RefCountedBytes(data)); |
| + |
| + sql::Statement statement; |
| + statement.Assign(db.db_.GetCachedStatement(SQL_FROM_HERE, |
| + "INSERT INTO favicons (id, url, last_updated, image_data, icon_type, " |
| + "sizes) VALUES (?, ?, ?, ?, ?, ?)")); |
| + statement.BindInt(0, favicon_id); |
| + statement.BindString(1, URLDatabase::GURLToDatabaseURL(url)); |
| + statement.BindInt64(2, last_updated); |
| + statement.BindBlob(3, bitmap_data->front(), |
| + static_cast<int>(bitmap_data->size())); |
| + statement.BindInt(4, TOUCH_ICON); |
| + statement.BindCString(5, "Data which happened to be there"); |
| + EXPECT_TRUE(statement.Run()); |
| + |
| + EXPECT_TRUE(db.UpgradeToVersion6()); |
| + |
| + statement.Assign(db.db_.GetCachedStatement(SQL_FROM_HERE, |
| + "SELECT id, url, icon_type, sizes FROM favicons")); |
| + EXPECT_TRUE(statement.Step()); |
| + EXPECT_EQ(favicon_id, statement.ColumnInt(0)); |
| + EXPECT_EQ(url, GURL(statement.ColumnString(1))); |
| + EXPECT_EQ(TOUCH_ICON, statement.ColumnInt(2)); |
| + // sizes should not be copied to new version of database. |
| + EXPECT_EQ(std::string(""), statement.ColumnString(3)); |
|
sky
2012/08/02 19:57:01
no ""
|
| + |
| + // Query width and height to ensure that the columns exist. |
|
sky
2012/08/02 19:57:01
Can you also verify the size is set to 16x16 in th
|
| + statement.Assign(db.db_.GetCachedStatement(SQL_FROM_HERE, |
| + "SELECT icon_id, last_updated, image_data, width, height " |
| + "FROM favicon_frames")); |
| + EXPECT_TRUE(statement.Step()); |
| + EXPECT_EQ(favicon_id, statement.ColumnInt(0)); |
| + EXPECT_EQ(last_updated, statement.ColumnInt64(1)); |
| + EXPECT_EQ(static_cast<int>(bitmap_data->size()), |
| + statement.ColumnByteLength(2)); |
| +} |
| + |
| TEST_F(ThumbnailDatabaseTest, TemporayIconMapping) { |
| ThumbnailDatabase db; |
| @@ -333,7 +399,7 @@ TEST_F(ThumbnailDatabaseTest, TemporayIconMapping) { |
| GURL url("http://google.com"); |
| FaviconID id = db.AddFavicon(url, FAVICON); |
| base::Time time = base::Time::Now(); |
| - db.SetFavicon(id, favicon, time); |
| + db.AddFaviconFrame(id, favicon, time); |
| db.AddToTemporaryIconMappingTable(url, id); |
| db.CommitTemporaryIconMappingTable(); |
| @@ -343,6 +409,31 @@ TEST_F(ThumbnailDatabaseTest, TemporayIconMapping) { |
| EXPECT_EQ(url, icon_mapping.page_url); |
| } |
| +TEST_F(ThumbnailDatabaseTest, DeleteFavicon) { |
| + ThumbnailDatabase db; |
| + ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL)); |
| + db.BeginTransaction(); |
| + |
| + std::vector<unsigned char> data1(blob1, blob1 + sizeof(blob1)); |
| + scoped_refptr<base::RefCountedBytes> favicon1( |
| + new base::RefCountedBytes(data1)); |
| + std::vector<unsigned char> data2(blob2, blob2 + sizeof(blob2)); |
| + scoped_refptr<base::RefCountedBytes> favicon2( |
| + new base::RefCountedBytes(data2)); |
| + |
| + GURL url("http://google.com"); |
| + FaviconID id = db.AddFavicon(url, FAVICON); |
| + base::Time last_updated = base::Time::Now(); |
| + db.AddFaviconFrame(id, favicon1, last_updated); |
| + db.AddFaviconFrame(id, favicon2, last_updated); |
| + |
| + std::vector<unsigned char> result_data; |
| + EXPECT_TRUE(db.GetFaviconFrame(id, NULL, &result_data)); |
| + |
| + EXPECT_TRUE(db.DeleteFavicon(id)); |
| + EXPECT_FALSE(db.GetFaviconFrame(id, NULL, &result_data)); |
| +} |
| + |
| TEST_F(ThumbnailDatabaseTest, GetIconMappingsForPageURLForReturnOrder) { |
| ThumbnailDatabase db; |
| ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL)); |
| @@ -355,7 +446,7 @@ TEST_F(ThumbnailDatabaseTest, GetIconMappingsForPageURLForReturnOrder) { |
| GURL url("http://google.com"); |
| FaviconID id = db.AddFavicon(url, FAVICON); |
| base::Time time = base::Time::Now(); |
| - db.SetFavicon(id, favicon, time); |
| + db.AddFaviconFrame(id, favicon, time); |
| EXPECT_NE(0, db.AddIconMapping(url, id)); |
| std::vector<IconMapping> icon_mapping; |
| @@ -371,7 +462,7 @@ TEST_F(ThumbnailDatabaseTest, GetIconMappingsForPageURLForReturnOrder) { |
| new base::RefCountedBytes(data); |
| FaviconID id2 = db.AddFavicon(url, TOUCH_ICON); |
| - db.SetFavicon(id2, favicon2, time); |
| + db.AddFaviconFrame(id2, favicon2, time); |
| EXPECT_NE(0, db.AddIconMapping(url, id2)); |
| icon_mapping.clear(); |
| @@ -386,7 +477,7 @@ TEST_F(ThumbnailDatabaseTest, GetIconMappingsForPageURLForReturnOrder) { |
| new base::RefCountedBytes(data2); |
| FaviconID id3 = db.AddFavicon(url, TOUCH_PRECOMPOSED_ICON); |
| - db.SetFavicon(id3, favicon3, time); |
| + db.AddFaviconFrame(id3, favicon3, time); |
| EXPECT_NE(0, db.AddIconMapping(url, id3)); |
| icon_mapping.clear(); |
| @@ -409,19 +500,19 @@ TEST_F(ThumbnailDatabaseTest, HasMappingFor) { |
| FaviconID id1 = db.AddFavicon(GURL("http://google.com"), FAVICON); |
| EXPECT_NE(id1, 0); |
| base::Time time = base::Time::Now(); |
| - db.SetFavicon(id1, favicon, time); |
| + db.AddFaviconFrame(id1, favicon, time); |
| // Add another type of favicon |
| FaviconID id2 = db.AddFavicon(GURL("http://www.google.com/icon"), TOUCH_ICON); |
| EXPECT_NE(id2, 0); |
| time = base::Time::Now(); |
| - db.SetFavicon(id2, favicon, time); |
| + db.AddFaviconFrame(id2, favicon, time); |
| // Add 3rd favicon |
| FaviconID id3 = db.AddFavicon(GURL("http://www.google.com/icon"), TOUCH_ICON); |
| EXPECT_NE(id3, 0); |
| time = base::Time::Now(); |
| - db.SetFavicon(id3, favicon, time); |
| + db.AddFaviconFrame(id3, favicon, time); |
| // Add 2 icon mapping |
| GURL page_url("http://www.google.com"); |
| @@ -451,19 +542,19 @@ TEST_F(ThumbnailDatabaseTest, CloneIconMapping) { |
| FaviconID id1 = db.AddFavicon(GURL("http://google.com"), FAVICON); |
| EXPECT_NE(0, id1); |
| base::Time time = base::Time::Now(); |
| - db.SetFavicon(id1, favicon, time); |
| + db.AddFaviconFrame(id1, favicon, time); |
| // Add another type of favicon |
| FaviconID id2 = db.AddFavicon(GURL("http://www.google.com/icon"), TOUCH_ICON); |
| EXPECT_NE(0, id2); |
| time = base::Time::Now(); |
| - db.SetFavicon(id2, favicon, time); |
| + db.AddFaviconFrame(id2, favicon, time); |
| // Add 3rd favicon |
| FaviconID id3 = db.AddFavicon(GURL("http://www.google.com/icon"), TOUCH_ICON); |
| EXPECT_NE(0, id3); |
| time = base::Time::Now(); |
| - db.SetFavicon(id3, favicon, time); |
| + db.AddFaviconFrame(id3, favicon, time); |
| GURL page1_url("http://page1.com"); |
| EXPECT_TRUE(db.AddIconMapping(page1_url, id1)); |
| @@ -566,20 +657,20 @@ TEST_F(ThumbnailDatabaseTest, IconMappingEnumerator) { |
| GURL url("http://google.com"); |
| FaviconID touch_icon_id1 = db.AddFavicon(url, TOUCH_ICON); |
| ASSERT_NE(0, touch_icon_id1); |
| - ASSERT_TRUE(db.SetFavicon(touch_icon_id1, favicon, base::Time::Now())); |
| + ASSERT_TRUE(db.AddFaviconFrame(touch_icon_id1, favicon, base::Time::Now())); |
| IconMappingID touch_mapping_id1 = db.AddIconMapping(url, touch_icon_id1); |
| ASSERT_NE(0, touch_mapping_id1); |
| FaviconID favicon_id1 = db.AddFavicon(url, FAVICON); |
| ASSERT_NE(0, favicon_id1); |
| - ASSERT_TRUE(db.SetFavicon(favicon_id1, favicon, base::Time::Now())); |
| + ASSERT_TRUE(db.AddFaviconFrame(favicon_id1, favicon, base::Time::Now())); |
| IconMappingID favicon_mapping_id1 = db.AddIconMapping(url, favicon_id1); |
| ASSERT_NE(0, favicon_mapping_id1); |
| GURL url2("http://chromium.org"); |
| FaviconID favicon_id2 = db.AddFavicon(url2, FAVICON); |
| ASSERT_NE(0, favicon_id2); |
| - ASSERT_TRUE(db.SetFavicon(favicon_id2, favicon, base::Time::Now())); |
| + ASSERT_TRUE(db.AddFaviconFrame(favicon_id2, favicon, base::Time::Now())); |
| IconMappingID favicon_mapping_id2 = db.AddIconMapping(url2, favicon_id2); |
| ASSERT_NE(0, favicon_mapping_id2); |