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 6cfc59ddfdc19aa7cf71344a018cd67493ee429b..c9a904617df0d5f4a0666d00242a8b92c4ee0b4e 100644 |
--- a/chrome/browser/history/thumbnail_database_unittest.cc |
+++ b/chrome/browser/history/thumbnail_database_unittest.cc |
@@ -46,6 +46,9 @@ const double kTotallyBoring = 1.0; |
const int64 kPage1 = 1234; |
+const gfx::Size kFaviconRegularSize = gfx::Size(16, 16); |
+const gfx::Size kFaviconLargeSize = gfx::Size(32, 32); |
+ |
} // namespace |
class ThumbnailDatabaseTest : public testing::Test { |
@@ -119,7 +122,7 @@ TEST_F(ThumbnailDatabaseTest, GetFaviconAfterMigrationToTopSites) { |
scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); |
GURL url("http://google.com"); |
- FaviconID id = db.AddFavicon(url, FAVICON); |
+ FaviconID id = db.AddFavicon(url, kFaviconRegularSize, FAVICON); |
base::Time time = base::Time::Now(); |
db.SetFavicon(id, favicon, time); |
EXPECT_TRUE(db.RenameAndDropThumbnails(file_name_, new_file_name_)); |
@@ -130,7 +133,7 @@ TEST_F(ThumbnailDatabaseTest, GetFaviconAfterMigrationToTopSites) { |
GURL url_out; |
IconType icon_type_out; |
EXPECT_TRUE(db.GetFavicon(id, &time_out, &favicon_out, &url_out, |
- &icon_type_out)); |
+ NULL, &icon_type_out)); |
EXPECT_EQ(url, url_out); |
EXPECT_EQ(time.ToTimeT(), time_out.ToTimeT()); |
ASSERT_EQ(data.size(), favicon_out.size()); |
@@ -140,6 +143,49 @@ TEST_F(ThumbnailDatabaseTest, GetFaviconAfterMigrationToTopSites) { |
EXPECT_EQ(FAVICON, icon_type_out); |
} |
+TEST_F(ThumbnailDatabaseTest, GetFaviconIDsForURL) { |
+ 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<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); |
+ |
+ GURL url("http://google.com"); |
+ base::Time time = base::Time::Now(); |
+ |
+ FaviconID id1 = db.AddFavicon(url, kFaviconRegularSize, FAVICON); |
+ EXPECT_NE(0, id1); |
+ |
+ FaviconID id2 = db.AddFavicon(url, kFaviconRegularSize, TOUCH_ICON); |
+ EXPECT_NE(0, id2); |
+ |
+ FaviconID id3 = db.AddFavicon(url, kFaviconRegularSize, |
+ TOUCH_PRECOMPOSED_ICON); |
+ EXPECT_NE(0, id3); |
+ |
+ FaviconID id4 = db.AddFavicon(url, kFaviconLargeSize, |
+ TOUCH_PRECOMPOSED_ICON); |
+ EXPECT_NE(0, id4); |
+ |
+ std::vector<FaviconIDAndSize> favicon_id_size_listing; |
+ db.GetFaviconIDsForFaviconURL(url, TOUCH_ICON | TOUCH_PRECOMPOSED_ICON, |
+ &favicon_id_size_listing); |
+ EXPECT_EQ(2u, favicon_id_size_listing.size()); |
+ |
+ // No required order for differently sized entries. |
+ if (id3 == favicon_id_size_listing[0].icon_id) { |
+ EXPECT_EQ(kFaviconRegularSize, favicon_id_size_listing[0].icon_size); |
+ EXPECT_EQ(id4, favicon_id_size_listing[1].icon_id); |
+ EXPECT_EQ(kFaviconLargeSize, favicon_id_size_listing[1].icon_size); |
+ } else { |
+ EXPECT_EQ(id3, favicon_id_size_listing[1].icon_id); |
+ EXPECT_EQ(kFaviconRegularSize, favicon_id_size_listing[1].icon_size); |
+ EXPECT_EQ(id4, favicon_id_size_listing[0].icon_id); |
+ EXPECT_EQ(kFaviconLargeSize, favicon_id_size_listing[0].icon_size); |
+ } |
+} |
+ |
TEST_F(ThumbnailDatabaseTest, AddIconMapping) { |
ThumbnailDatabase db; |
ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL)); |
@@ -149,7 +195,7 @@ TEST_F(ThumbnailDatabaseTest, AddIconMapping) { |
scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); |
GURL url("http://google.com"); |
- FaviconID id = db.AddFavicon(url, TOUCH_ICON); |
+ FaviconID id = db.AddFavicon(url, kFaviconRegularSize, TOUCH_ICON); |
EXPECT_NE(0, id); |
base::Time time = base::Time::Now(); |
db.SetFavicon(id, favicon, time); |
@@ -171,7 +217,7 @@ TEST_F(ThumbnailDatabaseTest, UpdateIconMapping) { |
scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); |
GURL url("http://google.com"); |
- FaviconID id = db.AddFavicon(url, TOUCH_ICON); |
+ FaviconID id = db.AddFavicon(url, kFaviconRegularSize, TOUCH_ICON); |
base::Time time = base::Time::Now(); |
db.SetFavicon(id, favicon, time); |
@@ -183,7 +229,7 @@ TEST_F(ThumbnailDatabaseTest, UpdateIconMapping) { |
EXPECT_EQ(id, icon_mapping.front().icon_id); |
GURL url1("http://www.google.com/"); |
- FaviconID new_id = db.AddFavicon(url1, TOUCH_ICON); |
+ FaviconID new_id = db.AddFavicon(url1, kFaviconRegularSize, TOUCH_ICON); |
EXPECT_TRUE(db.UpdateIconMapping(icon_mapping.front().mapping_id, new_id)); |
icon_mapping.clear(); |
@@ -203,12 +249,12 @@ TEST_F(ThumbnailDatabaseTest, DeleteIconMappings) { |
scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); |
GURL url("http://google.com"); |
- FaviconID id = db.AddFavicon(url, TOUCH_ICON); |
+ FaviconID id = db.AddFavicon(url, kFaviconRegularSize, TOUCH_ICON); |
base::Time time = base::Time::Now(); |
db.SetFavicon(id, favicon, time); |
EXPECT_TRUE(0 < db.AddIconMapping(url, id)); |
- FaviconID id2 = db.AddFavicon(url, FAVICON); |
+ FaviconID id2 = db.AddFavicon(url, kFaviconRegularSize, FAVICON); |
db.SetFavicon(id2, favicon, time); |
EXPECT_TRUE(0 < db.AddIconMapping(url, id2)); |
ASSERT_NE(id, id2); |
@@ -217,12 +263,12 @@ TEST_F(ThumbnailDatabaseTest, DeleteIconMappings) { |
EXPECT_TRUE(db.GetIconMappingsForPageURL(url, &icon_mapping)); |
ASSERT_EQ(2u, icon_mapping.size()); |
EXPECT_EQ(icon_mapping.front().icon_type, TOUCH_ICON); |
- EXPECT_TRUE(db.GetIconMappingForPageURL(url, FAVICON, NULL)); |
+ EXPECT_TRUE(db.GetIconMappingsForPageURL(url, FAVICON, NULL)); |
db.DeleteIconMappings(url); |
EXPECT_FALSE(db.GetIconMappingsForPageURL(url, NULL)); |
- EXPECT_FALSE(db.GetIconMappingForPageURL(url, FAVICON, NULL)); |
+ EXPECT_FALSE(db.GetIconMappingsForPageURL(url, FAVICON, NULL)); |
} |
TEST_F(ThumbnailDatabaseTest, GetIconMappingsForPageURL) { |
@@ -235,21 +281,45 @@ TEST_F(ThumbnailDatabaseTest, GetIconMappingsForPageURL) { |
GURL url("http://google.com"); |
- FaviconID id1 = db.AddFavicon(url, TOUCH_ICON); |
+ FaviconID id1 = db.AddFavicon(url, kFaviconRegularSize, TOUCH_ICON); |
base::Time time = base::Time::Now(); |
db.SetFavicon(id1, favicon, time); |
EXPECT_TRUE(0 < db.AddIconMapping(url, id1)); |
- FaviconID id2 = db.AddFavicon(url, FAVICON); |
+ FaviconID id2 = db.AddFavicon(url, kFaviconRegularSize, FAVICON); |
EXPECT_NE(id1, id2); |
db.SetFavicon(id2, favicon, time); |
EXPECT_TRUE(0 < db.AddIconMapping(url, id2)); |
- std::vector<IconMapping> icon_mapping; |
- EXPECT_TRUE(db.GetIconMappingsForPageURL(url, &icon_mapping)); |
- ASSERT_EQ(2u, icon_mapping.size()); |
- EXPECT_NE(icon_mapping[0].icon_id, icon_mapping[1].icon_id); |
- EXPECT_TRUE(icon_mapping[0].icon_id == id1 && icon_mapping[1].icon_id == id2); |
+ FaviconID id3 = db.AddFavicon(url, kFaviconLargeSize, FAVICON); |
+ EXPECT_NE(id3, id1); |
+ EXPECT_NE(id3, id2); |
+ db.SetFavicon(id3, favicon, time); |
+ EXPECT_TRUE(0 < db.AddIconMapping(url, id3)); |
+ |
+ std::vector<IconMapping> icon_mappings; |
+ EXPECT_TRUE(db.GetIconMappingsForPageURL(url, &icon_mappings)); |
+ ASSERT_EQ(3u, icon_mappings.size()); |
+ EXPECT_EQ(id1, icon_mappings[0].icon_id); |
+ |
+ // No required order for differently sized entries. |
+ if (id2 == icon_mappings[1].icon_id) { |
+ EXPECT_EQ(id3, icon_mappings[2].icon_id); |
+ } else { |
+ EXPECT_EQ(id2, icon_mappings[2].icon_id); |
+ EXPECT_EQ(id3, icon_mappings[1].icon_id); |
+ } |
+ |
+ icon_mappings.clear(); |
+ EXPECT_TRUE(db.GetIconMappingsForPageURL(url, FAVICON, &icon_mappings)); |
+ ASSERT_EQ(2u, icon_mappings.size()); |
+ // No required order for differently sized entries. |
+ if (id2 == icon_mappings[0].icon_id) { |
+ EXPECT_EQ(id3, icon_mappings[1].icon_id); |
+ } else { |
+ EXPECT_EQ(id2, icon_mappings[1].icon_id); |
+ EXPECT_EQ(id3, icon_mappings[0].icon_id); |
+ } |
} |
TEST_F(ThumbnailDatabaseTest, UpgradeToVersion4) { |
@@ -386,16 +456,18 @@ TEST_F(ThumbnailDatabaseTest, TemporayIconMapping) { |
scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); |
GURL url("http://google.com"); |
- FaviconID id = db.AddFavicon(url, FAVICON); |
+ FaviconID id = db.AddFavicon(url, kFaviconRegularSize, FAVICON); |
base::Time time = base::Time::Now(); |
db.SetFavicon(id, favicon, time); |
db.AddToTemporaryIconMappingTable(url, id); |
db.CommitTemporaryIconMappingTable(); |
- IconMapping icon_mapping; |
- EXPECT_TRUE(db.GetIconMappingForPageURL(url, FAVICON, &icon_mapping)); |
- EXPECT_EQ(id, icon_mapping.icon_id); |
- EXPECT_EQ(url, icon_mapping.page_url); |
+ std::vector<IconMapping> icon_mappings; |
+ EXPECT_TRUE(db.GetIconMappingsForPageURL(url, FAVICON, &icon_mappings)); |
+ EXPECT_EQ(1u, icon_mappings.size()); |
+ EXPECT_EQ(id, icon_mappings[0].icon_id); |
+ EXPECT_EQ(url, icon_mappings[0].page_url); |
+ EXPECT_EQ(kFaviconRegularSize, icon_mappings[0].icon_pixel_size); |
} |
TEST_F(ThumbnailDatabaseTest, GetIconMappingsForPageURLForReturnOrder) { |
@@ -408,7 +480,7 @@ TEST_F(ThumbnailDatabaseTest, GetIconMappingsForPageURLForReturnOrder) { |
scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); |
GURL url("http://google.com"); |
- FaviconID id = db.AddFavicon(url, FAVICON); |
+ FaviconID id = db.AddFavicon(url, kFaviconRegularSize, FAVICON); |
base::Time time = base::Time::Now(); |
db.SetFavicon(id, favicon, time); |
@@ -425,7 +497,7 @@ TEST_F(ThumbnailDatabaseTest, GetIconMappingsForPageURLForReturnOrder) { |
scoped_refptr<base::RefCountedBytes> favicon2 = |
new base::RefCountedBytes(data); |
- FaviconID id2 = db.AddFavicon(url, TOUCH_ICON); |
+ FaviconID id2 = db.AddFavicon(url, kFaviconRegularSize, TOUCH_ICON); |
db.SetFavicon(id2, favicon2, time); |
EXPECT_NE(0, db.AddIconMapping(url, id2)); |
@@ -440,7 +512,8 @@ TEST_F(ThumbnailDatabaseTest, GetIconMappingsForPageURLForReturnOrder) { |
scoped_refptr<base::RefCountedBytes> favicon3 = |
new base::RefCountedBytes(data2); |
- FaviconID id3 = db.AddFavicon(url, TOUCH_PRECOMPOSED_ICON); |
+ FaviconID id3 = db.AddFavicon(url, kFaviconRegularSize, |
+ TOUCH_PRECOMPOSED_ICON); |
db.SetFavicon(id3, favicon3, time); |
EXPECT_NE(0, db.AddIconMapping(url, id3)); |
@@ -461,19 +534,22 @@ TEST_F(ThumbnailDatabaseTest, HasMappingFor) { |
scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); |
// Add a favicon which will have icon_mappings |
- FaviconID id1 = db.AddFavicon(GURL("http://google.com"), FAVICON); |
+ FaviconID id1 = db.AddFavicon(GURL("http://google.com"), kFaviconRegularSize, |
+ 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); |
+ FaviconID id2 = db.AddFavicon(GURL("http://www.google.com/icon"), |
+ kFaviconRegularSize, 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); |
+ FaviconID id3 = db.AddFavicon(GURL("http://www.google.com/icon"), |
+ kFaviconRegularSize, TOUCH_ICON); |
EXPECT_NE(id3, 0); |
time = base::Time::Now(); |
db.SetFavicon(id3, favicon, time); |
@@ -503,19 +579,22 @@ TEST_F(ThumbnailDatabaseTest, CloneIconMapping) { |
scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); |
// Add a favicon which will have icon_mappings |
- FaviconID id1 = db.AddFavicon(GURL("http://google.com"), FAVICON); |
+ FaviconID id1 = db.AddFavicon(GURL("http://google.com"), kFaviconRegularSize, |
+ FAVICON); |
EXPECT_NE(0, id1); |
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); |
+ FaviconID id2 = db.AddFavicon(GURL("http://www.google.com/icon"), |
+ kFaviconRegularSize, TOUCH_ICON); |
EXPECT_NE(0, id2); |
time = base::Time::Now(); |
db.SetFavicon(id2, favicon, time); |
// Add 3rd favicon |
- FaviconID id3 = db.AddFavicon(GURL("http://www.google.com/icon"), TOUCH_ICON); |
+ FaviconID id3 = db.AddFavicon(GURL("http://www.google.com/icon"), |
+ kFaviconRegularSize, TOUCH_ICON); |
EXPECT_NE(0, id3); |
time = base::Time::Now(); |
db.SetFavicon(id3, favicon, time); |
@@ -581,7 +660,7 @@ TEST_F(IconMappingMigrationTest, TestIconMappingMigration) { |
std::vector<unsigned char> out_data; |
GURL out_icon_url; |
ASSERT_TRUE(db.GetFavicon( |
- icon_mappings[0].icon_id, &time, &out_data, &out_icon_url, NULL)); |
+ icon_mappings[0].icon_id, &time, &out_data, &out_icon_url, NULL, NULL)); |
EXPECT_EQ(icon1, out_icon_url); |
// Test a page which has the same icon. |
@@ -602,7 +681,7 @@ TEST_F(IconMappingMigrationTest, TestIconMappingMigration) { |
EXPECT_EQ(page_url2, icon_mappings[0].page_url); |
EXPECT_EQ(2, icon_mappings[0].icon_id); |
ASSERT_TRUE(db.GetFavicon( |
- icon_mappings[0].icon_id, &time, &out_data, &out_icon_url, NULL)); |
+ icon_mappings[0].icon_id, &time, &out_data, &out_icon_url, NULL, NULL)); |
EXPECT_EQ(icon2, out_icon_url); |
// Test a page without icon |
@@ -619,20 +698,21 @@ TEST_F(ThumbnailDatabaseTest, IconMappingEnumerator) { |
scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); |
GURL url("http://google.com"); |
- FaviconID touch_icon_id1 = db.AddFavicon(url, TOUCH_ICON); |
+ FaviconID touch_icon_id1 = db.AddFavicon(url, kFaviconRegularSize, |
+ TOUCH_ICON); |
ASSERT_NE(0, touch_icon_id1); |
ASSERT_TRUE(db.SetFavicon(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); |
+ FaviconID favicon_id1 = db.AddFavicon(url, kFaviconRegularSize, FAVICON); |
ASSERT_NE(0, favicon_id1); |
ASSERT_TRUE(db.SetFavicon(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); |
+ FaviconID favicon_id2 = db.AddFavicon(url2, kFaviconLargeSize, FAVICON); |
ASSERT_NE(0, favicon_id2); |
ASSERT_TRUE(db.SetFavicon(favicon_id2, favicon, base::Time::Now())); |
IconMappingID favicon_mapping_id2 = db.AddIconMapping(url2, favicon_id2); |