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

Unified Diff: chrome/browser/ui/passwords/manage_passwords_state_unittest.cc

Issue 993513006: Introduce ManagePasswordsState class. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: comments Created 5 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/passwords/manage_passwords_state_unittest.cc
diff --git a/chrome/browser/ui/passwords/manage_passwords_state_unittest.cc b/chrome/browser/ui/passwords/manage_passwords_state_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..1c0c88b13f24c5b3b516db2f42a2b8709d0f6f35
--- /dev/null
+++ b/chrome/browser/ui/passwords/manage_passwords_state_unittest.cc
@@ -0,0 +1,318 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ui/passwords/manage_passwords_state.h"
+
+#include "base/strings/utf_string_conversions.h"
+#include "components/password_manager/content/common/credential_manager_types.h"
+#include "components/password_manager/core/browser/password_form_manager.h"
+#include "components/password_manager/core/browser/stub_password_manager_client.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+using ::testing::_;
+using ::testing::Contains;
+using ::testing::ElementsAre;
+using ::testing::IsEmpty;
+using ::testing::Not;
+using ::testing::Pointee;
+using ::testing::UnorderedElementsAre;
+
+namespace {
+
+class ManagePasswordsStateTest : public testing::Test {
+ public:
+ ManagePasswordsStateTest() = default;
+
+ void SetUp() override {
+ test_local_form_.origin = GURL("http://example.com");
+ test_local_form_.username_value = base::ASCIIToUTF16("username");
+ test_local_form_.password_value = base::ASCIIToUTF16("12345");
+
+ test_submitted_form_ = test_local_form_;
+ test_submitted_form_.username_value = base::ASCIIToUTF16("new one");
+ test_submitted_form_.password_value = base::ASCIIToUTF16("asdfjkl;");
+
+ test_federated_form_.origin = GURL("https://idp.com");
+ test_federated_form_.username_value = base::ASCIIToUTF16("username");
+ }
+
+ autofill::PasswordForm& test_local_form() { return test_local_form_; }
+ autofill::PasswordForm& test_submitted_form() { return test_submitted_form_; }
+ autofill::PasswordForm& test_federated_form() { return test_federated_form_; }
+ ManagePasswordsState& passwords_data() { return passwords_data_; }
+
+ scoped_ptr<password_manager::PasswordFormManager> CreateFormManager();
+
+ MOCK_METHOD1(OnChooseCredential,
+ void(const password_manager::CredentialInfo&));
+
+ private:
+ password_manager::StubPasswordManagerClient client_;
+
+ ManagePasswordsState passwords_data_;
+ autofill::PasswordForm test_local_form_;
+ autofill::PasswordForm test_submitted_form_;
+ autofill::PasswordForm test_federated_form_;
+
+ DISALLOW_COPY_AND_ASSIGN(ManagePasswordsStateTest);
+};
+
+scoped_ptr<password_manager::PasswordFormManager>
+ManagePasswordsStateTest::CreateFormManager() {
+ scoped_ptr<password_manager::PasswordFormManager> test_form_manager(
+ new password_manager::PasswordFormManager(
+ nullptr, &client_,
+ base::WeakPtr<password_manager::PasswordManagerDriver>(),
+ test_local_form(), false));
+ test_form_manager->SimulateFetchMatchingLoginsFromPasswordStore();
+ ScopedVector<autofill::PasswordForm> stored_forms;
+ stored_forms.push_back(new autofill::PasswordForm(test_local_form()));
+ test_form_manager->OnGetPasswordStoreResults(stored_forms.Pass());
+ EXPECT_EQ(1u, test_form_manager->best_matches().size());
+ EXPECT_EQ(test_local_form(),
+ *test_form_manager->best_matches().begin()->second);
+ return test_form_manager.Pass();
+}
+
+TEST_F(ManagePasswordsStateTest, DefaultState) {
+ EXPECT_THAT(passwords_data().GetCurrentForms(), IsEmpty());
+ EXPECT_THAT(passwords_data().federated_credentials_forms(), IsEmpty());
+ EXPECT_EQ(password_manager::ui::INACTIVE_STATE, passwords_data().state());
+ EXPECT_EQ(GURL::EmptyGURL(), passwords_data().origin());
+ EXPECT_FALSE(passwords_data().form_manager());
+}
+
+TEST_F(ManagePasswordsStateTest, PasswordSubmitted) {
+ scoped_ptr<password_manager::PasswordFormManager> test_form_manager(
+ CreateFormManager());
+ test_form_manager->ProvisionallySave(
+ test_submitted_form(),
+ password_manager::PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
+ passwords_data().OnPendingPassword(test_form_manager.Pass());
+
+ EXPECT_THAT(passwords_data().GetCurrentForms(),
+ ElementsAre(Pointee(test_local_form())));
+ EXPECT_THAT(passwords_data().federated_credentials_forms(), IsEmpty());
+ EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE,
+ passwords_data().state());
+ EXPECT_EQ(test_submitted_form().origin, passwords_data().origin());
+ ASSERT_TRUE(passwords_data().form_manager());
+ EXPECT_EQ(test_submitted_form(),
+ passwords_data().form_manager()->pending_credentials());
+}
+
+TEST_F(ManagePasswordsStateTest, PasswordSaved) {
+ scoped_ptr<password_manager::PasswordFormManager> test_form_manager(
+ CreateFormManager());
+ test_form_manager->ProvisionallySave(
+ test_submitted_form(),
+ password_manager::PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
+ passwords_data().OnPendingPassword(test_form_manager.Pass());
+ EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE,
+ passwords_data().state());
+
+ passwords_data().TransitionToState(password_manager::ui::MANAGE_STATE);
+ EXPECT_THAT(passwords_data().GetCurrentForms(),
+ ElementsAre(Pointee(test_local_form())));
+ EXPECT_THAT(passwords_data().federated_credentials_forms(), IsEmpty());
+ EXPECT_EQ(password_manager::ui::MANAGE_STATE,
+ passwords_data().state());
+ EXPECT_EQ(test_submitted_form().origin, passwords_data().origin());
+}
+
+TEST_F(ManagePasswordsStateTest, OnRequestCredentials) {
+ ScopedVector<autofill::PasswordForm> local_credentials;
+ local_credentials.push_back(new autofill::PasswordForm(test_local_form()));
+ ScopedVector<autofill::PasswordForm> federated_credentials;
+ federated_credentials.push_back(
+ new autofill::PasswordForm(test_federated_form()));
+ const GURL origin = test_local_form().origin;
+ passwords_data().OnRequestCredentials(local_credentials.Pass(),
+ federated_credentials.Pass(), origin);
+ passwords_data().set_credentials_callback(
+ base::Bind(&ManagePasswordsStateTest::OnChooseCredential,
+ base::Unretained(this)));
+ EXPECT_THAT(passwords_data().GetCurrentForms(),
+ ElementsAre(Pointee(test_local_form())));
+ EXPECT_THAT(passwords_data().federated_credentials_forms(),
+ ElementsAre(Pointee(test_federated_form())));
+ EXPECT_EQ(password_manager::ui::CREDENTIAL_REQUEST_STATE,
+ passwords_data().state());
+ EXPECT_EQ(origin, passwords_data().origin());
+
+ password_manager::CredentialInfo credential_info(
+ test_local_form(),
+ password_manager::CredentialType::CREDENTIAL_TYPE_LOCAL);
+ EXPECT_CALL(*this, OnChooseCredential(_))
+ .WillOnce(testing::SaveArg<0>(&credential_info));
+ passwords_data().TransitionToState(password_manager::ui::MANAGE_STATE);
+ EXPECT_EQ(password_manager::CredentialType::CREDENTIAL_TYPE_EMPTY,
+ credential_info.type);
+ EXPECT_TRUE(passwords_data().credentials_callback().is_null());
+ EXPECT_THAT(passwords_data().GetCurrentForms(),
+ ElementsAre(Pointee(test_local_form())));
+ EXPECT_THAT(passwords_data().federated_credentials_forms(),
+ ElementsAre(Pointee(test_federated_form())));
+ EXPECT_EQ(password_manager::ui::MANAGE_STATE, passwords_data().state());
+ EXPECT_EQ(origin, passwords_data().origin());
+}
+
+TEST_F(ManagePasswordsStateTest, AutoSignin) {
+ ScopedVector<autofill::PasswordForm> local_credentials;
+ local_credentials.push_back(new autofill::PasswordForm(test_local_form()));
+ passwords_data().OnAutoSignin(local_credentials.Pass());
+ EXPECT_THAT(passwords_data().GetCurrentForms(),
+ ElementsAre(Pointee(test_local_form())));
+ EXPECT_THAT(passwords_data().federated_credentials_forms(), IsEmpty());
+ EXPECT_EQ(password_manager::ui::AUTO_SIGNIN_STATE, passwords_data().state());
+ EXPECT_EQ(test_local_form().origin, passwords_data().origin());
+
+ passwords_data().TransitionToState(password_manager::ui::MANAGE_STATE);
+ EXPECT_THAT(passwords_data().GetCurrentForms(),
+ ElementsAre(Pointee(test_local_form())));
+ EXPECT_THAT(passwords_data().federated_credentials_forms(), IsEmpty());
+ EXPECT_EQ(password_manager::ui::MANAGE_STATE, passwords_data().state());
+ EXPECT_EQ(test_local_form().origin, passwords_data().origin());
+}
+
+TEST_F(ManagePasswordsStateTest, AutomaticPasswordSave) {
+ scoped_ptr<password_manager::PasswordFormManager> test_form_manager(
+ CreateFormManager());
+ test_form_manager->ProvisionallySave(
+ test_submitted_form(),
+ password_manager::PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
+
+ passwords_data().OnAutomaticPasswordSave(test_form_manager.Pass());
+ EXPECT_EQ(password_manager::ui::CONFIRMATION_STATE, passwords_data().state());
+ EXPECT_EQ(test_submitted_form().origin, passwords_data().origin());
+ ASSERT_TRUE(passwords_data().form_manager());
+ EXPECT_EQ(test_submitted_form(),
+ passwords_data().form_manager()->pending_credentials());
+
+ passwords_data().TransitionToState(password_manager::ui::MANAGE_STATE);
+ EXPECT_THAT(passwords_data().GetCurrentForms(),
+ UnorderedElementsAre(Pointee(test_local_form()),
+ Pointee(test_submitted_form())));
+ EXPECT_THAT(passwords_data().federated_credentials_forms(), IsEmpty());
+ EXPECT_EQ(password_manager::ui::MANAGE_STATE, passwords_data().state());
+ EXPECT_EQ(test_submitted_form().origin, passwords_data().origin());
+}
+
+TEST_F(ManagePasswordsStateTest, PasswordBlacklisted) {
+ scoped_ptr<password_manager::PasswordFormManager> test_form_manager(
+ CreateFormManager());
+ test_form_manager->ProvisionallySave(
+ test_submitted_form(),
+ password_manager::PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
+ passwords_data().OnPendingPassword(test_form_manager.Pass());
+ passwords_data().TransitionToState(password_manager::ui::BLACKLIST_STATE);
+ EXPECT_THAT(passwords_data().GetCurrentForms(),
+ ElementsAre(Pointee(test_local_form())));
+ EXPECT_THAT(passwords_data().federated_credentials_forms(), IsEmpty());
+ EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, passwords_data().state());
+ EXPECT_EQ(test_submitted_form().origin, passwords_data().origin());
+}
+
+TEST_F(ManagePasswordsStateTest, PasswordAutofilled) {
+ autofill::PasswordFormMap password_form_map;
+ password_form_map[test_local_form().username_value] = &test_local_form();
+ passwords_data().OnPasswordAutofilled(password_form_map);
+
+ EXPECT_THAT(passwords_data().GetCurrentForms(),
+ ElementsAre(Pointee(test_local_form())));
+ EXPECT_THAT(passwords_data().federated_credentials_forms(), IsEmpty());
+ EXPECT_EQ(password_manager::ui::MANAGE_STATE, passwords_data().state());
+ EXPECT_EQ(test_local_form().origin, passwords_data().origin());
+
+ // |passwords_data| should hold a separate copy of test_local_form().
+ EXPECT_THAT(passwords_data().GetCurrentForms(),
+ Not(Contains(&test_local_form())));
+}
+
+TEST_F(ManagePasswordsStateTest, InactiveOnPSLMatched) {
+ autofill::PasswordForm psl_matched_test_form = test_local_form();
+ psl_matched_test_form.original_signon_realm = "http://pslmatched.example.com";
+ autofill::PasswordFormMap password_form_map;
+ password_form_map[psl_matched_test_form.username_value] =
+ &psl_matched_test_form;
+ passwords_data().OnPasswordAutofilled(password_form_map);
+
+ EXPECT_THAT(passwords_data().GetCurrentForms(), IsEmpty());
+ EXPECT_THAT(passwords_data().federated_credentials_forms(), IsEmpty());
+ EXPECT_EQ(password_manager::ui::INACTIVE_STATE, passwords_data().state());
+ EXPECT_EQ(GURL::EmptyGURL(), passwords_data().origin());
+ EXPECT_FALSE(passwords_data().form_manager());
+}
+
+TEST_F(ManagePasswordsStateTest, BlacklistBlockedAutofill) {
+ test_local_form().blacklisted_by_user = true;
+ autofill::PasswordFormMap password_form_map;
+ password_form_map[test_local_form().username_value] = &test_local_form();
+ passwords_data().OnBlacklistBlockedAutofill(password_form_map);
+
+ EXPECT_THAT(passwords_data().GetCurrentForms(),
+ ElementsAre(Pointee(test_local_form())));
+ EXPECT_THAT(passwords_data().federated_credentials_forms(), IsEmpty());
+ EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, passwords_data().state());
+ EXPECT_EQ(test_local_form().origin, passwords_data().origin());
+
+ // |passwords_data| should hold a separate copy of test_local_form().
+ EXPECT_THAT(passwords_data().GetCurrentForms(),
+ Not(Contains(&test_local_form())));
+}
+
+TEST_F(ManagePasswordsStateTest, Unblacklist) {
+ autofill::PasswordFormMap password_form_map;
+ password_form_map[test_local_form().username_value] = &test_local_form();
+ passwords_data().OnBlacklistBlockedAutofill(password_form_map);
+ EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, passwords_data().state());
+ passwords_data().TransitionToState(password_manager::ui::MANAGE_STATE);
+
+ EXPECT_THAT(passwords_data().GetCurrentForms(),
+ ElementsAre(Pointee(test_local_form())));
+ EXPECT_THAT(passwords_data().federated_credentials_forms(), IsEmpty());
+ EXPECT_EQ(password_manager::ui::MANAGE_STATE, passwords_data().state());
+ EXPECT_EQ(test_local_form().origin, passwords_data().origin());
+}
+
+TEST_F(ManagePasswordsStateTest, OnInactive) {
+ scoped_ptr<password_manager::PasswordFormManager> test_form_manager(
+ CreateFormManager());
+ test_form_manager->ProvisionallySave(
+ test_submitted_form(),
+ password_manager::PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
+ passwords_data().OnPendingPassword(test_form_manager.Pass());
+ EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE,
+ passwords_data().state());
+ passwords_data().OnInactive();
+ EXPECT_THAT(passwords_data().GetCurrentForms(), IsEmpty());
+ EXPECT_THAT(passwords_data().federated_credentials_forms(), IsEmpty());
+ EXPECT_EQ(password_manager::ui::INACTIVE_STATE, passwords_data().state());
+ EXPECT_EQ(GURL::EmptyGURL(), passwords_data().origin());
+ EXPECT_FALSE(passwords_data().form_manager());
+}
+
+TEST_F(ManagePasswordsStateTest, BackgroundAutofilledToBlacklisted) {
+ autofill::PasswordFormMap password_form_map;
+ password_form_map[test_local_form().username_value] = &test_local_form();
+ passwords_data().OnPasswordAutofilled(password_form_map);
+ EXPECT_EQ(password_manager::ui::MANAGE_STATE, passwords_data().state());
+
+ autofill::PasswordForm blacklisted = test_local_form();
+ blacklisted.blacklisted_by_user = true;
+ blacklisted.username_value = base::string16();
vabr (Chromium) 2015/03/10 12:26:22 optional nit: Calling clear() is shorter and might
+ password_manager::PasswordStoreChange change(
+ password_manager::PasswordStoreChange::ADD, blacklisted);
+ password_manager::PasswordStoreChangeList list(1, change);
+ passwords_data().ProcessLoginsChanged(list);
+ EXPECT_THAT(passwords_data().GetCurrentForms(),
+ UnorderedElementsAre(Pointee(test_local_form()),
+ Pointee(blacklisted)));
+ EXPECT_THAT(passwords_data().federated_credentials_forms(), IsEmpty());
+ EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, passwords_data().state());
+ EXPECT_EQ(test_local_form().origin, passwords_data().origin());
+}
+
+} // namespace

Powered by Google App Engine
This is Rietveld 408576698