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

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

Issue 1213803006: [Password Generation] Always save generated passwords (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Comments Created 5 years, 5 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
« no previous file with comments | « components/password_manager/core/browser/password_manager.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 98a4af3b059d9c0c45ac48a0bb834cdc1b28f775..aab19a4663bb9ca3d51459e51fea8df26e780ce5 100644
--- a/components/password_manager/core/browser/password_manager_unittest.cc
+++ b/components/password_manager/core/browser/password_manager_unittest.cc
@@ -1028,4 +1028,141 @@ TEST_F(PasswordManagerTest, SubmitNotFetchedFromStoreForm) {
form_to_save->Save();
}
+TEST_F(PasswordManagerTest, PasswordGenerationForceSaving) {
+ std::vector<PasswordForm> observed;
+ PasswordForm form(MakeSimpleForm());
+ observed.push_back(form);
+ // The initial load.
+ manager()->OnPasswordFormsParsed(&driver_, observed);
+ // The initial layout.
+ manager()->OnPasswordFormsRendered(&driver_, observed, true);
+
+ manager()->SetHasGeneratedPasswordForForm(&driver_, form, true);
+
+ // The user should not be presented with an infobar as they have already given
+ // consent by using the generated password. The form should be saved once
+ // navigation occurs. The client will be informed that automatic saving has
+ // occured.
+ EXPECT_CALL(client_,
+ PromptUserToSavePasswordPtr(
+ _, CredentialSourceType::CREDENTIAL_SOURCE_PASSWORD_MANAGER))
+ .Times(Exactly(0));
+ EXPECT_CALL(*store_, AddLogin(FormMatches(form)));
+ scoped_ptr<PasswordFormManager> saved_form_manager;
+ EXPECT_CALL(client_, AutomaticPasswordSavePtr(_))
+ .Times(Exactly(1))
+ .WillOnce(WithArg<0>(SaveToScopedPtr(&saved_form_manager)));
+
+ // Simulate submission failing, with the same form being visible after
+ // navigation.
+ manager()->OnPasswordFormsParsed(&driver_,
+ observed); // The post-navigation load.
+ manager()->OnPasswordFormsRendered(&driver_, observed,
+ true); // The post-navigation layout.
+}
+
+TEST_F(PasswordManagerTest, PasswordGenerationPasswordEdited) {
+ std::vector<PasswordForm> observed;
+ PasswordForm form(MakeSimpleForm());
+ observed.push_back(form);
+ // The initial load.
+ manager()->OnPasswordFormsParsed(&driver_, observed);
+ // The initial layout.
+ manager()->OnPasswordFormsRendered(&driver_, observed, true);
+
+ manager()->SetHasGeneratedPasswordForForm(&driver_, form, true);
+
+ // Simulate user editing and submitting a different password. Verify that
+ // the edited password is the one that is saved.
+ form.new_password_value = ASCIIToUTF16("different_password");
+ manager()->ProvisionallySavePassword(form);
+
+ // The user should not be presented with an infobar as they have already given
+ // consent by using the generated password. The form should be saved once
+ // navigation occurs. The client will be informed that automatic saving has
+ // occured.
+ EXPECT_CALL(client_,
+ PromptUserToSavePasswordPtr(
+ _, CredentialSourceType::CREDENTIAL_SOURCE_PASSWORD_MANAGER))
+ .Times(Exactly(0));
+ EXPECT_CALL(*store_, AddLogin(FormMatches(form)));
+ scoped_ptr<PasswordFormManager> saved_form_manager;
+ EXPECT_CALL(client_, AutomaticPasswordSavePtr(_))
+ .Times(Exactly(1))
+ .WillOnce(WithArg<0>(SaveToScopedPtr(&saved_form_manager)));
+
+ // Simulate submission failing, with the same form being visible after
+ // navigation.
+ manager()->OnPasswordFormsParsed(&driver_,
+ observed); // The post-navigation load.
+ manager()->OnPasswordFormsRendered(&driver_, observed,
+ true); // The post-navigation layout.
+}
+
+TEST_F(PasswordManagerTest,
+ PasswordGenerationNoLongerGeneratedPasswordNotForceSaved_FailedSubmit) {
+ std::vector<PasswordForm> observed;
+ PasswordForm form(MakeSimpleForm());
+ observed.push_back(form);
+ // The initial load.
+ manager()->OnPasswordFormsParsed(&driver_, observed);
+ // The initial layout.
+ manager()->OnPasswordFormsRendered(&driver_, observed, true);
+
+ manager()->SetHasGeneratedPasswordForForm(&driver_, form, true);
+
+ // Simulate user removing generated password and adding a new one.
+ form.new_password_value = ASCIIToUTF16("different_password");
+ manager()->SetHasGeneratedPasswordForForm(&driver_, form, false);
+
+ // No infobar or prompt is shown if submission fails.
+ EXPECT_CALL(client_,
+ PromptUserToSavePasswordPtr(
+ _, CredentialSourceType::CREDENTIAL_SOURCE_PASSWORD_MANAGER))
+ .Times(Exactly(0));
+ EXPECT_CALL(client_, AutomaticPasswordSavePtr(_)).Times(Exactly(0));
+
+ // Simulate submission failing, with the same form being visible after
+ // navigation.
+ manager()->OnPasswordFormsParsed(&driver_,
+ observed); // The post-navigation load.
+ manager()->OnPasswordFormsRendered(&driver_, observed,
+ true); // The post-navigation layout.
+}
+
+TEST_F(PasswordManagerTest,
+ PasswordGenerationNoLongerGeneratedPasswordNotForceSaved) {
+ std::vector<PasswordForm> observed;
+ PasswordForm form(MakeSimpleForm());
+ observed.push_back(form);
+ // The initial load.
+ manager()->OnPasswordFormsParsed(&driver_, observed);
+ // The initial layout.
+ manager()->OnPasswordFormsRendered(&driver_, observed, true);
+
+ manager()->SetHasGeneratedPasswordForForm(&driver_, form, true);
+
+ // Simulate user removing generated password and adding a new one.
+ form.password_value = ASCIIToUTF16("different_password");
+ manager()->SetHasGeneratedPasswordForForm(&driver_, form, false);
+
+ manager()->ProvisionallySavePassword(form);
+
+ // Verify that a normal prompt is shown instead of the force saving UI.
+ scoped_ptr<PasswordFormManager> form_to_save;
+ EXPECT_CALL(client_,
+ PromptUserToSavePasswordPtr(
+ _, CredentialSourceType::CREDENTIAL_SOURCE_PASSWORD_MANAGER))
+ .WillOnce(WithArg<0>(SaveToScopedPtr(&form_to_save)));
+ EXPECT_CALL(client_, AutomaticPasswordSavePtr(_)).Times(Exactly(0));
+
+ // Simulate submission failing, with the same form being visible after
+ // navigation.
+ observed.clear();
+ manager()->OnPasswordFormsParsed(&driver_,
+ observed); // The post-navigation load.
+ manager()->OnPasswordFormsRendered(&driver_, observed,
+ true); // The post-navigation layout.
+}
+
} // namespace password_manager
« no previous file with comments | « components/password_manager/core/browser/password_manager.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698