| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/suggestions/suggestions_service.h" | 5 #include "components/suggestions/suggestions_service_impl.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include <memory> | 9 #include <memory> |
| 10 #include <utility> | 10 #include <utility> |
| 11 | 11 |
| 12 #include "base/bind.h" | 12 #include "base/bind.h" |
| 13 #include "base/feature_list.h" | 13 #include "base/feature_list.h" |
| 14 #include "base/macros.h" | 14 #include "base/macros.h" |
| 15 #include "base/memory/ptr_util.h" | 15 #include "base/memory/ptr_util.h" |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 119 MockSyncService() {} | 119 MockSyncService() {} |
| 120 virtual ~MockSyncService() {} | 120 virtual ~MockSyncService() {} |
| 121 MOCK_CONST_METHOD0(CanSyncStart, bool()); | 121 MOCK_CONST_METHOD0(CanSyncStart, bool()); |
| 122 MOCK_CONST_METHOD0(IsSyncActive, bool()); | 122 MOCK_CONST_METHOD0(IsSyncActive, bool()); |
| 123 MOCK_CONST_METHOD0(ConfigurationDone, bool()); | 123 MOCK_CONST_METHOD0(ConfigurationDone, bool()); |
| 124 MOCK_CONST_METHOD0(GetActiveDataTypes, syncer::ModelTypeSet()); | 124 MOCK_CONST_METHOD0(GetActiveDataTypes, syncer::ModelTypeSet()); |
| 125 }; | 125 }; |
| 126 | 126 |
| 127 class TestSuggestionsStore : public suggestions::SuggestionsStore { | 127 class TestSuggestionsStore : public suggestions::SuggestionsStore { |
| 128 public: | 128 public: |
| 129 TestSuggestionsStore() { | 129 TestSuggestionsStore() { cached_suggestions = CreateSuggestionsProfile(); } |
| 130 cached_suggestions = CreateSuggestionsProfile(); | |
| 131 } | |
| 132 bool LoadSuggestions(SuggestionsProfile* suggestions) override { | 130 bool LoadSuggestions(SuggestionsProfile* suggestions) override { |
| 133 suggestions->CopyFrom(cached_suggestions); | 131 suggestions->CopyFrom(cached_suggestions); |
| 134 return cached_suggestions.suggestions_size(); | 132 return cached_suggestions.suggestions_size(); |
| 135 } | 133 } |
| 136 bool StoreSuggestions(const SuggestionsProfile& suggestions) override { | 134 bool StoreSuggestions(const SuggestionsProfile& suggestions) override { |
| 137 cached_suggestions.CopyFrom(suggestions); | 135 cached_suggestions.CopyFrom(suggestions); |
| 138 return true; | 136 return true; |
| 139 } | 137 } |
| 140 void ClearSuggestions() override { | 138 void ClearSuggestions() override { |
| 141 cached_suggestions = SuggestionsProfile(); | 139 cached_suggestions = SuggestionsProfile(); |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 206 token_service_.set_auto_post_fetch_response_on_message_loop(true); | 204 token_service_.set_auto_post_fetch_response_on_message_loop(true); |
| 207 } | 205 } |
| 208 | 206 |
| 209 ~SuggestionsServiceTest() override {} | 207 ~SuggestionsServiceTest() override {} |
| 210 | 208 |
| 211 void SetUp() override { | 209 void SetUp() override { |
| 212 request_context_ = | 210 request_context_ = |
| 213 new net::TestURLRequestContextGetter(io_message_loop_.task_runner()); | 211 new net::TestURLRequestContextGetter(io_message_loop_.task_runner()); |
| 214 } | 212 } |
| 215 | 213 |
| 216 SuggestionsService* CreateSuggestionsServiceWithMocks() { | 214 std::unique_ptr<SuggestionsServiceImpl> CreateSuggestionsServiceWithMocks() { |
| 217 mock_sync_service_.reset(new MockSyncService); | 215 mock_sync_service_.reset(new MockSyncService); |
| 218 ON_CALL(*mock_sync_service_, CanSyncStart()).WillByDefault(Return(true)); | 216 ON_CALL(*mock_sync_service_, CanSyncStart()).WillByDefault(Return(true)); |
| 219 ON_CALL(*mock_sync_service_, IsSyncActive()).WillByDefault(Return(true)); | 217 ON_CALL(*mock_sync_service_, IsSyncActive()).WillByDefault(Return(true)); |
| 220 ON_CALL(*mock_sync_service_, ConfigurationDone()) | 218 ON_CALL(*mock_sync_service_, ConfigurationDone()) |
| 221 .WillByDefault(Return(true)); | 219 .WillByDefault(Return(true)); |
| 222 ON_CALL(*mock_sync_service_, GetActiveDataTypes()) | 220 ON_CALL(*mock_sync_service_, GetActiveDataTypes()) |
| 223 .WillByDefault( | 221 .WillByDefault( |
| 224 Return(syncer::ModelTypeSet(syncer::HISTORY_DELETE_DIRECTIVES))); | 222 Return(syncer::ModelTypeSet(syncer::HISTORY_DELETE_DIRECTIVES))); |
| 225 | 223 |
| 226 // These objects are owned by the returned SuggestionsService, but we keep | 224 // These objects are owned by the returned SuggestionsService, but we keep |
| 227 // the pointer around for testing. | 225 // the pointer around for testing. |
| 228 test_suggestions_store_ = new TestSuggestionsStore(); | 226 test_suggestions_store_ = new TestSuggestionsStore(); |
| 229 mock_thumbnail_manager_ = new StrictMock<MockImageManager>(); | 227 mock_thumbnail_manager_ = new StrictMock<MockImageManager>(); |
| 230 mock_blacklist_store_ = new StrictMock<MockBlacklistStore>(); | 228 mock_blacklist_store_ = new StrictMock<MockBlacklistStore>(); |
| 231 return new SuggestionsService( | 229 return base::MakeUnique<SuggestionsServiceImpl>( |
| 232 nullptr /* signin_manager */, &token_service_, mock_sync_service_.get(), | 230 nullptr /* signin_manager */, &token_service_, mock_sync_service_.get(), |
| 233 request_context_.get(), base::WrapUnique(test_suggestions_store_), | 231 request_context_.get(), base::WrapUnique(test_suggestions_store_), |
| 234 base::WrapUnique(mock_thumbnail_manager_), | 232 base::WrapUnique(mock_thumbnail_manager_), |
| 235 base::WrapUnique(mock_blacklist_store_)); | 233 base::WrapUnique(mock_blacklist_store_)); |
| 236 } | 234 } |
| 237 | 235 |
| 238 void Blacklist(SuggestionsService* suggestions_service, GURL url) { | 236 void Blacklist(SuggestionsService* suggestions_service, GURL url) { |
| 239 blacklisting_failed_ = !suggestions_service->BlacklistURL(url); | 237 blacklisting_failed_ = !suggestions_service->BlacklistURL(url); |
| 240 } | 238 } |
| 241 | 239 |
| 242 void UndoBlacklist(SuggestionsService* suggestions_service, GURL url) { | 240 void UndoBlacklist(SuggestionsService* suggestions_service, GURL url) { |
| 243 undo_blacklisting_failed_ = !suggestions_service->UndoBlacklistURL(url); | 241 undo_blacklisting_failed_ = !suggestions_service->UndoBlacklistURL(url); |
| 244 } | 242 } |
| 245 | 243 |
| 246 // Helper for Undo failure tests. Depending on |is_uploaded|, tests either | 244 // Helper for Undo failure tests. Depending on |is_uploaded|, tests either |
| 247 // the case where the URL is no longer in the local blacklist or the case | 245 // the case where the URL is no longer in the local blacklist or the case |
| 248 // in which it's not yet candidate for upload. | 246 // in which it's not yet candidate for upload. |
| 249 void UndoBlacklistURLFailsHelper(bool is_uploaded) { | 247 void UndoBlacklistURLFailsHelper(bool is_uploaded) { |
| 250 std::unique_ptr<SuggestionsService> suggestions_service( | 248 std::unique_ptr<SuggestionsServiceImpl> suggestions_service( |
| 251 CreateSuggestionsServiceWithMocks()); | 249 CreateSuggestionsServiceWithMocks()); |
| 252 EXPECT_TRUE(suggestions_service != nullptr); | 250 EXPECT_TRUE(suggestions_service != nullptr); |
| 253 // Ensure scheduling the request doesn't happen before undo. | 251 // Ensure scheduling the request doesn't happen before undo. |
| 254 base::TimeDelta delay = base::TimeDelta::FromHours(1); | 252 base::TimeDelta delay = base::TimeDelta::FromHours(1); |
| 255 suggestions_service->set_blacklist_delay(delay); | 253 suggestions_service->set_blacklist_delay(delay); |
| 256 | 254 |
| 257 auto subscription = suggestions_service->AddCallback(base::Bind( | 255 auto subscription = suggestions_service->AddCallback(base::Bind( |
| 258 &SuggestionsServiceTest::CheckCallback, base::Unretained(this))); | 256 &SuggestionsServiceTest::CheckCallback, base::Unretained(this))); |
| 259 | 257 |
| 260 SuggestionsProfile suggestions_profile = CreateSuggestionsProfile(); | 258 SuggestionsProfile suggestions_profile = CreateSuggestionsProfile(); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 283 } | 281 } |
| 284 | 282 |
| 285 Blacklist(suggestions_service.get(), blacklisted_url); | 283 Blacklist(suggestions_service.get(), blacklisted_url); |
| 286 UndoBlacklist(suggestions_service.get(), blacklisted_url); | 284 UndoBlacklist(suggestions_service.get(), blacklisted_url); |
| 287 | 285 |
| 288 EXPECT_EQ(1, suggestions_data_callback_count_); | 286 EXPECT_EQ(1, suggestions_data_callback_count_); |
| 289 EXPECT_FALSE(blacklisting_failed_); | 287 EXPECT_FALSE(blacklisting_failed_); |
| 290 EXPECT_TRUE(undo_blacklisting_failed_); | 288 EXPECT_TRUE(undo_blacklisting_failed_); |
| 291 } | 289 } |
| 292 | 290 |
| 293 bool HasPendingSuggestionsRequest(SuggestionsService* suggestions_service) { | 291 bool HasPendingSuggestionsRequest( |
| 292 SuggestionsServiceImpl* suggestions_service) { |
| 294 return !!suggestions_service->pending_request_.get(); | 293 return !!suggestions_service->pending_request_.get(); |
| 295 } | 294 } |
| 296 | 295 |
| 297 protected: | 296 protected: |
| 298 base::MessageLoopForIO io_message_loop_; | 297 base::MessageLoopForIO io_message_loop_; |
| 299 net::FakeURLFetcherFactory factory_; | 298 net::FakeURLFetcherFactory factory_; |
| 300 FakeProfileOAuth2TokenService token_service_; | 299 FakeProfileOAuth2TokenService token_service_; |
| 301 std::unique_ptr<MockSyncService> mock_sync_service_; | 300 std::unique_ptr<MockSyncService> mock_sync_service_; |
| 302 // Only used if the SuggestionsService is built with mocks. Not owned. | 301 // Only used if the SuggestionsService is built with mocks. Not owned. |
| 303 MockImageManager* mock_thumbnail_manager_; | 302 MockImageManager* mock_thumbnail_manager_; |
| 304 MockBlacklistStore* mock_blacklist_store_; | 303 MockBlacklistStore* mock_blacklist_store_; |
| 305 TestSuggestionsStore* test_suggestions_store_; | 304 TestSuggestionsStore* test_suggestions_store_; |
| 306 scoped_refptr<net::TestURLRequestContextGetter> request_context_; | 305 scoped_refptr<net::TestURLRequestContextGetter> request_context_; |
| 307 | 306 |
| 308 private: | 307 private: |
| 309 DISALLOW_COPY_AND_ASSIGN(SuggestionsServiceTest); | 308 DISALLOW_COPY_AND_ASSIGN(SuggestionsServiceTest); |
| 310 }; | 309 }; |
| 311 | 310 |
| 312 TEST_F(SuggestionsServiceTest, FetchSuggestionsData) { | 311 TEST_F(SuggestionsServiceTest, FetchSuggestionsData) { |
| 313 std::unique_ptr<SuggestionsService> suggestions_service( | 312 std::unique_ptr<SuggestionsService> suggestions_service( |
| 314 CreateSuggestionsServiceWithMocks()); | 313 CreateSuggestionsServiceWithMocks()); |
| 315 ASSERT_TRUE(suggestions_service != nullptr); | 314 ASSERT_TRUE(suggestions_service != nullptr); |
| 316 auto subscription = suggestions_service->AddCallback(base::Bind( | 315 auto subscription = suggestions_service->AddCallback(base::Bind( |
| 317 &SuggestionsServiceTest::CheckCallback, base::Unretained(this))); | 316 &SuggestionsServiceTest::CheckCallback, base::Unretained(this))); |
| 318 | 317 |
| 319 SuggestionsProfile suggestions_profile = CreateSuggestionsProfile(); | 318 SuggestionsProfile suggestions_profile = CreateSuggestionsProfile(); |
| 320 | 319 |
| 321 // Set up net::FakeURLFetcherFactory. | 320 // Set up net::FakeURLFetcherFactory. |
| 322 factory_.SetFakeResponse(SuggestionsService::BuildSuggestionsURL(), | 321 factory_.SetFakeResponse(SuggestionsServiceImpl::BuildSuggestionsURL(), |
| 323 suggestions_profile.SerializeAsString(), | 322 suggestions_profile.SerializeAsString(), |
| 324 net::HTTP_OK, net::URLRequestStatus::SUCCESS); | 323 net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
| 325 | 324 |
| 326 // Expectations. | 325 // Expectations. |
| 327 EXPECT_CALL(*mock_thumbnail_manager_, Initialize(_)); | 326 EXPECT_CALL(*mock_thumbnail_manager_, Initialize(_)); |
| 328 EXPECT_CALL(*mock_blacklist_store_, FilterSuggestions(_)); | 327 EXPECT_CALL(*mock_blacklist_store_, FilterSuggestions(_)); |
| 329 EXPECT_CALL(*mock_blacklist_store_, GetTimeUntilReadyForUpload(_)) | 328 EXPECT_CALL(*mock_blacklist_store_, GetTimeUntilReadyForUpload(_)) |
| 330 .WillOnce(Return(false)); | 329 .WillOnce(Return(false)); |
| 331 | 330 |
| 332 // Send the request. The data should be returned to the callback. | 331 // Send the request. The data should be returned to the callback. |
| (...skipping 29 matching lines...) Expand all Loading... |
| 362 EXPECT_EQ(0, suggestions_data_callback_count_); | 361 EXPECT_EQ(0, suggestions_data_callback_count_); |
| 363 | 362 |
| 364 // |test_suggestions_store_| should still contain the default values. | 363 // |test_suggestions_store_| should still contain the default values. |
| 365 SuggestionsProfile suggestions; | 364 SuggestionsProfile suggestions; |
| 366 test_suggestions_store_->LoadSuggestions(&suggestions); | 365 test_suggestions_store_->LoadSuggestions(&suggestions); |
| 367 EXPECT_EQ(CreateSuggestionsProfile().SerializeAsString(), | 366 EXPECT_EQ(CreateSuggestionsProfile().SerializeAsString(), |
| 368 suggestions.SerializeAsString()); | 367 suggestions.SerializeAsString()); |
| 369 } | 368 } |
| 370 | 369 |
| 371 TEST_F(SuggestionsServiceTest, FetchSuggestionsDataSyncDisabled) { | 370 TEST_F(SuggestionsServiceTest, FetchSuggestionsDataSyncDisabled) { |
| 372 std::unique_ptr<SuggestionsService> suggestions_service( | 371 std::unique_ptr<SuggestionsServiceImpl> suggestions_service( |
| 373 CreateSuggestionsServiceWithMocks()); | 372 CreateSuggestionsServiceWithMocks()); |
| 374 ASSERT_TRUE(suggestions_service != nullptr); | 373 ASSERT_TRUE(suggestions_service != nullptr); |
| 375 EXPECT_CALL(*mock_sync_service_, CanSyncStart()) | 374 EXPECT_CALL(*mock_sync_service_, CanSyncStart()) |
| 376 .WillRepeatedly(Return(false)); | 375 .WillRepeatedly(Return(false)); |
| 377 | 376 |
| 378 auto subscription = suggestions_service->AddCallback(base::Bind( | 377 auto subscription = suggestions_service->AddCallback(base::Bind( |
| 379 &SuggestionsServiceTest::CheckCallback, base::Unretained(this))); | 378 &SuggestionsServiceTest::CheckCallback, base::Unretained(this))); |
| 380 | 379 |
| 381 // Tell SuggestionsService that the sync state changed. The cache should be | 380 // Tell SuggestionsService that the sync state changed. The cache should be |
| 382 // cleared and empty data returned to the callback. | 381 // cleared and empty data returned to the callback. |
| (...skipping 10 matching lines...) Expand all Loading... |
| 393 // Let any network request run. | 392 // Let any network request run. |
| 394 base::RunLoop().RunUntilIdle(); | 393 base::RunLoop().RunUntilIdle(); |
| 395 | 394 |
| 396 // Ensure that CheckCallback didn't run again. | 395 // Ensure that CheckCallback didn't run again. |
| 397 EXPECT_EQ(1, suggestions_data_callback_count_); | 396 EXPECT_EQ(1, suggestions_data_callback_count_); |
| 398 } | 397 } |
| 399 | 398 |
| 400 TEST_F(SuggestionsServiceTest, FetchSuggestionsDataNoAccessToken) { | 399 TEST_F(SuggestionsServiceTest, FetchSuggestionsDataNoAccessToken) { |
| 401 token_service_.RevokeCredentials(kAccountId); | 400 token_service_.RevokeCredentials(kAccountId); |
| 402 | 401 |
| 403 std::unique_ptr<SuggestionsService> suggestions_service( | 402 std::unique_ptr<SuggestionsServiceImpl> suggestions_service( |
| 404 CreateSuggestionsServiceWithMocks()); | 403 CreateSuggestionsServiceWithMocks()); |
| 405 ASSERT_TRUE(suggestions_service != nullptr); | 404 ASSERT_TRUE(suggestions_service != nullptr); |
| 406 | 405 |
| 407 auto subscription = suggestions_service->AddCallback(base::Bind( | 406 auto subscription = suggestions_service->AddCallback(base::Bind( |
| 408 &SuggestionsServiceTest::CheckCallback, base::Unretained(this))); | 407 &SuggestionsServiceTest::CheckCallback, base::Unretained(this))); |
| 409 | 408 |
| 410 EXPECT_CALL(*mock_blacklist_store_, GetTimeUntilReadyForUpload(_)) | 409 EXPECT_CALL(*mock_blacklist_store_, GetTimeUntilReadyForUpload(_)) |
| 411 .WillOnce(Return(false)); | 410 .WillOnce(Return(false)); |
| 412 | 411 |
| 413 suggestions_service->FetchSuggestionsData(); | 412 suggestions_service->FetchSuggestionsData(); |
| 414 | 413 |
| 415 // No network request should be sent. | 414 // No network request should be sent. |
| 416 base::RunLoop().RunUntilIdle(); | 415 base::RunLoop().RunUntilIdle(); |
| 417 EXPECT_FALSE(HasPendingSuggestionsRequest(suggestions_service.get())); | 416 EXPECT_FALSE(HasPendingSuggestionsRequest(suggestions_service.get())); |
| 418 EXPECT_EQ(0, suggestions_data_callback_count_); | 417 EXPECT_EQ(0, suggestions_data_callback_count_); |
| 419 } | 418 } |
| 420 | 419 |
| 421 TEST_F(SuggestionsServiceTest, IssueRequestIfNoneOngoingError) { | 420 TEST_F(SuggestionsServiceTest, IssueRequestIfNoneOngoingError) { |
| 422 std::unique_ptr<SuggestionsService> suggestions_service( | 421 std::unique_ptr<SuggestionsServiceImpl> suggestions_service( |
| 423 CreateSuggestionsServiceWithMocks()); | 422 CreateSuggestionsServiceWithMocks()); |
| 424 ASSERT_TRUE(suggestions_service != nullptr); | 423 ASSERT_TRUE(suggestions_service != nullptr); |
| 425 | 424 |
| 426 // Fake a request error. | 425 // Fake a request error. |
| 427 factory_.SetFakeResponse(SuggestionsService::BuildSuggestionsURL(), | 426 factory_.SetFakeResponse(SuggestionsServiceImpl::BuildSuggestionsURL(), |
| 428 "irrelevant", net::HTTP_OK, | 427 "irrelevant", net::HTTP_OK, |
| 429 net::URLRequestStatus::FAILED); | 428 net::URLRequestStatus::FAILED); |
| 430 | 429 |
| 431 EXPECT_CALL(*mock_blacklist_store_, GetTimeUntilReadyForUpload(_)) | 430 EXPECT_CALL(*mock_blacklist_store_, GetTimeUntilReadyForUpload(_)) |
| 432 .WillOnce(Return(false)); | 431 .WillOnce(Return(false)); |
| 433 | 432 |
| 434 // Send the request. Empty data will be returned to the callback. | 433 // Send the request. Empty data will be returned to the callback. |
| 435 suggestions_service->IssueRequestIfNoneOngoing( | 434 suggestions_service->IssueRequestIfNoneOngoing( |
| 436 SuggestionsService::BuildSuggestionsURL()); | 435 SuggestionsServiceImpl::BuildSuggestionsURL()); |
| 437 | 436 |
| 438 // (Testing only) wait until suggestion fetch is complete. | 437 // (Testing only) wait until suggestion fetch is complete. |
| 439 base::RunLoop().RunUntilIdle(); | 438 base::RunLoop().RunUntilIdle(); |
| 440 } | 439 } |
| 441 | 440 |
| 442 TEST_F(SuggestionsServiceTest, IssueRequestIfNoneOngoingResponseNotOK) { | 441 TEST_F(SuggestionsServiceTest, IssueRequestIfNoneOngoingResponseNotOK) { |
| 443 std::unique_ptr<SuggestionsService> suggestions_service( | 442 std::unique_ptr<SuggestionsServiceImpl> suggestions_service( |
| 444 CreateSuggestionsServiceWithMocks()); | 443 CreateSuggestionsServiceWithMocks()); |
| 445 ASSERT_TRUE(suggestions_service != nullptr); | 444 ASSERT_TRUE(suggestions_service != nullptr); |
| 446 | 445 |
| 447 // Fake a non-200 response code. | 446 // Fake a non-200 response code. |
| 448 factory_.SetFakeResponse(SuggestionsService::BuildSuggestionsURL(), | 447 factory_.SetFakeResponse(SuggestionsServiceImpl::BuildSuggestionsURL(), |
| 449 "irrelevant", net::HTTP_BAD_REQUEST, | 448 "irrelevant", net::HTTP_BAD_REQUEST, |
| 450 net::URLRequestStatus::SUCCESS); | 449 net::URLRequestStatus::SUCCESS); |
| 451 | 450 |
| 452 // Expect that an upload to the blacklist is scheduled. | 451 // Expect that an upload to the blacklist is scheduled. |
| 453 EXPECT_CALL(*mock_blacklist_store_, GetTimeUntilReadyForUpload(_)) | 452 EXPECT_CALL(*mock_blacklist_store_, GetTimeUntilReadyForUpload(_)) |
| 454 .WillOnce(Return(false)); | 453 .WillOnce(Return(false)); |
| 455 | 454 |
| 456 // Send the request. Empty data will be returned to the callback. | 455 // Send the request. Empty data will be returned to the callback. |
| 457 suggestions_service->IssueRequestIfNoneOngoing( | 456 suggestions_service->IssueRequestIfNoneOngoing( |
| 458 SuggestionsService::BuildSuggestionsURL()); | 457 SuggestionsServiceImpl::BuildSuggestionsURL()); |
| 459 | 458 |
| 460 // (Testing only) wait until suggestion fetch is complete. | 459 // (Testing only) wait until suggestion fetch is complete. |
| 461 base::RunLoop().RunUntilIdle(); | 460 base::RunLoop().RunUntilIdle(); |
| 462 | 461 |
| 463 // Expect no suggestions in the cache. | 462 // Expect no suggestions in the cache. |
| 464 SuggestionsProfile empty_suggestions; | 463 SuggestionsProfile empty_suggestions; |
| 465 EXPECT_FALSE(test_suggestions_store_->LoadSuggestions(&empty_suggestions)); | 464 EXPECT_FALSE(test_suggestions_store_->LoadSuggestions(&empty_suggestions)); |
| 466 } | 465 } |
| 467 | 466 |
| 468 TEST_F(SuggestionsServiceTest, BlacklistURL) { | 467 TEST_F(SuggestionsServiceTest, BlacklistURL) { |
| 469 std::unique_ptr<SuggestionsService> suggestions_service( | 468 std::unique_ptr<SuggestionsServiceImpl> suggestions_service( |
| 470 CreateSuggestionsServiceWithMocks()); | 469 CreateSuggestionsServiceWithMocks()); |
| 471 EXPECT_TRUE(suggestions_service != nullptr); | 470 EXPECT_TRUE(suggestions_service != nullptr); |
| 472 base::TimeDelta no_delay = base::TimeDelta::FromSeconds(0); | 471 base::TimeDelta no_delay = base::TimeDelta::FromSeconds(0); |
| 473 suggestions_service->set_blacklist_delay(no_delay); | 472 suggestions_service->set_blacklist_delay(no_delay); |
| 474 | 473 |
| 475 auto subscription = suggestions_service->AddCallback(base::Bind( | 474 auto subscription = suggestions_service->AddCallback(base::Bind( |
| 476 &SuggestionsServiceTest::CheckCallback, base::Unretained(this))); | 475 &SuggestionsServiceTest::CheckCallback, base::Unretained(this))); |
| 477 | 476 |
| 478 GURL blacklisted_url(kBlacklistedUrl); | 477 GURL blacklisted_url(kBlacklistedUrl); |
| 479 GURL request_url( | 478 GURL request_url( |
| 480 SuggestionsService::BuildSuggestionsBlacklistURL(blacklisted_url)); | 479 SuggestionsServiceImpl::BuildSuggestionsBlacklistURL(blacklisted_url)); |
| 481 SuggestionsProfile suggestions_profile = CreateSuggestionsProfile(); | 480 SuggestionsProfile suggestions_profile = CreateSuggestionsProfile(); |
| 482 factory_.SetFakeResponse(request_url, | 481 factory_.SetFakeResponse(request_url, suggestions_profile.SerializeAsString(), |
| 483 suggestions_profile.SerializeAsString(), | |
| 484 net::HTTP_OK, net::URLRequestStatus::SUCCESS); | 482 net::HTTP_OK, net::URLRequestStatus::SUCCESS); |
| 485 EXPECT_CALL(*mock_thumbnail_manager_, Initialize(_)).Times(2); | 483 EXPECT_CALL(*mock_thumbnail_manager_, Initialize(_)).Times(2); |
| 486 | 484 |
| 487 // Expected calls to the blacklist store. | 485 // Expected calls to the blacklist store. |
| 488 EXPECT_CALL(*mock_blacklist_store_, BlacklistUrl(Eq(blacklisted_url))) | 486 EXPECT_CALL(*mock_blacklist_store_, BlacklistUrl(Eq(blacklisted_url))) |
| 489 .WillOnce(Return(true)); | 487 .WillOnce(Return(true)); |
| 490 EXPECT_CALL(*mock_blacklist_store_, FilterSuggestions(_)).Times(2); | 488 EXPECT_CALL(*mock_blacklist_store_, FilterSuggestions(_)).Times(2); |
| 491 EXPECT_CALL(*mock_blacklist_store_, GetTimeUntilReadyForUpload(_)) | 489 EXPECT_CALL(*mock_blacklist_store_, GetTimeUntilReadyForUpload(_)) |
| 492 .WillOnce(DoAll(SetArgPointee<0>(no_delay), Return(true))) | 490 .WillOnce(DoAll(SetArgPointee<0>(no_delay), Return(true))) |
| 493 .WillOnce(Return(false)); | 491 .WillOnce(Return(false)); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 523 .WillOnce(Return(false)); | 521 .WillOnce(Return(false)); |
| 524 | 522 |
| 525 Blacklist(suggestions_service.get(), blacklisted_url); | 523 Blacklist(suggestions_service.get(), blacklisted_url); |
| 526 | 524 |
| 527 EXPECT_TRUE(blacklisting_failed_); | 525 EXPECT_TRUE(blacklisting_failed_); |
| 528 EXPECT_EQ(0, suggestions_data_callback_count_); | 526 EXPECT_EQ(0, suggestions_data_callback_count_); |
| 529 } | 527 } |
| 530 | 528 |
| 531 // Initial blacklist request fails, triggering a second which succeeds. | 529 // Initial blacklist request fails, triggering a second which succeeds. |
| 532 TEST_F(SuggestionsServiceTest, BlacklistURLRequestFails) { | 530 TEST_F(SuggestionsServiceTest, BlacklistURLRequestFails) { |
| 533 std::unique_ptr<SuggestionsService> suggestions_service( | 531 std::unique_ptr<SuggestionsServiceImpl> suggestions_service( |
| 534 CreateSuggestionsServiceWithMocks()); | 532 CreateSuggestionsServiceWithMocks()); |
| 535 ASSERT_TRUE(suggestions_service != nullptr); | 533 ASSERT_TRUE(suggestions_service != nullptr); |
| 536 base::TimeDelta no_delay = base::TimeDelta::FromSeconds(0); | 534 base::TimeDelta no_delay = base::TimeDelta::FromSeconds(0); |
| 537 suggestions_service->set_blacklist_delay(no_delay); | 535 suggestions_service->set_blacklist_delay(no_delay); |
| 538 | 536 |
| 539 auto subscription = suggestions_service->AddCallback(base::Bind( | 537 auto subscription = suggestions_service->AddCallback(base::Bind( |
| 540 &SuggestionsServiceTest::CheckCallback, base::Unretained(this))); | 538 &SuggestionsServiceTest::CheckCallback, base::Unretained(this))); |
| 541 | 539 |
| 542 GURL blacklisted_url(kBlacklistedUrl); | 540 GURL blacklisted_url(kBlacklistedUrl); |
| 543 GURL request_url( | 541 GURL request_url( |
| 544 SuggestionsService::BuildSuggestionsBlacklistURL(blacklisted_url)); | 542 SuggestionsServiceImpl::BuildSuggestionsBlacklistURL(blacklisted_url)); |
| 545 GURL blacklisted_url_alt(kBlacklistedUrlAlt); | 543 GURL blacklisted_url_alt(kBlacklistedUrlAlt); |
| 546 GURL request_url_alt( | 544 GURL request_url_alt(SuggestionsServiceImpl::BuildSuggestionsBlacklistURL( |
| 547 SuggestionsService::BuildSuggestionsBlacklistURL(blacklisted_url_alt)); | 545 blacklisted_url_alt)); |
| 548 SuggestionsProfile suggestions_profile = CreateSuggestionsProfile(); | 546 SuggestionsProfile suggestions_profile = CreateSuggestionsProfile(); |
| 549 | 547 |
| 550 // Note: we want to set the response for the blacklist URL to first | 548 // Note: we want to set the response for the blacklist URL to first |
| 551 // succeed, then fail. This doesn't seem possible. For simplicity of testing, | 549 // succeed, then fail. This doesn't seem possible. For simplicity of testing, |
| 552 // we'll pretend the URL changed in the BlacklistStore between the first and | 550 // we'll pretend the URL changed in the BlacklistStore between the first and |
| 553 // the second request, and adjust expectations accordingly. | 551 // the second request, and adjust expectations accordingly. |
| 554 factory_.SetFakeResponse(request_url, "irrelevant", net::HTTP_OK, | 552 factory_.SetFakeResponse(request_url, "irrelevant", net::HTTP_OK, |
| 555 net::URLRequestStatus::FAILED); | 553 net::URLRequestStatus::FAILED); |
| 556 factory_.SetFakeResponse(request_url_alt, | 554 factory_.SetFakeResponse(request_url_alt, |
| 557 suggestions_profile.SerializeAsString(), | 555 suggestions_profile.SerializeAsString(), |
| (...skipping 21 matching lines...) Expand all Loading... |
| 579 | 577 |
| 580 // Wait for the first scheduling, the first request, the second scheduling, | 578 // Wait for the first scheduling, the first request, the second scheduling, |
| 581 // second request and the third scheduling. Again, note that calling | 579 // second request and the third scheduling. Again, note that calling |
| 582 // RunUntilIdle on the MessageLoop only works when the task is not posted for | 580 // RunUntilIdle on the MessageLoop only works when the task is not posted for |
| 583 // the future. | 581 // the future. |
| 584 base::RunLoop().RunUntilIdle(); | 582 base::RunLoop().RunUntilIdle(); |
| 585 CheckSuggestionsData(); | 583 CheckSuggestionsData(); |
| 586 } | 584 } |
| 587 | 585 |
| 588 TEST_F(SuggestionsServiceTest, UndoBlacklistURL) { | 586 TEST_F(SuggestionsServiceTest, UndoBlacklistURL) { |
| 589 std::unique_ptr<SuggestionsService> suggestions_service( | 587 std::unique_ptr<SuggestionsServiceImpl> suggestions_service( |
| 590 CreateSuggestionsServiceWithMocks()); | 588 CreateSuggestionsServiceWithMocks()); |
| 591 ASSERT_TRUE(suggestions_service != nullptr); | 589 ASSERT_TRUE(suggestions_service != nullptr); |
| 592 // Ensure scheduling the request doesn't happen before undo. | 590 // Ensure scheduling the request doesn't happen before undo. |
| 593 base::TimeDelta delay = base::TimeDelta::FromHours(1); | 591 base::TimeDelta delay = base::TimeDelta::FromHours(1); |
| 594 suggestions_service->set_blacklist_delay(delay); | 592 suggestions_service->set_blacklist_delay(delay); |
| 595 | 593 |
| 596 auto subscription = suggestions_service->AddCallback(base::Bind( | 594 auto subscription = suggestions_service->AddCallback(base::Bind( |
| 597 &SuggestionsServiceTest::CheckCallback, base::Unretained(this))); | 595 &SuggestionsServiceTest::CheckCallback, base::Unretained(this))); |
| 598 | 596 |
| 599 SuggestionsProfile suggestions_profile = CreateSuggestionsProfile(); | 597 SuggestionsProfile suggestions_profile = CreateSuggestionsProfile(); |
| 600 GURL blacklisted_url(kBlacklistedUrl); | 598 GURL blacklisted_url(kBlacklistedUrl); |
| 601 | 599 |
| 602 // Blacklist expectations. | 600 // Blacklist expectations. |
| 603 EXPECT_CALL(*mock_blacklist_store_, BlacklistUrl(Eq(blacklisted_url))) | 601 EXPECT_CALL(*mock_blacklist_store_, BlacklistUrl(Eq(blacklisted_url))) |
| 604 .WillOnce(Return(true)); | 602 .WillOnce(Return(true)); |
| 605 EXPECT_CALL(*mock_thumbnail_manager_, | 603 EXPECT_CALL(*mock_thumbnail_manager_, |
| 606 Initialize(EqualsProto(suggestions_profile))) | 604 Initialize(EqualsProto(suggestions_profile))) |
| 607 .Times(AnyNumber()); | 605 .Times(AnyNumber()); |
| 608 EXPECT_CALL(*mock_blacklist_store_, FilterSuggestions(_)) | 606 EXPECT_CALL(*mock_blacklist_store_, FilterSuggestions(_)).Times(AnyNumber()); |
| 609 .Times(AnyNumber()); | |
| 610 EXPECT_CALL(*mock_blacklist_store_, GetTimeUntilReadyForUpload(_)) | 607 EXPECT_CALL(*mock_blacklist_store_, GetTimeUntilReadyForUpload(_)) |
| 611 .WillOnce(DoAll(SetArgPointee<0>(delay), Return(true))); | 608 .WillOnce(DoAll(SetArgPointee<0>(delay), Return(true))); |
| 612 // Undo expectations. | 609 // Undo expectations. |
| 613 EXPECT_CALL(*mock_blacklist_store_, | 610 EXPECT_CALL(*mock_blacklist_store_, |
| 614 GetTimeUntilURLReadyForUpload(Eq(blacklisted_url), _)) | 611 GetTimeUntilURLReadyForUpload(Eq(blacklisted_url), _)) |
| 615 .WillOnce(DoAll(SetArgPointee<1>(delay), Return(true))); | 612 .WillOnce(DoAll(SetArgPointee<1>(delay), Return(true))); |
| 616 EXPECT_CALL(*mock_blacklist_store_, RemoveUrl(Eq(blacklisted_url))) | 613 EXPECT_CALL(*mock_blacklist_store_, RemoveUrl(Eq(blacklisted_url))) |
| 617 .WillOnce(Return(true)); | 614 .WillOnce(Return(true)); |
| 618 | 615 |
| 619 Blacklist(suggestions_service.get(), blacklisted_url); | 616 Blacklist(suggestions_service.get(), blacklisted_url); |
| 620 UndoBlacklist(suggestions_service.get(), blacklisted_url); | 617 UndoBlacklist(suggestions_service.get(), blacklisted_url); |
| 621 | 618 |
| 622 EXPECT_EQ(2, suggestions_data_callback_count_); | 619 EXPECT_EQ(2, suggestions_data_callback_count_); |
| 623 EXPECT_FALSE(blacklisting_failed_); | 620 EXPECT_FALSE(blacklisting_failed_); |
| 624 EXPECT_FALSE(undo_blacklisting_failed_); | 621 EXPECT_FALSE(undo_blacklisting_failed_); |
| 625 } | 622 } |
| 626 | 623 |
| 627 TEST_F(SuggestionsServiceTest, ClearBlacklist) { | 624 TEST_F(SuggestionsServiceTest, ClearBlacklist) { |
| 628 std::unique_ptr<SuggestionsService> suggestions_service( | 625 std::unique_ptr<SuggestionsServiceImpl> suggestions_service( |
| 629 CreateSuggestionsServiceWithMocks()); | 626 CreateSuggestionsServiceWithMocks()); |
| 630 ASSERT_TRUE(suggestions_service != nullptr); | 627 ASSERT_TRUE(suggestions_service != nullptr); |
| 631 // Ensure scheduling the request doesn't happen before undo. | 628 // Ensure scheduling the request doesn't happen before undo. |
| 632 base::TimeDelta delay = base::TimeDelta::FromHours(1); | 629 base::TimeDelta delay = base::TimeDelta::FromHours(1); |
| 633 suggestions_service->set_blacklist_delay(delay); | 630 suggestions_service->set_blacklist_delay(delay); |
| 634 | 631 |
| 635 auto subscription = suggestions_service->AddCallback(base::Bind( | 632 auto subscription = suggestions_service->AddCallback(base::Bind( |
| 636 &SuggestionsServiceTest::CheckCallback, base::Unretained(this))); | 633 &SuggestionsServiceTest::CheckCallback, base::Unretained(this))); |
| 637 | 634 |
| 638 SuggestionsProfile suggestions_profile = CreateSuggestionsProfile(); | 635 SuggestionsProfile suggestions_profile = CreateSuggestionsProfile(); |
| 639 GURL blacklisted_url(kBlacklistedUrl); | 636 GURL blacklisted_url(kBlacklistedUrl); |
| 640 | 637 |
| 641 factory_.SetFakeResponse( | 638 factory_.SetFakeResponse( |
| 642 SuggestionsService::BuildSuggestionsBlacklistClearURL(), | 639 SuggestionsServiceImpl::BuildSuggestionsBlacklistClearURL(), |
| 643 suggestions_profile.SerializeAsString(), net::HTTP_OK, | 640 suggestions_profile.SerializeAsString(), net::HTTP_OK, |
| 644 net::URLRequestStatus::SUCCESS); | 641 net::URLRequestStatus::SUCCESS); |
| 645 | 642 |
| 646 // Blacklist expectations. | 643 // Blacklist expectations. |
| 647 EXPECT_CALL(*mock_blacklist_store_, BlacklistUrl(Eq(blacklisted_url))) | 644 EXPECT_CALL(*mock_blacklist_store_, BlacklistUrl(Eq(blacklisted_url))) |
| 648 .WillOnce(Return(true)); | 645 .WillOnce(Return(true)); |
| 649 EXPECT_CALL(*mock_thumbnail_manager_, | 646 EXPECT_CALL(*mock_thumbnail_manager_, |
| 650 Initialize(EqualsProto(suggestions_profile))) | 647 Initialize(EqualsProto(suggestions_profile))) |
| 651 .Times(AnyNumber()); | 648 .Times(AnyNumber()); |
| 652 EXPECT_CALL(*mock_blacklist_store_, FilterSuggestions(_)).Times(AnyNumber()); | 649 EXPECT_CALL(*mock_blacklist_store_, FilterSuggestions(_)).Times(AnyNumber()); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 671 | 668 |
| 672 TEST_F(SuggestionsServiceTest, GetBlacklistedUrl) { | 669 TEST_F(SuggestionsServiceTest, GetBlacklistedUrl) { |
| 673 std::unique_ptr<GURL> request_url; | 670 std::unique_ptr<GURL> request_url; |
| 674 std::unique_ptr<net::FakeURLFetcher> fetcher; | 671 std::unique_ptr<net::FakeURLFetcher> fetcher; |
| 675 GURL retrieved_url; | 672 GURL retrieved_url; |
| 676 | 673 |
| 677 // Not a blacklist request. | 674 // Not a blacklist request. |
| 678 request_url.reset(new GURL("http://not-blacklisting.com/a?b=c")); | 675 request_url.reset(new GURL("http://not-blacklisting.com/a?b=c")); |
| 679 fetcher = CreateURLFetcher(*request_url, nullptr, "", net::HTTP_OK, | 676 fetcher = CreateURLFetcher(*request_url, nullptr, "", net::HTTP_OK, |
| 680 net::URLRequestStatus::SUCCESS); | 677 net::URLRequestStatus::SUCCESS); |
| 681 EXPECT_FALSE(SuggestionsService::GetBlacklistedUrl(*fetcher, &retrieved_url)); | 678 EXPECT_FALSE( |
| 679 SuggestionsServiceImpl::GetBlacklistedUrl(*fetcher, &retrieved_url)); |
| 682 | 680 |
| 683 // An actual blacklist request. | 681 // An actual blacklist request. |
| 684 std::string blacklisted_url = "http://blacklisted.com/a?b=c&d=e"; | 682 std::string blacklisted_url = "http://blacklisted.com/a?b=c&d=e"; |
| 685 std::string encoded_blacklisted_url = | 683 std::string encoded_blacklisted_url = |
| 686 "http%3A%2F%2Fblacklisted.com%2Fa%3Fb%3Dc%26d%3De"; | 684 "http%3A%2F%2Fblacklisted.com%2Fa%3Fb%3Dc%26d%3De"; |
| 687 std::string blacklist_request_prefix( | 685 std::string blacklist_request_prefix( |
| 688 SuggestionsService::BuildSuggestionsBlacklistURLPrefix()); | 686 SuggestionsServiceImpl::BuildSuggestionsBlacklistURLPrefix()); |
| 689 request_url.reset( | 687 request_url.reset( |
| 690 new GURL(blacklist_request_prefix + encoded_blacklisted_url)); | 688 new GURL(blacklist_request_prefix + encoded_blacklisted_url)); |
| 691 fetcher.reset(); | 689 fetcher.reset(); |
| 692 fetcher = CreateURLFetcher(*request_url, nullptr, "", net::HTTP_OK, | 690 fetcher = CreateURLFetcher(*request_url, nullptr, "", net::HTTP_OK, |
| 693 net::URLRequestStatus::SUCCESS); | 691 net::URLRequestStatus::SUCCESS); |
| 694 EXPECT_TRUE(SuggestionsService::GetBlacklistedUrl(*fetcher, &retrieved_url)); | 692 EXPECT_TRUE( |
| 693 SuggestionsServiceImpl::GetBlacklistedUrl(*fetcher, &retrieved_url)); |
| 695 EXPECT_EQ(blacklisted_url, retrieved_url.spec()); | 694 EXPECT_EQ(blacklisted_url, retrieved_url.spec()); |
| 696 } | 695 } |
| 697 | 696 |
| 698 TEST_F(SuggestionsServiceTest, UpdateBlacklistDelay) { | 697 TEST_F(SuggestionsServiceTest, UpdateBlacklistDelay) { |
| 699 std::unique_ptr<SuggestionsService> suggestions_service( | 698 std::unique_ptr<SuggestionsServiceImpl> suggestions_service( |
| 700 CreateSuggestionsServiceWithMocks()); | 699 CreateSuggestionsServiceWithMocks()); |
| 701 base::TimeDelta initial_delay = suggestions_service->blacklist_delay(); | 700 base::TimeDelta initial_delay = suggestions_service->blacklist_delay(); |
| 702 | 701 |
| 703 // Delay unchanged on success. | 702 // Delay unchanged on success. |
| 704 suggestions_service->UpdateBlacklistDelay(true); | 703 suggestions_service->UpdateBlacklistDelay(true); |
| 705 EXPECT_EQ(initial_delay, suggestions_service->blacklist_delay()); | 704 EXPECT_EQ(initial_delay, suggestions_service->blacklist_delay()); |
| 706 | 705 |
| 707 // Delay increases on failure. | 706 // Delay increases on failure. |
| 708 suggestions_service->UpdateBlacklistDelay(false); | 707 suggestions_service->UpdateBlacklistDelay(false); |
| 709 EXPECT_GT(suggestions_service->blacklist_delay(), initial_delay); | 708 EXPECT_GT(suggestions_service->blacklist_delay(), initial_delay); |
| 710 | 709 |
| 711 // Delay resets on success. | 710 // Delay resets on success. |
| 712 suggestions_service->UpdateBlacklistDelay(true); | 711 suggestions_service->UpdateBlacklistDelay(true); |
| 713 EXPECT_EQ(initial_delay, suggestions_service->blacklist_delay()); | 712 EXPECT_EQ(initial_delay, suggestions_service->blacklist_delay()); |
| 714 } | 713 } |
| 715 | 714 |
| 716 TEST_F(SuggestionsServiceTest, CheckDefaultTimeStamps) { | 715 TEST_F(SuggestionsServiceTest, CheckDefaultTimeStamps) { |
| 717 std::unique_ptr<SuggestionsService> suggestions_service( | 716 std::unique_ptr<SuggestionsServiceImpl> suggestions_service( |
| 718 CreateSuggestionsServiceWithMocks()); | 717 CreateSuggestionsServiceWithMocks()); |
| 719 SuggestionsProfile suggestions = | 718 SuggestionsProfile suggestions = |
| 720 CreateSuggestionsProfileWithExpiryTimestamps(); | 719 CreateSuggestionsProfileWithExpiryTimestamps(); |
| 721 suggestions_service->SetDefaultExpiryTimestamp(&suggestions, | 720 suggestions_service->SetDefaultExpiryTimestamp(&suggestions, |
| 722 kTestDefaultExpiry); | 721 kTestDefaultExpiry); |
| 723 EXPECT_EQ(kTestSetExpiry, suggestions.suggestions(0).expiry_ts()); | 722 EXPECT_EQ(kTestSetExpiry, suggestions.suggestions(0).expiry_ts()); |
| 724 EXPECT_EQ(kTestDefaultExpiry, suggestions.suggestions(1).expiry_ts()); | 723 EXPECT_EQ(kTestDefaultExpiry, suggestions.suggestions(1).expiry_ts()); |
| 725 } | 724 } |
| 726 | 725 |
| 727 TEST_F(SuggestionsServiceTest, GetPageThumbnail) { | 726 TEST_F(SuggestionsServiceTest, GetPageThumbnail) { |
| 728 std::unique_ptr<SuggestionsService> suggestions_service( | 727 std::unique_ptr<SuggestionsService> suggestions_service( |
| 729 CreateSuggestionsServiceWithMocks()); | 728 CreateSuggestionsServiceWithMocks()); |
| 730 ASSERT_TRUE(suggestions_service != nullptr); | 729 ASSERT_TRUE(suggestions_service != nullptr); |
| 731 | 730 |
| 732 GURL test_url(kTestUrl); | 731 GURL test_url(kTestUrl); |
| 733 GURL thumbnail_url("https://www.thumbnails.com/thumb.jpg"); | 732 GURL thumbnail_url("https://www.thumbnails.com/thumb.jpg"); |
| 734 base::Callback<void(const GURL&, const gfx::Image&)> dummy_callback; | 733 base::Callback<void(const GURL&, const gfx::Image&)> dummy_callback; |
| 735 | 734 |
| 736 EXPECT_CALL(*mock_thumbnail_manager_, GetImageForURL(test_url, _)); | 735 EXPECT_CALL(*mock_thumbnail_manager_, GetImageForURL(test_url, _)); |
| 737 suggestions_service->GetPageThumbnail(test_url, dummy_callback); | 736 suggestions_service->GetPageThumbnail(test_url, dummy_callback); |
| 738 | 737 |
| 739 EXPECT_CALL(*mock_thumbnail_manager_, AddImageURL(test_url, thumbnail_url)); | 738 EXPECT_CALL(*mock_thumbnail_manager_, AddImageURL(test_url, thumbnail_url)); |
| 740 EXPECT_CALL(*mock_thumbnail_manager_, GetImageForURL(test_url, _)); | 739 EXPECT_CALL(*mock_thumbnail_manager_, GetImageForURL(test_url, _)); |
| 741 suggestions_service->GetPageThumbnailWithURL(test_url, thumbnail_url, | 740 suggestions_service->GetPageThumbnailWithURL(test_url, thumbnail_url, |
| 742 dummy_callback); | 741 dummy_callback); |
| 743 | |
| 744 } | 742 } |
| 745 | 743 |
| 746 } // namespace suggestions | 744 } // namespace suggestions |
| OLD | NEW |