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

Side by Side Diff: components/ntp_tiles/icon_cacher_impl_unittest.cc

Issue 2794343002: Network traffic annotation added to image_data_fetcher. (Closed)
Patch Set: All comments addressed. Created 3 years, 7 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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/ntp_tiles/icon_cacher_impl.h" 5 #include "components/ntp_tiles/icon_cacher_impl.h"
6 6
7 #include <set> 7 #include <set>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/files/scoped_temp_dir.h" 10 #include "base/files/scoped_temp_dir.h"
11 #include "base/memory/ptr_util.h" 11 #include "base/memory/ptr_util.h"
12 #include "base/path_service.h" 12 #include "base/path_service.h"
13 #include "base/run_loop.h" 13 #include "base/run_loop.h"
14 #include "base/test/mock_callback.h" 14 #include "base/test/mock_callback.h"
15 #include "base/test/scoped_task_environment.h" 15 #include "base/test/scoped_task_environment.h"
16 #include "base/test/test_simple_task_runner.h" 16 #include "base/test/test_simple_task_runner.h"
17 #include "base/threading/thread_task_runner_handle.h" 17 #include "base/threading/thread_task_runner_handle.h"
18 #include "components/favicon/core/favicon_client.h" 18 #include "components/favicon/core/favicon_client.h"
19 #include "components/favicon/core/favicon_service_impl.h" 19 #include "components/favicon/core/favicon_service_impl.h"
20 #include "components/favicon/core/favicon_util.h" 20 #include "components/favicon/core/favicon_util.h"
21 #include "components/history/core/browser/history_database_params.h" 21 #include "components/history/core/browser/history_database_params.h"
22 #include "components/history/core/browser/history_service.h" 22 #include "components/history/core/browser/history_service.h"
23 #include "components/image_fetcher/core/image_decoder.h" 23 #include "components/image_fetcher/core/image_decoder.h"
24 #include "components/image_fetcher/core/image_fetcher.h" 24 #include "components/image_fetcher/core/image_fetcher.h"
25 #include "components/image_fetcher/core/request_metadata.h" 25 #include "components/image_fetcher/core/request_metadata.h"
26 #include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
26 #include "testing/gmock/include/gmock/gmock.h" 27 #include "testing/gmock/include/gmock/gmock.h"
27 #include "testing/gtest/include/gtest/gtest.h" 28 #include "testing/gtest/include/gtest/gtest.h"
28 #include "ui/base/resource/resource_bundle.h" 29 #include "ui/base/resource/resource_bundle.h"
29 #include "ui/base/ui_base_paths.h" 30 #include "ui/base/ui_base_paths.h"
30 #include "ui/gfx/image/image_unittest_util.h" 31 #include "ui/gfx/image/image_unittest_util.h"
31 32
32 using ::testing::_; 33 using ::testing::_;
33 using ::testing::Eq; 34 using ::testing::Eq;
34 using ::testing::Invoke; 35 using ::testing::Invoke;
35 using ::testing::InSequence; 36 using ::testing::InSequence;
36 using ::testing::NiceMock; 37 using ::testing::NiceMock;
37 using ::testing::Return; 38 using ::testing::Return;
38 using ::testing::ReturnArg; 39 using ::testing::ReturnArg;
39 40
40 namespace ntp_tiles { 41 namespace ntp_tiles {
41 namespace { 42 namespace {
42 43
43 class MockImageFetcher : public image_fetcher::ImageFetcher { 44 class MockImageFetcher : public image_fetcher::ImageFetcher {
44 public: 45 public:
45 MOCK_METHOD1(SetImageFetcherDelegate, 46 MOCK_METHOD1(SetImageFetcherDelegate,
46 void(image_fetcher::ImageFetcherDelegate* delegate)); 47 void(image_fetcher::ImageFetcherDelegate* delegate));
47 MOCK_METHOD1(SetDataUseServiceName, 48 MOCK_METHOD1(SetDataUseServiceName,
48 void(image_fetcher::ImageFetcher::DataUseServiceName name)); 49 void(image_fetcher::ImageFetcher::DataUseServiceName name));
49 MOCK_METHOD1(SetImageDownloadLimit, 50 MOCK_METHOD1(SetImageDownloadLimit,
50 void(base::Optional<int64_t> max_download_bytes)); 51 void(base::Optional<int64_t> max_download_bytes));
51 MOCK_METHOD3(StartOrQueueNetworkRequest, 52 MOCK_METHOD4(StartOrQueueNetworkRequest,
52 void(const std::string& id, 53 void(const std::string& id,
53 const GURL& image_url, 54 const GURL& image_url,
54 const ImageFetcherCallback& callback)); 55 const ImageFetcherCallback& callback,
56 const net::NetworkTrafficAnnotationTag&));
55 MOCK_METHOD1(SetDesiredImageFrameSize, void(const gfx::Size&)); 57 MOCK_METHOD1(SetDesiredImageFrameSize, void(const gfx::Size&));
56 MOCK_METHOD0(GetImageDecoder, image_fetcher::ImageDecoder*()); 58 MOCK_METHOD0(GetImageDecoder, image_fetcher::ImageDecoder*());
57 }; 59 };
58 60
59 class MockImageDecoder : public image_fetcher::ImageDecoder { 61 class MockImageDecoder : public image_fetcher::ImageDecoder {
60 public: 62 public:
61 MOCK_METHOD3(DecodeImage, 63 MOCK_METHOD3(DecodeImage,
62 void(const std::string& image_data, 64 void(const std::string& image_data,
63 const gfx::Size& desired_image_frame_size, 65 const gfx::Size& desired_image_frame_size,
64 const image_fetcher::ImageDecodedCallback& callback)); 66 const image_fetcher::ImageDecodedCallback& callback));
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 TEST_F(IconCacherTest, LargeNotCachedAndFetchSucceeded) { 235 TEST_F(IconCacherTest, LargeNotCachedAndFetchSucceeded) {
234 base::MockCallback<base::Closure> done; 236 base::MockCallback<base::Closure> done;
235 base::RunLoop loop; 237 base::RunLoop loop;
236 { 238 {
237 InSequence s; 239 InSequence s;
238 EXPECT_CALL(*image_fetcher_, 240 EXPECT_CALL(*image_fetcher_,
239 SetDataUseServiceName( 241 SetDataUseServiceName(
240 data_use_measurement::DataUseUserData::NTP_TILES)); 242 data_use_measurement::DataUseUserData::NTP_TILES));
241 EXPECT_CALL(*image_fetcher_, SetDesiredImageFrameSize(gfx::Size(128, 128))); 243 EXPECT_CALL(*image_fetcher_, SetDesiredImageFrameSize(gfx::Size(128, 128)));
242 EXPECT_CALL(*image_fetcher_, 244 EXPECT_CALL(*image_fetcher_,
243 StartOrQueueNetworkRequest(_, site_.large_icon_url, _)) 245 StartOrQueueNetworkRequest(_, site_.large_icon_url, _, _))
244 .WillOnce(PassFetch(128, 128)); 246 .WillOnce(PassFetch(128, 128));
245 EXPECT_CALL(done, Run()).WillOnce(Quit(&loop)); 247 EXPECT_CALL(done, Run()).WillOnce(Quit(&loop));
246 } 248 }
247 249
248 IconCacherImpl cacher(&favicon_service_, std::move(image_fetcher_)); 250 IconCacherImpl cacher(&favicon_service_, std::move(image_fetcher_));
249 cacher.StartFetch(site_, done.Get(), done.Get()); 251 cacher.StartFetch(site_, done.Get(), done.Get());
250 loop.Run(); 252 loop.Run();
251 EXPECT_FALSE(IconIsCachedFor(site_.url, favicon_base::FAVICON)); 253 EXPECT_FALSE(IconIsCachedFor(site_.url, favicon_base::FAVICON));
252 EXPECT_TRUE(IconIsCachedFor(site_.url, favicon_base::TOUCH_ICON)); 254 EXPECT_TRUE(IconIsCachedFor(site_.url, favicon_base::TOUCH_ICON));
253 } 255 }
254 256
255 TEST_F(IconCacherTest, SmallNotCachedAndFetchSucceeded) { 257 TEST_F(IconCacherTest, SmallNotCachedAndFetchSucceeded) {
256 site_.large_icon_url = GURL(); 258 site_.large_icon_url = GURL();
257 259
258 base::MockCallback<base::Closure> done; 260 base::MockCallback<base::Closure> done;
259 base::RunLoop loop; 261 base::RunLoop loop;
260 { 262 {
261 InSequence s; 263 InSequence s;
262 EXPECT_CALL(*image_fetcher_, 264 EXPECT_CALL(*image_fetcher_,
263 SetDataUseServiceName( 265 SetDataUseServiceName(
264 data_use_measurement::DataUseUserData::NTP_TILES)); 266 data_use_measurement::DataUseUserData::NTP_TILES));
265 EXPECT_CALL(*image_fetcher_, SetDesiredImageFrameSize(gfx::Size(128, 128))); 267 EXPECT_CALL(*image_fetcher_, SetDesiredImageFrameSize(gfx::Size(128, 128)));
266 EXPECT_CALL(*image_fetcher_, 268 EXPECT_CALL(*image_fetcher_,
267 StartOrQueueNetworkRequest(_, site_.favicon_url, _)) 269 StartOrQueueNetworkRequest(_, site_.favicon_url, _, _))
268 .WillOnce(PassFetch(128, 128)); 270 .WillOnce(PassFetch(128, 128));
269 EXPECT_CALL(done, Run()).WillOnce(Quit(&loop)); 271 EXPECT_CALL(done, Run()).WillOnce(Quit(&loop));
270 } 272 }
271 273
272 IconCacherImpl cacher(&favicon_service_, std::move(image_fetcher_)); 274 IconCacherImpl cacher(&favicon_service_, std::move(image_fetcher_));
273 cacher.StartFetch(site_, done.Get(), done.Get()); 275 cacher.StartFetch(site_, done.Get(), done.Get());
274 loop.Run(); 276 loop.Run();
275 EXPECT_TRUE(IconIsCachedFor(site_.url, favicon_base::FAVICON)); 277 EXPECT_TRUE(IconIsCachedFor(site_.url, favicon_base::FAVICON));
276 EXPECT_FALSE(IconIsCachedFor(site_.url, favicon_base::TOUCH_ICON)); 278 EXPECT_FALSE(IconIsCachedFor(site_.url, favicon_base::TOUCH_ICON));
277 } 279 }
278 280
279 TEST_F(IconCacherTest, LargeNotCachedAndFetchFailed) { 281 TEST_F(IconCacherTest, LargeNotCachedAndFetchFailed) {
280 base::MockCallback<base::Closure> done; 282 base::MockCallback<base::Closure> done;
281 EXPECT_CALL(done, Run()).Times(0); 283 EXPECT_CALL(done, Run()).Times(0);
282 { 284 {
283 InSequence s; 285 InSequence s;
284 EXPECT_CALL(*image_fetcher_, 286 EXPECT_CALL(*image_fetcher_,
285 SetDataUseServiceName( 287 SetDataUseServiceName(
286 data_use_measurement::DataUseUserData::NTP_TILES)); 288 data_use_measurement::DataUseUserData::NTP_TILES));
287 EXPECT_CALL(*image_fetcher_, SetDesiredImageFrameSize(gfx::Size(128, 128))); 289 EXPECT_CALL(*image_fetcher_, SetDesiredImageFrameSize(gfx::Size(128, 128)));
288 EXPECT_CALL(*image_fetcher_, 290 EXPECT_CALL(*image_fetcher_,
289 StartOrQueueNetworkRequest(_, site_.large_icon_url, _)) 291 StartOrQueueNetworkRequest(_, site_.large_icon_url, _, _))
290 .WillOnce(FailFetch()); 292 .WillOnce(FailFetch());
291 } 293 }
292 294
293 IconCacherImpl cacher(&favicon_service_, std::move(image_fetcher_)); 295 IconCacherImpl cacher(&favicon_service_, std::move(image_fetcher_));
294 cacher.StartFetch(site_, done.Get(), done.Get()); 296 cacher.StartFetch(site_, done.Get(), done.Get());
295 WaitForTasksToFinish(); 297 WaitForTasksToFinish();
296 EXPECT_FALSE(IconIsCachedFor(site_.url, favicon_base::FAVICON)); 298 EXPECT_FALSE(IconIsCachedFor(site_.url, favicon_base::FAVICON));
297 EXPECT_FALSE(IconIsCachedFor(site_.url, favicon_base::TOUCH_ICON)); 299 EXPECT_FALSE(IconIsCachedFor(site_.url, favicon_base::TOUCH_ICON));
298 } 300 }
299 301
300 TEST_F(IconCacherTest, HandlesEmptyCallbacksNicely) { 302 TEST_F(IconCacherTest, HandlesEmptyCallbacksNicely) {
301 EXPECT_CALL(*image_fetcher_, SetDataUseServiceName(_)); 303 EXPECT_CALL(*image_fetcher_, SetDataUseServiceName(_));
302 EXPECT_CALL(*image_fetcher_, SetDesiredImageFrameSize(_)); 304 EXPECT_CALL(*image_fetcher_, SetDesiredImageFrameSize(_));
303 ON_CALL(*image_fetcher_, StartOrQueueNetworkRequest(_, _, _)) 305 ON_CALL(*image_fetcher_, StartOrQueueNetworkRequest(_, _, _, _))
304 .WillByDefault(PassFetch(128, 128)); 306 .WillByDefault(PassFetch(128, 128));
305 IconCacherImpl cacher(&favicon_service_, std::move(image_fetcher_)); 307 IconCacherImpl cacher(&favicon_service_, std::move(image_fetcher_));
306 cacher.StartFetch(site_, base::Closure(), base::Closure()); 308 cacher.StartFetch(site_, base::Closure(), base::Closure());
307 WaitForTasksToFinish(); 309 WaitForTasksToFinish();
308 } 310 }
309 311
310 TEST_F(IconCacherTest, ProvidesDefaultIconAndSucceedsWithFetching) { 312 TEST_F(IconCacherTest, ProvidesDefaultIconAndSucceedsWithFetching) {
311 // The returned data string is not used by the mocked decoder. 313 // The returned data string is not used by the mocked decoder.
312 ON_CALL(mock_resource_delegate_, GetRawDataResource(12345, _, _)) 314 ON_CALL(mock_resource_delegate_, GetRawDataResource(12345, _, _))
313 .WillByDefault(Return("")); 315 .WillByDefault(Return(""));
314 // It's not important when the image_fetcher's decoder is used to decode the 316 // It's not important when the image_fetcher's decoder is used to decode the
315 // image but it must happen at some point. 317 // image but it must happen at some point.
316 EXPECT_CALL(*image_fetcher_, GetImageDecoder()) 318 EXPECT_CALL(*image_fetcher_, GetImageDecoder())
317 .WillOnce(Return(image_decoder_.get())); 319 .WillOnce(Return(image_decoder_.get()));
318 EXPECT_CALL(*image_decoder_, DecodeImage(_, gfx::Size(128, 128), _)) 320 EXPECT_CALL(*image_decoder_, DecodeImage(_, gfx::Size(128, 128), _))
319 .WillOnce(DecodeSuccessfully(64, 64)); 321 .WillOnce(DecodeSuccessfully(64, 64));
320 base::MockCallback<base::Closure> preliminary_icon_available; 322 base::MockCallback<base::Closure> preliminary_icon_available;
321 base::MockCallback<base::Closure> icon_available; 323 base::MockCallback<base::Closure> icon_available;
322 base::RunLoop default_loop; 324 base::RunLoop default_loop;
323 base::RunLoop fetch_loop; 325 base::RunLoop fetch_loop;
324 { 326 {
325 InSequence s; 327 InSequence s;
326 EXPECT_CALL(*image_fetcher_, 328 EXPECT_CALL(*image_fetcher_,
327 SetDataUseServiceName( 329 SetDataUseServiceName(
328 data_use_measurement::DataUseUserData::NTP_TILES)); 330 data_use_measurement::DataUseUserData::NTP_TILES));
329 EXPECT_CALL(*image_fetcher_, SetDesiredImageFrameSize(gfx::Size(128, 128))); 331 EXPECT_CALL(*image_fetcher_, SetDesiredImageFrameSize(gfx::Size(128, 128)));
330 EXPECT_CALL(*image_fetcher_, 332 EXPECT_CALL(*image_fetcher_,
331 StartOrQueueNetworkRequest(_, site_.large_icon_url, _)) 333 StartOrQueueNetworkRequest(_, site_.large_icon_url, _, _))
332 .WillOnce(PassFetch(128, 128)); 334 .WillOnce(PassFetch(128, 128));
333 335
334 // Both callback are called async after the request but preliminary has to 336 // Both callback are called async after the request but preliminary has to
335 // preceed icon_available. 337 // preceed icon_available.
336 EXPECT_CALL(preliminary_icon_available, Run()) 338 EXPECT_CALL(preliminary_icon_available, Run())
337 .WillOnce(Quit(&default_loop)); 339 .WillOnce(Quit(&default_loop));
338 EXPECT_CALL(icon_available, Run()).WillOnce(Quit(&fetch_loop)); 340 EXPECT_CALL(icon_available, Run()).WillOnce(Quit(&fetch_loop));
339 } 341 }
340 342
341 IconCacherImpl cacher(&favicon_service_, std::move(image_fetcher_)); 343 IconCacherImpl cacher(&favicon_service_, std::move(image_fetcher_));
342 site_.default_icon_resource = 12345; 344 site_.default_icon_resource = 12345;
343 cacher.StartFetch(site_, icon_available.Get(), 345 cacher.StartFetch(site_, icon_available.Get(),
344 preliminary_icon_available.Get()); 346 preliminary_icon_available.Get());
345 347
346 default_loop.Run(); // Wait for the default image. 348 default_loop.Run(); // Wait for the default image.
347 EXPECT_THAT(GetCachedIconFor(site_.url, favicon_base::TOUCH_ICON).Size(), 349 EXPECT_THAT(GetCachedIconFor(site_.url, favicon_base::TOUCH_ICON).Size(),
348 Eq(gfx::Size(64, 64))); // Compares dimensions, not objects. 350 Eq(gfx::Size(64, 64))); // Compares dimensions, not objects.
349 351
350 // Let the fetcher continue and wait for the second call of the callback. 352 // Let the fetcher continue and wait for the second call of the callback.
351 fetch_loop.Run(); // Wait for the updated image. 353 fetch_loop.Run(); // Wait for the updated image.
352 EXPECT_THAT(GetCachedIconFor(site_.url, favicon_base::TOUCH_ICON).Size(), 354 EXPECT_THAT(GetCachedIconFor(site_.url, favicon_base::TOUCH_ICON).Size(),
353 Eq(gfx::Size(128, 128))); // Compares dimensions, not objects. 355 Eq(gfx::Size(128, 128))); // Compares dimensions, not objects.
354 } 356 }
355 357
356 } // namespace 358 } // namespace
357 } // namespace ntp_tiles 359 } // namespace ntp_tiles
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698