| Index: chrome/browser/history/history_backend_unittest.cc
|
| diff --git a/chrome/browser/history/history_backend_unittest.cc b/chrome/browser/history/history_backend_unittest.cc
|
| index bc2e14abe104c00a3be358a75af99160a609c32f..ac58e037719e0e1e3799f0cb54b1704d3e0898c2 100644
|
| --- a/chrome/browser/history/history_backend_unittest.cc
|
| +++ b/chrome/browser/history/history_backend_unittest.cc
|
| @@ -1447,6 +1447,9 @@ TEST_F(HistoryBackendTest, SetFavicons) {
|
| EXPECT_TRUE(BitmapDataEqual('c', favicon_bitmaps[1].bitmap_data));
|
| EXPECT_EQ(kLargeSize, favicon_bitmaps[1].pixel_size);
|
|
|
| + // Notifications should have been broadcast for each call to SetFavicons().
|
| + EXPECT_EQ(2, num_broadcasted_notifications());
|
| +
|
| // Change the sizes for which the favicon at icon_url1 is available at from
|
| // the web. Verify that all the data remains valid.
|
| icon_url_sizes[icon_url1] = GetSizesTinySmallAndLarge();
|
| @@ -1482,8 +1485,9 @@ TEST_F(HistoryBackendTest, SetFavicons) {
|
| icon_mappings[1].icon_id, &favicon_bitmaps));
|
| EXPECT_EQ(2u, favicon_bitmaps.size());
|
|
|
| - // Notifications should have been broadcast for each call to SetFavicons().
|
| - EXPECT_EQ(3, num_broadcasted_notifications());
|
| + // No notifications should have been sent because changing the favicon sizes
|
| + // did not result in deleting any favicon bitmaps.
|
| + EXPECT_EQ(2, num_broadcasted_notifications());
|
| }
|
|
|
| // Test that changing the sizes that a favicon is available at from the web
|
| @@ -1570,11 +1574,12 @@ TEST_F(HistoryBackendTest, SetFaviconsReplaceBitmapData) {
|
| GetOnlyFaviconBitmap(original_favicon_id, &original_favicon_bitmap));
|
| EXPECT_TRUE(BitmapDataEqual('a', original_favicon_bitmap.bitmap_data));
|
|
|
| - // SetFavicons with identical data but a different bitmap.
|
| + EXPECT_EQ(1, num_broadcasted_notifications());
|
| +
|
| + // Call SetFavicons() with completely identical data.
|
| std::vector<unsigned char> updated_data;
|
| - updated_data.push_back('b');
|
| - favicon_bitmap_data[0].bitmap_data =
|
| - base::RefCountedBytes::TakeVector(&updated_data);
|
| + updated_data.push_back('a');
|
| + favicon_bitmap_data[0].bitmap_data = new base::RefCountedBytes(updated_data);
|
| backend_->SetFavicons(page_url, FAVICON, favicon_bitmap_data,
|
| icon_url_sizes);
|
|
|
| @@ -1585,12 +1590,35 @@ TEST_F(HistoryBackendTest, SetFaviconsReplaceBitmapData) {
|
| FaviconBitmap updated_favicon_bitmap;
|
| EXPECT_TRUE(
|
| GetOnlyFaviconBitmap(updated_favicon_id, &updated_favicon_bitmap));
|
| + EXPECT_TRUE(BitmapDataEqual('a', updated_favicon_bitmap.bitmap_data));
|
| +
|
| + // Because the bitmap data is byte equivalent, no notifications should have
|
| + // been broadcasted.
|
| + EXPECT_EQ(1, num_broadcasted_notifications());
|
| +
|
| + // Call SetFavicons() with identical data but a different bitmap.
|
| + updated_data[0] = 'b';
|
| + favicon_bitmap_data[0].bitmap_data = new base::RefCountedBytes(updated_data);
|
| + backend_->SetFavicons(page_url, FAVICON, favicon_bitmap_data,
|
| + icon_url_sizes);
|
| +
|
| + updated_favicon_id =
|
| + backend_->thumbnail_db_->GetFaviconIDForFaviconURL(icon_url, FAVICON,
|
| + NULL);
|
| + EXPECT_NE(0, updated_favicon_id);
|
| + EXPECT_TRUE(
|
| + GetOnlyFaviconBitmap(updated_favicon_id, &updated_favicon_bitmap));
|
| EXPECT_TRUE(BitmapDataEqual('b', updated_favicon_bitmap.bitmap_data));
|
|
|
| - // There should be no churn in FaviconIDs or FaviconBitmapIds.
|
| + // There should be no churn in FaviconIDs or FaviconBitmapIds even though
|
| + // the bitmap data changed.
|
| EXPECT_EQ(original_favicon_bitmap.icon_id, updated_favicon_bitmap.icon_id);
|
| EXPECT_EQ(original_favicon_bitmap.bitmap_id,
|
| updated_favicon_bitmap.bitmap_id);
|
| +
|
| + // A notification should have been broadcasted as the favicon bitmap data has
|
| + // changed.
|
| + EXPECT_EQ(2, num_broadcasted_notifications());
|
| }
|
|
|
| // Test that if two pages share the same FaviconID, changing the favicon for
|
| @@ -1792,13 +1820,39 @@ TEST_F(HistoryBackendTest, MergeFaviconPageURLInDB) {
|
| EXPECT_TRUE(BitmapDataEqual('a', favicon_bitmap.bitmap_data));
|
| EXPECT_EQ(kSmallSize, favicon_bitmap.pixel_size);
|
|
|
| - // 1) Merge favicon of the same size.
|
| + EXPECT_EQ(1, num_broadcasted_notifications());
|
| +
|
| + // 1) Merge identical favicon bitmap.
|
| std::vector<unsigned char> data;
|
| - data.push_back('b');
|
| + data.push_back('a');
|
| scoped_refptr<base::RefCountedBytes> bitmap_data(
|
| new base::RefCountedBytes(data));
|
| backend_->MergeFavicon(page_url, icon_url1, FAVICON, bitmap_data, kSmallSize);
|
|
|
| + // All the data should stay the same and no notifications should have been
|
| + // sent.
|
| + icon_mappings.clear();
|
| + EXPECT_TRUE(backend_->thumbnail_db_->GetIconMappingsForPageURL(page_url,
|
| + &icon_mappings));
|
| + EXPECT_EQ(1u, icon_mappings.size());
|
| + EXPECT_EQ(icon_url1, icon_mappings[0].icon_url);
|
| +
|
| + favicon_sizes.clear();
|
| + EXPECT_TRUE(backend_->thumbnail_db_->GetFaviconHeader(
|
| + icon_mappings[0].icon_id, NULL, NULL, &favicon_sizes));
|
| + EXPECT_EQ(GetSizesSmallAndLarge(), favicon_sizes);
|
| +
|
| + EXPECT_TRUE(GetOnlyFaviconBitmap(icon_mappings[0].icon_id, &favicon_bitmap));
|
| + EXPECT_TRUE(BitmapDataEqual('a', favicon_bitmap.bitmap_data));
|
| + EXPECT_EQ(kSmallSize, favicon_bitmap.pixel_size);
|
| +
|
| + EXPECT_EQ(1, num_broadcasted_notifications());
|
| +
|
| + // 2) Merge favicon bitmap of the same size.
|
| + data[0] = 'b';
|
| + bitmap_data = new base::RefCountedBytes(data);
|
| + backend_->MergeFavicon(page_url, icon_url1, FAVICON, bitmap_data, kSmallSize);
|
| +
|
| // The small favicon bitmap at |icon_url1| should be overwritten and favicon
|
| // sizes should remain unchanged.
|
| icon_mappings.clear();
|
| @@ -1816,7 +1870,7 @@ TEST_F(HistoryBackendTest, MergeFaviconPageURLInDB) {
|
| EXPECT_TRUE(BitmapDataEqual('b', favicon_bitmap.bitmap_data));
|
| EXPECT_EQ(kSmallSize, favicon_bitmap.pixel_size);
|
|
|
| - // 2) Merge favicon for the same icon URL, but a pixel size for which there is
|
| + // 3) Merge favicon for the same icon URL, but a pixel size for which there is
|
| // no favicon bitmap.
|
| data[0] = 'c';
|
| bitmap_data = new base::RefCountedBytes(data);
|
| @@ -1843,7 +1897,7 @@ TEST_F(HistoryBackendTest, MergeFaviconPageURLInDB) {
|
| EXPECT_TRUE(BitmapDataEqual('b', favicon_bitmaps[1].bitmap_data));
|
| EXPECT_EQ(kSmallSize, favicon_bitmaps[1].pixel_size);
|
|
|
| - // 3) Merge favicon for an icon URL different from the icon URLs already
|
| + // 4) Merge favicon for an icon URL different from the icon URLs already
|
| // mapped to page URL.
|
| data[0] = 'd';
|
| bitmap_data = new base::RefCountedBytes(data);
|
|
|