Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(809)

Side by Side Diff: components/favicon/core/large_icon_service_unittest.cc

Issue 2784233003: [LargeIconService] Allow decoding of images in the service (Closed)
Patch Set: Peter's comments #2 Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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"
(...skipping 11 matching lines...) Expand all
22 #include "components/favicon_base/favicon_types.h" 22 #include "components/favicon_base/favicon_types.h"
23 #include "components/image_fetcher/core/image_fetcher.h" 23 #include "components/image_fetcher/core/image_fetcher.h"
24 #include "components/image_fetcher/core/request_metadata.h" 24 #include "components/image_fetcher/core/request_metadata.h"
25 #include "testing/gmock/include/gmock/gmock.h" 25 #include "testing/gmock/include/gmock/gmock.h"
26 #include "testing/gtest/include/gtest/gtest.h" 26 #include "testing/gtest/include/gtest/gtest.h"
27 #include "third_party/skia/include/core/SkBitmap.h" 27 #include "third_party/skia/include/core/SkBitmap.h"
28 #include "third_party/skia/include/core/SkColor.h" 28 #include "third_party/skia/include/core/SkColor.h"
29 #include "ui/gfx/codec/png_codec.h" 29 #include "ui/gfx/codec/png_codec.h"
30 #include "ui/gfx/geometry/size.h" 30 #include "ui/gfx/geometry/size.h"
31 #include "ui/gfx/image/image.h" 31 #include "ui/gfx/image/image.h"
32 #include "ui/gfx/image/image_skia.h"
32 #include "url/gurl.h" 33 #include "url/gurl.h"
33 34
34 namespace favicon { 35 namespace favicon {
35 namespace { 36 namespace {
36 37
37 using testing::NiceMock; 38 using testing::NiceMock;
38 using testing::Return; 39 using testing::Return;
39 using testing::SaveArg; 40 using testing::SaveArg;
40 using testing::_; 41 using testing::_;
41 42
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 const ImageFetcherCallback&)); 97 const ImageFetcherCallback&));
97 MOCK_METHOD0(GetImageDecoder, image_fetcher::ImageDecoder*()); 98 MOCK_METHOD0(GetImageDecoder, image_fetcher::ImageDecoder*());
98 }; 99 };
99 100
100 class LargeIconServiceTest : public testing::Test { 101 class LargeIconServiceTest : public testing::Test {
101 public: 102 public:
102 LargeIconServiceTest() 103 LargeIconServiceTest()
103 : mock_image_fetcher_(new NiceMock<MockImageFetcher>()), 104 : mock_image_fetcher_(new NiceMock<MockImageFetcher>()),
104 large_icon_service_(&mock_favicon_service_, 105 large_icon_service_(&mock_favicon_service_,
105 base::ThreadTaskRunnerHandle::Get(), 106 base::ThreadTaskRunnerHandle::Get(),
106 base::WrapUnique(mock_image_fetcher_)), 107 base::WrapUnique(mock_image_fetcher_)) {}
107 is_callback_invoked_(false) {}
108 108
109 ~LargeIconServiceTest() override { 109 ~LargeIconServiceTest() override {}
110 }
111
112 void ResultCallback(const favicon_base::LargeIconResult& result) {
113 is_callback_invoked_ = true;
114
115 // Checking presence and absence of results.
116 EXPECT_EQ(expected_bitmap_.is_valid(), result.bitmap.is_valid());
117 EXPECT_EQ(expected_fallback_icon_style_ != nullptr,
118 result.fallback_icon_style != nullptr);
119
120 if (expected_bitmap_.is_valid()) {
121 EXPECT_EQ(expected_bitmap_.pixel_size, result.bitmap.pixel_size);
122 // Not actually checking bitmap content.
123 }
124 if (expected_fallback_icon_style_.get()) {
125 EXPECT_EQ(*expected_fallback_icon_style_,
126 *result.fallback_icon_style);
127 }
128 }
129
130 void InjectMockResult(
131 const GURL& page_url,
132 const favicon_base::FaviconRawBitmapResult& mock_result) {
133 EXPECT_CALL(mock_favicon_service_,
134 GetLargestRawFaviconForPageURL(page_url, _, _, _, _))
135 .WillOnce(PostReply<5>(mock_result));
136 }
137 110
138 protected: 111 protected:
139 base::MessageLoopForIO loop_; 112 base::MessageLoopForIO loop_;
140 113
141 NiceMock<MockImageFetcher>* mock_image_fetcher_; 114 NiceMock<MockImageFetcher>* mock_image_fetcher_;
142 testing::NiceMock<MockFaviconService> mock_favicon_service_; 115 testing::NiceMock<MockFaviconService> mock_favicon_service_;
143 LargeIconService large_icon_service_; 116 LargeIconService large_icon_service_;
144 base::CancelableTaskTracker cancelable_task_tracker_;
145
146 favicon_base::FaviconRawBitmapResult expected_bitmap_;
147 std::unique_ptr<favicon_base::FallbackIconStyle>
148 expected_fallback_icon_style_;
149
150 bool is_callback_invoked_;
151 117
152 private: 118 private:
153 DISALLOW_COPY_AND_ASSIGN(LargeIconServiceTest); 119 DISALLOW_COPY_AND_ASSIGN(LargeIconServiceTest);
154 }; 120 };
155 121
156 TEST_F(LargeIconServiceTest, SameSize) {
157 InjectMockResult(GURL(kDummyUrl), CreateTestBitmapResult(24, 24, kTestColor));
158 expected_bitmap_ = CreateTestBitmapResult(24, 24, kTestColor);
159 large_icon_service_.GetLargeIconOrFallbackStyle(
160 GURL(kDummyUrl),
161 24, // |min_source_size_in_pixel|
162 24, // |desired_size_in_pixel|
163 base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)),
164 &cancelable_task_tracker_);
165 base::RunLoop().RunUntilIdle();
166 EXPECT_TRUE(is_callback_invoked_);
167 }
168
169 TEST_F(LargeIconServiceTest, ScaleDown) {
170 InjectMockResult(GURL(kDummyUrl), CreateTestBitmapResult(32, 32, kTestColor));
171 expected_bitmap_ = CreateTestBitmapResult(24, 24, kTestColor);
172 large_icon_service_.GetLargeIconOrFallbackStyle(
173 GURL(kDummyUrl), 24, 24,
174 base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)),
175 &cancelable_task_tracker_);
176 base::RunLoop().RunUntilIdle();
177 EXPECT_TRUE(is_callback_invoked_);
178 }
179
180 TEST_F(LargeIconServiceTest, ScaleUp) {
181 InjectMockResult(GURL(kDummyUrl), CreateTestBitmapResult(16, 16, kTestColor));
182 expected_bitmap_ = CreateTestBitmapResult(24, 24, kTestColor);
183 large_icon_service_.GetLargeIconOrFallbackStyle(
184 GURL(kDummyUrl),
185 14, // Lowered requirement so stored bitmap is admitted.
186 24,
187 base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)),
188 &cancelable_task_tracker_);
189 base::RunLoop().RunUntilIdle();
190 EXPECT_TRUE(is_callback_invoked_);
191 }
192
193 // |desired_size_in_pixel| == 0 means retrieve original image without scaling.
194 TEST_F(LargeIconServiceTest, NoScale) {
195 InjectMockResult(GURL(kDummyUrl), CreateTestBitmapResult(24, 24, kTestColor));
196 expected_bitmap_ = CreateTestBitmapResult(24, 24, kTestColor);
197 large_icon_service_.GetLargeIconOrFallbackStyle(
198 GURL(kDummyUrl), 16, 0,
199 base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)),
200 &cancelable_task_tracker_);
201 base::RunLoop().RunUntilIdle();
202 EXPECT_TRUE(is_callback_invoked_);
203 }
204
205 TEST_F(LargeIconServiceTest, FallbackSinceIconTooSmall) {
206 InjectMockResult(GURL(kDummyUrl), CreateTestBitmapResult(16, 16, kTestColor));
207 expected_fallback_icon_style_.reset(new favicon_base::FallbackIconStyle);
208 expected_fallback_icon_style_->background_color = kTestColor;
209 expected_fallback_icon_style_->is_default_background_color = false;
210 large_icon_service_.GetLargeIconOrFallbackStyle(
211 GURL(kDummyUrl), 24, 24,
212 base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)),
213 &cancelable_task_tracker_);
214 base::RunLoop().RunUntilIdle();
215 EXPECT_TRUE(is_callback_invoked_);
216 }
217
218 TEST_F(LargeIconServiceTest, FallbackSinceIconNotSquare) {
219 InjectMockResult(GURL(kDummyUrl), CreateTestBitmapResult(24, 32, kTestColor));
220 expected_fallback_icon_style_.reset(new favicon_base::FallbackIconStyle);
221 expected_fallback_icon_style_->background_color = kTestColor;
222 expected_fallback_icon_style_->is_default_background_color = false;
223 large_icon_service_.GetLargeIconOrFallbackStyle(
224 GURL(kDummyUrl), 24, 24,
225 base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)),
226 &cancelable_task_tracker_);
227 base::RunLoop().RunUntilIdle();
228 EXPECT_TRUE(is_callback_invoked_);
229 }
230
231 TEST_F(LargeIconServiceTest, FallbackSinceIconMissing) {
232 InjectMockResult(GURL(kDummyUrl), favicon_base::FaviconRawBitmapResult());
233 // Expect default fallback style, including background.
234 expected_fallback_icon_style_.reset(new favicon_base::FallbackIconStyle);
235 large_icon_service_.GetLargeIconOrFallbackStyle(
236 GURL(kDummyUrl), 24, 24,
237 base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)),
238 &cancelable_task_tracker_);
239 base::RunLoop().RunUntilIdle();
240 EXPECT_TRUE(is_callback_invoked_);
241 }
242
243 TEST_F(LargeIconServiceTest, FallbackSinceIconMissingNoScale) {
244 InjectMockResult(GURL(kDummyUrl), favicon_base::FaviconRawBitmapResult());
245 // Expect default fallback style, including background.
246 expected_fallback_icon_style_.reset(new favicon_base::FallbackIconStyle);
247 large_icon_service_.GetLargeIconOrFallbackStyle(
248 GURL(kDummyUrl), 24, 0,
249 base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)),
250 &cancelable_task_tracker_);
251 base::RunLoop().RunUntilIdle();
252 EXPECT_TRUE(is_callback_invoked_);
253 }
254
255 // Oddball case where we demand a high resolution icon to scale down. Generates
256 // fallback even though an icon with the final size is available.
257 TEST_F(LargeIconServiceTest, FallbackSinceTooPicky) {
258 InjectMockResult(GURL(kDummyUrl), CreateTestBitmapResult(24, 24, kTestColor));
259 expected_fallback_icon_style_.reset(new favicon_base::FallbackIconStyle);
260 expected_fallback_icon_style_->background_color = kTestColor;
261 expected_fallback_icon_style_->is_default_background_color = false;
262 large_icon_service_.GetLargeIconOrFallbackStyle(
263 GURL(kDummyUrl), 32, 24,
264 base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)),
265 &cancelable_task_tracker_);
266 base::RunLoop().RunUntilIdle();
267 EXPECT_TRUE(is_callback_invoked_);
268 }
269
270 TEST_F(LargeIconServiceTest, ShouldGetFromGoogleServer) { 122 TEST_F(LargeIconServiceTest, ShouldGetFromGoogleServer) {
271 const GURL kExpectedServerUrl( 123 const GURL kExpectedServerUrl(
272 "https://t0.gstatic.com/faviconV2?user=chrome&drop_404_icon=true" 124 "https://t0.gstatic.com/faviconV2?user=chrome&drop_404_icon=true"
273 "&size=192&min_size=42&max_size=256&fallback_opts=TYPE" 125 "&size=192&min_size=42&max_size=256&fallback_opts=TYPE"
274 "&url=http://www.example.com/"); 126 "&url=http://www.example.com/");
275 127
276 EXPECT_CALL(mock_favicon_service_, UnableToDownloadFavicon(_)).Times(0); 128 EXPECT_CALL(mock_favicon_service_, UnableToDownloadFavicon(_)).Times(0);
277 129
278 base::MockCallback<base::Callback<void(bool success)>> callback; 130 base::MockCallback<base::Callback<void(bool success)>> callback;
279 EXPECT_CALL(*mock_image_fetcher_, 131 EXPECT_CALL(*mock_image_fetcher_,
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
373 225
374 base::MockCallback<base::Callback<void(bool success)>> callback; 226 base::MockCallback<base::Callback<void(bool success)>> callback;
375 large_icon_service_ 227 large_icon_service_
376 .GetLargeIconOrFallbackStyleFromGoogleServerSkippingLocalCache( 228 .GetLargeIconOrFallbackStyleFromGoogleServerSkippingLocalCache(
377 GURL(kDummyUrl), /*min_source_size_in_pixel=*/42, callback.Get()); 229 GURL(kDummyUrl), /*min_source_size_in_pixel=*/42, callback.Get());
378 230
379 EXPECT_CALL(callback, Run(false)); 231 EXPECT_CALL(callback, Run(false));
380 base::RunLoop().RunUntilIdle(); 232 base::RunLoop().RunUntilIdle();
381 } 233 }
382 234
235 class LargeIconServiceGetterTest : public LargeIconServiceTest,
236 public ::testing::WithParamInterface<bool> {
237 public:
238 LargeIconServiceGetterTest()
239 : LargeIconServiceTest(), is_callback_invoked_(false) {}
240 ~LargeIconServiceGetterTest() override {}
241
242 void GetLargeIconOrFallbackStyleAndWaitForCallback(
243 const GURL& page_url,
244 int min_source_size_in_pixel,
245 int desired_size_in_pixel,
246 bool get_raw_bitmap) {
pkotwicz 2017/04/04 12:43:43 - Maybe pass in |expected_bitmap| and |expected_bi
jkrcal 2017/04/04 14:44:40 As regards the first point: I want to have some e
pkotwicz 2017/04/04 17:47:15 I like your new version too!
jkrcal 2017/04/05 15:34:38 Acknowledged.
247 if (get_raw_bitmap) {
248 large_icon_service_.GetLargeIconOrFallbackStyle(
249 page_url, min_source_size_in_pixel, desired_size_in_pixel,
250 base::Bind(&LargeIconServiceGetterTest::RawBitmapResultCallback,
251 base::Unretained(this)),
252 &cancelable_task_tracker_);
253 } else {
254 large_icon_service_.GetLargeIconImageOrFallbackStyle(
255 page_url, min_source_size_in_pixel, desired_size_in_pixel,
256 base::Bind(&LargeIconServiceGetterTest::ImageResultCallback,
257 base::Unretained(this)),
258 &cancelable_task_tracker_);
259 }
260 base::RunLoop().RunUntilIdle();
pkotwicz 2017/04/04 12:43:43 Nit: Make this base::RunLoop().Run() instead and m
jkrcal 2017/04/04 14:44:40 I got rid of the |is_callback_invoked| without thi
pkotwicz 2017/04/04 17:47:15 Cool: looks like using the QuitClosure is unnecess
jkrcal 2017/04/05 15:34:38 Acknowledged.
261 }
262
263 void RawBitmapResultCallback(const favicon_base::LargeIconResult& result) {
264 is_callback_invoked_ = true;
265
266 // Checking presence and absence of results.
267 EXPECT_EQ(expected_bitmap_.is_valid(), result.bitmap.is_valid());
268 EXPECT_EQ(expected_fallback_icon_style_ != nullptr,
269 result.fallback_icon_style != nullptr);
270
271 if (expected_bitmap_.is_valid()) {
272 EXPECT_EQ(expected_bitmap_.pixel_size, result.bitmap.pixel_size);
273 // Not actually checking bitmap content.
274 }
275 if (expected_fallback_icon_style_.get()) {
276 EXPECT_EQ(*expected_fallback_icon_style_, *result.fallback_icon_style);
277 }
278 }
279
280 void ImageResultCallback(const favicon_base::LargeIconImageResult& result) {
281 is_callback_invoked_ = true;
282
283 // Checking presence and absence of results.
284 EXPECT_EQ(expected_bitmap_.is_valid(), !result.image.IsEmpty());
285 EXPECT_EQ(expected_fallback_icon_style_ != nullptr,
286 result.fallback_icon_style != nullptr);
287
288 if (expected_bitmap_.is_valid()) {
289 EXPECT_EQ(expected_bitmap_.pixel_size,
290 result.image.ToImageSkia()->size());
291 // Not actually checking bitmap content.
292 }
293 if (expected_fallback_icon_style_.get()) {
294 EXPECT_EQ(*expected_fallback_icon_style_, *result.fallback_icon_style);
295 }
pkotwicz 2017/04/04 12:43:43 Nit: Can you extract the common functionality of R
jkrcal 2017/04/04 14:44:40 I extracted a common part of that.
296 }
297
298 void InjectMockResult(
299 const GURL& page_url,
300 const favicon_base::FaviconRawBitmapResult& mock_result) {
301 EXPECT_CALL(mock_favicon_service_,
pkotwicz 2017/04/04 12:43:43 Can this be ON_CALL() and WillByDefault() instead?
jkrcal 2017/04/04 14:44:40 Done.
302 GetLargestRawFaviconForPageURL(page_url, _, _, _, _))
303 .WillOnce(PostReply<5>(mock_result));
304 }
305
306 protected:
307 base::CancelableTaskTracker cancelable_task_tracker_;
308 favicon_base::FaviconRawBitmapResult expected_bitmap_;
309 std::unique_ptr<favicon_base::FallbackIconStyle>
310 expected_fallback_icon_style_;
311
312 bool is_callback_invoked_;
313
314 private:
315 DISALLOW_COPY_AND_ASSIGN(LargeIconServiceGetterTest);
316 };
317
318 TEST_P(LargeIconServiceGetterTest, SameSize) {
319 InjectMockResult(GURL(kDummyUrl), CreateTestBitmapResult(24, 24, kTestColor));
320 expected_bitmap_ = CreateTestBitmapResult(24, 24, kTestColor);
321 GetLargeIconOrFallbackStyleAndWaitForCallback(
322 GURL(kDummyUrl),
323 24, // |min_source_size_in_pixel|
324 24, // |desired_size_in_pixel|
325 GetParam());
326 EXPECT_TRUE(is_callback_invoked_);
327 }
328
329 TEST_P(LargeIconServiceGetterTest, ScaleDown) {
330 InjectMockResult(GURL(kDummyUrl), CreateTestBitmapResult(32, 32, kTestColor));
331 expected_bitmap_ = CreateTestBitmapResult(24, 24, kTestColor);
332 GetLargeIconOrFallbackStyleAndWaitForCallback(GURL(kDummyUrl), 24, 24,
333 GetParam());
334 EXPECT_TRUE(is_callback_invoked_);
335 }
336
337 TEST_P(LargeIconServiceGetterTest, ScaleUp) {
338 InjectMockResult(GURL(kDummyUrl), CreateTestBitmapResult(16, 16, kTestColor));
339 expected_bitmap_ = CreateTestBitmapResult(24, 24, kTestColor);
340 GetLargeIconOrFallbackStyleAndWaitForCallback(
341 GURL(kDummyUrl),
342 14, // Lowered requirement so stored bitmap is admitted.
343 24, GetParam());
344 EXPECT_TRUE(is_callback_invoked_);
345 }
346
347 // |desired_size_in_pixel| == 0 means retrieve original image without scaling.
348 TEST_P(LargeIconServiceGetterTest, NoScale) {
349 InjectMockResult(GURL(kDummyUrl), CreateTestBitmapResult(24, 24, kTestColor));
350 expected_bitmap_ = CreateTestBitmapResult(24, 24, kTestColor);
351 GetLargeIconOrFallbackStyleAndWaitForCallback(GURL(kDummyUrl), 16, 0,
352 GetParam());
353 EXPECT_TRUE(is_callback_invoked_);
354 }
355
356 TEST_P(LargeIconServiceGetterTest, FallbackSinceIconTooSmall) {
357 InjectMockResult(GURL(kDummyUrl), CreateTestBitmapResult(16, 16, kTestColor));
358 expected_fallback_icon_style_.reset(new favicon_base::FallbackIconStyle);
359 expected_fallback_icon_style_->background_color = kTestColor;
360 expected_fallback_icon_style_->is_default_background_color = false;
361 GetLargeIconOrFallbackStyleAndWaitForCallback(GURL(kDummyUrl), 24, 24,
362 GetParam());
363 EXPECT_TRUE(is_callback_invoked_);
364 }
365
366 TEST_P(LargeIconServiceGetterTest, FallbackSinceIconNotSquare) {
367 InjectMockResult(GURL(kDummyUrl), CreateTestBitmapResult(24, 32, kTestColor));
368 expected_fallback_icon_style_.reset(new favicon_base::FallbackIconStyle);
369 expected_fallback_icon_style_->background_color = kTestColor;
370 expected_fallback_icon_style_->is_default_background_color = false;
371 GetLargeIconOrFallbackStyleAndWaitForCallback(GURL(kDummyUrl), 24, 24,
372 GetParam());
373 EXPECT_TRUE(is_callback_invoked_);
374 }
375
376 TEST_P(LargeIconServiceGetterTest, FallbackSinceIconMissing) {
377 InjectMockResult(GURL(kDummyUrl), favicon_base::FaviconRawBitmapResult());
378 // Expect default fallback style, including background.
379 expected_fallback_icon_style_.reset(new favicon_base::FallbackIconStyle);
380 GetLargeIconOrFallbackStyleAndWaitForCallback(GURL(kDummyUrl), 24, 24,
381 GetParam());
382 EXPECT_TRUE(is_callback_invoked_);
383 }
384
385 TEST_P(LargeIconServiceGetterTest, FallbackSinceIconMissingNoScale) {
386 InjectMockResult(GURL(kDummyUrl), favicon_base::FaviconRawBitmapResult());
387 // Expect default fallback style, including background.
388 expected_fallback_icon_style_.reset(new favicon_base::FallbackIconStyle);
389 GetLargeIconOrFallbackStyleAndWaitForCallback(GURL(kDummyUrl), 24, 0,
390 GetParam());
391 EXPECT_TRUE(is_callback_invoked_);
392 }
393
394 // Oddball case where we demand a high resolution icon to scale down. Generates
395 // fallback even though an icon with the final size is available.
396 TEST_P(LargeIconServiceGetterTest, FallbackSinceTooPicky) {
397 InjectMockResult(GURL(kDummyUrl), CreateTestBitmapResult(24, 24, kTestColor));
398 expected_fallback_icon_style_.reset(new favicon_base::FallbackIconStyle);
399 expected_fallback_icon_style_->background_color = kTestColor;
400 expected_fallback_icon_style_->is_default_background_color = false;
401 GetLargeIconOrFallbackStyleAndWaitForCallback(GURL(kDummyUrl), 32, 24,
402 GetParam());
403 EXPECT_TRUE(is_callback_invoked_);
404 }
405
406 // Every test will appear with suffix /0 (param false) and /1 (param true), e.g.
407 // LargeIconServiceGetterTest.FallbackSinceTooPicky/0: get image.
408 // LargeIconServiceGetterTest.FallbackSinceTooPicky/1: get raw bitmap.
409 INSTANTIATE_TEST_CASE_P(, // Empty instatiation name.
410 LargeIconServiceGetterTest,
411 ::testing::Values(false, true));
412
383 } // namespace 413 } // namespace
384 } // namespace favicon 414 } // namespace favicon
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698