Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(512)

Unified Diff: components/password_manager/core/browser/password_manager_unittest.cc

Issue 1817483002: [Password Manager] Presave the form with generated password till successful login (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Removed CPMD_BAD_ORIGIN_UPDATE_PRESAVED_PASSWORD in bad_message.h Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 043333361b1390708cfa9dbc8b229315ac0b1528..44f5e9d2d19a116ad23feac8d84cd58078f1f7ba 100644
--- a/components/password_manager/core/browser/password_manager_unittest.cc
+++ b/components/password_manager/core/browser/password_manager_unittest.cc
@@ -1266,6 +1266,74 @@ 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()->OnPresaveGeneratedPassword(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());
+ manager()->OnPresaveGeneratedPassword(form);
+ manager()->SetHasGeneratedPasswordForForm(&driver_, form, true);
+ ::testing::Mock::VerifyAndClearExpectations(store_.get());
+
+ EXPECT_CALL(*store_, UpdateLoginWithPrimaryKey(_, form)).WillOnce(Return());
+ OnPasswordFormSubmitted(form);
+ observed.clear();
+ manager()->OnPasswordFormsParsed(&driver_, observed);
+ manager()->OnPasswordFormsRendered(&driver_, observed, true);
+ }
+}
+
TEST_F(PasswordManagerTest,
PasswordGenerationNoCorrespondingPasswordFormManager) {
// Verifies that if there is no corresponding password form manager for the
« no previous file with comments | « components/password_manager/core/browser/password_manager.cc ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698