| 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 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/memory/ref_counted_memory.h" | 10 #include "base/memory/ref_counted_memory.h" |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 130 // Not actually checking bitmap content. | 130 // Not actually checking bitmap content. |
| 131 } | 131 } |
| 132 if (expected_fallback_icon_style_.get()) { | 132 if (expected_fallback_icon_style_.get()) { |
| 133 EXPECT_EQ(*expected_fallback_icon_style_, | 133 EXPECT_EQ(*expected_fallback_icon_style_, |
| 134 *result.fallback_icon_style); | 134 *result.fallback_icon_style); |
| 135 } | 135 } |
| 136 // Ensure all mock results have been consumed. | 136 // Ensure all mock results have been consumed. |
| 137 EXPECT_FALSE(mock_favicon_service_->HasUnusedResults()); | 137 EXPECT_FALSE(mock_favicon_service_->HasUnusedResults()); |
| 138 } | 138 } |
| 139 | 139 |
| 140 void setNonDefaultParsedFallbackStyle() { |
| 141 parsed_fallback_icon_style_.background_color = SK_ColorGRAY; |
| 142 parsed_fallback_icon_style_.text_color = SK_ColorWHITE; |
| 143 parsed_fallback_icon_style_.font_size_ratio = 0.7; |
| 144 parsed_fallback_icon_style_.roundness = 0.9; |
| 145 } |
| 146 |
| 140 protected: | 147 protected: |
| 141 base::MessageLoopForIO loop_; | 148 base::MessageLoopForIO loop_; |
| 142 | 149 |
| 143 scoped_ptr<MockFaviconService> mock_favicon_service_; | 150 scoped_ptr<MockFaviconService> mock_favicon_service_; |
| 144 scoped_ptr<TestLargeIconService> large_icon_service_; | 151 scoped_ptr<TestLargeIconService> large_icon_service_; |
| 145 base::CancelableTaskTracker cancelable_task_tracker_; | 152 base::CancelableTaskTracker cancelable_task_tracker_; |
| 146 | 153 |
| 147 favicon_base::FaviconRawBitmapResult expected_bitmap_; | 154 favicon_base::FaviconRawBitmapResult expected_bitmap_; |
| 148 scoped_ptr<favicon_base::FallbackIconStyle> expected_fallback_icon_style_; | 155 scoped_ptr<favicon_base::FallbackIconStyle> expected_fallback_icon_style_; |
| 156 favicon_base::FallbackIconStyle parsed_fallback_icon_style_; |
| 149 | 157 |
| 150 bool is_callback_invoked_; | 158 bool is_callback_invoked_; |
| 151 | 159 |
| 152 private: | 160 private: |
| 153 DISALLOW_COPY_AND_ASSIGN(LargeIconServiceTest); | 161 DISALLOW_COPY_AND_ASSIGN(LargeIconServiceTest); |
| 154 }; | 162 }; |
| 155 | 163 |
| 156 TEST_F(LargeIconServiceTest, SameSize) { | 164 TEST_F(LargeIconServiceTest, SameSize) { |
| 157 mock_favicon_service_->InjectResult(CreateTestBitmap(24, 24, kTestColor)); | 165 mock_favicon_service_->InjectResult(CreateTestBitmap(24, 24, kTestColor)); |
| 158 expected_bitmap_ = CreateTestBitmap(24, 24, kTestColor); | 166 expected_bitmap_ = CreateTestBitmap(24, 24, kTestColor); |
| 159 large_icon_service_->GetLargeIconOrFallbackStyle( | 167 large_icon_service_->GetLargeIconOrFallbackStyle( |
| 160 GURL(kDummyUrl), | 168 GURL(kDummyUrl), |
| 161 24, // |min_source_size_in_pixel| | 169 24, // |min_source_size_in_pixel| |
| 162 24, // |desired_size_in_pixel| | 170 24, // |desired_size_in_pixel| |
| 171 parsed_fallback_icon_style_, |
| 163 base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)), | 172 base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)), |
| 164 &cancelable_task_tracker_); | 173 &cancelable_task_tracker_); |
| 165 base::MessageLoop::current()->RunUntilIdle(); | 174 base::MessageLoop::current()->RunUntilIdle(); |
| 166 EXPECT_TRUE(is_callback_invoked_); | 175 EXPECT_TRUE(is_callback_invoked_); |
| 167 } | 176 } |
| 168 | 177 |
| 169 TEST_F(LargeIconServiceTest, ScaleDown) { | 178 TEST_F(LargeIconServiceTest, ScaleDown) { |
| 170 mock_favicon_service_->InjectResult(CreateTestBitmap(32, 32, kTestColor)); | 179 mock_favicon_service_->InjectResult(CreateTestBitmap(32, 32, kTestColor)); |
| 171 expected_bitmap_ = CreateTestBitmap(24, 24, kTestColor); | 180 expected_bitmap_ = CreateTestBitmap(24, 24, kTestColor); |
| 172 large_icon_service_->GetLargeIconOrFallbackStyle( | 181 large_icon_service_->GetLargeIconOrFallbackStyle( |
| 173 GURL(kDummyUrl), | 182 GURL(kDummyUrl), 24, 24, parsed_fallback_icon_style_, |
| 174 24, | |
| 175 24, | |
| 176 base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)), | 183 base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)), |
| 177 &cancelable_task_tracker_); | 184 &cancelable_task_tracker_); |
| 178 base::MessageLoop::current()->RunUntilIdle(); | 185 base::MessageLoop::current()->RunUntilIdle(); |
| 179 EXPECT_TRUE(is_callback_invoked_); | 186 EXPECT_TRUE(is_callback_invoked_); |
| 180 } | 187 } |
| 181 | 188 |
| 182 TEST_F(LargeIconServiceTest, ScaleUp) { | 189 TEST_F(LargeIconServiceTest, ScaleUp) { |
| 183 mock_favicon_service_->InjectResult(CreateTestBitmap(16, 16, kTestColor)); | 190 mock_favicon_service_->InjectResult(CreateTestBitmap(16, 16, kTestColor)); |
| 184 expected_bitmap_ = CreateTestBitmap(24, 24, kTestColor); | 191 expected_bitmap_ = CreateTestBitmap(24, 24, kTestColor); |
| 185 large_icon_service_->GetLargeIconOrFallbackStyle( | 192 large_icon_service_->GetLargeIconOrFallbackStyle( |
| 186 GURL(kDummyUrl), | 193 GURL(kDummyUrl), |
| 187 14, // Lowered requirement so stored bitmap is admitted. | 194 14, // Lowered requirement so stored bitmap is admitted. |
| 188 24, | 195 24, parsed_fallback_icon_style_, |
| 189 base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)), | 196 base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)), |
| 190 &cancelable_task_tracker_); | 197 &cancelable_task_tracker_); |
| 191 base::MessageLoop::current()->RunUntilIdle(); | 198 base::MessageLoop::current()->RunUntilIdle(); |
| 192 EXPECT_TRUE(is_callback_invoked_); | 199 EXPECT_TRUE(is_callback_invoked_); |
| 193 } | 200 } |
| 194 | 201 |
| 195 // |desired_size_in_pixel| == 0 means retrieve original image without scaling. | 202 // |desired_size_in_pixel| == 0 means retrieve original image without scaling. |
| 196 TEST_F(LargeIconServiceTest, NoScale) { | 203 TEST_F(LargeIconServiceTest, NoScale) { |
| 197 mock_favicon_service_->InjectResult(CreateTestBitmap(24, 24, kTestColor)); | 204 mock_favicon_service_->InjectResult(CreateTestBitmap(24, 24, kTestColor)); |
| 198 expected_bitmap_ = CreateTestBitmap(24, 24, kTestColor); | 205 expected_bitmap_ = CreateTestBitmap(24, 24, kTestColor); |
| 199 large_icon_service_->GetLargeIconOrFallbackStyle( | 206 large_icon_service_->GetLargeIconOrFallbackStyle( |
| 200 GURL(kDummyUrl), | 207 GURL(kDummyUrl), 16, 0, parsed_fallback_icon_style_, |
| 201 16, | |
| 202 0, | |
| 203 base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)), | 208 base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)), |
| 204 &cancelable_task_tracker_); | 209 &cancelable_task_tracker_); |
| 205 base::MessageLoop::current()->RunUntilIdle(); | 210 base::MessageLoop::current()->RunUntilIdle(); |
| 206 EXPECT_TRUE(is_callback_invoked_); | 211 EXPECT_TRUE(is_callback_invoked_); |
| 207 } | 212 } |
| 208 | 213 |
| 209 TEST_F(LargeIconServiceTest, FallbackSinceIconTooSmall) { | 214 TEST_F(LargeIconServiceTest, FallbackSinceIconTooSmall) { |
| 210 mock_favicon_service_->InjectResult(CreateTestBitmap(16, 16, kTestColor)); | 215 mock_favicon_service_->InjectResult(CreateTestBitmap(16, 16, kTestColor)); |
| 216 setNonDefaultParsedFallbackStyle(); |
| 211 expected_fallback_icon_style_.reset(new favicon_base::FallbackIconStyle); | 217 expected_fallback_icon_style_.reset(new favicon_base::FallbackIconStyle); |
| 218 *expected_fallback_icon_style_ = parsed_fallback_icon_style_; |
| 219 // The parsed background color should be overridden with the dominant color of |
| 220 // the icon. Other specifications should be preserved. |
| 212 expected_fallback_icon_style_->background_color = kTestColor; | 221 expected_fallback_icon_style_->background_color = kTestColor; |
| 213 large_icon_service_->GetLargeIconOrFallbackStyle( | 222 large_icon_service_->GetLargeIconOrFallbackStyle( |
| 214 GURL(kDummyUrl), | 223 GURL(kDummyUrl), 24, 24, parsed_fallback_icon_style_, |
| 215 24, | |
| 216 24, | |
| 217 base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)), | 224 base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)), |
| 218 &cancelable_task_tracker_); | 225 &cancelable_task_tracker_); |
| 219 base::MessageLoop::current()->RunUntilIdle(); | 226 base::MessageLoop::current()->RunUntilIdle(); |
| 220 EXPECT_TRUE(is_callback_invoked_); | 227 EXPECT_TRUE(is_callback_invoked_); |
| 221 } | 228 } |
| 222 | 229 |
| 223 TEST_F(LargeIconServiceTest, FallbackSinceIconNotSquare) { | 230 TEST_F(LargeIconServiceTest, FallbackSinceIconNotSquare) { |
| 224 mock_favicon_service_->InjectResult(CreateTestBitmap(24, 32, kTestColor)); | 231 mock_favicon_service_->InjectResult(CreateTestBitmap(24, 32, kTestColor)); |
| 232 setNonDefaultParsedFallbackStyle(); |
| 225 expected_fallback_icon_style_.reset(new favicon_base::FallbackIconStyle); | 233 expected_fallback_icon_style_.reset(new favicon_base::FallbackIconStyle); |
| 234 *expected_fallback_icon_style_ = parsed_fallback_icon_style_; |
| 235 // The parsed background color should be overridden with the dominant color of |
| 236 // the icon. Other specifications should be preserved. |
| 226 expected_fallback_icon_style_->background_color = kTestColor; | 237 expected_fallback_icon_style_->background_color = kTestColor; |
| 227 large_icon_service_->GetLargeIconOrFallbackStyle( | 238 large_icon_service_->GetLargeIconOrFallbackStyle( |
| 228 GURL(kDummyUrl), | 239 GURL(kDummyUrl), 24, 24, parsed_fallback_icon_style_, |
| 229 24, | |
| 230 24, | |
| 231 base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)), | 240 base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)), |
| 232 &cancelable_task_tracker_); | 241 &cancelable_task_tracker_); |
| 233 base::MessageLoop::current()->RunUntilIdle(); | 242 base::MessageLoop::current()->RunUntilIdle(); |
| 234 EXPECT_TRUE(is_callback_invoked_); | 243 EXPECT_TRUE(is_callback_invoked_); |
| 235 } | 244 } |
| 236 | 245 |
| 237 TEST_F(LargeIconServiceTest, FallbackSinceIconMissing) { | 246 TEST_F(LargeIconServiceTest, FallbackSinceIconMissing) { |
| 238 mock_favicon_service_->InjectResult(favicon_base::FaviconRawBitmapResult()); | 247 mock_favicon_service_->InjectResult(favicon_base::FaviconRawBitmapResult()); |
| 239 // Expect default fallback style, including background. | 248 setNonDefaultParsedFallbackStyle(); |
| 249 // Expect specified fallback style. |
| 240 expected_fallback_icon_style_.reset(new favicon_base::FallbackIconStyle); | 250 expected_fallback_icon_style_.reset(new favicon_base::FallbackIconStyle); |
| 251 *expected_fallback_icon_style_ = parsed_fallback_icon_style_; |
| 241 large_icon_service_->GetLargeIconOrFallbackStyle( | 252 large_icon_service_->GetLargeIconOrFallbackStyle( |
| 242 GURL(kDummyUrl), | 253 GURL(kDummyUrl), 24, 24, parsed_fallback_icon_style_, |
| 243 24, | |
| 244 24, | |
| 245 base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)), | 254 base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)), |
| 246 &cancelable_task_tracker_); | 255 &cancelable_task_tracker_); |
| 247 base::MessageLoop::current()->RunUntilIdle(); | 256 base::MessageLoop::current()->RunUntilIdle(); |
| 248 EXPECT_TRUE(is_callback_invoked_); | 257 EXPECT_TRUE(is_callback_invoked_); |
| 249 } | 258 } |
| 250 | 259 |
| 251 TEST_F(LargeIconServiceTest, FallbackSinceIconMissingNoScale) { | 260 TEST_F(LargeIconServiceTest, FallbackSinceIconMissingNoScale) { |
| 252 mock_favicon_service_->InjectResult(favicon_base::FaviconRawBitmapResult()); | 261 mock_favicon_service_->InjectResult(favicon_base::FaviconRawBitmapResult()); |
| 253 // Expect default fallback style, including background. | 262 setNonDefaultParsedFallbackStyle(); |
| 263 // Expect specified fallback style. |
| 254 expected_fallback_icon_style_.reset(new favicon_base::FallbackIconStyle); | 264 expected_fallback_icon_style_.reset(new favicon_base::FallbackIconStyle); |
| 265 *expected_fallback_icon_style_ = parsed_fallback_icon_style_; |
| 255 large_icon_service_->GetLargeIconOrFallbackStyle( | 266 large_icon_service_->GetLargeIconOrFallbackStyle( |
| 256 GURL(kDummyUrl), | 267 GURL(kDummyUrl), 24, 0, parsed_fallback_icon_style_, |
| 257 24, | |
| 258 0, | |
| 259 base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)), | 268 base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)), |
| 260 &cancelable_task_tracker_); | 269 &cancelable_task_tracker_); |
| 261 base::MessageLoop::current()->RunUntilIdle(); | 270 base::MessageLoop::current()->RunUntilIdle(); |
| 262 EXPECT_TRUE(is_callback_invoked_); | 271 EXPECT_TRUE(is_callback_invoked_); |
| 263 } | 272 } |
| 264 | 273 |
| 265 // Oddball case where we demand a high resolution icon to scale down. Generates | 274 // Oddball case where we demand a high resolution icon to scale down. Generates |
| 266 // fallback even though an icon with the final size is available. | 275 // fallback even though an icon with the final size is available. |
| 267 TEST_F(LargeIconServiceTest, FallbackSinceTooPicky) { | 276 TEST_F(LargeIconServiceTest, FallbackSinceTooPicky) { |
| 268 mock_favicon_service_->InjectResult(CreateTestBitmap(24, 24, kTestColor)); | 277 mock_favicon_service_->InjectResult(CreateTestBitmap(24, 24, kTestColor)); |
| 269 expected_fallback_icon_style_.reset(new favicon_base::FallbackIconStyle); | 278 expected_fallback_icon_style_.reset(new favicon_base::FallbackIconStyle); |
| 270 expected_fallback_icon_style_->background_color = kTestColor; | 279 expected_fallback_icon_style_->background_color = kTestColor; |
| 271 large_icon_service_->GetLargeIconOrFallbackStyle( | 280 large_icon_service_->GetLargeIconOrFallbackStyle( |
| 272 GURL(kDummyUrl), | 281 GURL(kDummyUrl), 32, 24, *expected_fallback_icon_style_, |
| 273 32, | |
| 274 24, | |
| 275 base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)), | 282 base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)), |
| 276 &cancelable_task_tracker_); | 283 &cancelable_task_tracker_); |
| 277 base::MessageLoop::current()->RunUntilIdle(); | 284 base::MessageLoop::current()->RunUntilIdle(); |
| 278 EXPECT_TRUE(is_callback_invoked_); | 285 EXPECT_TRUE(is_callback_invoked_); |
| 279 } | 286 } |
| 280 | 287 |
| 281 } // namespace | 288 } // namespace |
| 282 } // namespace favicon | 289 } // namespace favicon |
| OLD | NEW |