| 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 04af2b41ffb87c4efc6d29b5292d1814a06a4134..5e056c7c54da4958d33d288fd070acc2118d2052 100644 | 
| --- a/chrome/browser/history/history_backend_unittest.cc | 
| +++ b/chrome/browser/history/history_backend_unittest.cc | 
| @@ -1922,6 +1922,126 @@ TEST_F(HistoryBackendTest, MergeFaviconShowsUpInGetFaviconsForURLResult) { | 
| EXPECT_TRUE(BitmapDataEqual('c', result.bitmap_data)); | 
| } | 
|  | 
| +// Tests GetFaviconsForURL with icon_types priority, | 
| +TEST_F(HistoryBackendTest, TestGetFaviconsForURLWithIconTypesPriority) { | 
| +  GURL page_url("http://www.google.com"); | 
| +  GURL icon_url("http://www.google.com/favicon.ico"); | 
| +  GURL touch_icon_url("http://wwww.google.com/touch_icon.ico"); | 
| + | 
| +  std::vector<chrome::FaviconBitmapData> favicon_bitmap_data; | 
| +  std::vector<gfx::Size> favicon_size; | 
| +  favicon_size.push_back(gfx::Size(16, 16)); | 
| +  favicon_size.push_back(gfx::Size(32, 32)); | 
| +  GenerateFaviconBitmapData(icon_url, favicon_size, &favicon_bitmap_data); | 
| +  ASSERT_EQ(2u, favicon_bitmap_data.size()); | 
| + | 
| +  std::vector<chrome::FaviconBitmapData> touch_icon_bitmap_data; | 
| +  std::vector<gfx::Size> touch_icon_size; | 
| +  touch_icon_size.push_back(gfx::Size(64, 64)); | 
| +  GenerateFaviconBitmapData(icon_url, touch_icon_size, &touch_icon_bitmap_data); | 
| +  ASSERT_EQ(1u, touch_icon_bitmap_data.size()); | 
| + | 
| +  // Set some preexisting favicons for |page_url|. | 
| +  backend_->SetFavicons(page_url, chrome::FAVICON, favicon_bitmap_data); | 
| +  backend_->SetFavicons(page_url, chrome::TOUCH_ICON, touch_icon_bitmap_data); | 
| + | 
| +  std::vector<chrome::FaviconBitmapResult> bitmap_results; | 
| +  std::vector<int> icon_types; | 
| +  icon_types.push_back(chrome::FAVICON); | 
| +  icon_types.push_back(chrome::TOUCH_ICON); | 
| + | 
| +  backend_->GetLargestFaviconForURL(page_url, icon_types, 16, &bitmap_results); | 
| + | 
| +  // Verify the result icon is 32x32 favicon. | 
| +  EXPECT_EQ(1u, bitmap_results.size()); | 
| +  chrome::FaviconBitmapResult& result = bitmap_results[0]; | 
| +  EXPECT_EQ(gfx::Size(32, 32), result.pixel_size); | 
| +  EXPECT_EQ(chrome::FAVICON, result.icon_type); | 
| + | 
| +  // Change Minimal size to 32x32 and verify the 64x64 touch icon returned. | 
| +  bitmap_results.clear(); | 
| +  backend_->GetLargestFaviconForURL(page_url, icon_types, 32, &bitmap_results); | 
| +  EXPECT_EQ(1u, bitmap_results.size()); | 
| +  result = bitmap_results[0]; | 
| +  EXPECT_EQ(gfx::Size(64, 64), result.pixel_size); | 
| +  EXPECT_EQ(chrome::TOUCH_ICON, result.icon_type); | 
| +} | 
| + | 
| +// Test the the first types of icon is returned if its size equal to the | 
| +// second types icon. | 
| +TEST_F(HistoryBackendTest, TestGetFaviconsForURLReturnFavicon) { | 
| +  GURL page_url("http://www.google.com"); | 
| +  GURL icon_url("http://www.google.com/favicon.ico"); | 
| +  GURL touch_icon_url("http://wwww.google.com/touch_icon.ico"); | 
| + | 
| +  std::vector<chrome::FaviconBitmapData> favicon_bitmap_data; | 
| +  std::vector<gfx::Size> favicon_size; | 
| +  favicon_size.push_back(gfx::Size(16, 16)); | 
| +  favicon_size.push_back(gfx::Size(32, 32)); | 
| +  GenerateFaviconBitmapData(icon_url, favicon_size, &favicon_bitmap_data); | 
| +  ASSERT_EQ(2u, favicon_bitmap_data.size()); | 
| + | 
| +  std::vector<chrome::FaviconBitmapData> touch_icon_bitmap_data; | 
| +  std::vector<gfx::Size> touch_icon_size; | 
| +  touch_icon_size.push_back(gfx::Size(32, 32)); | 
| +  GenerateFaviconBitmapData(icon_url, touch_icon_size, &touch_icon_bitmap_data); | 
| +  ASSERT_EQ(1u, touch_icon_bitmap_data.size()); | 
| + | 
| +  // Set some preexisting favicons for |page_url|. | 
| +  backend_->SetFavicons(page_url, chrome::FAVICON, favicon_bitmap_data); | 
| +  backend_->SetFavicons(page_url, chrome::TOUCH_ICON, touch_icon_bitmap_data); | 
| + | 
| +  std::vector<chrome::FaviconBitmapResult> bitmap_results; | 
| +  std::vector<int> icon_types; | 
| +  icon_types.push_back(chrome::FAVICON); | 
| +  icon_types.push_back(chrome::TOUCH_ICON); | 
| + | 
| +  backend_->GetLargestFaviconForURL(page_url, icon_types, 16, &bitmap_results); | 
| + | 
| +  // Verify the result icon is 32x32 favicon. | 
| +  EXPECT_EQ(1u, bitmap_results.size()); | 
| +  chrome::FaviconBitmapResult& result = bitmap_results[0]; | 
| +  EXPECT_EQ(gfx::Size(32, 32), result.pixel_size); | 
| +  EXPECT_EQ(chrome::FAVICON, result.icon_type); | 
| + | 
| +  // Change minimal size to 32x32 and verify the 32x32 favicon returned. | 
| +  bitmap_results.clear(); | 
| +  backend_->GetLargestFaviconForURL(page_url, icon_types, 32, &bitmap_results); | 
| +  EXPECT_EQ(1u, bitmap_results.size()); | 
| +  result = bitmap_results[0]; | 
| +  EXPECT_EQ(gfx::Size(32, 32), result.pixel_size); | 
| +  EXPECT_EQ(chrome::FAVICON, result.icon_type); | 
| +} | 
| + | 
| +// Test the favicon is returned if its size is smaller than minimal size, | 
| +// because it is only one available. | 
| +TEST_F(HistoryBackendTest, TestGetFaviconsForURLReturnFaviconEvenItSmaller) { | 
| +  GURL page_url("http://www.google.com"); | 
| +  GURL icon_url("http://www.google.com/favicon.ico"); | 
| + | 
| +  std::vector<chrome::FaviconBitmapData> favicon_bitmap_data; | 
| +  std::vector<gfx::Size> favicon_size; | 
| +  favicon_size.push_back(gfx::Size(16, 16)); | 
| +  GenerateFaviconBitmapData(icon_url, favicon_size, &favicon_bitmap_data); | 
| +  ASSERT_EQ(1u, favicon_bitmap_data.size()); | 
| + | 
| +  // Set preexisting favicons for |page_url|. | 
| +  backend_->SetFavicons(page_url, chrome::FAVICON, favicon_bitmap_data); | 
| + | 
| +  std::vector<chrome::FaviconBitmapResult> bitmap_results; | 
| +  std::vector<int> icon_types; | 
| +  icon_types.push_back(chrome::FAVICON); | 
| +  icon_types.push_back(chrome::TOUCH_ICON); | 
| + | 
| +  backend_->GetLargestFaviconForURL(page_url, icon_types, 32, &bitmap_results); | 
| + | 
| +  // Verify 16x16 icon is returned, even it small than minimal_size. | 
| +  EXPECT_EQ(1u, bitmap_results.size()); | 
| +  chrome::FaviconBitmapResult& result = bitmap_results[0]; | 
| +  EXPECT_EQ(gfx::Size(16, 16), result.pixel_size); | 
| +  EXPECT_EQ(chrome::FAVICON, result.icon_type); | 
| +} | 
| + | 
| // Test UpdateFaviconMapingsAndFetch() when multiple icon types are passed in. | 
| TEST_F(HistoryBackendTest, UpdateFaviconMappingsAndFetchMultipleIconTypes) { | 
| GURL page_url1("http://www.google.com"); | 
|  |