| 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 |