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

Side by Side Diff: components/password_manager/core/browser/affiliated_match_helper_unittest.cc

Issue 2657013002: Introduce ThreadTaskRunnerHandle::OverrideForTesting and TestMockTimeTaskRunner::ScopedContext. (Closed)
Patch Set: fix RecentTabHelperTest crash? Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/password_manager/core/browser/affiliated_match_helper.h" 5 #include "components/password_manager/core/browser/affiliated_match_helper.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <memory> 9 #include <memory>
10 #include <utility> 10 #include <utility>
11 11
12 #include "base/macros.h" 12 #include "base/macros.h"
13 #include "base/memory/ptr_util.h" 13 #include "base/memory/ptr_util.h"
14 #include "base/memory/ref_counted.h" 14 #include "base/memory/ref_counted.h"
15 #include "base/message_loop/message_loop.h" 15 #include "base/message_loop/message_loop.h"
16 #include "base/run_loop.h" 16 #include "base/run_loop.h"
17 #include "base/strings/utf_string_conversions.h" 17 #include "base/strings/utf_string_conversions.h"
18 #include "base/test/test_simple_task_runner.h" 18 #include "base/test/scoped_mock_time_message_loop_task_runner.h"
19 #include "base/threading/thread_task_runner_handle.h" 19 #include "base/threading/thread_task_runner_handle.h"
20 #include "components/password_manager/core/browser/affiliation_service.h" 20 #include "components/password_manager/core/browser/affiliation_service.h"
21 #include "components/password_manager/core/browser/affiliation_utils.h" 21 #include "components/password_manager/core/browser/affiliation_utils.h"
22 #include "components/password_manager/core/browser/test_password_store.h" 22 #include "components/password_manager/core/browser/test_password_store.h"
23 #include "testing/gmock/include/gmock/gmock.h" 23 #include "testing/gmock/include/gmock/gmock.h"
24 #include "testing/gtest/include/gtest/gtest.h" 24 #include "testing/gtest/include/gtest/gtest.h"
25 25
26 namespace password_manager { 26 namespace password_manager {
27 27
28 namespace { 28 namespace {
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
159 const char* origin) { 159 const char* origin) {
160 return {autofill::PasswordForm::SCHEME_HTML, signon_realm, 160 return {autofill::PasswordForm::SCHEME_HTML, signon_realm,
161 origin ? GURL(origin) : GURL()}; 161 origin ? GURL(origin) : GURL()};
162 } 162 }
163 163
164 } // namespace 164 } // namespace
165 165
166 class AffiliatedMatchHelperTest : public testing::Test { 166 class AffiliatedMatchHelperTest : public testing::Test {
167 public: 167 public:
168 AffiliatedMatchHelperTest() 168 AffiliatedMatchHelperTest()
169 : waiting_task_runner_(new base::TestSimpleTaskRunner), 169 : expecting_result_callback_(false), mock_affiliation_service_(nullptr) {}
170 expecting_result_callback_(false),
171 mock_affiliation_service_(nullptr) {}
172 ~AffiliatedMatchHelperTest() override {} 170 ~AffiliatedMatchHelperTest() override {}
173 171
174 protected: 172 protected:
175 void RunDeferredInitialization() { 173 void RunDeferredInitialization() {
176 base::TimeDelta expected_init_delay = base::TimeDelta::FromSeconds( 174 mock_time_task_runner_->RunUntilIdle();
177 AffiliatedMatchHelper::kInitializationDelayOnStartupInSeconds); 175 ASSERT_EQ(AffiliatedMatchHelper::kInitializationDelayOnStartup,
178 ASSERT_TRUE(waiting_task_runner()->HasPendingTask()); 176 mock_time_task_runner_->NextPendingTaskDelay());
179 ASSERT_EQ(expected_init_delay, 177 mock_time_task_runner_->FastForwardBy(
180 waiting_task_runner()->NextPendingTaskDelay()); 178 AffiliatedMatchHelper::kInitializationDelayOnStartup);
181 waiting_task_runner()->RunUntilIdle(); 179 }
182 base::RunLoop().RunUntilIdle(); 180
181 void RunUntilIdle() {
182 // TODO(gab): Add support for base::RunLoop().RunUntilIdle() in scope of
183 // ScopedMockTimeMessageLoopTaskRunner and use it instead of this helper
184 // method.
185 mock_time_task_runner_->RunUntilIdle();
183 } 186 }
184 187
185 void AddLogin(const autofill::PasswordForm& form) { 188 void AddLogin(const autofill::PasswordForm& form) {
186 password_store_->AddLogin(form); 189 password_store_->AddLogin(form);
187 base::RunLoop().RunUntilIdle(); 190 RunUntilIdle();
188 } 191 }
189 192
190 void UpdateLoginWithPrimaryKey( 193 void UpdateLoginWithPrimaryKey(
191 const autofill::PasswordForm& new_form, 194 const autofill::PasswordForm& new_form,
192 const autofill::PasswordForm& old_primary_key) { 195 const autofill::PasswordForm& old_primary_key) {
193 password_store_->UpdateLoginWithPrimaryKey(new_form, old_primary_key); 196 password_store_->UpdateLoginWithPrimaryKey(new_form, old_primary_key);
194 base::RunLoop().RunUntilIdle(); 197 RunUntilIdle();
195 } 198 }
196 199
197 void RemoveLogin(const autofill::PasswordForm& form) { 200 void RemoveLogin(const autofill::PasswordForm& form) {
198 password_store_->RemoveLogin(form); 201 password_store_->RemoveLogin(form);
199 base::RunLoop().RunUntilIdle(); 202 RunUntilIdle();
200 } 203 }
201 204
202 void AddAndroidAndNonAndroidTestLogins() { 205 void AddAndroidAndNonAndroidTestLogins() {
203 AddLogin(GetTestAndroidCredentials(kTestAndroidRealmAlpha3)); 206 AddLogin(GetTestAndroidCredentials(kTestAndroidRealmAlpha3));
204 AddLogin(GetTestAndroidCredentials(kTestAndroidRealmBeta2)); 207 AddLogin(GetTestAndroidCredentials(kTestAndroidRealmBeta2));
205 AddLogin(GetTestBlacklistedAndroidCredentials(kTestAndroidRealmBeta3)); 208 AddLogin(GetTestBlacklistedAndroidCredentials(kTestAndroidRealmBeta3));
206 AddLogin(GetTestAndroidCredentials(kTestAndroidRealmGamma)); 209 AddLogin(GetTestAndroidCredentials(kTestAndroidRealmGamma));
207 210
208 AddLogin(GetTestAndroidCredentials(kTestWebRealmAlpha1)); 211 AddLogin(GetTestAndroidCredentials(kTestWebRealmAlpha1));
209 AddLogin(GetTestAndroidCredentials(kTestWebRealmAlpha2)); 212 AddLogin(GetTestAndroidCredentials(kTestWebRealmAlpha2));
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 kTestAndroidFacetURIGamma); 252 kTestAndroidFacetURIGamma);
250 } 253 }
251 254
252 std::vector<std::string> GetAffiliatedAndroidRealms( 255 std::vector<std::string> GetAffiliatedAndroidRealms(
253 const PasswordStore::FormDigest& observed_form) { 256 const PasswordStore::FormDigest& observed_form) {
254 expecting_result_callback_ = true; 257 expecting_result_callback_ = true;
255 match_helper()->GetAffiliatedAndroidRealms( 258 match_helper()->GetAffiliatedAndroidRealms(
256 observed_form, 259 observed_form,
257 base::Bind(&AffiliatedMatchHelperTest::OnAffiliatedRealmsCallback, 260 base::Bind(&AffiliatedMatchHelperTest::OnAffiliatedRealmsCallback,
258 base::Unretained(this))); 261 base::Unretained(this)));
259 base::RunLoop().RunUntilIdle(); 262 RunUntilIdle();
260 EXPECT_FALSE(expecting_result_callback_); 263 EXPECT_FALSE(expecting_result_callback_);
261 return last_result_realms_; 264 return last_result_realms_;
262 } 265 }
263 266
264 std::vector<std::string> GetAffiliatedWebRealms( 267 std::vector<std::string> GetAffiliatedWebRealms(
265 const PasswordStore::FormDigest& android_form) { 268 const PasswordStore::FormDigest& android_form) {
266 expecting_result_callback_ = true; 269 expecting_result_callback_ = true;
267 match_helper()->GetAffiliatedWebRealms( 270 match_helper()->GetAffiliatedWebRealms(
268 android_form, 271 android_form,
269 base::Bind(&AffiliatedMatchHelperTest::OnAffiliatedRealmsCallback, 272 base::Bind(&AffiliatedMatchHelperTest::OnAffiliatedRealmsCallback,
270 base::Unretained(this))); 273 base::Unretained(this)));
271 base::RunLoop().RunUntilIdle(); 274 RunUntilIdle();
272 EXPECT_FALSE(expecting_result_callback_); 275 EXPECT_FALSE(expecting_result_callback_);
273 return last_result_realms_; 276 return last_result_realms_;
274 } 277 }
275 278
276 std::vector<std::unique_ptr<autofill::PasswordForm>> 279 std::vector<std::unique_ptr<autofill::PasswordForm>>
277 InjectAffiliatedWebRealms( 280 InjectAffiliatedWebRealms(
278 std::vector<std::unique_ptr<autofill::PasswordForm>> forms) { 281 std::vector<std::unique_ptr<autofill::PasswordForm>> forms) {
279 expecting_result_callback_ = true; 282 expecting_result_callback_ = true;
280 match_helper()->InjectAffiliatedWebRealms( 283 match_helper()->InjectAffiliatedWebRealms(
281 std::move(forms), 284 std::move(forms),
282 base::Bind(&AffiliatedMatchHelperTest::OnFormsCallback, 285 base::Bind(&AffiliatedMatchHelperTest::OnFormsCallback,
283 base::Unretained(this))); 286 base::Unretained(this)));
284 base::RunLoop().RunUntilIdle(); 287 RunUntilIdle();
285 EXPECT_FALSE(expecting_result_callback_); 288 EXPECT_FALSE(expecting_result_callback_);
286 return std::move(last_result_forms_); 289 return std::move(last_result_forms_);
287 } 290 }
288 291
289 void DestroyMatchHelper() { match_helper_.reset(); } 292 void DestroyMatchHelper() { match_helper_.reset(); }
290 293
291 base::TestSimpleTaskRunner* waiting_task_runner() {
292 return waiting_task_runner_.get();
293 }
294
295 TestPasswordStore* password_store() { return password_store_.get(); } 294 TestPasswordStore* password_store() { return password_store_.get(); }
296 295
297 MockAffiliationService* mock_affiliation_service() { 296 MockAffiliationService* mock_affiliation_service() {
298 return mock_affiliation_service_; 297 return mock_affiliation_service_;
299 } 298 }
300 299
301 AffiliatedMatchHelper* match_helper() { return match_helper_.get(); } 300 AffiliatedMatchHelper* match_helper() { return match_helper_.get(); }
302 301
303 private: 302 private:
304 void OnAffiliatedRealmsCallback( 303 void OnAffiliatedRealmsCallback(
(...skipping 13 matching lines...) Expand all
318 // testing::Test: 317 // testing::Test:
319 void SetUp() override { 318 void SetUp() override {
320 std::unique_ptr<MockAffiliationService> service( 319 std::unique_ptr<MockAffiliationService> service(
321 new MockAffiliationService()); 320 new MockAffiliationService());
322 mock_affiliation_service_ = service.get(); 321 mock_affiliation_service_ = service.get();
323 322
324 password_store_ = new TestPasswordStore; 323 password_store_ = new TestPasswordStore;
325 324
326 match_helper_.reset( 325 match_helper_.reset(
327 new AffiliatedMatchHelper(password_store_.get(), std::move(service))); 326 new AffiliatedMatchHelper(password_store_.get(), std::move(service)));
328 match_helper_->SetTaskRunnerUsedForWaitingForTesting(waiting_task_runner_);
329 } 327 }
330 328
331 void TearDown() override { 329 void TearDown() override {
332 match_helper_.reset(); 330 match_helper_.reset();
333 password_store_->ShutdownOnUIThread(); 331 password_store_->ShutdownOnUIThread();
334 password_store_ = nullptr; 332 password_store_ = nullptr;
335 } 333 }
336 334
337 scoped_refptr<base::TestSimpleTaskRunner> waiting_task_runner_;
338 base::MessageLoop message_loop_; 335 base::MessageLoop message_loop_;
336 base::ScopedMockTimeMessageLoopTaskRunner mock_time_task_runner_;
337
339 std::vector<std::string> last_result_realms_; 338 std::vector<std::string> last_result_realms_;
340 std::vector<std::unique_ptr<autofill::PasswordForm>> last_result_forms_; 339 std::vector<std::unique_ptr<autofill::PasswordForm>> last_result_forms_;
341 bool expecting_result_callback_; 340 bool expecting_result_callback_;
342 341
343 scoped_refptr<TestPasswordStore> password_store_; 342 scoped_refptr<TestPasswordStore> password_store_;
344 std::unique_ptr<AffiliatedMatchHelper> match_helper_; 343 std::unique_ptr<AffiliatedMatchHelper> match_helper_;
345 344
346 // Owned by |match_helper_|. 345 // Owned by |match_helper_|.
347 MockAffiliationService* mock_affiliation_service_; 346 MockAffiliationService* mock_affiliation_service_;
348 347
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
497 AffiliatedMatchHelper::IsValidAndroidCredential(android_credential)); 496 AffiliatedMatchHelper::IsValidAndroidCredential(android_credential));
498 } 497 }
499 498
500 // Verifies that affiliations for Android applications with pre-existing 499 // Verifies that affiliations for Android applications with pre-existing
501 // credentials on start-up are prefetched. 500 // credentials on start-up are prefetched.
502 TEST_F(AffiliatedMatchHelperTest, 501 TEST_F(AffiliatedMatchHelperTest,
503 PrefetchAffiliationsForPreexistingAndroidCredentialsOnStartup) { 502 PrefetchAffiliationsForPreexistingAndroidCredentialsOnStartup) {
504 AddAndroidAndNonAndroidTestLogins(); 503 AddAndroidAndNonAndroidTestLogins();
505 504
506 match_helper()->Initialize(); 505 match_helper()->Initialize();
507 base::RunLoop().RunUntilIdle(); 506 RunUntilIdle();
508 507
509 ExpectPrefetchForAndroidTestLogins(); 508 ExpectPrefetchForAndroidTestLogins();
510 ASSERT_NO_FATAL_FAILURE(RunDeferredInitialization()); 509 ASSERT_NO_FATAL_FAILURE(RunDeferredInitialization());
511 } 510 }
512 511
513 // Stores credentials for Android applications between Initialize() and 512 // Stores credentials for Android applications between Initialize() and
514 // DoDeferredInitialization(). Verifies that corresponding affiliation 513 // DoDeferredInitialization(). Verifies that corresponding affiliation
515 // information gets prefetched. 514 // information gets prefetched.
516 TEST_F(AffiliatedMatchHelperTest, 515 TEST_F(AffiliatedMatchHelperTest,
517 PrefetchAffiliationsForAndroidCredentialsAddedInInitializationDelay) { 516 PrefetchAffiliationsForAndroidCredentialsAddedInInitializationDelay) {
518 match_helper()->Initialize(); 517 match_helper()->Initialize();
519 base::RunLoop().RunUntilIdle(); 518 RunUntilIdle();
520 519
521 AddAndroidAndNonAndroidTestLogins(); 520 AddAndroidAndNonAndroidTestLogins();
522 521
523 ExpectPrefetchForAndroidTestLogins(); 522 ExpectPrefetchForAndroidTestLogins();
524 ASSERT_NO_FATAL_FAILURE(RunDeferredInitialization()); 523 ASSERT_NO_FATAL_FAILURE(RunDeferredInitialization());
525 } 524 }
526 525
527 // Stores credentials for Android applications after DoDeferredInitialization(). 526 // Stores credentials for Android applications after DoDeferredInitialization().
528 // Verifies that corresponding affiliation information gets prefetched. 527 // Verifies that corresponding affiliation information gets prefetched.
529 TEST_F(AffiliatedMatchHelperTest, 528 TEST_F(AffiliatedMatchHelperTest,
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
587 autofill::PasswordForm android_form( 586 autofill::PasswordForm android_form(
588 GetTestAndroidCredentials(kTestAndroidRealmAlpha3)); 587 GetTestAndroidCredentials(kTestAndroidRealmAlpha3));
589 AddLogin(android_form); 588 AddLogin(android_form);
590 589
591 // Store two credentials before initialization. 590 // Store two credentials before initialization.
592 autofill::PasswordForm android_form2(android_form); 591 autofill::PasswordForm android_form2(android_form);
593 android_form2.username_value = base::ASCIIToUTF16("JohnDoe2"); 592 android_form2.username_value = base::ASCIIToUTF16("JohnDoe2");
594 AddLogin(android_form2); 593 AddLogin(android_form2);
595 594
596 match_helper()->Initialize(); 595 match_helper()->Initialize();
597 base::RunLoop().RunUntilIdle(); 596 RunUntilIdle();
598 597
599 // Store one credential between initialization and deferred initialization. 598 // Store one credential between initialization and deferred initialization.
600 autofill::PasswordForm android_form3(android_form); 599 autofill::PasswordForm android_form3(android_form);
601 android_form3.username_value = base::ASCIIToUTF16("JohnDoe3"); 600 android_form3.username_value = base::ASCIIToUTF16("JohnDoe3");
602 AddLogin(android_form3); 601 AddLogin(android_form3);
603 602
604 ASSERT_NO_FATAL_FAILURE(RunDeferredInitialization()); 603 ASSERT_NO_FATAL_FAILURE(RunDeferredInitialization());
605 604
606 // Store one credential after deferred initialization. 605 // Store one credential after deferred initialization.
607 autofill::PasswordForm android_form4(android_form); 606 autofill::PasswordForm android_form4(android_form);
608 android_form4.username_value = base::ASCIIToUTF16("JohnDoe4"); 607 android_form4.username_value = base::ASCIIToUTF16("JohnDoe4");
609 AddLogin(android_form4); 608 AddLogin(android_form4);
610 609
611 for (size_t i = 0; i < 4; ++i) { 610 for (size_t i = 0; i < 4; ++i) {
612 mock_affiliation_service()->ExpectCallToCancelPrefetch( 611 mock_affiliation_service()->ExpectCallToCancelPrefetch(
613 kTestAndroidFacetURIAlpha3); 612 kTestAndroidFacetURIAlpha3);
614 mock_affiliation_service()->ExpectCallToTrimCacheForFacet( 613 mock_affiliation_service()->ExpectCallToTrimCacheForFacet(
615 kTestAndroidFacetURIAlpha3); 614 kTestAndroidFacetURIAlpha3);
616 } 615 }
617 616
618 RemoveLogin(android_form); 617 RemoveLogin(android_form);
619 RemoveLogin(android_form2); 618 RemoveLogin(android_form2);
620 RemoveLogin(android_form3); 619 RemoveLogin(android_form3);
621 RemoveLogin(android_form4); 620 RemoveLogin(android_form4);
622 } 621 }
623 622
624 TEST_F(AffiliatedMatchHelperTest, DestroyBeforeDeferredInitialization) { 623 TEST_F(AffiliatedMatchHelperTest, DestroyBeforeDeferredInitialization) {
625 match_helper()->Initialize(); 624 match_helper()->Initialize();
626 base::RunLoop().RunUntilIdle(); 625 RunUntilIdle();
627 DestroyMatchHelper(); 626 DestroyMatchHelper();
628 ASSERT_NO_FATAL_FAILURE(RunDeferredInitialization()); 627 ASSERT_NO_FATAL_FAILURE(RunDeferredInitialization());
629 } 628 }
630 629
631 } // namespace password_manager 630 } // namespace password_manager
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698