Index: components/password_manager/core/browser/password_form_manager_unittest.cc |
diff --git a/components/password_manager/core/browser/password_form_manager_unittest.cc b/components/password_manager/core/browser/password_form_manager_unittest.cc |
index b4fdaa6755b05886771daccabeea0ffe93c7d971..d057f1f099ad6c1a7300a86c79a78f62b59f13a3 100644 |
--- a/components/password_manager/core/browser/password_form_manager_unittest.cc |
+++ b/components/password_manager/core/browser/password_form_manager_unittest.cc |
@@ -54,6 +54,10 @@ ACTION_P4(InvokeConsumer, form1, form2, form3, form4) { |
arg0->OnGetPasswordStoreResults(result.Pass()); |
} |
+MATCHER_P(CheckUsername, username_value, "Username incorrect") { |
+ return arg.username_value == username_value; |
+} |
+ |
void RunAllPendingTasks() { |
base::RunLoop run_loop; |
base::ThreadTaskRunnerHandle::Get()->PostTask( |
@@ -1750,4 +1754,175 @@ TEST_F(PasswordFormManagerTest, WipeStoreCopyIfOutdated_Outdated) { |
1); |
} |
+TEST_F(PasswordFormManagerTest, RemoveNoUsernameAccounts) { |
+ TestPasswordManagerClient client_with_store(mock_store()); |
+ TestPasswordManager password_manager(&client_with_store); |
+ PasswordFormManager form_manager(&password_manager, &client_with_store, |
+ client_with_store.driver(), *observed_form(), |
+ false); |
+ |
+ PasswordForm saved_form = *saved_match(); |
+ saved_form.username_value.clear(); |
+ ScopedVector<PasswordForm> result; |
+ result.push_back(new PasswordForm(saved_form)); |
+ form_manager.SimulateFetchMatchingLoginsFromPasswordStore(); |
+ form_manager.OnGetPasswordStoreResults(result.Pass()); |
+ |
+ PasswordForm submitted_form(*observed_form()); |
+ submitted_form.preferred = true; |
+ submitted_form.username_value = saved_match()->username_value; |
+ submitted_form.password_value = saved_match()->password_value; |
+ |
+ saved_form.preferred = false; |
+ EXPECT_CALL(*mock_store(), |
+ AddLogin(CheckUsername(saved_match()->username_value))); |
+ EXPECT_CALL(*mock_store(), RemoveLogin(saved_form)); |
+ |
+ form_manager.ProvisionallySave( |
+ submitted_form, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); |
+ form_manager.Save(); |
+} |
+ |
+TEST_F(PasswordFormManagerTest, NotRemovePSLNoUsernameAccounts) { |
+ TestPasswordManagerClient client_with_store(mock_store()); |
+ TestPasswordManager password_manager(&client_with_store); |
+ PasswordFormManager form_manager(&password_manager, &client_with_store, |
+ client_with_store.driver(), *observed_form(), |
+ false); |
+ |
+ PasswordForm saved_form = *saved_match(); |
+ saved_form.username_value.clear(); |
+ saved_form.original_signon_realm = "www.example.org"; |
+ ScopedVector<PasswordForm> result; |
+ result.push_back(new PasswordForm(saved_form)); |
+ form_manager.SimulateFetchMatchingLoginsFromPasswordStore(); |
+ form_manager.OnGetPasswordStoreResults(result.Pass()); |
+ |
+ PasswordForm submitted_form(*observed_form()); |
+ submitted_form.preferred = true; |
+ submitted_form.username_value = saved_match()->username_value; |
+ submitted_form.password_value = saved_match()->password_value; |
+ |
+ EXPECT_CALL(*mock_store(), |
+ AddLogin(CheckUsername(saved_match()->username_value))); |
+ EXPECT_CALL(*mock_store(), RemoveLogin(_)).Times(0); |
+ |
+ form_manager.ProvisionallySave( |
+ submitted_form, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); |
+ form_manager.Save(); |
+} |
+ |
+TEST_F(PasswordFormManagerTest, NotRemoveCredentialsWithUsername) { |
+ TestPasswordManagerClient client_with_store(mock_store()); |
+ TestPasswordManager password_manager(&client_with_store); |
+ PasswordFormManager form_manager(&password_manager, &client_with_store, |
+ client_with_store.driver(), *observed_form(), |
+ false); |
+ |
+ PasswordForm saved_form = *saved_match(); |
+ ASSERT_FALSE(saved_form.username_value.empty()); |
+ ScopedVector<PasswordForm> result; |
+ result.push_back(new PasswordForm(saved_form)); |
+ form_manager.SimulateFetchMatchingLoginsFromPasswordStore(); |
+ form_manager.OnGetPasswordStoreResults(result.Pass()); |
+ |
+ PasswordForm submitted_form(*observed_form()); |
+ submitted_form.preferred = true; |
+ base::string16 username = saved_form.username_value + ASCIIToUTF16("1"); |
+ submitted_form.username_value = username; |
+ submitted_form.password_value = saved_match()->password_value; |
+ |
+ EXPECT_CALL(*mock_store(), AddLogin(CheckUsername(username))); |
+ EXPECT_CALL(*mock_store(), RemoveLogin(_)).Times(0); |
+ |
+ form_manager.ProvisionallySave( |
+ submitted_form, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); |
+ form_manager.Save(); |
+} |
+ |
+TEST_F(PasswordFormManagerTest, NotRemoveCredentialsWithDiferrentPassword) { |
+ TestPasswordManagerClient client_with_store(mock_store()); |
+ TestPasswordManager password_manager(&client_with_store); |
+ PasswordFormManager form_manager(&password_manager, &client_with_store, |
+ client_with_store.driver(), *observed_form(), |
+ false); |
+ |
+ PasswordForm saved_form = *saved_match(); |
+ saved_form.username_value.clear(); |
+ ScopedVector<PasswordForm> result; |
+ result.push_back(new PasswordForm(saved_form)); |
+ form_manager.SimulateFetchMatchingLoginsFromPasswordStore(); |
+ form_manager.OnGetPasswordStoreResults(result.Pass()); |
+ |
+ PasswordForm submitted_form(*observed_form()); |
+ submitted_form.preferred = true; |
+ submitted_form.username_value = saved_match()->username_value; |
+ submitted_form.password_value = saved_form.password_value + ASCIIToUTF16("1"); |
+ |
+ EXPECT_CALL(*mock_store(), |
+ AddLogin(CheckUsername(saved_match()->username_value))); |
+ EXPECT_CALL(*mock_store(), RemoveLogin(_)).Times(0); |
+ |
+ form_manager.ProvisionallySave( |
+ submitted_form, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); |
+ form_manager.Save(); |
+} |
+ |
+TEST_F(PasswordFormManagerTest, SaveNoUsernameEvenIfWithUsernamePresent) { |
+ TestPasswordManagerClient client_with_store(mock_store()); |
+ TestPasswordManager password_manager(&client_with_store); |
+ PasswordFormManager form_manager(&password_manager, &client_with_store, |
+ client_with_store.driver(), *observed_form(), |
+ false); |
+ |
+ PasswordForm* saved_form = saved_match(); |
+ ASSERT_FALSE(saved_match()->username_value.empty()); |
+ ScopedVector<PasswordForm> result; |
+ result.push_back(new PasswordForm(*saved_form)); |
+ form_manager.SimulateFetchMatchingLoginsFromPasswordStore(); |
+ form_manager.OnGetPasswordStoreResults(result.Pass()); |
+ |
+ PasswordForm submitted_form(*observed_form()); |
+ submitted_form.preferred = true; |
+ submitted_form.username_value.clear(); |
+ |
+ EXPECT_CALL(*mock_store(), AddLogin(CheckUsername(base::string16()))); |
+ EXPECT_CALL(*mock_store(), RemoveLogin(_)).Times(0); |
+ |
+ form_manager.ProvisionallySave( |
+ submitted_form, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); |
+ form_manager.Save(); |
+} |
+ |
+TEST_F(PasswordFormManagerTest, NotRemoveOnUpdate) { |
+ TestPasswordManagerClient client_with_store(mock_store()); |
+ TestPasswordManager password_manager(&client_with_store); |
+ PasswordFormManager form_manager(&password_manager, &client_with_store, |
+ client_with_store.driver(), *observed_form(), |
+ false); |
+ |
+ ScopedVector<PasswordForm> result; |
+ PasswordForm saved_form = *saved_match(); |
+ ASSERT_FALSE(saved_form.username_value.empty()); |
+ result.push_back(new PasswordForm(saved_form)); |
+ saved_form.username_value.clear(); |
+ saved_form.preferred = false; |
+ result.push_back(new PasswordForm(saved_form)); |
+ form_manager.SimulateFetchMatchingLoginsFromPasswordStore(); |
+ form_manager.OnGetPasswordStoreResults(result.Pass()); |
+ |
+ PasswordForm submitted_form(*observed_form()); |
+ submitted_form.preferred = true; |
+ submitted_form.username_value = saved_match()->username_value; |
+ submitted_form.password_value = saved_form.password_value + ASCIIToUTF16("1"); |
+ |
+ EXPECT_CALL(*mock_store(), |
+ UpdateLogin(CheckUsername(saved_match()->username_value))); |
+ EXPECT_CALL(*mock_store(), RemoveLogin(_)).Times(0); |
+ |
+ form_manager.ProvisionallySave( |
+ submitted_form, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); |
+ form_manager.Save(); |
+} |
+ |
} // namespace password_manager |