Index: chrome/browser/password_manager/password_form_manager_unittest.cc |
=================================================================== |
--- chrome/browser/password_manager/password_form_manager_unittest.cc (revision 130897) |
+++ chrome/browser/password_manager/password_form_manager_unittest.cc (working copy) |
@@ -35,6 +35,26 @@ |
profile_ = new TestingProfile(); |
} |
+ // Remove the username and regererate the profile. |
Ilya Sherman
2012/04/19 00:27:37
nit: "regererate" -> "regenerate"
Yumikiyo Osanai
2012/04/26 23:33:22
Done.
|
+ // This function change the observed_form_ and saved_match_. |
Ilya Sherman
2012/04/19 00:27:37
nit: "change" -> "changes"
Yumikiyo Osanai
2012/04/26 23:33:22
Done.
|
+ // This function should be called at the beginning of tests |
+ // that there is no username. |
Ilya Sherman
2012/04/19 00:27:37
nit: "that there is no username" -> "for which the
|
+ void SetUpForNoUsernameTests() { |
+ observed_form_.origin = GURL("http://www.google.com/b/LoginAuth"); |
+ observed_form_.action = GURL("http://www.google.com/b/Login"); |
+ observed_form_.username_element = ASCIIToUTF16(""); |
+ observed_form_.password_element = ASCIIToUTF16("Passwd"); |
+ observed_form_.submit_element = ASCIIToUTF16("signIn"); |
+ observed_form_.signon_realm = "http://www.google.com"; |
+ |
+ saved_match_ = observed_form_; |
+ saved_match_.origin = GURL("http://www.google.com/b/ServiceLoginAuth"); |
+ saved_match_.action = GURL("http://www.google.com/b/ServiceLogin"); |
+ saved_match_.preferred = true; |
+ saved_match_.username_value = ASCIIToUTF16(""); |
+ saved_match_.password_value = ASCIIToUTF16("test2"); |
+ } |
+ |
virtual void TearDown() { |
delete profile_; |
} |
@@ -59,6 +79,110 @@ |
return p->IgnoreResult(*form); |
} |
+ void VerifyNewLogin(PasswordFormManager* manager) { |
+ // Successful login. The PasswordManager would instruct PasswordFormManager |
+ // to save, which should know this is a new login. |
+ EXPECT_TRUE(manager->IsNewLogin()); |
+ // Make sure the credentials that would be submitted on successful login |
+ // are going to match the stored entry in the db. |
+ EXPECT_EQ(observed_form()->origin.spec(), |
+ GetPendingCredentials(manager)->origin.spec()); |
Ilya Sherman
2012/04/19 00:27:37
nit: Please indent to the parenthesis after "EQ"
Yumikiyo Osanai
2012/04/26 23:33:22
Done.
|
+ EXPECT_EQ(observed_form()->signon_realm, |
+ GetPendingCredentials(manager)->signon_realm); |
Ilya Sherman
2012/04/19 00:27:37
nit: Please indent to the parenthesis after "EQ"
Yumikiyo Osanai
2012/04/26 23:33:22
Done.
|
+ EXPECT_TRUE(GetPendingCredentials(manager)->preferred); |
+ EXPECT_EQ(saved_match()->password_value, |
+ GetPendingCredentials(manager)->password_value); |
Ilya Sherman
2012/04/19 00:27:37
nit: Please indent to the parenthesis after "EQ"
Yumikiyo Osanai
2012/04/26 23:33:22
Done.
|
+ EXPECT_EQ(saved_match()->username_value, |
+ GetPendingCredentials(manager)->username_value); |
Ilya Sherman
2012/04/19 00:27:37
nit: Please indent to the parenthesis after "EQ"
Yumikiyo Osanai
2012/04/26 23:33:22
Done.
|
+ return; |
Ilya Sherman
2012/04/19 00:27:37
nit: This return statement is redundant; please re
Yumikiyo Osanai
2012/04/26 23:33:22
Done.
|
+ } |
+ |
+ void EmptyAction() { |
Ilya Sherman
2012/04/19 00:27:37
nit: Perhaps "TestEmptyAction()"? Method names ty
Yumikiyo Osanai
2012/04/26 23:33:22
Done.
|
+ scoped_ptr<PasswordFormManager> manager(new PasswordFormManager( |
+ profile(), NULL, *observed_form(), false)); |
Ilya Sherman
2012/04/19 00:27:37
nit: Please preserve the previous indentation, i.e
Yumikiyo Osanai
2012/04/26 23:33:22
Done.
|
+ |
+ saved_match()->action = GURL(); |
+ SimulateMatchingPhase(manager.get(), true); |
+ // User logs in with the autofilled username / password from saved_match. |
+ PasswordForm login = *observed_form(); |
+ login.username_value = saved_match()->username_value; |
+ login.password_value = saved_match()->password_value; |
+ manager->ProvisionallySave(login); |
+ EXPECT_FALSE(manager->IsNewLogin()); |
+ // We bless our saved PasswordForm entry with the action URL of the |
+ // observed form. |
+ EXPECT_EQ(observed_form()->action, |
+ GetPendingCredentials(manager.get())->action); |
Ilya Sherman
2012/04/19 00:27:37
nit: Please indent to the parenthesis after "EQ"
Yumikiyo Osanai
2012/04/26 23:33:22
Done.
|
+ } |
+ |
+ void ValidForms() { |
Ilya Sherman
2012/04/19 00:27:37
nit: Perhaps "TestValidForms()"? Method names typ
Yumikiyo Osanai
2012/04/26 23:33:22
Done.
|
+ // User submits credentials for the observed form. |
+ PasswordForm credentials = *observed_form(); |
+ credentials.scheme = PasswordForm::SCHEME_HTML; |
+ credentials.username_value = saved_match()->username_value; |
+ credentials.password_value = saved_match()->password_value; |
+ |
+ // Form with both username_element and password_element. |
+ PasswordFormManager manager1(profile(), NULL, credentials, false); |
+ SimulateMatchingPhase(&manager1, false); |
+ EXPECT_TRUE(manager1.HasValidPasswordForm()); |
+ |
+ // Form without a username_element but with a password_element. |
+ // It should be true, because we should save and autofill a password |
+ // if there isn't any username. |
+ credentials.username_element.clear(); |
+ PasswordFormManager manager2(profile(), NULL, credentials, false); |
+ SimulateMatchingPhase(&manager2, false); |
+ EXPECT_TRUE(manager2.HasValidPasswordForm()); |
+ |
+ // Form without a password_element but with a username_element. |
+ credentials.username_element = saved_match()->username_element; |
+ credentials.password_element.clear(); |
+ PasswordFormManager manager3(profile(), NULL, credentials, false); |
+ SimulateMatchingPhase(&manager3, false); |
+ EXPECT_FALSE(manager3.HasValidPasswordForm()); |
+ |
+ // Form with neither a password_element nor a username_element. |
+ credentials.username_element.clear(); |
+ credentials.password_element.clear(); |
+ PasswordFormManager manager4(profile(), NULL, credentials, false); |
+ SimulateMatchingPhase(&manager4, false); |
+ EXPECT_FALSE(manager4.HasValidPasswordForm()); |
+ } |
+ |
+ void ValidFormsBasic() { |
Ilya Sherman
2012/04/19 00:27:37
nit: Perhaps "TestValidFormsBasic()"? Method name
Yumikiyo Osanai
2012/04/26 23:33:22
Done.
|
+ // User submits credentials for the observed form. |
+ PasswordForm credentials = *observed_form(); |
+ credentials.scheme = PasswordForm::SCHEME_BASIC; |
+ credentials.username_value = saved_match()->username_value; |
+ credentials.password_value = saved_match()->password_value; |
+ |
+ // Form with both username_element and password_element. |
+ PasswordFormManager manager1(profile(), NULL, credentials, false); |
+ SimulateMatchingPhase(&manager1, false); |
+ EXPECT_TRUE(manager1.HasValidPasswordForm()); |
+ |
+ // Form without a username_element but with a password_element. |
+ credentials.username_element.clear(); |
+ PasswordFormManager manager2(profile(), NULL, credentials, false); |
+ SimulateMatchingPhase(&manager2, false); |
+ EXPECT_TRUE(manager2.HasValidPasswordForm()); |
+ |
+ // Form without a password_element but with a username_element. |
+ credentials.username_element = saved_match()->username_element; |
+ credentials.password_element.clear(); |
+ PasswordFormManager manager3(profile(), NULL, credentials, false); |
+ SimulateMatchingPhase(&manager3, false); |
+ EXPECT_TRUE(manager3.HasValidPasswordForm()); |
+ |
+ // Form with neither a password_element nor a username_element. |
+ credentials.username_element.clear(); |
+ credentials.password_element.clear(); |
+ PasswordFormManager manager4(profile(), NULL, credentials, false); |
+ SimulateMatchingPhase(&manager4, false); |
+ EXPECT_TRUE(manager4.HasValidPasswordForm()); |
+ } |
+ |
Profile* profile() { return profile_; } |
PasswordForm* observed_form() { return &observed_form_; } |
@@ -80,22 +204,8 @@ |
credentials.password_value = saved_match()->password_value; |
credentials.preferred = true; |
manager->ProvisionallySave(credentials); |
+ VerifyNewLogin(manager); |
- // Successful login. The PasswordManager would instruct PasswordFormManager |
- // to save, which should know this is a new login. |
- EXPECT_TRUE(manager->IsNewLogin()); |
- // Make sure the credentials that would be submitted on successful login |
- // are going to match the stored entry in the db. |
- EXPECT_EQ(observed_form()->origin.spec(), |
- GetPendingCredentials(manager)->origin.spec()); |
- EXPECT_EQ(observed_form()->signon_realm, |
- GetPendingCredentials(manager)->signon_realm); |
- EXPECT_TRUE(GetPendingCredentials(manager)->preferred); |
- EXPECT_EQ(saved_match()->password_value, |
- GetPendingCredentials(manager)->password_value); |
- EXPECT_EQ(saved_match()->username_value, |
- GetPendingCredentials(manager)->username_value); |
- |
// 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 |
// will yield the previously saved login. |
@@ -123,6 +233,47 @@ |
delete manager; |
} |
+TEST_F(PasswordFormManagerTest, TestNewLoginAndUpdateWithoutUsername) { |
+ SetUpForNoUsernameTests(); |
+ PasswordFormManager* manager = new PasswordFormManager( |
+ profile(), NULL, *observed_form(), false); |
Ilya Sherman
2012/04/19 00:27:37
nit: Can this be allocated on the stack, rather th
|
+ SimulateMatchingPhase(manager, false); |
+ |
+ // User submits credentials for the observed form. |
+ PasswordForm credentials = *observed_form(); |
+ credentials.username_value = saved_match()->username_value; |
+ credentials.password_value = saved_match()->password_value; |
+ credentials.preferred = true; |
+ manager->ProvisionallySave(credentials); |
+ VerifyNewLogin(manager); |
+ |
+ // Now, suppose the user re-visits the site and wants to save an additional |
+ // login for the site with a new password. In this case, the matching phase |
+ // will yield the previously saved login. |
+ SimulateMatchingPhase(manager, true); |
+ |
+ // Set up the update login. |
+ string16 new_pass = ASCIIToUTF16("newpass2"); |
+ credentials.password_value = new_pass; |
+ manager->ProvisionallySave(credentials); |
+ |
+ // If there is no username, we supporse it's an update. |
Ilya Sherman
2012/04/19 00:27:37
nit: "supporse" -> "assume"
Yumikiyo Osanai
2012/04/26 23:33:22
Done.
|
+ EXPECT_FALSE(manager->IsNewLogin()); |
+ |
+ // And make sure everything squares up again. |
+ EXPECT_EQ(GetPendingCredentials(manager)->origin.spec(), |
+ saved_match()->origin.spec()); |
Ilya Sherman
2012/04/19 00:27:37
nit: Please preserve the parameter order that was
Yumikiyo Osanai
2012/04/26 23:33:22
Done.
|
+ EXPECT_EQ(GetPendingCredentials(manager)->signon_realm, |
+ saved_match()->signon_realm); |
Ilya Sherman
2012/04/19 00:27:37
nit: Please preserve the parameter order that was
Yumikiyo Osanai
2012/04/26 23:33:22
Done.
|
+ EXPECT_TRUE(GetPendingCredentials(manager)->preferred); |
+ EXPECT_EQ(new_pass, |
+ GetPendingCredentials(manager)->password_value); |
+ |
+ // Done. |
+ delete manager; |
+} |
+ |
+ |
TEST_F(PasswordFormManagerTest, TestUpdatePassword) { |
// Create a PasswordFormManager with observed_form, as if we just |
// saw this form and need to find matching logins. |
@@ -180,85 +331,52 @@ |
} |
TEST_F(PasswordFormManagerTest, TestEmptyAction) { |
- scoped_ptr<PasswordFormManager> manager(new PasswordFormManager( |
- profile(), NULL, *observed_form(), false)); |
+ EmptyAction(); |
+} |
- saved_match()->action = GURL(); |
- SimulateMatchingPhase(manager.get(), true); |
- // User logs in with the autofilled username / password from saved_match. |
- PasswordForm login = *observed_form(); |
- login.username_value = saved_match()->username_value; |
- login.password_value = saved_match()->password_value; |
- manager->ProvisionallySave(login); |
- EXPECT_FALSE(manager->IsNewLogin()); |
- // We bless our saved PasswordForm entry with the action URL of the |
- // observed form. |
- EXPECT_EQ(observed_form()->action, |
- GetPendingCredentials(manager.get())->action); |
+TEST_F(PasswordFormManagerTest, TestEmptyActionWithoutUsername) { |
+ SetUpForNoUsernameTests(); |
+ EmptyAction(); |
} |
TEST_F(PasswordFormManagerTest, TestValidForms) { |
- // User submits credentials for the observed form. |
- PasswordForm credentials = *observed_form(); |
- credentials.scheme = PasswordForm::SCHEME_HTML; |
- credentials.username_value = saved_match()->username_value; |
- credentials.password_value = saved_match()->password_value; |
+ ValidForms(); |
+} |
- // Form with both username_element and password_element. |
- PasswordFormManager manager1(profile(), NULL, credentials, false); |
- SimulateMatchingPhase(&manager1, false); |
- EXPECT_TRUE(manager1.HasValidPasswordForm()); |
+TEST_F(PasswordFormManagerTest, TestValidFormsWithNoUsername) { |
+ SetUpForNoUsernameTests(); |
+ ValidForms(); |
+} |
- // Form without a username_element but with a password_element. |
- credentials.username_element.clear(); |
- PasswordFormManager manager2(profile(), NULL, credentials, false); |
- SimulateMatchingPhase(&manager2, false); |
- EXPECT_FALSE(manager2.HasValidPasswordForm()); |
+TEST_F(PasswordFormManagerTest, TestValidFormsBasic) { |
+ ValidFormsBasic(); |
+} |
- // Form without a password_element but with a username_element. |
- credentials.username_element = saved_match()->username_element; |
- credentials.password_element.clear(); |
- PasswordFormManager manager3(profile(), NULL, credentials, false); |
- SimulateMatchingPhase(&manager3, false); |
- EXPECT_FALSE(manager3.HasValidPasswordForm()); |
- |
- // Form with neither a password_element nor a username_element. |
- credentials.username_element.clear(); |
- credentials.password_element.clear(); |
- PasswordFormManager manager4(profile(), NULL, credentials, false); |
- SimulateMatchingPhase(&manager4, false); |
- EXPECT_FALSE(manager4.HasValidPasswordForm()); |
+TEST_F(PasswordFormManagerTest, TestValidFormsBasicWithoutUsername) { |
+ SetUpForNoUsernameTests(); |
+ ValidFormsBasic(); |
} |
-TEST_F(PasswordFormManagerTest, TestValidFormsBasic) { |
- // User submits credentials for the observed form. |
+TEST_F(PasswordFormManagerTest, TestVisitOtherForm) { |
+ // Create forms haven't username element. |
+ SetUpForNoUsernameTests(); |
+ |
+ // Save the password for a form with no username element |
+ // on http://www.google.com/b/LoginAuth |
+ PasswordFormManager* manager = new PasswordFormManager( |
+ profile(), NULL, *observed_form(), false); |
Ilya Sherman
2012/04/19 00:27:37
nit: It looks like this will leak. Can it be allo
|
+ SimulateMatchingPhase(manager, false); |
PasswordForm credentials = *observed_form(); |
- credentials.scheme = PasswordForm::SCHEME_BASIC; |
credentials.username_value = saved_match()->username_value; |
credentials.password_value = saved_match()->password_value; |
+ credentials.preferred = true; |
+ manager->ProvisionallySave(credentials); |
+ VerifyNewLogin(manager); |
- // Form with both username_element and password_element. |
- PasswordFormManager manager1(profile(), NULL, credentials, false); |
- SimulateMatchingPhase(&manager1, false); |
- EXPECT_TRUE(manager1.HasValidPasswordForm()); |
+ // the user visits foo.com/a, which has a password form |
+ // *with* a username element. |
Ilya Sherman
2012/04/19 00:27:37
Should there be code below this comment?
Yumikiyo Osanai
2012/04/26 23:33:22
Oh, Thank you for pointing out it.
I forgot to del
|
- // Form without a username_element but with a password_element. |
- credentials.username_element.clear(); |
- PasswordFormManager manager2(profile(), NULL, credentials, false); |
- SimulateMatchingPhase(&manager2, false); |
- EXPECT_TRUE(manager2.HasValidPasswordForm()); |
+ // the user visits foo.com/a, which has a password form |
+ // *without* a username element. |
Ilya Sherman
2012/04/19 00:27:37
Should there be code below this comment?
Yumikiyo Osanai
2012/04/26 23:33:22
Oh, I'll remove this comment.
What I'd like to tes
|
- // Form without a password_element but with a username_element. |
- credentials.username_element = saved_match()->username_element; |
- credentials.password_element.clear(); |
- PasswordFormManager manager3(profile(), NULL, credentials, false); |
- SimulateMatchingPhase(&manager3, false); |
- EXPECT_TRUE(manager3.HasValidPasswordForm()); |
- |
- // Form with neither a password_element nor a username_element. |
- credentials.username_element.clear(); |
- credentials.password_element.clear(); |
- PasswordFormManager manager4(profile(), NULL, credentials, false); |
- SimulateMatchingPhase(&manager4, false); |
- EXPECT_TRUE(manager4.HasValidPasswordForm()); |
} |