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