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 c5bc4f32c7747ae37273708bf6d86b3ccb87edd1..b22eed654cdbc1545889a10626e683f73b3f195d 100644 |
--- a/components/password_manager/core/browser/password_form_manager_unittest.cc |
+++ b/components/password_manager/core/browser/password_form_manager_unittest.cc |
@@ -221,6 +221,8 @@ TEST_F(PasswordFormManagerTest, TestNewLogin) { |
GetPendingCredentials(manager)->password_value); |
EXPECT_EQ(saved_match()->username_value, |
GetPendingCredentials(manager)->username_value); |
+ EXPECT_TRUE(GetPendingCredentials(manager)->new_password_element.empty()); |
+ EXPECT_TRUE(GetPendingCredentials(manager)->new_password_value.empty()); |
// Now, suppose the user re-visits the site and wants to save an additional |
// login for the site with a new username. In this case, the matching phase |
@@ -244,9 +246,54 @@ TEST_F(PasswordFormManagerTest, TestNewLogin) { |
EXPECT_TRUE(GetPendingCredentials(manager)->preferred); |
EXPECT_EQ(new_pass, GetPendingCredentials(manager)->password_value); |
EXPECT_EQ(new_user, GetPendingCredentials(manager)->username_value); |
+ EXPECT_TRUE(GetPendingCredentials(manager)->new_password_element.empty()); |
+ EXPECT_TRUE(GetPendingCredentials(manager)->new_password_value.empty()); |
delete manager; |
} |
+TEST_F(PasswordFormManagerTest, TestNewLoginWithNewPasswordElement) { |
+ // Alter the test form so it only has a password field that identified as |
+ // being the new password. |
+ observed_form()->new_password_element.swap(observed_form()->password_element); |
+ |
+ scoped_ptr<TestPasswordManagerClient> client( |
+ new TestPasswordManagerClient(NULL)); |
+ scoped_ptr<StubPasswordManagerDriver> driver; |
+ scoped_ptr<PasswordFormManager> manager(new PasswordFormManager( |
+ NULL, client.get(), driver.get(), *observed_form(), false)); |
+ SimulateMatchingPhase(&*manager, false); |
Garrett Casto
2014/07/07 21:57:24
Nit: I realize &* is shorter, but I think that .ge
engedy
2014/07/09 14:15:47
Done, I have rebased this CL on some earlier refac
|
+ |
+ // User submits credentials for the observed form. |
+ PasswordForm credentials(*observed_form()); |
+ credentials.username_value = saved_match()->username_value; |
+ credentials.new_password_value = saved_match()->password_value; |
+ credentials.preferred = true; |
+ manager->ProvisionallySave( |
+ credentials, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); |
+ |
+ // Successful login. The PasswordManager would instruct PasswordFormManager |
+ // to save, which should know this is a new login. |
+ EXPECT_TRUE(manager->IsNewLogin()); |
+ EXPECT_EQ(observed_form()->origin.spec(), |
+ GetPendingCredentials(&*manager)->origin.spec()); |
+ EXPECT_EQ(observed_form()->signon_realm, |
+ GetPendingCredentials(&*manager)->signon_realm); |
+ EXPECT_EQ(observed_form()->action, GetPendingCredentials(&*manager)->action); |
+ EXPECT_TRUE(GetPendingCredentials(&*manager)->preferred); |
+ EXPECT_EQ(saved_match()->username_value, |
+ GetPendingCredentials(&*manager)->username_value); |
+ // At this point, the PasswordFormManager should have promoted the new |
+ // password value to be the current password. However, given that the element |
+ // names will be probably different on a future login form, no element names |
+ // should be saved. |
+ EXPECT_TRUE(GetPendingCredentials(&*manager)->username_element.empty()); |
+ EXPECT_TRUE(GetPendingCredentials(&*manager)->password_element.empty()); |
+ EXPECT_EQ(saved_match()->password_value, |
+ GetPendingCredentials(&*manager)->password_value); |
+ EXPECT_TRUE(GetPendingCredentials(&*manager)->new_password_element.empty()); |
+ EXPECT_TRUE(GetPendingCredentials(&*manager)->new_password_value.empty()); |
+} |
+ |
TEST_F(PasswordFormManagerTest, TestUpdatePassword) { |
// Create a PasswordFormManager with observed_form, as if we just |
// saw this form and need to find matching logins. |
@@ -458,30 +505,52 @@ TEST_F(PasswordFormManagerTest, TestValidForms) { |
credentials.username_value = saved_match()->username_value; |
credentials.password_value = saved_match()->password_value; |
+ // An alternate version of the form that also has a new_password_element. |
+ PasswordForm new_credentials(*observed_form()); |
+ new_credentials.new_password_element = ASCIIToUTF16("NewPasswd"); |
+ new_credentials.new_password_value = ASCIIToUTF16("test1new"); |
+ |
// Form with both username_element and password_element. |
PasswordFormManager manager1(NULL, NULL, NULL, credentials, false); |
SimulateMatchingPhase(&manager1, false); |
EXPECT_TRUE(manager1.HasValidPasswordForm()); |
+ // Form with username_element, password_element, and new_password_element. |
+ PasswordFormManager manager2(NULL, NULL, NULL, new_credentials, false); |
+ SimulateMatchingPhase(&manager2, false); |
+ 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, false); |
+ EXPECT_TRUE(manager3.HasValidPasswordForm()); |
+ |
// Form without a username_element but with a password_element. |
credentials.username_element.clear(); |
- PasswordFormManager manager2(NULL, NULL, NULL, credentials, false); |
- SimulateMatchingPhase(&manager2, false); |
- EXPECT_FALSE(manager2.HasValidPasswordForm()); |
+ PasswordFormManager manager4(NULL, NULL, NULL, credentials, false); |
+ SimulateMatchingPhase(&manager4, false); |
+ EXPECT_FALSE(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, false); |
+ EXPECT_FALSE(manager5.HasValidPasswordForm()); |
// Form without a password_element but with a username_element. |
credentials.username_element = saved_match()->username_element; |
credentials.password_element.clear(); |
- PasswordFormManager manager3(NULL, NULL, NULL, credentials, false); |
- SimulateMatchingPhase(&manager3, false); |
- EXPECT_FALSE(manager3.HasValidPasswordForm()); |
+ PasswordFormManager manager6(NULL, NULL, NULL, credentials, false); |
+ SimulateMatchingPhase(&manager6, false); |
+ EXPECT_FALSE(manager6.HasValidPasswordForm()); |
// Form with neither a password_element nor a username_element. |
credentials.username_element.clear(); |
credentials.password_element.clear(); |
- PasswordFormManager manager4(NULL, NULL, NULL, credentials, false); |
- SimulateMatchingPhase(&manager4, false); |
- EXPECT_FALSE(manager4.HasValidPasswordForm()); |
+ PasswordFormManager manager7(NULL, NULL, NULL, credentials, false); |
+ SimulateMatchingPhase(&manager7, false); |
+ EXPECT_FALSE(manager7.HasValidPasswordForm()); |
} |
TEST_F(PasswordFormManagerTest, TestValidFormsBasic) { |