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 b9197ca9f48a99d1c0d4a60240e65c74cf6ee5a0..1236cbddd9d311dc2ab36614df8cda746fd776ff 100644 |
--- a/components/password_manager/core/browser/password_form_manager_unittest.cc |
+++ b/components/password_manager/core/browser/password_form_manager_unittest.cc |
@@ -593,30 +593,35 @@ TEST_F(PasswordFormManagerTest, TestValidForms) { |
// Form with both username_element and password_element. |
PasswordFormManager manager1(NULL, NULL, NULL, credentials, false); |
SimulateMatchingPhase(&manager1, RESULT_NO_MATCH); |
+ EXPECT_TRUE(manager1.HasValidLogin()); |
EXPECT_TRUE(manager1.HasValidPasswordForm()); |
// Form with username_element, password_element, and new_password_element. |
PasswordFormManager manager2(NULL, NULL, NULL, new_credentials, false); |
SimulateMatchingPhase(&manager2, RESULT_NO_MATCH); |
+ EXPECT_TRUE(manager2.HasValidLogin()); |
EXPECT_TRUE(manager2.HasValidPasswordForm()); |
// Form with username_element and only new_password_element. |
new_credentials.password_element.clear(); |
PasswordFormManager manager3(NULL, NULL, NULL, new_credentials, false); |
SimulateMatchingPhase(&manager3, RESULT_NO_MATCH); |
+ EXPECT_TRUE(manager3.HasValidLogin()); |
EXPECT_TRUE(manager3.HasValidPasswordForm()); |
// Form without a username_element but with a password_element. |
credentials.username_element.clear(); |
PasswordFormManager manager4(NULL, NULL, NULL, credentials, false); |
SimulateMatchingPhase(&manager4, RESULT_NO_MATCH); |
- EXPECT_FALSE(manager4.HasValidPasswordForm()); |
+ EXPECT_FALSE(manager4.HasValidLogin()); |
+ EXPECT_TRUE(manager4.HasValidPasswordForm()); |
// Form without a username_element but with a new_password_element. |
new_credentials.username_element.clear(); |
PasswordFormManager manager5(NULL, NULL, NULL, new_credentials, false); |
SimulateMatchingPhase(&manager5, RESULT_NO_MATCH); |
- EXPECT_FALSE(manager5.HasValidPasswordForm()); |
+ EXPECT_FALSE(manager5.HasValidLogin()); |
+ EXPECT_TRUE(manager5.HasValidPasswordForm()); |
// Form without a password_element but with a username_element. |
credentials.username_element = saved_match()->username_element; |
@@ -1088,4 +1093,54 @@ TEST_F(PasswordFormManagerTest, CorrectlyUpdatePasswordsWithSameUsername) { |
password_store->Shutdown(); |
} |
+TEST_F(PasswordFormManagerTest, CorrectlySavePasswordWithoutUsernameFields) { |
+ // Need a MessageLoop for callbacks. |
+ base::MessageLoop message_loop; |
+ scoped_refptr<TestPasswordStore> password_store = new TestPasswordStore; |
+ CHECK(password_store->Init(syncer::SyncableService::StartSyncFlare(), "")); |
+ |
+ TestPasswordManagerClient client_with_store(password_store.get()); |
+ TestPasswordManager password_manager(&client_with_store); |
+ EXPECT_CALL(*client_with_store.GetMockDriver(), |
+ AllowPasswordGenerationForForm(_)).Times(2); |
+ EXPECT_CALL(*client_with_store.GetMockDriver(), IsOffTheRecord()) |
+ .WillRepeatedly(Return(false)); |
+ |
+ PasswordForm form(*observed_form()); |
+ form.username_element.clear(); |
+ form.password_value = ASCIIToUTF16("password"); |
+ form.preferred = true; |
+ |
+ PasswordFormManager storing_manager(&password_manager, |
+ &client_with_store, |
+ client_with_store.GetDriver(), |
+ *observed_form(), |
+ false); |
+ storing_manager.FetchMatchingLoginsFromPasswordStore( |
+ PasswordStore::ALLOW_PROMPT); |
+ RunAllPendingTasks(); |
+ |
+ storing_manager.ProvisionallySave( |
+ form, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); |
+ |
+ EXPECT_TRUE(storing_manager.IsNewLogin()); |
+ storing_manager.Save(); |
+ RunAllPendingTasks(); |
+ |
+ PasswordFormManager retrieving_manager(&password_manager, |
+ &client_with_store, |
+ client_with_store.GetDriver(), |
+ *observed_form(), |
+ false); |
+ |
+ retrieving_manager.FetchMatchingLoginsFromPasswordStore( |
+ PasswordStore::ALLOW_PROMPT); |
+ RunAllPendingTasks(); |
+ |
+ // Make sure that the preferred match is updated appropriately. |
+ EXPECT_EQ(ASCIIToUTF16("password"), |
+ retrieving_manager.preferred_match()->password_value); |
+ password_store->Shutdown(); |
+} |
+ |
} // namespace password_manager |