Index: components/password_manager/core/browser/password_form_manager_unittest.cc |
diff --git a/components/password_manager/core/browser/password_form_manager_unittest.cc b/components/password_manager/core/browser/password_form_manager_unittest.cc |
index 51de9de7105529a7723757c0bb0abcdb03ed202b..225ac0f5fe5a90513ffdf8e16e571b58628c9c83 100644 |
--- a/components/password_manager/core/browser/password_form_manager_unittest.cc |
+++ b/components/password_manager/core/browser/password_form_manager_unittest.cc |
@@ -90,6 +90,9 @@ class MockFormSaver : public StubFormSaver { |
void(const autofill::PasswordForm& pending, |
std::map<base::string16, const PasswordForm*>* best_matches, |
const autofill::PasswordForm** preferred_match)); |
+ MOCK_METHOD1(PresaveGeneratedPassword, |
+ void(const autofill::PasswordForm& generated)); |
+ MOCK_METHOD0(RemovePresavedPassword, void()); |
// Convenience downcasting method. |
static MockFormSaver& Get(PasswordFormManager* form_manager) { |
@@ -153,9 +156,10 @@ MATCHER_P3(CheckUploadedAutofillTypesAndSignature, |
return true; |
} |
-MATCHER_P2(CheckUploadedGenerationTypesAndSignature, |
+MATCHER_P3(CheckUploadedGenerationTypesAndSignature, |
form_signature, |
expected_generation_types, |
+ generated_password_changed, |
"Unexpected generation types or form signature") { |
if (form_signature != arg.FormSignatureAsStr()) { |
// Unexpected form's signature. |
@@ -184,6 +188,12 @@ MATCHER_P2(CheckUploadedGenerationTypesAndSignature, |
<< ", but found " << field->generation_type(); |
return false; |
} |
+ |
+ if (field->generation_type() != |
+ autofill::AutofillUploadContents::Field::IGNORED_GENERATION_POPUP) { |
+ EXPECT_EQ(generated_password_changed, |
+ field->generated_password_changed()); |
+ } |
} |
} |
return true; |
@@ -605,11 +615,13 @@ class PasswordFormManagerTest : public testing::Test { |
void GeneratedVoteUploadTest(bool is_manual_generation, |
bool is_change_password_form, |
bool has_generated_password, |
+ bool generated_password_changed, |
SavePromptInteraction interaction) { |
SCOPED_TRACE(testing::Message() |
<< "is_manual_generation=" << is_manual_generation |
<< " is_change_password_form=" << is_change_password_form |
<< " has_generated_password=" << has_generated_password |
+ << " generated_password_changed=" << generated_password_changed |
<< " interaction=" << interaction); |
PasswordForm form(*observed_form()); |
form.form_data = saved_match()->form_data; |
@@ -656,6 +668,8 @@ class PasswordFormManagerTest : public testing::Test { |
form_manager.set_generation_element(generation_element); |
form_manager.set_generation_popup_was_shown(true); |
form_manager.SetHasGeneratedPassword(has_generated_password); |
+ if (has_generated_password) |
+ form_manager.set_generated_password_changed(generated_password_changed); |
// Figure out expected generation event type. |
autofill::AutofillUploadContents::Field::PasswordGenerationType |
@@ -673,7 +687,8 @@ class PasswordFormManagerTest : public testing::Test { |
*client()->mock_driver()->mock_autofill_download_manager(), |
StartUploadRequest( |
CheckUploadedGenerationTypesAndSignature( |
- form_structure.FormSignatureAsStr(), expected_generation_types), |
+ form_structure.FormSignatureAsStr(), expected_generation_types, |
+ generated_password_changed), |
false, expected_available_field_types, std::string(), true)); |
form_manager.ProvisionallySave( |
@@ -2529,7 +2544,6 @@ TEST_F(PasswordFormManagerTest, TestNotUpdateWhenOnlyPSLMatched) { |
TEST_F(PasswordFormManagerTest, |
TestSavingOnChangePasswordFormGenerationNoStoredForms) { |
fake_form_fetcher()->SetNonFederated(std::vector<const PasswordForm*>(), 0u); |
- form_manager()->SetHasGeneratedPassword(true); |
// User submits change password form and there is no stored credentials. |
PasswordForm credentials = *observed_form(); |
@@ -2538,6 +2552,7 @@ TEST_F(PasswordFormManagerTest, |
credentials.new_password_element = ASCIIToUTF16("NewPasswd"); |
credentials.new_password_value = ASCIIToUTF16("new_password"); |
credentials.preferred = true; |
+ form_manager()->PresaveGeneratedPassword(credentials); |
form_manager()->ProvisionallySave( |
credentials, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); |
@@ -2564,7 +2579,6 @@ TEST_F(PasswordFormManagerTest, |
TEST_F(PasswordFormManagerTest, TestUpdatingOnChangePasswordFormGeneration) { |
fake_form_fetcher()->SetNonFederated({saved_match()}, 0u); |
- form_manager()->SetHasGeneratedPassword(true); |
// User submits credentials for the change password form, and old password is |
// coincide with password from an existing credentials, so stored credentials |
@@ -2575,6 +2589,7 @@ TEST_F(PasswordFormManagerTest, TestUpdatingOnChangePasswordFormGeneration) { |
credentials.new_password_element = ASCIIToUTF16("NewPasswd"); |
credentials.new_password_value = ASCIIToUTF16("new_password"); |
credentials.preferred = true; |
+ form_manager()->PresaveGeneratedPassword(credentials); |
form_manager()->ProvisionallySave( |
credentials, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); |
@@ -2600,7 +2615,6 @@ TEST_F(PasswordFormManagerTest, TestUpdatingOnChangePasswordFormGeneration) { |
TEST_F(PasswordFormManagerTest, |
TestSavingOnChangePasswordFormGenerationNoMatchedForms) { |
fake_form_fetcher()->SetNonFederated({saved_match()}, 0u); |
- form_manager()->SetHasGeneratedPassword(true); |
// User submits credentials for the change password form, and old password is |
// not coincide with password from existing credentials, so new credentials |
@@ -2612,6 +2626,7 @@ TEST_F(PasswordFormManagerTest, |
credentials.new_password_element = ASCIIToUTF16("NewPasswd"); |
credentials.new_password_value = ASCIIToUTF16("new_password"); |
credentials.preferred = true; |
+ form_manager()->PresaveGeneratedPassword(credentials); |
form_manager()->ProvisionallySave( |
credentials, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); |
@@ -2710,15 +2725,42 @@ TEST_F(PasswordFormManagerTest, GeneratedVoteUpload) { |
for (bool is_manual_generation : kFalseTrue) { |
for (bool is_change_password_form : kFalseTrue) { |
for (bool has_generated_password : kFalseTrue) { |
- for (SavePromptInteraction interaction : kSavePromptInterations) { |
- GeneratedVoteUploadTest(is_manual_generation, is_change_password_form, |
- has_generated_password, interaction); |
+ for (bool generated_password_changed : kFalseTrue) { |
+ for (SavePromptInteraction interaction : kSavePromptInterations) { |
+ GeneratedVoteUploadTest(is_manual_generation, |
+ is_change_password_form, |
+ has_generated_password, |
+ generated_password_changed, interaction); |
+ } |
} |
} |
} |
} |
} |
+TEST_F(PasswordFormManagerTest, PresaveGeneratedPasswordAndRemoveIt) { |
+ PasswordForm credentials = *observed_form(); |
+ |
+ // Simulate the user accepted a generated password. |
+ EXPECT_CALL(MockFormSaver::Get(form_manager()), |
+ PresaveGeneratedPassword(credentials)); |
+ form_manager()->PresaveGeneratedPassword(credentials); |
+ EXPECT_TRUE(form_manager()->has_generated_password()); |
+ EXPECT_FALSE(form_manager()->generated_password_changed()); |
+ |
+ // Simulate the user changed the presaved password. |
+ credentials.password_value = ASCIIToUTF16("changed_password"); |
+ EXPECT_CALL(MockFormSaver::Get(form_manager()), |
+ PresaveGeneratedPassword(credentials)); |
+ form_manager()->PresaveGeneratedPassword(credentials); |
+ EXPECT_TRUE(form_manager()->has_generated_password()); |
+ EXPECT_TRUE(form_manager()->generated_password_changed()); |
+ |
+ // Simulate the user removed the presaved password. |
+ EXPECT_CALL(MockFormSaver::Get(form_manager()), RemovePresavedPassword()); |
+ form_manager()->PasswordNoLongerGenerated(); |
+} |
+ |
TEST_F(PasswordFormManagerTest, FormClassifierVoteUpload) { |
const bool kFalseTrue[] = {false, true}; |
for (bool found_generation_element : kFalseTrue) { |