| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "components/favicon/core/large_icon_service.h" | 5 #include "components/favicon/core/large_icon_service.h" |
| 6 | 6 |
| 7 #include <deque> | 7 #include <deque> |
| 8 #include <memory> | 8 #include <memory> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| 11 #include "base/macros.h" | 11 #include "base/macros.h" |
| 12 #include "base/memory/ref_counted_memory.h" | 12 #include "base/memory/ref_counted_memory.h" |
| 13 #include "base/message_loop/message_loop.h" | 13 #include "base/message_loop/message_loop.h" |
| 14 #include "base/run_loop.h" | 14 #include "base/run_loop.h" |
| 15 #include "base/task/cancelable_task_tracker.h" | 15 #include "base/task/cancelable_task_tracker.h" |
| 16 #include "base/threading/thread_task_runner_handle.h" | 16 #include "base/threading/thread_task_runner_handle.h" |
| 17 #include "components/favicon/core/favicon_client.h" | 17 #include "components/favicon/core/favicon_client.h" |
| 18 #include "components/favicon/core/favicon_service.h" | 18 #include "components/favicon/core/test/mock_favicon_service.h" |
| 19 #include "components/favicon_base/fallback_icon_style.h" | 19 #include "components/favicon_base/fallback_icon_style.h" |
| 20 #include "components/favicon_base/favicon_types.h" | 20 #include "components/favicon_base/favicon_types.h" |
| 21 #include "testing/gmock/include/gmock/gmock.h" |
| 21 #include "testing/gtest/include/gtest/gtest.h" | 22 #include "testing/gtest/include/gtest/gtest.h" |
| 22 #include "third_party/skia/include/core/SkBitmap.h" | 23 #include "third_party/skia/include/core/SkBitmap.h" |
| 23 #include "third_party/skia/include/core/SkColor.h" | 24 #include "third_party/skia/include/core/SkColor.h" |
| 24 #include "ui/gfx/codec/png_codec.h" | 25 #include "ui/gfx/codec/png_codec.h" |
| 25 #include "ui/gfx/geometry/size.h" | 26 #include "ui/gfx/geometry/size.h" |
| 26 #include "ui/gfx/image/image.h" | 27 #include "ui/gfx/image/image.h" |
| 27 #include "url/gurl.h" | 28 #include "url/gurl.h" |
| 28 | 29 |
| 29 namespace favicon { | 30 namespace favicon { |
| 30 namespace { | 31 namespace { |
| 31 | 32 |
| 33 using testing::_; |
| 34 |
| 32 const char kDummyUrl[] = "http://www.example.com"; | 35 const char kDummyUrl[] = "http://www.example.com"; |
| 33 const char kDummyIconUrl[] = "http://www.example.com/touch_icon.png"; | 36 const char kDummyIconUrl[] = "http://www.example.com/touch_icon.png"; |
| 34 | |
| 35 const SkColor kTestColor = SK_ColorRED; | 37 const SkColor kTestColor = SK_ColorRED; |
| 36 | 38 |
| 37 favicon_base::FaviconRawBitmapResult CreateTestBitmap( | 39 favicon_base::FaviconRawBitmapResult CreateTestBitmap( |
| 38 int w, int h, SkColor color) { | 40 int w, int h, SkColor color) { |
| 39 favicon_base::FaviconRawBitmapResult result; | 41 favicon_base::FaviconRawBitmapResult result; |
| 40 result.expired = false; | 42 result.expired = false; |
| 41 | 43 |
| 42 // Create bitmap and fill with |color|. | 44 // Create bitmap and fill with |color|. |
| 43 scoped_refptr<base::RefCountedBytes> data(new base::RefCountedBytes()); | 45 scoped_refptr<base::RefCountedBytes> data(new base::RefCountedBytes()); |
| 44 SkBitmap bitmap; | 46 SkBitmap bitmap; |
| 45 bitmap.allocN32Pixels(w, h); | 47 bitmap.allocN32Pixels(w, h); |
| 46 bitmap.eraseColor(color); | 48 bitmap.eraseColor(color); |
| 47 gfx::PNGCodec::EncodeBGRASkBitmap(bitmap, false, &data->data()); | 49 gfx::PNGCodec::EncodeBGRASkBitmap(bitmap, false, &data->data()); |
| 48 result.bitmap_data = data; | 50 result.bitmap_data = data; |
| 49 | 51 |
| 50 result.pixel_size = gfx::Size(w, h); | 52 result.pixel_size = gfx::Size(w, h); |
| 51 result.icon_url = GURL(kDummyIconUrl); | 53 result.icon_url = GURL(kDummyIconUrl); |
| 52 result.icon_type = favicon_base::TOUCH_ICON; | 54 result.icon_type = favicon_base::TOUCH_ICON; |
| 53 CHECK(result.is_valid()); | 55 CHECK(result.is_valid()); |
| 54 return result; | 56 return result; |
| 55 } | 57 } |
| 56 | 58 |
| 57 // A mock FaviconService that emits pre-programmed response. | |
| 58 class MockFaviconService : public FaviconService { | |
| 59 public: | |
| 60 MockFaviconService() : FaviconService(nullptr, nullptr) { | |
| 61 } | |
| 62 | |
| 63 ~MockFaviconService() override { | |
| 64 } | |
| 65 | |
| 66 base::CancelableTaskTracker::TaskId GetLargestRawFaviconForPageURL( | |
| 67 const GURL& page_url, | |
| 68 const std::vector<int>& icon_types, | |
| 69 int minimum_size_in_pixels, | |
| 70 const favicon_base::FaviconRawBitmapCallback& callback, | |
| 71 base::CancelableTaskTracker* tracker) override { | |
| 72 favicon_base::FaviconRawBitmapResult mock_result = | |
| 73 mock_result_queue_.front(); | |
| 74 mock_result_queue_.pop_front(); | |
| 75 return tracker->PostTask(base::ThreadTaskRunnerHandle::Get().get(), | |
| 76 FROM_HERE, base::Bind(callback, mock_result)); | |
| 77 } | |
| 78 | |
| 79 void InjectResult(const favicon_base::FaviconRawBitmapResult& mock_result) { | |
| 80 mock_result_queue_.push_back(mock_result); | |
| 81 } | |
| 82 | |
| 83 bool HasUnusedResults() { | |
| 84 return !mock_result_queue_.empty(); | |
| 85 } | |
| 86 | |
| 87 private: | |
| 88 std::deque<favicon_base::FaviconRawBitmapResult> mock_result_queue_; | |
| 89 | |
| 90 DISALLOW_COPY_AND_ASSIGN(MockFaviconService); | |
| 91 }; | |
| 92 | |
| 93 // This class provides access to LargeIconService internals, using the current | |
| 94 // thread's task runner for testing. | |
| 95 class TestLargeIconService : public LargeIconService { | |
| 96 public: | |
| 97 explicit TestLargeIconService(MockFaviconService* mock_favicon_service) | |
| 98 : LargeIconService(mock_favicon_service, | |
| 99 base::ThreadTaskRunnerHandle::Get()) {} | |
| 100 ~TestLargeIconService() override { | |
| 101 } | |
| 102 | |
| 103 private: | |
| 104 DISALLOW_COPY_AND_ASSIGN(TestLargeIconService); | |
| 105 }; | |
| 106 | |
| 107 class LargeIconServiceTest : public testing::Test { | 59 class LargeIconServiceTest : public testing::Test { |
| 108 public: | 60 public: |
| 109 LargeIconServiceTest() : is_callback_invoked_(false) { | 61 LargeIconServiceTest() |
| 110 } | 62 : large_icon_service_(&mock_favicon_service_, |
| 63 base::ThreadTaskRunnerHandle::Get()), |
| 64 is_callback_invoked_(false) {} |
| 111 | 65 |
| 112 ~LargeIconServiceTest() override { | 66 ~LargeIconServiceTest() override { |
| 113 } | 67 } |
| 114 | 68 |
| 115 void SetUp() override { | |
| 116 testing::Test::SetUp(); | |
| 117 mock_favicon_service_.reset(new MockFaviconService()); | |
| 118 large_icon_service_.reset( | |
| 119 new TestLargeIconService(mock_favicon_service_.get())); | |
| 120 } | |
| 121 | |
| 122 void ResultCallback(const favicon_base::LargeIconResult& result) { | 69 void ResultCallback(const favicon_base::LargeIconResult& result) { |
| 123 is_callback_invoked_ = true; | 70 is_callback_invoked_ = true; |
| 124 | 71 |
| 125 // Checking presence and absence of results. | 72 // Checking presence and absence of results. |
| 126 EXPECT_EQ(expected_bitmap_.is_valid(), result.bitmap.is_valid()); | 73 EXPECT_EQ(expected_bitmap_.is_valid(), result.bitmap.is_valid()); |
| 127 EXPECT_EQ(expected_fallback_icon_style_ != nullptr, | 74 EXPECT_EQ(expected_fallback_icon_style_ != nullptr, |
| 128 result.fallback_icon_style != nullptr); | 75 result.fallback_icon_style != nullptr); |
| 129 | 76 |
| 130 if (expected_bitmap_.is_valid()) { | 77 if (expected_bitmap_.is_valid()) { |
| 131 EXPECT_EQ(expected_bitmap_.pixel_size, result.bitmap.pixel_size); | 78 EXPECT_EQ(expected_bitmap_.pixel_size, result.bitmap.pixel_size); |
| 132 // Not actually checking bitmap content. | 79 // Not actually checking bitmap content. |
| 133 } | 80 } |
| 134 if (expected_fallback_icon_style_.get()) { | 81 if (expected_fallback_icon_style_.get()) { |
| 135 EXPECT_EQ(*expected_fallback_icon_style_, | 82 EXPECT_EQ(*expected_fallback_icon_style_, |
| 136 *result.fallback_icon_style); | 83 *result.fallback_icon_style); |
| 137 } | 84 } |
| 138 // Ensure all mock results have been consumed. | 85 } |
| 139 EXPECT_FALSE(mock_favicon_service_->HasUnusedResults()); | 86 |
| 87 void InjectMockResult( |
| 88 const GURL& page_url, |
| 89 const favicon_base::FaviconRawBitmapResult& mock_result) { |
| 90 EXPECT_CALL(mock_favicon_service_, |
| 91 GetLargestRawFaviconForPageURL(page_url, _, _, _, _)) |
| 92 .WillOnce(PostReply<5>(mock_result)); |
| 140 } | 93 } |
| 141 | 94 |
| 142 protected: | 95 protected: |
| 143 base::MessageLoopForIO loop_; | 96 base::MessageLoopForIO loop_; |
| 144 | 97 |
| 145 std::unique_ptr<MockFaviconService> mock_favicon_service_; | 98 testing::StrictMock<MockFaviconService> mock_favicon_service_; |
| 146 std::unique_ptr<TestLargeIconService> large_icon_service_; | 99 LargeIconService large_icon_service_; |
| 147 base::CancelableTaskTracker cancelable_task_tracker_; | 100 base::CancelableTaskTracker cancelable_task_tracker_; |
| 148 | 101 |
| 149 favicon_base::FaviconRawBitmapResult expected_bitmap_; | 102 favicon_base::FaviconRawBitmapResult expected_bitmap_; |
| 150 std::unique_ptr<favicon_base::FallbackIconStyle> | 103 std::unique_ptr<favicon_base::FallbackIconStyle> |
| 151 expected_fallback_icon_style_; | 104 expected_fallback_icon_style_; |
| 152 | 105 |
| 153 bool is_callback_invoked_; | 106 bool is_callback_invoked_; |
| 154 | 107 |
| 155 private: | 108 private: |
| 156 DISALLOW_COPY_AND_ASSIGN(LargeIconServiceTest); | 109 DISALLOW_COPY_AND_ASSIGN(LargeIconServiceTest); |
| 157 }; | 110 }; |
| 158 | 111 |
| 159 TEST_F(LargeIconServiceTest, SameSize) { | 112 TEST_F(LargeIconServiceTest, SameSize) { |
| 160 mock_favicon_service_->InjectResult(CreateTestBitmap(24, 24, kTestColor)); | 113 InjectMockResult(GURL(kDummyUrl), CreateTestBitmap(24, 24, kTestColor)); |
| 161 expected_bitmap_ = CreateTestBitmap(24, 24, kTestColor); | 114 expected_bitmap_ = CreateTestBitmap(24, 24, kTestColor); |
| 162 large_icon_service_->GetLargeIconOrFallbackStyle( | 115 large_icon_service_.GetLargeIconOrFallbackStyle( |
| 163 GURL(kDummyUrl), | 116 GURL(kDummyUrl), |
| 164 24, // |min_source_size_in_pixel| | 117 24, // |min_source_size_in_pixel| |
| 165 24, // |desired_size_in_pixel| | 118 24, // |desired_size_in_pixel| |
| 166 base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)), | 119 base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)), |
| 167 &cancelable_task_tracker_); | 120 &cancelable_task_tracker_); |
| 168 base::RunLoop().RunUntilIdle(); | 121 base::RunLoop().RunUntilIdle(); |
| 169 EXPECT_TRUE(is_callback_invoked_); | 122 EXPECT_TRUE(is_callback_invoked_); |
| 170 } | 123 } |
| 171 | 124 |
| 172 TEST_F(LargeIconServiceTest, ScaleDown) { | 125 TEST_F(LargeIconServiceTest, ScaleDown) { |
| 173 mock_favicon_service_->InjectResult(CreateTestBitmap(32, 32, kTestColor)); | 126 InjectMockResult(GURL(kDummyUrl), CreateTestBitmap(32, 32, kTestColor)); |
| 174 expected_bitmap_ = CreateTestBitmap(24, 24, kTestColor); | 127 expected_bitmap_ = CreateTestBitmap(24, 24, kTestColor); |
| 175 large_icon_service_->GetLargeIconOrFallbackStyle( | 128 large_icon_service_.GetLargeIconOrFallbackStyle( |
| 176 GURL(kDummyUrl), | 129 GURL(kDummyUrl), 24, 24, |
| 177 24, | |
| 178 24, | |
| 179 base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)), | 130 base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)), |
| 180 &cancelable_task_tracker_); | 131 &cancelable_task_tracker_); |
| 181 base::RunLoop().RunUntilIdle(); | 132 base::RunLoop().RunUntilIdle(); |
| 182 EXPECT_TRUE(is_callback_invoked_); | 133 EXPECT_TRUE(is_callback_invoked_); |
| 183 } | 134 } |
| 184 | 135 |
| 185 TEST_F(LargeIconServiceTest, ScaleUp) { | 136 TEST_F(LargeIconServiceTest, ScaleUp) { |
| 186 mock_favicon_service_->InjectResult(CreateTestBitmap(16, 16, kTestColor)); | 137 InjectMockResult(GURL(kDummyUrl), CreateTestBitmap(16, 16, kTestColor)); |
| 187 expected_bitmap_ = CreateTestBitmap(24, 24, kTestColor); | 138 expected_bitmap_ = CreateTestBitmap(24, 24, kTestColor); |
| 188 large_icon_service_->GetLargeIconOrFallbackStyle( | 139 large_icon_service_.GetLargeIconOrFallbackStyle( |
| 189 GURL(kDummyUrl), | 140 GURL(kDummyUrl), |
| 190 14, // Lowered requirement so stored bitmap is admitted. | 141 14, // Lowered requirement so stored bitmap is admitted. |
| 191 24, | 142 24, |
| 192 base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)), | 143 base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)), |
| 193 &cancelable_task_tracker_); | 144 &cancelable_task_tracker_); |
| 194 base::RunLoop().RunUntilIdle(); | 145 base::RunLoop().RunUntilIdle(); |
| 195 EXPECT_TRUE(is_callback_invoked_); | 146 EXPECT_TRUE(is_callback_invoked_); |
| 196 } | 147 } |
| 197 | 148 |
| 198 // |desired_size_in_pixel| == 0 means retrieve original image without scaling. | 149 // |desired_size_in_pixel| == 0 means retrieve original image without scaling. |
| 199 TEST_F(LargeIconServiceTest, NoScale) { | 150 TEST_F(LargeIconServiceTest, NoScale) { |
| 200 mock_favicon_service_->InjectResult(CreateTestBitmap(24, 24, kTestColor)); | 151 InjectMockResult(GURL(kDummyUrl), CreateTestBitmap(24, 24, kTestColor)); |
| 201 expected_bitmap_ = CreateTestBitmap(24, 24, kTestColor); | 152 expected_bitmap_ = CreateTestBitmap(24, 24, kTestColor); |
| 202 large_icon_service_->GetLargeIconOrFallbackStyle( | 153 large_icon_service_.GetLargeIconOrFallbackStyle( |
| 203 GURL(kDummyUrl), | 154 GURL(kDummyUrl), 16, 0, |
| 204 16, | |
| 205 0, | |
| 206 base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)), | 155 base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)), |
| 207 &cancelable_task_tracker_); | 156 &cancelable_task_tracker_); |
| 208 base::RunLoop().RunUntilIdle(); | 157 base::RunLoop().RunUntilIdle(); |
| 209 EXPECT_TRUE(is_callback_invoked_); | 158 EXPECT_TRUE(is_callback_invoked_); |
| 210 } | 159 } |
| 211 | 160 |
| 212 TEST_F(LargeIconServiceTest, FallbackSinceIconTooSmall) { | 161 TEST_F(LargeIconServiceTest, FallbackSinceIconTooSmall) { |
| 213 mock_favicon_service_->InjectResult(CreateTestBitmap(16, 16, kTestColor)); | 162 InjectMockResult(GURL(kDummyUrl), CreateTestBitmap(16, 16, kTestColor)); |
| 214 expected_fallback_icon_style_.reset(new favicon_base::FallbackIconStyle); | 163 expected_fallback_icon_style_.reset(new favicon_base::FallbackIconStyle); |
| 215 expected_fallback_icon_style_->background_color = kTestColor; | 164 expected_fallback_icon_style_->background_color = kTestColor; |
| 216 expected_fallback_icon_style_->is_default_background_color = false; | 165 expected_fallback_icon_style_->is_default_background_color = false; |
| 217 large_icon_service_->GetLargeIconOrFallbackStyle( | 166 large_icon_service_.GetLargeIconOrFallbackStyle( |
| 218 GURL(kDummyUrl), | 167 GURL(kDummyUrl), 24, 24, |
| 219 24, | |
| 220 24, | |
| 221 base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)), | 168 base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)), |
| 222 &cancelable_task_tracker_); | 169 &cancelable_task_tracker_); |
| 223 base::RunLoop().RunUntilIdle(); | 170 base::RunLoop().RunUntilIdle(); |
| 224 EXPECT_TRUE(is_callback_invoked_); | 171 EXPECT_TRUE(is_callback_invoked_); |
| 225 } | 172 } |
| 226 | 173 |
| 227 TEST_F(LargeIconServiceTest, FallbackSinceIconNotSquare) { | 174 TEST_F(LargeIconServiceTest, FallbackSinceIconNotSquare) { |
| 228 mock_favicon_service_->InjectResult(CreateTestBitmap(24, 32, kTestColor)); | 175 InjectMockResult(GURL(kDummyUrl), CreateTestBitmap(24, 32, kTestColor)); |
| 229 expected_fallback_icon_style_.reset(new favicon_base::FallbackIconStyle); | 176 expected_fallback_icon_style_.reset(new favicon_base::FallbackIconStyle); |
| 230 expected_fallback_icon_style_->background_color = kTestColor; | 177 expected_fallback_icon_style_->background_color = kTestColor; |
| 231 expected_fallback_icon_style_->is_default_background_color = false; | 178 expected_fallback_icon_style_->is_default_background_color = false; |
| 232 large_icon_service_->GetLargeIconOrFallbackStyle( | 179 large_icon_service_.GetLargeIconOrFallbackStyle( |
| 233 GURL(kDummyUrl), | 180 GURL(kDummyUrl), 24, 24, |
| 234 24, | |
| 235 24, | |
| 236 base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)), | 181 base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)), |
| 237 &cancelable_task_tracker_); | 182 &cancelable_task_tracker_); |
| 238 base::RunLoop().RunUntilIdle(); | 183 base::RunLoop().RunUntilIdle(); |
| 239 EXPECT_TRUE(is_callback_invoked_); | 184 EXPECT_TRUE(is_callback_invoked_); |
| 240 } | 185 } |
| 241 | 186 |
| 242 TEST_F(LargeIconServiceTest, FallbackSinceIconMissing) { | 187 TEST_F(LargeIconServiceTest, FallbackSinceIconMissing) { |
| 243 mock_favicon_service_->InjectResult(favicon_base::FaviconRawBitmapResult()); | 188 InjectMockResult(GURL(kDummyUrl), favicon_base::FaviconRawBitmapResult()); |
| 244 // Expect default fallback style, including background. | 189 // Expect default fallback style, including background. |
| 245 expected_fallback_icon_style_.reset(new favicon_base::FallbackIconStyle); | 190 expected_fallback_icon_style_.reset(new favicon_base::FallbackIconStyle); |
| 246 large_icon_service_->GetLargeIconOrFallbackStyle( | 191 large_icon_service_.GetLargeIconOrFallbackStyle( |
| 247 GURL(kDummyUrl), | 192 GURL(kDummyUrl), 24, 24, |
| 248 24, | |
| 249 24, | |
| 250 base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)), | 193 base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)), |
| 251 &cancelable_task_tracker_); | 194 &cancelable_task_tracker_); |
| 252 base::RunLoop().RunUntilIdle(); | 195 base::RunLoop().RunUntilIdle(); |
| 253 EXPECT_TRUE(is_callback_invoked_); | 196 EXPECT_TRUE(is_callback_invoked_); |
| 254 } | 197 } |
| 255 | 198 |
| 256 TEST_F(LargeIconServiceTest, FallbackSinceIconMissingNoScale) { | 199 TEST_F(LargeIconServiceTest, FallbackSinceIconMissingNoScale) { |
| 257 mock_favicon_service_->InjectResult(favicon_base::FaviconRawBitmapResult()); | 200 InjectMockResult(GURL(kDummyUrl), favicon_base::FaviconRawBitmapResult()); |
| 258 // Expect default fallback style, including background. | 201 // Expect default fallback style, including background. |
| 259 expected_fallback_icon_style_.reset(new favicon_base::FallbackIconStyle); | 202 expected_fallback_icon_style_.reset(new favicon_base::FallbackIconStyle); |
| 260 large_icon_service_->GetLargeIconOrFallbackStyle( | 203 large_icon_service_.GetLargeIconOrFallbackStyle( |
| 261 GURL(kDummyUrl), | 204 GURL(kDummyUrl), 24, 0, |
| 262 24, | |
| 263 0, | |
| 264 base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)), | 205 base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)), |
| 265 &cancelable_task_tracker_); | 206 &cancelable_task_tracker_); |
| 266 base::RunLoop().RunUntilIdle(); | 207 base::RunLoop().RunUntilIdle(); |
| 267 EXPECT_TRUE(is_callback_invoked_); | 208 EXPECT_TRUE(is_callback_invoked_); |
| 268 } | 209 } |
| 269 | 210 |
| 270 // Oddball case where we demand a high resolution icon to scale down. Generates | 211 // Oddball case where we demand a high resolution icon to scale down. Generates |
| 271 // fallback even though an icon with the final size is available. | 212 // fallback even though an icon with the final size is available. |
| 272 TEST_F(LargeIconServiceTest, FallbackSinceTooPicky) { | 213 TEST_F(LargeIconServiceTest, FallbackSinceTooPicky) { |
| 273 mock_favicon_service_->InjectResult(CreateTestBitmap(24, 24, kTestColor)); | 214 InjectMockResult(GURL(kDummyUrl), CreateTestBitmap(24, 24, kTestColor)); |
| 274 expected_fallback_icon_style_.reset(new favicon_base::FallbackIconStyle); | 215 expected_fallback_icon_style_.reset(new favicon_base::FallbackIconStyle); |
| 275 expected_fallback_icon_style_->background_color = kTestColor; | 216 expected_fallback_icon_style_->background_color = kTestColor; |
| 276 expected_fallback_icon_style_->is_default_background_color = false; | 217 expected_fallback_icon_style_->is_default_background_color = false; |
| 277 large_icon_service_->GetLargeIconOrFallbackStyle( | 218 large_icon_service_.GetLargeIconOrFallbackStyle( |
| 278 GURL(kDummyUrl), | 219 GURL(kDummyUrl), 32, 24, |
| 279 32, | |
| 280 24, | |
| 281 base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)), | 220 base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)), |
| 282 &cancelable_task_tracker_); | 221 &cancelable_task_tracker_); |
| 283 base::RunLoop().RunUntilIdle(); | 222 base::RunLoop().RunUntilIdle(); |
| 284 EXPECT_TRUE(is_callback_invoked_); | 223 EXPECT_TRUE(is_callback_invoked_); |
| 285 } | 224 } |
| 286 | 225 |
| 287 } // namespace | 226 } // namespace |
| 288 } // namespace favicon | 227 } // namespace favicon |
| OLD | NEW |