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

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

Issue 2866033002: [NTP Tiles] Fetch missing MostLikely tiles from a Google server (Closed)
Patch Set: Some unit-tests 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/favicon/core/large_icon_service.h"
21 #include "components/history/core/browser/history_database_params.h" 22 #include "components/history/core/browser/history_database_params.h"
22 #include "components/history/core/browser/history_service.h" 23 #include "components/history/core/browser/history_service.h"
23 #include "components/image_fetcher/core/image_decoder.h" 24 #include "components/image_fetcher/core/image_decoder.h"
24 #include "components/image_fetcher/core/image_fetcher.h" 25 #include "components/image_fetcher/core/image_fetcher.h"
25 #include "components/image_fetcher/core/request_metadata.h" 26 #include "components/image_fetcher/core/request_metadata.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"
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 class IconCacherTest : public ::testing::Test { 98 class IconCacherTest : public ::testing::Test {
98 protected: 99 protected:
99 IconCacherTest() 100 IconCacherTest()
100 : site_(base::string16(), // title, unused 101 : site_(base::string16(), // title, unused
101 GURL("http://url.google/"), 102 GURL("http://url.google/"),
102 GURL("http://url.google/icon.png"), 103 GURL("http://url.google/icon.png"),
103 GURL("http://url.google/favicon.ico"), 104 GURL("http://url.google/favicon.ico"),
104 GURL()), // thumbnail, unused 105 GURL()), // thumbnail, unused
105 image_fetcher_(new ::testing::StrictMock<MockImageFetcher>), 106 image_fetcher_(new ::testing::StrictMock<MockImageFetcher>),
106 image_decoder_(new ::testing::StrictMock<MockImageDecoder>), 107 image_decoder_(new ::testing::StrictMock<MockImageDecoder>),
108 task_runner_(new base::TestSimpleTaskRunner()),
107 favicon_service_(/*favicon_client=*/nullptr, &history_service_), 109 favicon_service_(/*favicon_client=*/nullptr, &history_service_),
108 task_runner_(new base::TestSimpleTaskRunner()) { 110 large_icon_service_(
111 &favicon_service_,
112 task_runner_,
113 base::MakeUnique<::testing::StrictMock<MockImageFetcher>>()) {
109 CHECK(history_dir_.CreateUniqueTempDir()); 114 CHECK(history_dir_.CreateUniqueTempDir());
110 CHECK(history_service_.Init( 115 CHECK(history_service_.Init(
111 history::HistoryDatabaseParams(history_dir_.GetPath(), 0, 0))); 116 history::HistoryDatabaseParams(history_dir_.GetPath(), 0, 0)));
112 } 117 }
113 118
114 void SetUp() override { 119 void SetUp() override {
115 if (ui::ResourceBundle::HasSharedInstance()) { 120 if (ui::ResourceBundle::HasSharedInstance()) {
116 ui::ResourceBundle::CleanupSharedInstance(); 121 ui::ResourceBundle::CleanupSharedInstance();
117 } 122 }
118 ON_CALL(mock_resource_delegate_, GetPathForResourcePack(_, _)) 123 ON_CALL(mock_resource_delegate_, GetPathForResourcePack(_, _))
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
177 } 182 }
178 183
179 void WaitForTasksToFinish() { task_runner_->RunUntilIdle(); } 184 void WaitForTasksToFinish() { task_runner_->RunUntilIdle(); }
180 185
181 base::test::ScopedTaskEnvironment scoped_task_environment_; 186 base::test::ScopedTaskEnvironment scoped_task_environment_;
182 PopularSites::Site site_; 187 PopularSites::Site site_;
183 std::unique_ptr<MockImageFetcher> image_fetcher_; 188 std::unique_ptr<MockImageFetcher> image_fetcher_;
184 std::unique_ptr<MockImageDecoder> image_decoder_; 189 std::unique_ptr<MockImageDecoder> image_decoder_;
185 base::ScopedTempDir history_dir_; 190 base::ScopedTempDir history_dir_;
186 history::HistoryService history_service_; 191 history::HistoryService history_service_;
192 scoped_refptr<base::TestSimpleTaskRunner> task_runner_;
187 favicon::FaviconServiceImpl favicon_service_; 193 favicon::FaviconServiceImpl favicon_service_;
188 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; 194 favicon::LargeIconService large_icon_service_;
189 NiceMock<MockResourceDelegate> mock_resource_delegate_; 195 NiceMock<MockResourceDelegate> mock_resource_delegate_;
190 }; 196 };
191 197
192 ACTION(FailFetch) { 198 ACTION(FailFetch) {
193 base::ThreadTaskRunnerHandle::Get()->PostTask( 199 base::ThreadTaskRunnerHandle::Get()->PostTask(
194 FROM_HERE, 200 FROM_HERE,
195 base::Bind(arg2, arg0, gfx::Image(), image_fetcher::RequestMetadata())); 201 base::Bind(arg2, arg0, gfx::Image(), image_fetcher::RequestMetadata()));
196 } 202 }
197 203
198 ACTION_P2(DecodeSuccessfully, width, height) { 204 ACTION_P2(DecodeSuccessfully, width, height) {
(...skipping 17 matching lines...) Expand all
216 base::RunLoop loop; 222 base::RunLoop loop;
217 { 223 {
218 InSequence s; 224 InSequence s;
219 EXPECT_CALL(*image_fetcher_, 225 EXPECT_CALL(*image_fetcher_,
220 SetDataUseServiceName( 226 SetDataUseServiceName(
221 data_use_measurement::DataUseUserData::NTP_TILES)); 227 data_use_measurement::DataUseUserData::NTP_TILES));
222 EXPECT_CALL(*image_fetcher_, SetDesiredImageFrameSize(gfx::Size(128, 128))); 228 EXPECT_CALL(*image_fetcher_, SetDesiredImageFrameSize(gfx::Size(128, 128)));
223 } 229 }
224 PreloadIcon(site_.url, site_.large_icon_url, favicon_base::TOUCH_ICON, 128, 230 PreloadIcon(site_.url, site_.large_icon_url, favicon_base::TOUCH_ICON, 128,
225 128); 231 128);
226 IconCacherImpl cacher(&favicon_service_, std::move(image_fetcher_)); 232 IconCacherImpl cacher(&favicon_service_, &large_icon_service_,
227 cacher.StartFetch(site_, done.Get(), done.Get()); 233 std::move(image_fetcher_));
234 cacher.StartFetchPopularSites(site_, done.Get(), done.Get());
228 WaitForTasksToFinish(); 235 WaitForTasksToFinish();
229 EXPECT_FALSE(IconIsCachedFor(site_.url, favicon_base::FAVICON)); 236 EXPECT_FALSE(IconIsCachedFor(site_.url, favicon_base::FAVICON));
230 EXPECT_TRUE(IconIsCachedFor(site_.url, favicon_base::TOUCH_ICON)); 237 EXPECT_TRUE(IconIsCachedFor(site_.url, favicon_base::TOUCH_ICON));
231 } 238 }
232 239
233 TEST_F(IconCacherTest, LargeNotCachedAndFetchSucceeded) { 240 TEST_F(IconCacherTest, LargeNotCachedAndFetchSucceeded) {
234 base::MockCallback<base::Closure> done; 241 base::MockCallback<base::Closure> done;
235 base::RunLoop loop; 242 base::RunLoop loop;
236 { 243 {
237 InSequence s; 244 InSequence s;
238 EXPECT_CALL(*image_fetcher_, 245 EXPECT_CALL(*image_fetcher_,
239 SetDataUseServiceName( 246 SetDataUseServiceName(
240 data_use_measurement::DataUseUserData::NTP_TILES)); 247 data_use_measurement::DataUseUserData::NTP_TILES));
241 EXPECT_CALL(*image_fetcher_, SetDesiredImageFrameSize(gfx::Size(128, 128))); 248 EXPECT_CALL(*image_fetcher_, SetDesiredImageFrameSize(gfx::Size(128, 128)));
242 EXPECT_CALL(*image_fetcher_, 249 EXPECT_CALL(*image_fetcher_,
243 StartOrQueueNetworkRequest(_, site_.large_icon_url, _)) 250 StartOrQueueNetworkRequest(_, site_.large_icon_url, _))
244 .WillOnce(PassFetch(128, 128)); 251 .WillOnce(PassFetch(128, 128));
245 EXPECT_CALL(done, Run()).WillOnce(Quit(&loop)); 252 EXPECT_CALL(done, Run()).WillOnce(Quit(&loop));
246 } 253 }
247 254
248 IconCacherImpl cacher(&favicon_service_, std::move(image_fetcher_)); 255 IconCacherImpl cacher(&favicon_service_, &large_icon_service_,
249 cacher.StartFetch(site_, done.Get(), done.Get()); 256 std::move(image_fetcher_));
257 cacher.StartFetchPopularSites(site_, done.Get(), done.Get());
250 loop.Run(); 258 loop.Run();
251 EXPECT_FALSE(IconIsCachedFor(site_.url, favicon_base::FAVICON)); 259 EXPECT_FALSE(IconIsCachedFor(site_.url, favicon_base::FAVICON));
252 EXPECT_TRUE(IconIsCachedFor(site_.url, favicon_base::TOUCH_ICON)); 260 EXPECT_TRUE(IconIsCachedFor(site_.url, favicon_base::TOUCH_ICON));
253 } 261 }
254 262
255 TEST_F(IconCacherTest, SmallNotCachedAndFetchSucceeded) { 263 TEST_F(IconCacherTest, SmallNotCachedAndFetchSucceeded) {
256 site_.large_icon_url = GURL(); 264 site_.large_icon_url = GURL();
257 265
258 base::MockCallback<base::Closure> done; 266 base::MockCallback<base::Closure> done;
259 base::RunLoop loop; 267 base::RunLoop loop;
260 { 268 {
261 InSequence s; 269 InSequence s;
262 EXPECT_CALL(*image_fetcher_, 270 EXPECT_CALL(*image_fetcher_,
263 SetDataUseServiceName( 271 SetDataUseServiceName(
264 data_use_measurement::DataUseUserData::NTP_TILES)); 272 data_use_measurement::DataUseUserData::NTP_TILES));
265 EXPECT_CALL(*image_fetcher_, SetDesiredImageFrameSize(gfx::Size(128, 128))); 273 EXPECT_CALL(*image_fetcher_, SetDesiredImageFrameSize(gfx::Size(128, 128)));
266 EXPECT_CALL(*image_fetcher_, 274 EXPECT_CALL(*image_fetcher_,
267 StartOrQueueNetworkRequest(_, site_.favicon_url, _)) 275 StartOrQueueNetworkRequest(_, site_.favicon_url, _))
268 .WillOnce(PassFetch(128, 128)); 276 .WillOnce(PassFetch(128, 128));
269 EXPECT_CALL(done, Run()).WillOnce(Quit(&loop)); 277 EXPECT_CALL(done, Run()).WillOnce(Quit(&loop));
270 } 278 }
271 279
272 IconCacherImpl cacher(&favicon_service_, std::move(image_fetcher_)); 280 IconCacherImpl cacher(&favicon_service_, &large_icon_service_,
273 cacher.StartFetch(site_, done.Get(), done.Get()); 281 std::move(image_fetcher_));
282 cacher.StartFetchPopularSites(site_, done.Get(), done.Get());
274 loop.Run(); 283 loop.Run();
275 EXPECT_TRUE(IconIsCachedFor(site_.url, favicon_base::FAVICON)); 284 EXPECT_TRUE(IconIsCachedFor(site_.url, favicon_base::FAVICON));
276 EXPECT_FALSE(IconIsCachedFor(site_.url, favicon_base::TOUCH_ICON)); 285 EXPECT_FALSE(IconIsCachedFor(site_.url, favicon_base::TOUCH_ICON));
277 } 286 }
278 287
279 TEST_F(IconCacherTest, LargeNotCachedAndFetchFailed) { 288 TEST_F(IconCacherTest, LargeNotCachedAndFetchFailed) {
280 base::MockCallback<base::Closure> done; 289 base::MockCallback<base::Closure> done;
281 EXPECT_CALL(done, Run()).Times(0); 290 EXPECT_CALL(done, Run()).Times(0);
282 { 291 {
283 InSequence s; 292 InSequence s;
284 EXPECT_CALL(*image_fetcher_, 293 EXPECT_CALL(*image_fetcher_,
285 SetDataUseServiceName( 294 SetDataUseServiceName(
286 data_use_measurement::DataUseUserData::NTP_TILES)); 295 data_use_measurement::DataUseUserData::NTP_TILES));
287 EXPECT_CALL(*image_fetcher_, SetDesiredImageFrameSize(gfx::Size(128, 128))); 296 EXPECT_CALL(*image_fetcher_, SetDesiredImageFrameSize(gfx::Size(128, 128)));
288 EXPECT_CALL(*image_fetcher_, 297 EXPECT_CALL(*image_fetcher_,
289 StartOrQueueNetworkRequest(_, site_.large_icon_url, _)) 298 StartOrQueueNetworkRequest(_, site_.large_icon_url, _))
290 .WillOnce(FailFetch()); 299 .WillOnce(FailFetch());
291 } 300 }
292 301
293 IconCacherImpl cacher(&favicon_service_, std::move(image_fetcher_)); 302 IconCacherImpl cacher(&favicon_service_, &large_icon_service_,
294 cacher.StartFetch(site_, done.Get(), done.Get()); 303 std::move(image_fetcher_));
304 cacher.StartFetchPopularSites(site_, done.Get(), done.Get());
295 WaitForTasksToFinish(); 305 WaitForTasksToFinish();
296 EXPECT_FALSE(IconIsCachedFor(site_.url, favicon_base::FAVICON)); 306 EXPECT_FALSE(IconIsCachedFor(site_.url, favicon_base::FAVICON));
297 EXPECT_FALSE(IconIsCachedFor(site_.url, favicon_base::TOUCH_ICON)); 307 EXPECT_FALSE(IconIsCachedFor(site_.url, favicon_base::TOUCH_ICON));
298 } 308 }
299 309
300 TEST_F(IconCacherTest, HandlesEmptyCallbacksNicely) { 310 TEST_F(IconCacherTest, HandlesEmptyCallbacksNicely) {
301 EXPECT_CALL(*image_fetcher_, SetDataUseServiceName(_)); 311 EXPECT_CALL(*image_fetcher_, SetDataUseServiceName(_));
302 EXPECT_CALL(*image_fetcher_, SetDesiredImageFrameSize(_)); 312 EXPECT_CALL(*image_fetcher_, SetDesiredImageFrameSize(_));
303 ON_CALL(*image_fetcher_, StartOrQueueNetworkRequest(_, _, _)) 313 ON_CALL(*image_fetcher_, StartOrQueueNetworkRequest(_, _, _))
304 .WillByDefault(PassFetch(128, 128)); 314 .WillByDefault(PassFetch(128, 128));
305 IconCacherImpl cacher(&favicon_service_, std::move(image_fetcher_)); 315 IconCacherImpl cacher(&favicon_service_, &large_icon_service_,
306 cacher.StartFetch(site_, base::Closure(), base::Closure()); 316 std::move(image_fetcher_));
317 cacher.StartFetchPopularSites(site_, base::Closure(), base::Closure());
307 WaitForTasksToFinish(); 318 WaitForTasksToFinish();
308 } 319 }
309 320
310 TEST_F(IconCacherTest, ProvidesDefaultIconAndSucceedsWithFetching) { 321 TEST_F(IconCacherTest, ProvidesDefaultIconAndSucceedsWithFetching) {
311 // The returned data string is not used by the mocked decoder. 322 // The returned data string is not used by the mocked decoder.
312 ON_CALL(mock_resource_delegate_, GetRawDataResource(12345, _, _)) 323 ON_CALL(mock_resource_delegate_, GetRawDataResource(12345, _, _))
313 .WillByDefault(Return("")); 324 .WillByDefault(Return(""));
314 // It's not important when the image_fetcher's decoder is used to decode the 325 // It's not important when the image_fetcher's decoder is used to decode the
315 // image but it must happen at some point. 326 // image but it must happen at some point.
316 EXPECT_CALL(*image_fetcher_, GetImageDecoder()) 327 EXPECT_CALL(*image_fetcher_, GetImageDecoder())
(...skipping 14 matching lines...) Expand all
331 StartOrQueueNetworkRequest(_, site_.large_icon_url, _)) 342 StartOrQueueNetworkRequest(_, site_.large_icon_url, _))
332 .WillOnce(PassFetch(128, 128)); 343 .WillOnce(PassFetch(128, 128));
333 344
334 // Both callback are called async after the request but preliminary has to 345 // Both callback are called async after the request but preliminary has to
335 // preceed icon_available. 346 // preceed icon_available.
336 EXPECT_CALL(preliminary_icon_available, Run()) 347 EXPECT_CALL(preliminary_icon_available, Run())
337 .WillOnce(Quit(&default_loop)); 348 .WillOnce(Quit(&default_loop));
338 EXPECT_CALL(icon_available, Run()).WillOnce(Quit(&fetch_loop)); 349 EXPECT_CALL(icon_available, Run()).WillOnce(Quit(&fetch_loop));
339 } 350 }
340 351
341 IconCacherImpl cacher(&favicon_service_, std::move(image_fetcher_)); 352 IconCacherImpl cacher(&favicon_service_, &large_icon_service_,
353 std::move(image_fetcher_));
342 site_.default_icon_resource = 12345; 354 site_.default_icon_resource = 12345;
343 cacher.StartFetch(site_, icon_available.Get(), 355 cacher.StartFetchPopularSites(site_, icon_available.Get(),
344 preliminary_icon_available.Get()); 356 preliminary_icon_available.Get());
345 357
346 default_loop.Run(); // Wait for the default image. 358 default_loop.Run(); // Wait for the default image.
347 EXPECT_THAT(GetCachedIconFor(site_.url, favicon_base::TOUCH_ICON).Size(), 359 EXPECT_THAT(GetCachedIconFor(site_.url, favicon_base::TOUCH_ICON).Size(),
348 Eq(gfx::Size(64, 64))); // Compares dimensions, not objects. 360 Eq(gfx::Size(64, 64))); // Compares dimensions, not objects.
349 361
350 // Let the fetcher continue and wait for the second call of the callback. 362 // Let the fetcher continue and wait for the second call of the callback.
351 fetch_loop.Run(); // Wait for the updated image. 363 fetch_loop.Run(); // Wait for the updated image.
352 EXPECT_THAT(GetCachedIconFor(site_.url, favicon_base::TOUCH_ICON).Size(), 364 EXPECT_THAT(GetCachedIconFor(site_.url, favicon_base::TOUCH_ICON).Size(),
353 Eq(gfx::Size(128, 128))); // Compares dimensions, not objects. 365 Eq(gfx::Size(128, 128))); // Compares dimensions, not objects.
354 } 366 }
355 367
356 } // namespace 368 } // namespace
357 } // namespace ntp_tiles 369 } // namespace ntp_tiles
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698