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 56cc1987c86312a07be5f7d807f161ee032fedb0..93be2f0d29bd2872e3c8e091c9c77164095a890b 100644 |
--- a/components/password_manager/core/browser/password_form_manager_unittest.cc |
+++ b/components/password_manager/core/browser/password_form_manager_unittest.cc |
@@ -2710,4 +2710,70 @@ TEST_F(PasswordFormManagerTest, |
EXPECT_TRUE(form_manager()->pending_credentials().new_password_value.empty()); |
} |
+TEST_F(PasswordFormManagerTest, |
+ TestUploadVotesForPasswordChangeFormsWithTwoFields) { |
+ // Turn |observed_form_| into change password form with only 2 fields: an old |
+ // password and a new password. |
+ observed_form()->username_element.clear(); |
+ observed_form()->new_password_element = ASCIIToUTF16("NewPasswd"); |
+ autofill::FormFieldData field; |
+ field.label = ASCIIToUTF16("password"); |
+ field.name = ASCIIToUTF16("Passwd"); |
+ field.form_control_type = "password"; |
+ observed_form()->form_data.fields.push_back(field); |
+ |
+ field.label = ASCIIToUTF16("new password"); |
+ field.name = ASCIIToUTF16("NewPasswd"); |
+ observed_form()->form_data.fields.push_back(field); |
+ |
+ client()->set_is_update_password_ui_enabled(true); |
+ PasswordFormManager form_manager(password_manager(), client(), |
+ client()->driver(), *observed_form(), false); |
+ |
+ SimulateMatchingPhase(&form_manager, RESULT_SAVED_MATCH); |
+ |
+ // User submits current and new credentials to the observed form. |
+ PasswordForm submitted_form(*observed_form()); |
+ submitted_form.password_value = saved_match()->password_value; |
+ submitted_form.new_password_value = ASCIIToUTF16("test2"); |
+ submitted_form.preferred = true; |
+ form_manager.ProvisionallySave( |
+ submitted_form, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); |
+ |
+ // Successful login. The PasswordManager would instruct PasswordFormManager |
+ // to update. |
+ EXPECT_FALSE(form_manager.IsNewLogin()); |
+ EXPECT_TRUE(form_manager.is_possible_change_password_form_without_username()); |
+ |
+ // By now, the PasswordFormManager should have promoted the new password |
+ // value already to be the current password, and should no longer maintain |
+ // any info about the new password value. |
+ EXPECT_EQ(submitted_form.new_password_value, |
+ form_manager.pending_credentials().password_value); |
+ EXPECT_TRUE(form_manager.pending_credentials().new_password_value.empty()); |
+ |
+ std::map<base::string16, autofill::ServerFieldType> expected_types; |
+ expected_types[observed_form()->password_element] = autofill::PASSWORD; |
+ expected_types[observed_form()->new_password_element] = |
+ autofill::NEW_PASSWORD; |
+ |
+ autofill::ServerFieldTypeSet expected_available_field_types; |
+ expected_available_field_types.insert(autofill::PASSWORD); |
+ expected_available_field_types.insert(autofill::NEW_PASSWORD); |
+ |
+ std::string observed_form_signature = |
+ autofill::FormStructure(observed_form()->form_data).FormSignature(); |
+ |
+ std::string expected_login_signature = |
+ autofill::FormStructure(saved_match()->form_data).FormSignature(); |
+ |
+ EXPECT_CALL(*client()->mock_driver()->mock_autofill_download_manager(), |
+ StartUploadRequest(CheckUploadFormStructure( |
+ observed_form_signature, expected_types), |
+ false, expected_available_field_types, |
+ expected_login_signature, true)); |
+ |
+ form_manager.Update(*saved_match()); |
+} |
+ |
} // namespace password_manager |