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

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

Issue 2937033002: [Password Generation] Send a boolean flag of whether user changed generated password (Closed)
Patch Set: Changes addressed to vabr@ comments Created 3 years, 6 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 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)

Powered by Google App Engine
This is Rietveld 408576698