OLD | NEW |
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 "chrome/browser/ui/passwords/manage_passwords_state.h" | 5 #include "chrome/browser/ui/passwords/manage_passwords_state.h" |
6 | 6 |
7 #include "base/strings/utf_string_conversions.h" | 7 #include "base/strings/utf_string_conversions.h" |
8 #include "components/password_manager/core/browser/password_form_manager.h" | 8 #include "components/password_manager/core/browser/password_form_manager.h" |
9 #include "components/password_manager/core/browser/stub_password_manager_client.
h" | 9 #include "components/password_manager/core/browser/stub_password_manager_client.
h" |
10 #include "components/password_manager/core/common/credential_manager_types.h" | 10 #include "components/password_manager/core/common/credential_manager_types.h" |
11 #include "testing/gmock/include/gmock/gmock.h" | 11 #include "testing/gmock/include/gmock/gmock.h" |
12 #include "testing/gtest/include/gtest/gtest.h" | 12 #include "testing/gtest/include/gtest/gtest.h" |
13 | 13 |
14 using ::testing::_; | 14 using ::testing::_; |
15 using ::testing::Contains; | 15 using ::testing::Contains; |
16 using ::testing::ElementsAre; | 16 using ::testing::ElementsAre; |
17 using ::testing::IsEmpty; | 17 using ::testing::IsEmpty; |
18 using ::testing::Not; | 18 using ::testing::Not; |
19 using ::testing::Pointee; | 19 using ::testing::Pointee; |
20 using ::testing::UnorderedElementsAre; | 20 using ::testing::UnorderedElementsAre; |
21 | 21 |
22 namespace { | 22 namespace { |
23 | 23 |
24 class ManagePasswordsStateTest : public testing::Test { | 24 class ManagePasswordsStateTest : public testing::Test { |
25 public: | 25 public: |
26 ManagePasswordsStateTest() = default; | |
27 | |
28 void SetUp() override { | 26 void SetUp() override { |
29 test_local_form_.origin = GURL("http://example.com"); | 27 test_local_form_.origin = GURL("http://example.com"); |
30 test_local_form_.username_value = base::ASCIIToUTF16("username"); | 28 test_local_form_.username_value = base::ASCIIToUTF16("username"); |
31 test_local_form_.password_value = base::ASCIIToUTF16("12345"); | 29 test_local_form_.password_value = base::ASCIIToUTF16("12345"); |
32 | 30 |
33 test_submitted_form_ = test_local_form_; | 31 test_submitted_form_ = test_local_form_; |
34 test_submitted_form_.username_value = base::ASCIIToUTF16("new one"); | 32 test_submitted_form_.username_value = base::ASCIIToUTF16("new one"); |
35 test_submitted_form_.password_value = base::ASCIIToUTF16("asdfjkl;"); | 33 test_submitted_form_.password_value = base::ASCIIToUTF16("asdfjkl;"); |
36 | 34 |
37 test_federated_form_.origin = GURL("https://idp.com"); | 35 test_federated_form_.origin = GURL("https://idp.com"); |
(...skipping 20 matching lines...) Expand all Loading... |
58 MOCK_METHOD1(OnChooseCredential, | 56 MOCK_METHOD1(OnChooseCredential, |
59 void(const password_manager::CredentialInfo&)); | 57 void(const password_manager::CredentialInfo&)); |
60 | 58 |
61 private: | 59 private: |
62 password_manager::StubPasswordManagerClient client_; | 60 password_manager::StubPasswordManagerClient client_; |
63 | 61 |
64 ManagePasswordsState passwords_data_; | 62 ManagePasswordsState passwords_data_; |
65 autofill::PasswordForm test_local_form_; | 63 autofill::PasswordForm test_local_form_; |
66 autofill::PasswordForm test_submitted_form_; | 64 autofill::PasswordForm test_submitted_form_; |
67 autofill::PasswordForm test_federated_form_; | 65 autofill::PasswordForm test_federated_form_; |
68 | |
69 DISALLOW_COPY_AND_ASSIGN(ManagePasswordsStateTest); | |
70 }; | 66 }; |
71 | 67 |
72 scoped_ptr<password_manager::PasswordFormManager> | 68 scoped_ptr<password_manager::PasswordFormManager> |
73 ManagePasswordsStateTest::CreateFormManager() { | 69 ManagePasswordsStateTest::CreateFormManager() { |
74 scoped_ptr<password_manager::PasswordFormManager> test_form_manager( | 70 scoped_ptr<password_manager::PasswordFormManager> test_form_manager( |
75 new password_manager::PasswordFormManager( | 71 new password_manager::PasswordFormManager( |
76 nullptr, &client_, | 72 nullptr, &client_, |
77 base::WeakPtr<password_manager::PasswordManagerDriver>(), | 73 base::WeakPtr<password_manager::PasswordManagerDriver>(), |
78 test_local_form(), false)); | 74 test_local_form(), false)); |
79 test_form_manager->SimulateFetchMatchingLoginsFromPasswordStore(); | 75 test_form_manager->SimulateFetchMatchingLoginsFromPasswordStore(); |
(...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
350 make_scoped_ptr(new autofill::PasswordForm(psl_matched_test_form))); | 346 make_scoped_ptr(new autofill::PasswordForm(psl_matched_test_form))); |
351 passwords_data().OnPasswordAutofilled(password_form_map); | 347 passwords_data().OnPasswordAutofilled(password_form_map); |
352 | 348 |
353 EXPECT_THAT(passwords_data().GetCurrentForms(), IsEmpty()); | 349 EXPECT_THAT(passwords_data().GetCurrentForms(), IsEmpty()); |
354 EXPECT_THAT(passwords_data().federated_credentials_forms(), IsEmpty()); | 350 EXPECT_THAT(passwords_data().federated_credentials_forms(), IsEmpty()); |
355 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, passwords_data().state()); | 351 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, passwords_data().state()); |
356 EXPECT_EQ(GURL::EmptyGURL(), passwords_data().origin()); | 352 EXPECT_EQ(GURL::EmptyGURL(), passwords_data().origin()); |
357 EXPECT_FALSE(passwords_data().form_manager()); | 353 EXPECT_FALSE(passwords_data().form_manager()); |
358 } | 354 } |
359 | 355 |
360 TEST_F(ManagePasswordsStateTest, BlacklistBlockedAutofill) { | |
361 scoped_ptr<autofill::PasswordForm> blacklisted(new autofill::PasswordForm); | |
362 autofill::PasswordForm& blacklisted_ref = *blacklisted; | |
363 blacklisted_ref.blacklisted_by_user = true; | |
364 blacklisted_ref.origin = GURL("http://example.com/bad"); | |
365 autofill::PasswordFormMap password_form_map; | |
366 password_form_map.insert(blacklisted_ref.username_value, blacklisted.Pass()); | |
367 scoped_ptr<autofill::PasswordForm> test_form( | |
368 new autofill::PasswordForm(test_local_form())); | |
369 autofill::PasswordForm* test_form_ptr = test_form.get(); | |
370 password_form_map.insert(test_form_ptr->username_value, test_form.Pass()); | |
371 passwords_data().OnBlacklistBlockedAutofill(password_form_map); | |
372 | |
373 EXPECT_THAT(passwords_data().GetCurrentForms(), | |
374 ElementsAre(Pointee(blacklisted_ref), Pointee(*test_form_ptr))); | |
375 EXPECT_THAT(passwords_data().federated_credentials_forms(), IsEmpty()); | |
376 EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, passwords_data().state()); | |
377 EXPECT_EQ(blacklisted_ref.origin, passwords_data().origin()); | |
378 | |
379 // |passwords_data| should hold a separate copy of test_form. | |
380 EXPECT_THAT(passwords_data().GetCurrentForms(), Not(Contains(test_form_ptr))); | |
381 TestAllUpdates(); | |
382 } | |
383 | |
384 TEST_F(ManagePasswordsStateTest, Unblacklist) { | |
385 scoped_ptr<autofill::PasswordForm> blacklisted(new autofill::PasswordForm); | |
386 autofill::PasswordForm& blacklisted_ref = *blacklisted; | |
387 blacklisted_ref.blacklisted_by_user = true; | |
388 blacklisted_ref.origin = test_local_form().origin; | |
389 autofill::PasswordFormMap password_form_map; | |
390 password_form_map.insert(blacklisted_ref.username_value, blacklisted.Pass()); | |
391 passwords_data().OnBlacklistBlockedAutofill(password_form_map); | |
392 EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, passwords_data().state()); | |
393 passwords_data().TransitionToState(password_manager::ui::MANAGE_STATE); | |
394 | |
395 EXPECT_THAT(passwords_data().GetCurrentForms(), | |
396 ElementsAre(Pointee(blacklisted_ref))); | |
397 EXPECT_THAT(passwords_data().federated_credentials_forms(), IsEmpty()); | |
398 EXPECT_EQ(password_manager::ui::MANAGE_STATE, passwords_data().state()); | |
399 EXPECT_EQ(blacklisted_ref.origin, passwords_data().origin()); | |
400 TestAllUpdates(); | |
401 } | |
402 | |
403 TEST_F(ManagePasswordsStateTest, OnInactive) { | 356 TEST_F(ManagePasswordsStateTest, OnInactive) { |
404 scoped_ptr<password_manager::PasswordFormManager> test_form_manager( | 357 scoped_ptr<password_manager::PasswordFormManager> test_form_manager( |
405 CreateFormManager()); | 358 CreateFormManager()); |
406 test_form_manager->ProvisionallySave( | 359 test_form_manager->ProvisionallySave( |
407 test_submitted_form(), | 360 test_submitted_form(), |
408 password_manager::PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); | 361 password_manager::PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); |
409 passwords_data().OnPendingPassword(test_form_manager.Pass()); | 362 passwords_data().OnPendingPassword(test_form_manager.Pass()); |
410 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE, | 363 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE, |
411 passwords_data().state()); | 364 passwords_data().state()); |
412 passwords_data().OnInactive(); | 365 passwords_data().OnInactive(); |
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
589 password_manager::PasswordStoreChange::REMOVE, blacklisted); | 542 password_manager::PasswordStoreChange::REMOVE, blacklisted); |
590 passwords_data().ProcessLoginsChanged(list); | 543 passwords_data().ProcessLoginsChanged(list); |
591 EXPECT_THAT(passwords_data().GetCurrentForms(), | 544 EXPECT_THAT(passwords_data().GetCurrentForms(), |
592 ElementsAre(Pointee(test_local_form()))); | 545 ElementsAre(Pointee(test_local_form()))); |
593 EXPECT_THAT(passwords_data().federated_credentials_forms(), IsEmpty()); | 546 EXPECT_THAT(passwords_data().federated_credentials_forms(), IsEmpty()); |
594 EXPECT_EQ(password_manager::ui::MANAGE_STATE, passwords_data().state()); | 547 EXPECT_EQ(password_manager::ui::MANAGE_STATE, passwords_data().state()); |
595 EXPECT_EQ(test_local_form().origin, passwords_data().origin()); | 548 EXPECT_EQ(test_local_form().origin, passwords_data().origin()); |
596 } | 549 } |
597 | 550 |
598 TEST_F(ManagePasswordsStateTest, BlacklistedToAutofilled) { | 551 TEST_F(ManagePasswordsStateTest, BlacklistedToAutofilled) { |
599 autofill::PasswordFormMap password_form_map; | 552 // Start in PENDING_PASSWORD_STATE and transit to the blacklisted state. |
600 password_form_map.insert( | 553 scoped_ptr<password_manager::PasswordFormManager> test_form_manager( |
601 test_local_form().username_value, | 554 CreateFormManager()); |
602 make_scoped_ptr(new autofill::PasswordForm(test_local_form()))); | 555 test_form_manager->ProvisionallySave( |
603 scoped_ptr<autofill::PasswordForm> blacklisted(new autofill::PasswordForm); | 556 test_submitted_form(), |
604 autofill::PasswordForm& blacklisted_ref = *blacklisted; | 557 password_manager::PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); |
605 blacklisted_ref.blacklisted_by_user = true; | 558 passwords_data().OnPendingPassword(test_form_manager.Pass()); |
606 blacklisted_ref.origin = GURL("http://example.com/bad"); | 559 |
607 password_form_map.insert(blacklisted_ref.username_value, blacklisted.Pass()); | 560 // Push the balcklisted form. |
608 passwords_data().OnBlacklistBlockedAutofill(password_form_map); | 561 autofill::PasswordForm blacklisted = test_local_form(); |
| 562 blacklisted.blacklisted_by_user = true; |
| 563 blacklisted.username_value = base::string16(); |
| 564 blacklisted.password_value = base::string16(); |
| 565 password_manager::PasswordStoreChange change( |
| 566 password_manager::PasswordStoreChange::ADD, blacklisted); |
| 567 password_manager::PasswordStoreChangeList list(1, change); |
| 568 passwords_data().ProcessLoginsChanged(list); |
| 569 EXPECT_THAT(passwords_data().GetCurrentForms(), |
| 570 UnorderedElementsAre(Pointee(test_local_form()), |
| 571 Pointee(blacklisted))); |
| 572 EXPECT_THAT(passwords_data().federated_credentials_forms(), IsEmpty()); |
609 EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, passwords_data().state()); | 573 EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, passwords_data().state()); |
610 EXPECT_EQ(blacklisted_ref.origin, passwords_data().origin()); | 574 EXPECT_EQ(test_submitted_form().origin, passwords_data().origin()); |
611 | 575 |
612 // Delete the blacklisted form. | 576 // Delete the blacklisted form. |
613 password_manager::PasswordStoreChangeList list; | 577 list[0] = password_manager::PasswordStoreChange( |
614 list.push_back(password_manager::PasswordStoreChange( | 578 password_manager::PasswordStoreChange::REMOVE, blacklisted); |
615 password_manager::PasswordStoreChange::REMOVE, blacklisted_ref)); | |
616 passwords_data().ProcessLoginsChanged(list); | 579 passwords_data().ProcessLoginsChanged(list); |
617 EXPECT_THAT(passwords_data().GetCurrentForms(), | 580 EXPECT_THAT(passwords_data().GetCurrentForms(), |
618 ElementsAre(Pointee(test_local_form()))); | 581 ElementsAre(Pointee(test_local_form()))); |
619 EXPECT_THAT(passwords_data().federated_credentials_forms(), IsEmpty()); | 582 EXPECT_THAT(passwords_data().federated_credentials_forms(), IsEmpty()); |
620 EXPECT_EQ(password_manager::ui::MANAGE_STATE, passwords_data().state()); | 583 EXPECT_EQ(password_manager::ui::MANAGE_STATE, passwords_data().state()); |
621 EXPECT_EQ(blacklisted_ref.origin, passwords_data().origin()); | 584 EXPECT_EQ(test_submitted_form().origin, passwords_data().origin()); |
622 } | 585 } |
623 | 586 |
624 } // namespace | 587 } // namespace |
OLD | NEW |