| 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 21a649eec71dfdce7f9b1c11491c6269b36ff18a..9732c47f6c4fc4ef9e215d009ee4db8de3b6c95c 100644
|
| --- a/chrome/browser/history/thumbnail_database_unittest.cc
|
| +++ b/chrome/browser/history/thumbnail_database_unittest.cc
|
| @@ -49,8 +49,6 @@ const int64 kPage1 = 1234;
|
| const gfx::Size kSmallSize = gfx::Size(16, 16);
|
| const gfx::Size kLargeSize = gfx::Size(32, 32);
|
|
|
| -const std::string kSizesSmallAndLarge = "16 16 32 32";
|
| -
|
| } // namespace
|
|
|
| class ThumbnailDatabaseTest : public testing::Test {
|
| @@ -72,12 +70,22 @@ class ThumbnailDatabaseTest : public testing::Test {
|
| gfx::JPEGCodec::Decode(kGoogleThumbnail, sizeof(kGoogleThumbnail)));
|
| }
|
|
|
| + const FaviconSizes& GetSizesSmallAndLarge() {
|
| + CR_DEFINE_STATIC_LOCAL(FaviconSizes, kSizesSmallAndLarge, ());
|
| + if (kSizesSmallAndLarge.empty()) {
|
| + kSizesSmallAndLarge.push_back(kSmallSize);
|
| + kSizesSmallAndLarge.push_back(kLargeSize);
|
| + }
|
| + return kSizesSmallAndLarge;
|
| + }
|
| +
|
| scoped_ptr<SkBitmap> google_bitmap_;
|
|
|
| ScopedTempDir temp_dir_;
|
| FilePath file_name_;
|
| FilePath new_file_name_;
|
| FilePath history_db_name_;
|
| + FaviconSizes sizes_small_and_large_;
|
| };
|
|
|
| class IconMappingMigrationTest : public HistoryUnitTestBase {
|
| @@ -125,7 +133,7 @@ TEST_F(ThumbnailDatabaseTest, GetFaviconAfterMigrationToTopSites) {
|
|
|
| GURL url("http://google.com");
|
| FaviconID icon_id = db.AddFavicon(url, FAVICON);
|
| - db.SetFaviconSizes(icon_id, kSizesSmallAndLarge);
|
| + db.SetFaviconSizes(icon_id, GetSizesSmallAndLarge());
|
| base::Time time = base::Time::Now();
|
| FaviconBitmapID bitmap1_id = db.AddFaviconBitmap(icon_id, favicon, time,
|
| kSmallSize);
|
| @@ -136,13 +144,13 @@ TEST_F(ThumbnailDatabaseTest, GetFaviconAfterMigrationToTopSites) {
|
|
|
| GURL url_out;
|
| IconType icon_type_out;
|
| - std::string sizes_out;
|
| + FaviconSizes sizes_out;
|
| EXPECT_TRUE(db.GetFaviconHeader(icon_id, &url_out, &icon_type_out,
|
| &sizes_out));
|
|
|
| EXPECT_EQ(url, url_out);
|
| EXPECT_EQ(FAVICON, icon_type_out);
|
| - EXPECT_STREQ(kSizesSmallAndLarge.c_str(), sizes_out.c_str());
|
| + EXPECT_EQ(GetSizesSmallAndLarge(), sizes_out);
|
|
|
| std::vector<FaviconBitmap> favicon_bitmaps_out;
|
| EXPECT_TRUE(db.GetFaviconBitmaps(icon_id, &favicon_bitmaps_out));
|
| @@ -151,7 +159,7 @@ TEST_F(ThumbnailDatabaseTest, GetFaviconAfterMigrationToTopSites) {
|
| FaviconBitmap favicon_bitmap1 = favicon_bitmaps_out[0];
|
| FaviconBitmap favicon_bitmap2 = favicon_bitmaps_out[1];
|
|
|
| - // Bitmaps do not need to be in particular order.
|
| + // Favicon bitmaps do not need to be in particular order.
|
| if (favicon_bitmap1.bitmap_id == bitmap2_id) {
|
| FaviconBitmap tmp_favicon_bitmap = favicon_bitmap1;
|
| favicon_bitmap1 = favicon_bitmap2;
|
| @@ -192,11 +200,11 @@ TEST_F(ThumbnailDatabaseTest, AddIconMapping) {
|
| db.AddFaviconBitmap(id, favicon, time, gfx::Size());
|
|
|
| EXPECT_NE(0, db.AddIconMapping(url, id));
|
| - std::vector<IconMapping> icon_mapping;
|
| - EXPECT_TRUE(db.GetIconMappingsForPageURL(url, &icon_mapping));
|
| - EXPECT_EQ(1u, icon_mapping.size());
|
| - EXPECT_EQ(url, icon_mapping.front().page_url);
|
| - EXPECT_EQ(id, icon_mapping.front().icon_id);
|
| + std::vector<IconMapping> icon_mappings;
|
| + EXPECT_TRUE(db.GetIconMappingsForPageURL(url, &icon_mappings));
|
| + EXPECT_EQ(1u, icon_mappings.size());
|
| + EXPECT_EQ(url, icon_mappings.front().page_url);
|
| + EXPECT_EQ(id, icon_mappings.front().icon_id);
|
| }
|
|
|
| TEST_F(ThumbnailDatabaseTest, UpdateIconMapping) {
|
| @@ -254,12 +262,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) {
|
| @@ -460,17 +468,18 @@ TEST_F(ThumbnailDatabaseTest, TemporaryTables) {
|
| EXPECT_TRUE(db.CommitTemporaryTables());
|
|
|
| // Only copied data should be left.
|
| - IconMapping icon_mapping;
|
| - EXPECT_TRUE(db.GetIconMappingForPageURL(page_url, FAVICON, &icon_mapping));
|
| - EXPECT_EQ(new_favicon_id, icon_mapping.icon_id);
|
| - EXPECT_EQ(page_url, icon_mapping.page_url);
|
| + std::vector<IconMapping> icon_mappings;
|
| + EXPECT_TRUE(db.GetIconMappingsForPageURL(page_url, FAVICON, &icon_mappings));
|
| + EXPECT_EQ(1u, icon_mappings.size());
|
| + EXPECT_EQ(new_favicon_id, icon_mappings[0].icon_id);
|
| + EXPECT_EQ(page_url, icon_mappings[0].page_url);
|
|
|
| std::vector<FaviconBitmap> favicon_bitmaps;
|
| - EXPECT_TRUE(db.GetFaviconBitmaps(icon_mapping.icon_id, &favicon_bitmaps));
|
| + EXPECT_TRUE(db.GetFaviconBitmaps(icon_mappings[0].icon_id, &favicon_bitmaps));
|
| EXPECT_EQ(1u, favicon_bitmaps.size());
|
| EXPECT_EQ(kLargeSize, favicon_bitmaps[0].pixel_size);
|
|
|
| - EXPECT_FALSE(db.GetFaviconIDForFaviconURL(unkept_url, false, NULL));
|
| + EXPECT_FALSE(db.GetFaviconIDForFaviconURL(unkept_url, false));
|
| }
|
|
|
| // Tests that deleting a favicon deletes the favicon row and favicon bitmap
|
| @@ -553,6 +562,38 @@ TEST_F(ThumbnailDatabaseTest, GetIconMappingsForPageURLForReturnOrder) {
|
| EXPECT_EQ(TOUCH_PRECOMPOSED_ICON, icon_mapping.front().icon_type);
|
| }
|
|
|
| +// Test result of GetIconMappingsForPageURL when an icon type is passed in.
|
| +TEST_F(ThumbnailDatabaseTest, GetIconMappingsForPageURLWithIconType) {
|
| + ThumbnailDatabase db;
|
| + ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL));
|
| + db.BeginTransaction();
|
| +
|
| + GURL url("http://google.com");
|
| + std::vector<unsigned char> data(blob1, blob1 + sizeof(blob1));
|
| + scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data));
|
| + base::Time time = base::Time::Now();
|
| +
|
| + FaviconID id1 = db.AddFavicon(url, FAVICON, kDefaultFaviconSizes, favicon,
|
| + time, gfx::Size());
|
| + EXPECT_NE(0, db.AddIconMapping(url, id1));
|
| +
|
| + FaviconID id2 = db.AddFavicon(url, TOUCH_ICON, kDefaultFaviconSizes, favicon,
|
| + time, gfx::Size());
|
| + EXPECT_NE(0, db.AddIconMapping(url, id2));
|
| +
|
| + std::vector<IconMapping> icon_mappings;
|
| + EXPECT_TRUE(db.GetIconMappingsForPageURL(url, FAVICON | TOUCH_ICON,
|
| + &icon_mappings));
|
| + EXPECT_EQ(2u, icon_mappings.size());
|
| + EXPECT_EQ(id2, icon_mappings[0].icon_id);
|
| + EXPECT_EQ(id1, icon_mappings[1].icon_id);
|
| +
|
| + icon_mappings.clear();
|
| + EXPECT_TRUE(db.GetIconMappingsForPageURL(url, TOUCH_ICON, &icon_mappings));
|
| + EXPECT_EQ(1u, icon_mappings.size());
|
| + EXPECT_EQ(id2, icon_mappings[0].icon_id);
|
| +}
|
| +
|
| TEST_F(ThumbnailDatabaseTest, HasMappingFor) {
|
| ThumbnailDatabase db;
|
| ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL));
|
| @@ -595,7 +636,7 @@ TEST_F(ThumbnailDatabaseTest, HasMappingFor) {
|
| EXPECT_FALSE(db.HasMappingFor(id3));
|
| }
|
|
|
| -TEST_F(ThumbnailDatabaseTest, CloneIconMapping) {
|
| +TEST_F(ThumbnailDatabaseTest, CloneIconMappings) {
|
| ThumbnailDatabase db;
|
| ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL, NULL));
|
| db.BeginTransaction();
|
| @@ -633,7 +674,7 @@ TEST_F(ThumbnailDatabaseTest, CloneIconMapping) {
|
| EXPECT_TRUE(db.GetIconMappingsForPageURL(page2_url, &icon_mapping));
|
| ASSERT_EQ(1U, icon_mapping.size());
|
|
|
| - EXPECT_TRUE(db.CloneIconMapping(page1_url, page2_url));
|
| + EXPECT_TRUE(db.CloneIconMappings(page1_url, page2_url));
|
|
|
| icon_mapping.clear();
|
| EXPECT_TRUE(db.GetIconMappingsForPageURL(page2_url, &icon_mapping));
|
| @@ -643,7 +684,7 @@ TEST_F(ThumbnailDatabaseTest, CloneIconMapping) {
|
|
|
| // Test we clone if the new page has no mappings.
|
| GURL page3_url("http://page3.com");
|
| - EXPECT_TRUE(db.CloneIconMapping(page1_url, page3_url));
|
| + EXPECT_TRUE(db.CloneIconMappings(page1_url, page3_url));
|
|
|
| icon_mapping.clear();
|
| EXPECT_TRUE(db.GetIconMappingsForPageURL(page3_url, &icon_mapping));
|
| @@ -678,12 +719,7 @@ TEST_F(IconMappingMigrationTest, TestIconMappingMigration) {
|
| EXPECT_EQ(FAVICON, icon_mappings[0].icon_type);
|
| EXPECT_EQ(page_url1, icon_mappings[0].page_url);
|
| EXPECT_EQ(1, icon_mappings[0].icon_id);
|
| - base::Time time;
|
| - scoped_refptr<base::RefCountedMemory> out_data;
|
| - GURL out_icon_url;
|
| - ASSERT_TRUE(db.GetFavicon(
|
| - icon_mappings[0].icon_id, &time, &out_data, &out_icon_url, NULL));
|
| - EXPECT_EQ(icon1, out_icon_url);
|
| + EXPECT_EQ(icon1, icon_mappings[0].icon_url);
|
|
|
| // Test a page which has the same icon.
|
| GURL page_url3 = GURL("http://www.google.com/");
|
| @@ -693,6 +729,7 @@ TEST_F(IconMappingMigrationTest, TestIconMappingMigration) {
|
| EXPECT_EQ(FAVICON, icon_mappings[0].icon_type);
|
| EXPECT_EQ(page_url3, icon_mappings[0].page_url);
|
| EXPECT_EQ(1, icon_mappings[0].icon_id);
|
| + EXPECT_EQ(icon1, icon_mappings[0].icon_url);
|
|
|
| // Test a icon_mapping with different IconID.
|
| GURL page_url2 = GURL("http://yahoo.com/");
|
| @@ -702,9 +739,7 @@ TEST_F(IconMappingMigrationTest, TestIconMappingMigration) {
|
| EXPECT_EQ(FAVICON, icon_mappings[0].icon_type);
|
| 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));
|
| - EXPECT_EQ(icon2, out_icon_url);
|
| + EXPECT_EQ(icon2, icon_mappings[0].icon_url);
|
|
|
| // Test a page without icon
|
| GURL page_url4 = GURL("http://www.google.com/blank.html");
|
| @@ -720,25 +755,26 @@ 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);
|
| + GURL icon_url1("http://google.com/favicon.ico");
|
| + FaviconID touch_icon_id1 = db.AddFavicon(icon_url1, TOUCH_ICON,
|
| + GetSizesSmallAndLarge(), favicon, base::Time::Now(), kSmallSize);
|
| ASSERT_NE(0, touch_icon_id1);
|
| - ASSERT_TRUE(db.AddFaviconBitmap(touch_icon_id1, favicon, base::Time::Now(),
|
| - gfx::Size()));
|
| 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(icon_url1, FAVICON,
|
| + GetSizesSmallAndLarge(),
|
| + favicon, base::Time::Now(), kSmallSize);
|
| ASSERT_NE(0, favicon_id1);
|
| - ASSERT_TRUE(db.AddFaviconBitmap(favicon_id1, favicon, base::Time::Now(),
|
| - gfx::Size()));
|
| 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);
|
| + GURL icon_url2("http://chromium.org/favicon.ico");
|
| + FaviconID favicon_id2 = db.AddFavicon(icon_url2, FAVICON,
|
| + GetSizesSmallAndLarge(),
|
| + favicon, base::Time::Now(), kSmallSize);
|
| ASSERT_NE(0, favicon_id2);
|
| - ASSERT_TRUE(db.AddFaviconBitmap(favicon_id2, favicon, base::Time::Now(),
|
| - gfx::Size()));
|
| IconMappingID favicon_mapping_id2 = db.AddIconMapping(url2, favicon_id2);
|
| ASSERT_NE(0, favicon_mapping_id2);
|
|
|
| @@ -755,11 +791,13 @@ TEST_F(ThumbnailDatabaseTest, IconMappingEnumerator) {
|
| has_favicon_mapping1 = true;
|
| EXPECT_EQ(url, icon_mapping.page_url);
|
| EXPECT_EQ(favicon_id1, icon_mapping.icon_id);
|
| + EXPECT_EQ(icon_url1, icon_mapping.icon_url);
|
| EXPECT_EQ(FAVICON, icon_mapping.icon_type);
|
| } else if (favicon_mapping_id2 == icon_mapping.mapping_id) {
|
| has_favicon_mapping2 = true;
|
| EXPECT_EQ(url2, icon_mapping.page_url);
|
| EXPECT_EQ(favicon_id2, icon_mapping.icon_id);
|
| + EXPECT_EQ(icon_url2, icon_mapping.icon_url);
|
| EXPECT_EQ(FAVICON, icon_mapping.icon_type);
|
| }
|
| }
|
| @@ -773,9 +811,46 @@ TEST_F(ThumbnailDatabaseTest, IconMappingEnumerator) {
|
| EXPECT_EQ(touch_mapping_id1, icon_mapping.mapping_id);
|
| EXPECT_EQ(url, icon_mapping.page_url);
|
| EXPECT_EQ(touch_icon_id1, icon_mapping.icon_id);
|
| + EXPECT_EQ(icon_url1, icon_mapping.icon_url);
|
| EXPECT_EQ(TOUCH_ICON, icon_mapping.icon_type);
|
|
|
| EXPECT_FALSE(enumerator2.GetNextIconMapping(&icon_mapping));
|
| }
|
|
|
| +TEST_F(ThumbnailDatabaseTest, FaviconSizesToAndFromString) {
|
| + // Invalid input.
|
| + FaviconSizes sizes_missing_height;
|
| + EXPECT_FALSE(ThumbnailDatabase::DatabaseStringToFaviconSizes("0 0 10",
|
| + &sizes_missing_height));
|
| + EXPECT_EQ(0u, sizes_missing_height.size());
|
| +
|
| + FaviconSizes sizes_non_int;
|
| + EXPECT_FALSE(ThumbnailDatabase::DatabaseStringToFaviconSizes("0 0 a 10",
|
| + &sizes_non_int));
|
| + EXPECT_EQ(0u, sizes_missing_height.size());
|
| +
|
| + // Valid input.
|
| + FaviconSizes sizes_empty;
|
| + EXPECT_TRUE(ThumbnailDatabase::DatabaseStringToFaviconSizes("",
|
| + &sizes_empty));
|
| + EXPECT_EQ(0u, sizes_empty.size());
|
| +
|
| + FaviconSizes sizes_valid;
|
| + EXPECT_TRUE(ThumbnailDatabase::DatabaseStringToFaviconSizes("10 15 20 25",
|
| + &sizes_valid));
|
| + EXPECT_EQ(2u, sizes_valid.size());
|
| + if (sizes_valid[0] == gfx::Size(10, 15)) {
|
| + EXPECT_EQ(sizes_valid[1], gfx::Size(20, 25));
|
| + } else {
|
| + EXPECT_EQ(sizes_valid[0], gfx::Size(20, 25));
|
| + EXPECT_EQ(sizes_valid[1], gfx::Size(10, 15));
|
| + }
|
| +
|
| + std::string sizes_as_string;
|
| + ThumbnailDatabase::FaviconSizesToDatabaseString(sizes_valid,
|
| + &sizes_as_string);
|
| + EXPECT_TRUE(sizes_as_string == "10 15 20 25" ||
|
| + sizes_as_string == "20 25 10 15");
|
| +}
|
| +
|
| } // namespace history
|
|
|