| OLD | NEW |
| 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/favicon/core/large_icon_service.h" | 21 #include "components/favicon/core/large_icon_service.h" |
| 22 #include "components/history/core/browser/history_database_params.h" | 22 #include "components/history/core/browser/history_database_params.h" |
| 23 #include "components/history/core/browser/history_service.h" | 23 #include "components/history/core/browser/history_service.h" |
| 24 #include "components/image_fetcher/core/image_decoder.h" | 24 #include "components/image_fetcher/core/image_decoder.h" |
| 25 #include "components/image_fetcher/core/image_fetcher.h" | 25 #include "components/image_fetcher/core/image_fetcher.h" |
| 26 #include "components/image_fetcher/core/request_metadata.h" | 26 #include "components/image_fetcher/core/request_metadata.h" |
| 27 #include "net/traffic_annotation/network_traffic_annotation_test_helper.h" |
| 27 #include "testing/gmock/include/gmock/gmock.h" | 28 #include "testing/gmock/include/gmock/gmock.h" |
| 28 #include "testing/gtest/include/gtest/gtest.h" | 29 #include "testing/gtest/include/gtest/gtest.h" |
| 29 #include "ui/base/resource/resource_bundle.h" | 30 #include "ui/base/resource/resource_bundle.h" |
| 30 #include "ui/base/ui_base_paths.h" | 31 #include "ui/base/ui_base_paths.h" |
| 31 #include "ui/gfx/image/image_unittest_util.h" | 32 #include "ui/gfx/image/image_unittest_util.h" |
| 32 | 33 |
| 33 using ::testing::_; | 34 using ::testing::_; |
| 34 using ::testing::Eq; | 35 using ::testing::Eq; |
| 35 using ::testing::Invoke; | 36 using ::testing::Invoke; |
| 36 using ::testing::InSequence; | 37 using ::testing::InSequence; |
| 37 using ::testing::NiceMock; | 38 using ::testing::NiceMock; |
| 38 using ::testing::Return; | 39 using ::testing::Return; |
| 39 using ::testing::ReturnArg; | 40 using ::testing::ReturnArg; |
| 40 | 41 |
| 41 namespace ntp_tiles { | 42 namespace ntp_tiles { |
| 42 namespace { | 43 namespace { |
| 43 | 44 |
| 44 class MockImageFetcher : public image_fetcher::ImageFetcher { | 45 class MockImageFetcher : public image_fetcher::ImageFetcher { |
| 45 public: | 46 public: |
| 46 MOCK_METHOD1(SetImageFetcherDelegate, | 47 MOCK_METHOD1(SetImageFetcherDelegate, |
| 47 void(image_fetcher::ImageFetcherDelegate* delegate)); | 48 void(image_fetcher::ImageFetcherDelegate* delegate)); |
| 48 MOCK_METHOD1(SetDataUseServiceName, | 49 MOCK_METHOD1(SetDataUseServiceName, |
| 49 void(image_fetcher::ImageFetcher::DataUseServiceName name)); | 50 void(image_fetcher::ImageFetcher::DataUseServiceName name)); |
| 50 MOCK_METHOD1(SetImageDownloadLimit, | 51 MOCK_METHOD1(SetImageDownloadLimit, |
| 51 void(base::Optional<int64_t> max_download_bytes)); | 52 void(base::Optional<int64_t> max_download_bytes)); |
| 52 MOCK_METHOD3(StartOrQueueNetworkRequest, | 53 MOCK_METHOD4(StartOrQueueNetworkRequest, |
| 53 void(const std::string& id, | 54 void(const std::string& id, |
| 54 const GURL& image_url, | 55 const GURL& image_url, |
| 55 const ImageFetcherCallback& callback)); | 56 const ImageFetcherCallback& callback, |
| 57 const net::NetworkTrafficAnnotationTag&)); |
| 56 MOCK_METHOD1(SetDesiredImageFrameSize, void(const gfx::Size&)); | 58 MOCK_METHOD1(SetDesiredImageFrameSize, void(const gfx::Size&)); |
| 57 MOCK_METHOD0(GetImageDecoder, image_fetcher::ImageDecoder*()); | 59 MOCK_METHOD0(GetImageDecoder, image_fetcher::ImageDecoder*()); |
| 58 }; | 60 }; |
| 59 | 61 |
| 60 class MockImageDecoder : public image_fetcher::ImageDecoder { | 62 class MockImageDecoder : public image_fetcher::ImageDecoder { |
| 61 public: | 63 public: |
| 62 MOCK_METHOD3(DecodeImage, | 64 MOCK_METHOD3(DecodeImage, |
| 63 void(const std::string& image_data, | 65 void(const std::string& image_data, |
| 64 const gfx::Size& desired_image_frame_size, | 66 const gfx::Size& desired_image_frame_size, |
| 65 const image_fetcher::ImageDecodedCallback& callback)); | 67 const image_fetcher::ImageDecodedCallback& callback)); |
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 252 TEST_F(IconCacherTestPopularSites, LargeNotCachedAndFetchSucceeded) { | 254 TEST_F(IconCacherTestPopularSites, LargeNotCachedAndFetchSucceeded) { |
| 253 base::MockCallback<base::Closure> done; | 255 base::MockCallback<base::Closure> done; |
| 254 base::RunLoop loop; | 256 base::RunLoop loop; |
| 255 { | 257 { |
| 256 InSequence s; | 258 InSequence s; |
| 257 EXPECT_CALL(*image_fetcher_, | 259 EXPECT_CALL(*image_fetcher_, |
| 258 SetDataUseServiceName( | 260 SetDataUseServiceName( |
| 259 data_use_measurement::DataUseUserData::NTP_TILES)); | 261 data_use_measurement::DataUseUserData::NTP_TILES)); |
| 260 EXPECT_CALL(*image_fetcher_, SetDesiredImageFrameSize(gfx::Size(128, 128))); | 262 EXPECT_CALL(*image_fetcher_, SetDesiredImageFrameSize(gfx::Size(128, 128))); |
| 261 EXPECT_CALL(*image_fetcher_, | 263 EXPECT_CALL(*image_fetcher_, |
| 262 StartOrQueueNetworkRequest(_, site_.large_icon_url, _)) | 264 StartOrQueueNetworkRequest(_, site_.large_icon_url, _, _)) |
| 263 .WillOnce(PassFetch(128, 128)); | 265 .WillOnce(PassFetch(128, 128)); |
| 264 EXPECT_CALL(done, Run()).WillOnce(Quit(&loop)); | 266 EXPECT_CALL(done, Run()).WillOnce(Quit(&loop)); |
| 265 } | 267 } |
| 266 | 268 |
| 267 IconCacherImpl cacher(&favicon_service_, nullptr, std::move(image_fetcher_)); | 269 IconCacherImpl cacher(&favicon_service_, nullptr, std::move(image_fetcher_)); |
| 268 cacher.StartFetchPopularSites(site_, done.Get(), done.Get()); | 270 cacher.StartFetchPopularSites(site_, done.Get(), done.Get()); |
| 269 loop.Run(); | 271 loop.Run(); |
| 270 EXPECT_FALSE(IconIsCachedFor(site_.url, favicon_base::FAVICON)); | 272 EXPECT_FALSE(IconIsCachedFor(site_.url, favicon_base::FAVICON)); |
| 271 EXPECT_TRUE(IconIsCachedFor(site_.url, favicon_base::TOUCH_ICON)); | 273 EXPECT_TRUE(IconIsCachedFor(site_.url, favicon_base::TOUCH_ICON)); |
| 272 } | 274 } |
| 273 | 275 |
| 274 TEST_F(IconCacherTestPopularSites, SmallNotCachedAndFetchSucceeded) { | 276 TEST_F(IconCacherTestPopularSites, SmallNotCachedAndFetchSucceeded) { |
| 275 site_.large_icon_url = GURL(); | 277 site_.large_icon_url = GURL(); |
| 276 | 278 |
| 277 base::MockCallback<base::Closure> done; | 279 base::MockCallback<base::Closure> done; |
| 278 base::RunLoop loop; | 280 base::RunLoop loop; |
| 279 { | 281 { |
| 280 InSequence s; | 282 InSequence s; |
| 281 EXPECT_CALL(*image_fetcher_, | 283 EXPECT_CALL(*image_fetcher_, |
| 282 SetDataUseServiceName( | 284 SetDataUseServiceName( |
| 283 data_use_measurement::DataUseUserData::NTP_TILES)); | 285 data_use_measurement::DataUseUserData::NTP_TILES)); |
| 284 EXPECT_CALL(*image_fetcher_, SetDesiredImageFrameSize(gfx::Size(128, 128))); | 286 EXPECT_CALL(*image_fetcher_, SetDesiredImageFrameSize(gfx::Size(128, 128))); |
| 285 EXPECT_CALL(*image_fetcher_, | 287 EXPECT_CALL(*image_fetcher_, |
| 286 StartOrQueueNetworkRequest(_, site_.favicon_url, _)) | 288 StartOrQueueNetworkRequest(_, site_.favicon_url, _, _)) |
| 287 .WillOnce(PassFetch(128, 128)); | 289 .WillOnce(PassFetch(128, 128)); |
| 288 EXPECT_CALL(done, Run()).WillOnce(Quit(&loop)); | 290 EXPECT_CALL(done, Run()).WillOnce(Quit(&loop)); |
| 289 } | 291 } |
| 290 | 292 |
| 291 IconCacherImpl cacher(&favicon_service_, nullptr, std::move(image_fetcher_)); | 293 IconCacherImpl cacher(&favicon_service_, nullptr, std::move(image_fetcher_)); |
| 292 cacher.StartFetchPopularSites(site_, done.Get(), done.Get()); | 294 cacher.StartFetchPopularSites(site_, done.Get(), done.Get()); |
| 293 loop.Run(); | 295 loop.Run(); |
| 294 EXPECT_TRUE(IconIsCachedFor(site_.url, favicon_base::FAVICON)); | 296 EXPECT_TRUE(IconIsCachedFor(site_.url, favicon_base::FAVICON)); |
| 295 EXPECT_FALSE(IconIsCachedFor(site_.url, favicon_base::TOUCH_ICON)); | 297 EXPECT_FALSE(IconIsCachedFor(site_.url, favicon_base::TOUCH_ICON)); |
| 296 } | 298 } |
| 297 | 299 |
| 298 TEST_F(IconCacherTestPopularSites, LargeNotCachedAndFetchFailed) { | 300 TEST_F(IconCacherTestPopularSites, LargeNotCachedAndFetchFailed) { |
| 299 base::MockCallback<base::Closure> done; | 301 base::MockCallback<base::Closure> done; |
| 300 EXPECT_CALL(done, Run()).Times(0); | 302 EXPECT_CALL(done, Run()).Times(0); |
| 301 { | 303 { |
| 302 InSequence s; | 304 InSequence s; |
| 303 EXPECT_CALL(*image_fetcher_, | 305 EXPECT_CALL(*image_fetcher_, |
| 304 SetDataUseServiceName( | 306 SetDataUseServiceName( |
| 305 data_use_measurement::DataUseUserData::NTP_TILES)); | 307 data_use_measurement::DataUseUserData::NTP_TILES)); |
| 306 EXPECT_CALL(*image_fetcher_, SetDesiredImageFrameSize(gfx::Size(128, 128))); | 308 EXPECT_CALL(*image_fetcher_, SetDesiredImageFrameSize(gfx::Size(128, 128))); |
| 307 EXPECT_CALL(*image_fetcher_, | 309 EXPECT_CALL(*image_fetcher_, |
| 308 StartOrQueueNetworkRequest(_, site_.large_icon_url, _)) | 310 StartOrQueueNetworkRequest(_, site_.large_icon_url, _, _)) |
| 309 .WillOnce(FailFetch()); | 311 .WillOnce(FailFetch()); |
| 310 } | 312 } |
| 311 | 313 |
| 312 IconCacherImpl cacher(&favicon_service_, nullptr, std::move(image_fetcher_)); | 314 IconCacherImpl cacher(&favicon_service_, nullptr, std::move(image_fetcher_)); |
| 313 cacher.StartFetchPopularSites(site_, done.Get(), done.Get()); | 315 cacher.StartFetchPopularSites(site_, done.Get(), done.Get()); |
| 314 WaitForMainThreadTasksToFinish(); | 316 WaitForMainThreadTasksToFinish(); |
| 315 EXPECT_FALSE(IconIsCachedFor(site_.url, favicon_base::FAVICON)); | 317 EXPECT_FALSE(IconIsCachedFor(site_.url, favicon_base::FAVICON)); |
| 316 EXPECT_FALSE(IconIsCachedFor(site_.url, favicon_base::TOUCH_ICON)); | 318 EXPECT_FALSE(IconIsCachedFor(site_.url, favicon_base::TOUCH_ICON)); |
| 317 } | 319 } |
| 318 | 320 |
| 319 TEST_F(IconCacherTestPopularSites, HandlesEmptyCallbacksNicely) { | 321 TEST_F(IconCacherTestPopularSites, HandlesEmptyCallbacksNicely) { |
| 320 EXPECT_CALL(*image_fetcher_, SetDataUseServiceName(_)); | 322 EXPECT_CALL(*image_fetcher_, SetDataUseServiceName(_)); |
| 321 EXPECT_CALL(*image_fetcher_, SetDesiredImageFrameSize(_)); | 323 EXPECT_CALL(*image_fetcher_, SetDesiredImageFrameSize(_)); |
| 322 EXPECT_CALL(*image_fetcher_, StartOrQueueNetworkRequest(_, _, _)) | 324 EXPECT_CALL(*image_fetcher_, StartOrQueueNetworkRequest(_, _, _, _)) |
| 323 .WillOnce(PassFetch(128, 128)); | 325 .WillOnce(PassFetch(128, 128)); |
| 324 IconCacherImpl cacher(&favicon_service_, nullptr, std::move(image_fetcher_)); | 326 IconCacherImpl cacher(&favicon_service_, nullptr, std::move(image_fetcher_)); |
| 325 cacher.StartFetchPopularSites(site_, base::Closure(), base::Closure()); | 327 cacher.StartFetchPopularSites(site_, base::Closure(), base::Closure()); |
| 326 WaitForHistoryThreadTasksToFinish(); // Writing the icon into the DB. | 328 WaitForHistoryThreadTasksToFinish(); // Writing the icon into the DB. |
| 327 WaitForMainThreadTasksToFinish(); // Finishing tasks after the DB write. | 329 WaitForMainThreadTasksToFinish(); // Finishing tasks after the DB write. |
| 328 // Even though the callbacks are not called, the icon gets written out. | 330 // Even though the callbacks are not called, the icon gets written out. |
| 329 EXPECT_FALSE(IconIsCachedFor(site_.url, favicon_base::FAVICON)); | 331 EXPECT_FALSE(IconIsCachedFor(site_.url, favicon_base::FAVICON)); |
| 330 EXPECT_TRUE(IconIsCachedFor(site_.url, favicon_base::TOUCH_ICON)); | 332 EXPECT_TRUE(IconIsCachedFor(site_.url, favicon_base::TOUCH_ICON)); |
| 331 } | 333 } |
| 332 | 334 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 344 base::MockCallback<base::Closure> icon_available; | 346 base::MockCallback<base::Closure> icon_available; |
| 345 base::RunLoop default_loop; | 347 base::RunLoop default_loop; |
| 346 base::RunLoop fetch_loop; | 348 base::RunLoop fetch_loop; |
| 347 { | 349 { |
| 348 InSequence s; | 350 InSequence s; |
| 349 EXPECT_CALL(*image_fetcher_, | 351 EXPECT_CALL(*image_fetcher_, |
| 350 SetDataUseServiceName( | 352 SetDataUseServiceName( |
| 351 data_use_measurement::DataUseUserData::NTP_TILES)); | 353 data_use_measurement::DataUseUserData::NTP_TILES)); |
| 352 EXPECT_CALL(*image_fetcher_, SetDesiredImageFrameSize(gfx::Size(128, 128))); | 354 EXPECT_CALL(*image_fetcher_, SetDesiredImageFrameSize(gfx::Size(128, 128))); |
| 353 EXPECT_CALL(*image_fetcher_, | 355 EXPECT_CALL(*image_fetcher_, |
| 354 StartOrQueueNetworkRequest(_, site_.large_icon_url, _)) | 356 StartOrQueueNetworkRequest(_, site_.large_icon_url, _, _)) |
| 355 .WillOnce(PassFetch(128, 128)); | 357 .WillOnce(PassFetch(128, 128)); |
| 356 | 358 |
| 357 // Both callback are called async after the request but preliminary has to | 359 // Both callback are called async after the request but preliminary has to |
| 358 // preceed icon_available. | 360 // preceed icon_available. |
| 359 EXPECT_CALL(preliminary_icon_available, Run()) | 361 EXPECT_CALL(preliminary_icon_available, Run()) |
| 360 .WillOnce(Quit(&default_loop)); | 362 .WillOnce(Quit(&default_loop)); |
| 361 EXPECT_CALL(icon_available, Run()).WillOnce(Quit(&fetch_loop)); | 363 EXPECT_CALL(icon_available, Run()).WillOnce(Quit(&fetch_loop)); |
| 362 } | 364 } |
| 363 | 365 |
| 364 IconCacherImpl cacher(&favicon_service_, nullptr, std::move(image_fetcher_)); | 366 IconCacherImpl cacher(&favicon_service_, nullptr, std::move(image_fetcher_)); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 380 base::MockCallback<base::Closure> done; | 382 base::MockCallback<base::Closure> done; |
| 381 base::RunLoop loop; | 383 base::RunLoop loop; |
| 382 { | 384 { |
| 383 InSequence s; | 385 InSequence s; |
| 384 // Image fetcher is used only once. | 386 // Image fetcher is used only once. |
| 385 EXPECT_CALL(*image_fetcher_, | 387 EXPECT_CALL(*image_fetcher_, |
| 386 SetDataUseServiceName( | 388 SetDataUseServiceName( |
| 387 data_use_measurement::DataUseUserData::NTP_TILES)); | 389 data_use_measurement::DataUseUserData::NTP_TILES)); |
| 388 EXPECT_CALL(*image_fetcher_, SetDesiredImageFrameSize(gfx::Size(128, 128))); | 390 EXPECT_CALL(*image_fetcher_, SetDesiredImageFrameSize(gfx::Size(128, 128))); |
| 389 EXPECT_CALL(*image_fetcher_, | 391 EXPECT_CALL(*image_fetcher_, |
| 390 StartOrQueueNetworkRequest(_, site_.large_icon_url, _)) | 392 StartOrQueueNetworkRequest(_, site_.large_icon_url, _, _)) |
| 391 .WillOnce(PassFetch(128, 128)); | 393 .WillOnce(PassFetch(128, 128)); |
| 392 // Success will be notified to both requests. | 394 // Success will be notified to both requests. |
| 393 EXPECT_CALL(done, Run()).WillOnce(Return()).WillOnce(Quit(&loop)); | 395 EXPECT_CALL(done, Run()).WillOnce(Return()).WillOnce(Quit(&loop)); |
| 394 } | 396 } |
| 395 | 397 |
| 396 IconCacherImpl cacher(&favicon_service_, nullptr, std::move(image_fetcher_)); | 398 IconCacherImpl cacher(&favicon_service_, nullptr, std::move(image_fetcher_)); |
| 397 cacher.StartFetchPopularSites(site_, done.Get(), done.Get()); | 399 cacher.StartFetchPopularSites(site_, done.Get(), done.Get()); |
| 398 cacher.StartFetchPopularSites(site_, done.Get(), done.Get()); | 400 cacher.StartFetchPopularSites(site_, done.Get(), done.Get()); |
| 399 loop.Run(); | 401 loop.Run(); |
| 400 EXPECT_FALSE(IconIsCachedFor(site_.url, favicon_base::FAVICON)); | 402 EXPECT_FALSE(IconIsCachedFor(site_.url, favicon_base::FAVICON)); |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 450 GURL page_url("http://www.site.com"); | 452 GURL page_url("http://www.site.com"); |
| 451 | 453 |
| 452 base::MockCallback<base::Closure> done; | 454 base::MockCallback<base::Closure> done; |
| 453 base::RunLoop loop; | 455 base::RunLoop loop; |
| 454 { | 456 { |
| 455 InSequence s; | 457 InSequence s; |
| 456 EXPECT_CALL(*fetcher_for_large_icon_service_, | 458 EXPECT_CALL(*fetcher_for_large_icon_service_, |
| 457 SetDataUseServiceName( | 459 SetDataUseServiceName( |
| 458 data_use_measurement::DataUseUserData::LARGE_ICON_SERVICE)); | 460 data_use_measurement::DataUseUserData::LARGE_ICON_SERVICE)); |
| 459 EXPECT_CALL(*fetcher_for_large_icon_service_, | 461 EXPECT_CALL(*fetcher_for_large_icon_service_, |
| 460 StartOrQueueNetworkRequest(_, _, _)) | 462 StartOrQueueNetworkRequest(_, _, _, _)) |
| 461 .WillOnce(PassFetch(128, 128)); | 463 .WillOnce(PassFetch(128, 128)); |
| 462 EXPECT_CALL(done, Run()).WillOnce(Quit(&loop)); | 464 EXPECT_CALL(done, Run()).WillOnce(Quit(&loop)); |
| 463 } | 465 } |
| 464 | 466 |
| 465 favicon::LargeIconService large_icon_service( | 467 favicon::LargeIconService large_icon_service( |
| 466 &favicon_service_, large_icon_service_background_task_runner_, | 468 &favicon_service_, large_icon_service_background_task_runner_, |
| 467 std::move(fetcher_for_large_icon_service_)); | 469 std::move(fetcher_for_large_icon_service_)); |
| 468 IconCacherImpl cacher(&favicon_service_, &large_icon_service, | 470 IconCacherImpl cacher(&favicon_service_, &large_icon_service, |
| 469 std::move(fetcher_for_icon_cacher_)); | 471 std::move(fetcher_for_icon_cacher_)); |
| 470 | 472 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 482 TEST_F(IconCacherTestMostLikely, NotCachedAndFetchFailed) { | 484 TEST_F(IconCacherTestMostLikely, NotCachedAndFetchFailed) { |
| 483 GURL page_url("http://www.site.com"); | 485 GURL page_url("http://www.site.com"); |
| 484 | 486 |
| 485 base::MockCallback<base::Closure> done; | 487 base::MockCallback<base::Closure> done; |
| 486 { | 488 { |
| 487 InSequence s; | 489 InSequence s; |
| 488 EXPECT_CALL(*fetcher_for_large_icon_service_, | 490 EXPECT_CALL(*fetcher_for_large_icon_service_, |
| 489 SetDataUseServiceName( | 491 SetDataUseServiceName( |
| 490 data_use_measurement::DataUseUserData::LARGE_ICON_SERVICE)); | 492 data_use_measurement::DataUseUserData::LARGE_ICON_SERVICE)); |
| 491 EXPECT_CALL(*fetcher_for_large_icon_service_, | 493 EXPECT_CALL(*fetcher_for_large_icon_service_, |
| 492 StartOrQueueNetworkRequest(_, _, _)) | 494 StartOrQueueNetworkRequest(_, _, _, _)) |
| 493 .WillOnce(FailFetch()); | 495 .WillOnce(FailFetch()); |
| 494 EXPECT_CALL(done, Run()).Times(0); | 496 EXPECT_CALL(done, Run()).Times(0); |
| 495 } | 497 } |
| 496 | 498 |
| 497 favicon::LargeIconService large_icon_service( | 499 favicon::LargeIconService large_icon_service( |
| 498 &favicon_service_, large_icon_service_background_task_runner_, | 500 &favicon_service_, large_icon_service_background_task_runner_, |
| 499 std::move(fetcher_for_large_icon_service_)); | 501 std::move(fetcher_for_large_icon_service_)); |
| 500 IconCacherImpl cacher(&favicon_service_, &large_icon_service, | 502 IconCacherImpl cacher(&favicon_service_, &large_icon_service, |
| 501 std::move(fetcher_for_icon_cacher_)); | 503 std::move(fetcher_for_icon_cacher_)); |
| 502 | 504 |
| 503 cacher.StartFetchMostLikely(page_url, done.Get()); | 505 cacher.StartFetchMostLikely(page_url, done.Get()); |
| 504 // Both these task runners need to be flushed before flushing the main thread | 506 // Both these task runners need to be flushed before flushing the main thread |
| 505 // queue in order to finish the work. | 507 // queue in order to finish the work. |
| 506 WaitForHistoryThreadTasksToFinish(); | 508 WaitForHistoryThreadTasksToFinish(); |
| 507 large_icon_service_background_task_runner_->RunUntilIdle(); | 509 large_icon_service_background_task_runner_->RunUntilIdle(); |
| 508 WaitForMainThreadTasksToFinish(); | 510 WaitForMainThreadTasksToFinish(); |
| 509 | 511 |
| 510 EXPECT_FALSE(IconIsCachedFor(page_url, favicon_base::FAVICON)); | 512 EXPECT_FALSE(IconIsCachedFor(page_url, favicon_base::FAVICON)); |
| 511 EXPECT_FALSE(IconIsCachedFor(page_url, favicon_base::TOUCH_ICON)); | 513 EXPECT_FALSE(IconIsCachedFor(page_url, favicon_base::TOUCH_ICON)); |
| 512 } | 514 } |
| 513 | 515 |
| 514 TEST_F(IconCacherTestMostLikely, HandlesEmptyCallbacksNicely) { | 516 TEST_F(IconCacherTestMostLikely, HandlesEmptyCallbacksNicely) { |
| 515 GURL page_url("http://www.site.com"); | 517 GURL page_url("http://www.site.com"); |
| 516 | 518 |
| 517 EXPECT_CALL(*fetcher_for_large_icon_service_, SetDataUseServiceName(_)); | 519 EXPECT_CALL(*fetcher_for_large_icon_service_, SetDataUseServiceName(_)); |
| 518 EXPECT_CALL(*fetcher_for_large_icon_service_, | 520 EXPECT_CALL(*fetcher_for_large_icon_service_, |
| 519 StartOrQueueNetworkRequest(_, _, _)) | 521 StartOrQueueNetworkRequest(_, _, _, _)) |
| 520 .WillOnce(PassFetch(128, 128)); | 522 .WillOnce(PassFetch(128, 128)); |
| 521 | 523 |
| 522 favicon::LargeIconService large_icon_service( | 524 favicon::LargeIconService large_icon_service( |
| 523 &favicon_service_, large_icon_service_background_task_runner_, | 525 &favicon_service_, large_icon_service_background_task_runner_, |
| 524 std::move(fetcher_for_large_icon_service_)); | 526 std::move(fetcher_for_large_icon_service_)); |
| 525 IconCacherImpl cacher(&favicon_service_, &large_icon_service, | 527 IconCacherImpl cacher(&favicon_service_, &large_icon_service, |
| 526 std::move(fetcher_for_icon_cacher_)); | 528 std::move(fetcher_for_icon_cacher_)); |
| 527 | 529 |
| 528 cacher.StartFetchMostLikely(page_url, base::Closure()); | 530 cacher.StartFetchMostLikely(page_url, base::Closure()); |
| 529 // Both these task runners need to be flushed before flushing the main thread | 531 // Both these task runners need to be flushed before flushing the main thread |
| (...skipping 12 matching lines...) Expand all Loading... |
| 542 | 544 |
| 543 base::MockCallback<base::Closure> done; | 545 base::MockCallback<base::Closure> done; |
| 544 base::RunLoop loop; | 546 base::RunLoop loop; |
| 545 { | 547 { |
| 546 InSequence s; | 548 InSequence s; |
| 547 // Image fetcher is used only once. | 549 // Image fetcher is used only once. |
| 548 EXPECT_CALL(*fetcher_for_large_icon_service_, | 550 EXPECT_CALL(*fetcher_for_large_icon_service_, |
| 549 SetDataUseServiceName( | 551 SetDataUseServiceName( |
| 550 data_use_measurement::DataUseUserData::LARGE_ICON_SERVICE)); | 552 data_use_measurement::DataUseUserData::LARGE_ICON_SERVICE)); |
| 551 EXPECT_CALL(*fetcher_for_large_icon_service_, | 553 EXPECT_CALL(*fetcher_for_large_icon_service_, |
| 552 StartOrQueueNetworkRequest(_, _, _)) | 554 StartOrQueueNetworkRequest(_, _, _, _)) |
| 553 .WillOnce(PassFetch(128, 128)); | 555 .WillOnce(PassFetch(128, 128)); |
| 554 // Success will be notified to both requests. | 556 // Success will be notified to both requests. |
| 555 EXPECT_CALL(done, Run()).WillOnce(Return()).WillOnce(Quit(&loop)); | 557 EXPECT_CALL(done, Run()).WillOnce(Return()).WillOnce(Quit(&loop)); |
| 556 } | 558 } |
| 557 | 559 |
| 558 favicon::LargeIconService large_icon_service( | 560 favicon::LargeIconService large_icon_service( |
| 559 &favicon_service_, large_icon_service_background_task_runner_, | 561 &favicon_service_, large_icon_service_background_task_runner_, |
| 560 std::move(fetcher_for_large_icon_service_)); | 562 std::move(fetcher_for_large_icon_service_)); |
| 561 IconCacherImpl cacher(&favicon_service_, &large_icon_service, | 563 IconCacherImpl cacher(&favicon_service_, &large_icon_service, |
| 562 std::move(fetcher_for_icon_cacher_)); | 564 std::move(fetcher_for_icon_cacher_)); |
| 563 | 565 |
| 564 cacher.StartFetchMostLikely(page_url, done.Get()); | 566 cacher.StartFetchMostLikely(page_url, done.Get()); |
| 565 cacher.StartFetchMostLikely(page_url, done.Get()); | 567 cacher.StartFetchMostLikely(page_url, done.Get()); |
| 566 // Both these task runners need to be flushed in order to get |done| called by | 568 // Both these task runners need to be flushed in order to get |done| called by |
| 567 // running the main loop. | 569 // running the main loop. |
| 568 WaitForHistoryThreadTasksToFinish(); | 570 WaitForHistoryThreadTasksToFinish(); |
| 569 large_icon_service_background_task_runner_->RunUntilIdle(); | 571 large_icon_service_background_task_runner_->RunUntilIdle(); |
| 570 | 572 |
| 571 loop.Run(); | 573 loop.Run(); |
| 572 EXPECT_FALSE(IconIsCachedFor(page_url, favicon_base::FAVICON)); | 574 EXPECT_FALSE(IconIsCachedFor(page_url, favicon_base::FAVICON)); |
| 573 EXPECT_TRUE(IconIsCachedFor(page_url, favicon_base::TOUCH_ICON)); | 575 EXPECT_TRUE(IconIsCachedFor(page_url, favicon_base::TOUCH_ICON)); |
| 574 } | 576 } |
| 575 | 577 |
| 576 } // namespace | 578 } // namespace |
| 577 } // namespace ntp_tiles | 579 } // namespace ntp_tiles |
| OLD | NEW |