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 a4455309e88125bb7f0e1809f676581955494a07..c5b715df4a18ba744dc698bd305683cacdae2d82 100644 |
--- a/chrome/browser/history/thumbnail_database_unittest.cc |
+++ b/chrome/browser/history/thumbnail_database_unittest.cc |
@@ -433,6 +433,68 @@ TEST_F(ThumbnailDatabaseTest, HasMappingFor) { |
EXPECT_FALSE(db.HasMappingFor(id3)); |
} |
+TEST_F(ThumbnailDatabaseTest, CloneIconMapping) { |
+ ThumbnailDatabase db; |
+ ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL)); |
+ db.BeginTransaction(); |
+ |
+ std::vector<unsigned char> data(blob1, blob1 + sizeof(blob1)); |
+ scoped_refptr<RefCountedBytes> favicon(new RefCountedBytes(data)); |
+ |
+ // Add a favicon which will have icon_mappings |
+ FaviconID id1 = db.AddFavicon(GURL("http://google.com"), FAVICON); |
+ EXPECT_NE(id1, 0); |
+ base::Time time = base::Time::Now(); |
+ db.SetFavicon(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); |
+ |
+ // 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); |
+ |
+ GURL page1_url("http://page1.com"); |
+ EXPECT_TRUE(db.AddIconMapping(page1_url, id1)); |
+ EXPECT_TRUE(db.AddIconMapping(page1_url, id2)); |
+ |
+ GURL page2_url("http://page2.com"); |
+ EXPECT_TRUE(db.AddIconMapping(page2_url, id3)); |
+ |
+ // Test we do nothing with existing mappings. |
+ std::vector<IconMapping> icon_mapping; |
+ EXPECT_TRUE(db.GetIconMappingsForPageURL(page2_url, &icon_mapping)); |
+ ASSERT_EQ(1U, icon_mapping.size()); |
+ |
+ EXPECT_TRUE(db.CloneIconMapping(page1_url, page2_url)); |
+ |
+ icon_mapping.clear(); |
+ EXPECT_TRUE(db.GetIconMappingsForPageURL(page2_url, &icon_mapping)); |
+ ASSERT_EQ(1U, icon_mapping.size()); |
+ EXPECT_EQ(page2_url, icon_mapping[0].page_url); |
+ EXPECT_EQ(id3, icon_mapping[0].icon_id); |
+ |
+ // Test we clone if the new page has no mappings. |
+ GURL page3_url("http://page3.com"); |
+ EXPECT_TRUE(db.CloneIconMapping(page1_url, page3_url)); |
+ |
+ icon_mapping.clear(); |
+ EXPECT_TRUE(db.GetIconMappingsForPageURL(page3_url, &icon_mapping)); |
+ |
+ ASSERT_EQ(2U, icon_mapping.size()); |
+ if (icon_mapping[0].icon_id == id2) |
+ std::swap(icon_mapping[0], icon_mapping[1]); |
+ EXPECT_EQ(page3_url, icon_mapping[0].page_url); |
+ EXPECT_EQ(id1, icon_mapping[0].icon_id); |
+ EXPECT_EQ(page3_url, icon_mapping[1].page_url); |
+ EXPECT_EQ(id2, icon_mapping[1].icon_id); |
+} |
+ |
TEST_F(IconMappingMigrationTest, TestIconMappingMigration) { |
HistoryDatabase history_db; |
ASSERT_TRUE(history_db.db_.Open(history_db_name_)); |