| 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..e950162ea2ca010513dbec5ba328b11483887f7c 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,71 @@ 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 pending_structure(saved_match()->form_data);
|
| + expected_login_signature = pending_structure.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
|
|
|