| Index: components/password_manager/core/browser/password_manager_unittest.cc
|
| diff --git a/components/password_manager/core/browser/password_manager_unittest.cc b/components/password_manager/core/browser/password_manager_unittest.cc
|
| index 8cb257c6659c19c298fe301e46b1c88a6444c35e..5e41e89f3e9fb5301aa5b15113e1cf053b5cb151 100644
|
| --- a/components/password_manager/core/browser/password_manager_unittest.cc
|
| +++ b/components/password_manager/core/browser/password_manager_unittest.cc
|
| @@ -1266,6 +1266,73 @@ TEST_F(PasswordManagerTest, PasswordGenerationUsernameChanged) {
|
| EXPECT_EQ(form.new_password_value, form_to_save.password_value);
|
| }
|
|
|
| +TEST_F(PasswordManagerTest, PasswordGenerationPresavePassword) {
|
| + std::vector<PasswordForm> observed;
|
| + PasswordForm form(MakeFormWithOnlyNewPasswordField());
|
| + observed.push_back(form);
|
| + EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage())
|
| + .WillRepeatedly(Return(true));
|
| + EXPECT_CALL(*store_, GetLogins(_, _))
|
| + .WillRepeatedly(WithArg<1>(InvokeEmptyConsumerWithForms()));
|
| + manager()->OnPasswordFormsParsed(&driver_, observed);
|
| + manager()->OnPasswordFormsRendered(&driver_, observed, true);
|
| +
|
| + // The user accepts a generated password.
|
| + form.password_value = base::ASCIIToUTF16("password");
|
| + EXPECT_CALL(*store_, AddLogin(form)).WillOnce(Return());
|
| + manager()->OnPresaveGeneratedPassword(form);
|
| + manager()->SetHasGeneratedPasswordForForm(&driver_, form, true);
|
| +
|
| + // The user updates the generated password.
|
| + PasswordForm updated_form(form);
|
| + updated_form.password_value = base::ASCIIToUTF16("password_12345");
|
| + EXPECT_CALL(*store_, UpdateLoginWithPrimaryKey(updated_form, form))
|
| + .WillOnce(Return());
|
| + manager()->OnUpdatePresavedPassword(updated_form);
|
| +
|
| + // The user removes the generated password.
|
| + EXPECT_CALL(*store_, RemoveLogin(updated_form)).WillOnce(Return());
|
| + manager()->SetHasGeneratedPasswordForForm(&driver_, updated_form, false);
|
| +}
|
| +
|
| +TEST_F(PasswordManagerTest, PasswordGenerationPresavePasswordAndLogin) {
|
| + EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage())
|
| + .WillRepeatedly(Return(true));
|
| + const bool kFalseTrue[] = {false, true};
|
| + for (bool foundMatchedLoginsInStore : kFalseTrue) {
|
| + SCOPED_TRACE(testing::Message("foundMatchedLoginsInStore = ")
|
| + << foundMatchedLoginsInStore);
|
| + std::vector<PasswordForm> observed;
|
| + PasswordForm form(MakeFormWithOnlyNewPasswordField());
|
| + observed.push_back(form);
|
| + if (foundMatchedLoginsInStore) {
|
| + EXPECT_CALL(*store_, GetLogins(_, _))
|
| + .WillRepeatedly(WithArg<1>(InvokeConsumer(form)));
|
| + EXPECT_CALL(driver_, FillPasswordForm(_)).Times(2);
|
| + EXPECT_CALL(client_, NotifySuccessfulLoginWithExistingPassword(_))
|
| + .Times(1);
|
| + } else {
|
| + EXPECT_CALL(*store_, GetLogins(_, _))
|
| + .WillRepeatedly(WithArg<1>(InvokeEmptyConsumerWithForms()));
|
| + }
|
| + EXPECT_CALL(client_, PromptUserToSaveOrUpdatePasswordPtr(_, _)).Times(0);
|
| + EXPECT_CALL(client_, AutomaticPasswordSaveIndicator()).Times(1);
|
| + manager()->OnPasswordFormsParsed(&driver_, observed);
|
| + manager()->OnPasswordFormsRendered(&driver_, observed, true);
|
| +
|
| + // The user accepts generated password and makes successful login.
|
| + EXPECT_CALL(*store_, AddLogin(form)).WillOnce(Return());
|
| + EXPECT_CALL(*store_, UpdateLoginWithPrimaryKey(_, form)).WillOnce(Return());
|
| + manager()->OnPresaveGeneratedPassword(form);
|
| + manager()->SetHasGeneratedPasswordForForm(&driver_, form, true);
|
| +
|
| + OnPasswordFormSubmitted(form);
|
| + observed.clear();
|
| + manager()->OnPasswordFormsParsed(&driver_, observed);
|
| + manager()->OnPasswordFormsRendered(&driver_, observed, true);
|
| + }
|
| +}
|
| +
|
| TEST_F(PasswordManagerTest, ForceSavingPasswords) {
|
| // Add the enable-password-force-saving feature.
|
| base::FeatureList::ClearInstanceForTesting();
|
|
|