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 5878dc5d5848995b1a6d61f0a3767b99be51a6bf..a3f89818116dd133acebb4971f5b3905b1fa5548 100644 |
--- a/components/password_manager/core/browser/password_form_manager_unittest.cc |
+++ b/components/password_manager/core/browser/password_form_manager_unittest.cc |
@@ -423,6 +423,7 @@ TEST_F(PasswordFormManagerTest, TestNewLoginFromNewPasswordElement) { |
// Add a new password field to the test form. The PasswordFormManager should |
// save the password from this field, instead of the current password field. |
observed_form()->new_password_element = ASCIIToUTF16("NewPasswd"); |
+ observed_form()->username_marked_by_site = true; |
PasswordFormManager manager(NULL, client(), kNoDriver, *observed_form(), |
false); |
@@ -1373,4 +1374,68 @@ TEST_F(PasswordFormManagerTest, PreferredMatchIsUpToDate) { |
PasswordForm dummy(*form_manager.preferred_match()); |
} |
+TEST_F(PasswordFormManagerTest, |
+ IsIngnorableChangePasswordForm_MatchingUsernameAndPassword) { |
+ observed_form()->new_password_element = |
+ base::ASCIIToUTF16("new_password_field"); |
+ |
+ TestPasswordManagerClient client_with_store(mock_store()); |
+ PasswordFormManager manager(nullptr, &client_with_store, |
+ client_with_store.driver(), *observed_form(), |
+ false); |
+ SimulateMatchingPhase(&manager, RESULT_MATCH_FOUND); |
+ |
+ // The user submits a password on a change-password form, which does not use |
+ // the "autocomplete=username" mark-up (therefore Chrome had to guess what is |
+ // the username), but the user-typed credentials match something already |
+ // stored (which confirms that the guess was right). |
+ PasswordForm credentials(*observed_form()); |
+ credentials.username_value = saved_match()->username_value; |
+ credentials.password_value = saved_match()->password_value; |
+ credentials.new_password_value = ASCIIToUTF16("NewPassword"); |
+ |
+ EXPECT_FALSE(manager.IsIgnorableChangePasswordForm( |
+ credentials.username_value, credentials.password_value)); |
+} |
+ |
+TEST_F(PasswordFormManagerTest, |
+ IsIngnorableChangePasswordForm_NotMatchingPassword) { |
+ observed_form()->new_password_element = |
+ base::ASCIIToUTF16("new_password_field"); |
+ |
+ TestPasswordManagerClient client_with_store(mock_store()); |
+ PasswordFormManager manager(nullptr, &client_with_store, |
+ client_with_store.driver(), *observed_form(), |
+ false); |
+ SimulateMatchingPhase(&manager, RESULT_MATCH_FOUND); |
+ |
+ // The user submits a password on a change-password form, which does not use |
+ // the "autocomplete=username" mark-up (therefore Chrome had to guess what is |
+ // the username), and the user-typed password do not match anything already |
+ // stored. There is not much confidence in the guess being right, so the |
+ // password should not be stored. |
+ EXPECT_TRUE(manager.IsIgnorableChangePasswordForm( |
+ saved_match()->username_value, ASCIIToUTF16("DifferentPassword"))); |
+} |
+ |
+TEST_F(PasswordFormManagerTest, |
+ IsIngnorableChangePasswordForm_NotMatchingUsername) { |
+ observed_form()->new_password_element = |
+ base::ASCIIToUTF16("new_password_field"); |
+ |
+ TestPasswordManagerClient client_with_store(mock_store()); |
+ PasswordFormManager manager(nullptr, &client_with_store, |
+ client_with_store.driver(), *observed_form(), |
+ false); |
+ SimulateMatchingPhase(&manager, RESULT_MATCH_FOUND); |
+ |
+ // The user submits a password on a change-password form, which does not use |
+ // the "autocomplete=username" mark-up (therefore Chrome had to guess what is |
+ // the username), and the user-typed username does not match anything already |
+ // stored. There is not much confidence in the guess being right, so the |
+ // password should not be stored. |
+ EXPECT_TRUE(manager.IsIgnorableChangePasswordForm( |
+ ASCIIToUTF16("DifferentUsername"), saved_match()->password_value)); |
+} |
+ |
} // namespace password_manager |