| 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 d0895e8c8b57054d7f483067314842dc94073955..3fcca5a34b3b1b509b9b9640d9a6adf864f444df 100644
|
| --- a/components/password_manager/core/browser/password_manager_unittest.cc
|
| +++ b/components/password_manager/core/browser/password_manager_unittest.cc
|
| @@ -14,6 +14,7 @@
|
| #include "base/message_loop/message_loop.h"
|
| #include "base/strings/string_util.h"
|
| #include "base/strings/utf_string_conversions.h"
|
| +#include "base/test/histogram_tester.h"
|
| #include "base/test/scoped_feature_list.h"
|
| #include "components/password_manager/core/browser/form_fetcher_impl.h"
|
| #include "components/password_manager/core/browser/mock_password_store.h"
|
| @@ -306,7 +307,8 @@ TEST_F(PasswordManagerTest, GeneratedPasswordFormSubmitEmptyStore) {
|
| // Simulate the user generating the password and submitting the form.
|
| EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage())
|
| .WillRepeatedly(Return(true));
|
| - manager()->SetHasGeneratedPasswordForForm(&driver_, form, true);
|
| + EXPECT_CALL(*store_, AddLogin(_));
|
| + manager()->OnPresaveGeneratedPassword(form);
|
| OnPasswordFormSubmitted(form);
|
|
|
| // The user should not need to confirm saving as they have already given
|
| @@ -315,7 +317,8 @@ TEST_F(PasswordManagerTest, GeneratedPasswordFormSubmitEmptyStore) {
|
| // occured.
|
| EXPECT_CALL(client_, PromptUserToSaveOrUpdatePasswordPtr(_)).Times(0);
|
| PasswordForm form_to_save;
|
| - EXPECT_CALL(*store_, AddLogin(_)).WillOnce(SaveArg<0>(&form_to_save));
|
| + EXPECT_CALL(*store_, UpdateLoginWithPrimaryKey(_, _))
|
| + .WillOnce(SaveArg<0>(&form_to_save));
|
| EXPECT_CALL(client_, AutomaticPasswordSaveIndicator());
|
|
|
| // Now the password manager waits for the navigation to complete.
|
| @@ -1219,7 +1222,8 @@ TEST_F(PasswordManagerTest, PasswordGeneration_FailedSubmission) {
|
|
|
| EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage())
|
| .WillRepeatedly(Return(true));
|
| - manager()->SetHasGeneratedPasswordForForm(&driver_, form, true);
|
| + EXPECT_CALL(*store_, AddLogin(_));
|
| + manager()->OnPresaveGeneratedPassword(form);
|
|
|
| // Do not save generated password when the password form reappears.
|
| EXPECT_CALL(client_, PromptUserToSaveOrUpdatePasswordPtr(_)).Times(0);
|
| @@ -1246,7 +1250,8 @@ TEST_F(PasswordManagerTest, PasswordGenerationPasswordEdited_FailedSubmission) {
|
|
|
| EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage())
|
| .WillRepeatedly(Return(true));
|
| - manager()->SetHasGeneratedPasswordForForm(&driver_, form, true);
|
| + EXPECT_CALL(*store_, AddLogin(_));
|
| + manager()->OnPresaveGeneratedPassword(form);
|
|
|
| // Simulate user editing and submitting a different password. Verify that
|
| // the edited password is the one that is saved.
|
| @@ -1279,11 +1284,13 @@ TEST_F(PasswordManagerTest,
|
|
|
| EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage())
|
| .WillRepeatedly(Return(true));
|
| - manager()->SetHasGeneratedPasswordForForm(&driver_, form, true);
|
| + EXPECT_CALL(*store_, AddLogin(_));
|
| + manager()->OnPresaveGeneratedPassword(form);
|
|
|
| // Simulate user removing generated password and adding a new one.
|
| form.new_password_value = ASCIIToUTF16("different_password");
|
| - manager()->SetHasGeneratedPasswordForForm(&driver_, form, false);
|
| + EXPECT_CALL(*store_, RemoveLogin(_));
|
| + manager()->OnPasswordNoLongerGenerated(form);
|
|
|
| OnPasswordFormSubmitted(form);
|
|
|
| @@ -1311,11 +1318,13 @@ TEST_F(PasswordManagerTest,
|
|
|
| EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage())
|
| .WillRepeatedly(Return(true));
|
| - manager()->SetHasGeneratedPasswordForForm(&driver_, form, true);
|
| + EXPECT_CALL(*store_, AddLogin(_));
|
| + manager()->OnPresaveGeneratedPassword(form);
|
|
|
| // Simulate user removing generated password and adding a new one.
|
| form.new_password_value = ASCIIToUTF16("different_password");
|
| - manager()->SetHasGeneratedPasswordForForm(&driver_, form, false);
|
| + EXPECT_CALL(*store_, RemoveLogin(_));
|
| + manager()->OnPasswordNoLongerGenerated(form);
|
|
|
| OnPasswordFormSubmitted(form);
|
|
|
| @@ -1342,7 +1351,8 @@ TEST_F(PasswordManagerTest, PasswordGenerationUsernameChanged) {
|
|
|
| EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage())
|
| .WillRepeatedly(Return(true));
|
| - manager()->SetHasGeneratedPasswordForForm(&driver_, form, true);
|
| + EXPECT_CALL(*store_, AddLogin(_));
|
| + manager()->OnPresaveGeneratedPassword(form);
|
|
|
| // Simulate user changing the password and username, without ever completely
|
| // deleting the password.
|
| @@ -1352,7 +1362,8 @@ TEST_F(PasswordManagerTest, PasswordGenerationUsernameChanged) {
|
|
|
| EXPECT_CALL(client_, PromptUserToSaveOrUpdatePasswordPtr(_)).Times(0);
|
| PasswordForm form_to_save;
|
| - EXPECT_CALL(*store_, AddLogin(_)).WillOnce(SaveArg<0>(&form_to_save));
|
| + EXPECT_CALL(*store_, UpdateLoginWithPrimaryKey(_, _))
|
| + .WillOnce(SaveArg<0>(&form_to_save));
|
| EXPECT_CALL(client_, AutomaticPasswordSaveIndicator());
|
|
|
| observed.clear();
|
| @@ -1375,11 +1386,12 @@ TEST_F(PasswordManagerTest, PasswordGenerationPresavePassword) {
|
| manager()->OnPasswordFormsParsed(&driver_, observed);
|
| manager()->OnPasswordFormsRendered(&driver_, observed, true);
|
|
|
| + base::HistogramTester histogram_tester;
|
| +
|
| // 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);
|
| @@ -1387,10 +1399,36 @@ TEST_F(PasswordManagerTest, PasswordGenerationPresavePassword) {
|
| EXPECT_CALL(*store_, UpdateLoginWithPrimaryKey(updated_form, form))
|
| .WillOnce(Return());
|
| manager()->OnPresaveGeneratedPassword(updated_form);
|
| + histogram_tester.ExpectUniqueSample(
|
| + "PasswordManager.GeneratedFormHasNoFormManager", false, 2);
|
|
|
| // The user removes the generated password.
|
| EXPECT_CALL(*store_, RemoveLogin(updated_form)).WillOnce(Return());
|
| - manager()->SetHasGeneratedPasswordForForm(&driver_, updated_form, false);
|
| + manager()->OnPasswordNoLongerGenerated(updated_form);
|
| +}
|
| +
|
| +TEST_F(PasswordManagerTest, PasswordGenerationPresavePassword_NoFormManager) {
|
| + // Checks that GeneratedFormHasNoFormManager metric is sent if there is no
|
| + // corresponding PasswordFormManager for the given form. It should be uncommon
|
| + // case.
|
| + std::vector<PasswordForm> observed;
|
| + EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage())
|
| + .WillRepeatedly(Return(true));
|
| + EXPECT_CALL(*store_, GetLogins(_, _))
|
| + .WillRepeatedly(WithArg<1>(InvokeEmptyConsumerWithForms()));
|
| + manager()->OnPasswordFormsParsed(&driver_, observed);
|
| + manager()->OnPasswordFormsRendered(&driver_, observed, true);
|
| +
|
| + base::HistogramTester histogram_tester;
|
| +
|
| + // The user accepts a generated password.
|
| + PasswordForm form(MakeFormWithOnlyNewPasswordField());
|
| + form.password_value = base::ASCIIToUTF16("password");
|
| + EXPECT_CALL(*store_, AddLogin(_)).Times(0);
|
| +
|
| + manager()->OnPresaveGeneratedPassword(form);
|
| + histogram_tester.ExpectUniqueSample(
|
| + "PasswordManager.GeneratedFormHasNoFormManager", true, 1);
|
| }
|
|
|
| TEST_F(PasswordManagerTest, PasswordGenerationPresavePasswordAndLogin) {
|
| @@ -1428,7 +1466,6 @@ TEST_F(PasswordManagerTest, PasswordGenerationPresavePasswordAndLogin) {
|
| // The user accepts generated password and makes successful login.
|
| EXPECT_CALL(*store_, AddLogin(form)).WillOnce(Return());
|
| manager()->OnPresaveGeneratedPassword(form);
|
| - manager()->SetHasGeneratedPasswordForForm(&driver_, form, true);
|
| ::testing::Mock::VerifyAndClearExpectations(store_.get());
|
|
|
| if (!found_matched_logins_in_store)
|
|
|