Index: chrome/browser/password_manager/password_form_manager_unittest.cc |
=================================================================== |
--- chrome/browser/password_manager/password_form_manager_unittest.cc (revision 129489) |
+++ chrome/browser/password_manager/password_form_manager_unittest.cc (working copy) |
@@ -33,10 +33,25 @@ |
saved_match_.username_value = ASCIIToUTF16("test@gmail.com"); |
saved_match_.password_value = ASCIIToUTF16("test1"); |
profile_ = new TestingProfile(); |
+ |
+ // A form for testing a case there's no username (there's only password). |
+ observed_form2_.origin = GURL("http://www.google.com/b/LoginAuth"); |
+ observed_form2_.action = GURL("http://www.google.com/b/Login"); |
+ observed_form2_.password_element = ASCIIToUTF16("Passwd"); |
+ observed_form2_.submit_element = ASCIIToUTF16("signIn"); |
+ observed_form2_.signon_realm = "http://www.google.com"; |
+ |
+ saved_match2_ = observed_form_; |
+ saved_match2_.origin = GURL("http://www.google.com/a/ServiceLoginAuth"); |
+ saved_match2_.action = GURL("http://www.google.com/a/ServiceLogin"); |
+ saved_match2_.preferred = true; |
+ saved_match2_.password_value = ASCIIToUTF16("test2"); |
+ profile2_ = new TestingProfile(); |
} |
virtual void TearDown() { |
delete profile_; |
+ delete profile2_; |
} |
PasswordForm* GetPendingCredentials(PasswordFormManager* p) { |
@@ -60,14 +75,21 @@ |
} |
Profile* profile() { return profile_; } |
+ Profile* profile2() { return profile2_; } |
PasswordForm* observed_form() { return &observed_form_; } |
PasswordForm* saved_match() { return &saved_match_; } |
+ PasswordForm* observed_form2() { return &observed_form2_; } |
+ PasswordForm* saved_match2() { return &saved_match2_; } |
+ |
private: |
PasswordForm observed_form_; |
PasswordForm saved_match_; |
Profile* profile_; |
+ PasswordForm observed_form2_; |
+ PasswordForm saved_match2_; |
+ Profile* profile2_; |
}; |
TEST_F(PasswordFormManagerTest, TestNewLogin) { |
@@ -123,6 +145,60 @@ |
delete manager; |
} |
+TEST_F(PasswordFormManagerTest, TestNewLoginAndUpdateWithoutUsername) { |
+ PasswordFormManager* manager = new PasswordFormManager( |
+ profile(), NULL, *observed_form2(), false); |
tim (not reviewing)
2012/04/03 16:40:27
Why do we need observed_form2 It seems tests use e
Yumikiyo Osanai
2012/04/05 00:19:50
I basically agree with your idea.
I've removed th
|
+ SimulateMatchingPhase(manager, false); |
+ |
+ // User submits credentials for the observed form. |
+ PasswordForm credentials = *observed_form2(); |
+ credentials.username_value = saved_match2()->username_value; |
+ credentials.password_value = saved_match2()->password_value; |
+ credentials.preferred = true; |
+ manager->ProvisionallySave(credentials); |
+ |
+ // 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_form2()->origin.spec(), |
+ GetPendingCredentials(manager)->origin.spec()); |
+ EXPECT_EQ(observed_form2()->signon_realm, |
+ GetPendingCredentials(manager)->signon_realm); |
+ EXPECT_TRUE(GetPendingCredentials(manager)->preferred); |
+ EXPECT_EQ(saved_match2()->password_value, |
+ GetPendingCredentials(manager)->password_value); |
+ EXPECT_EQ(saved_match2()->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 password. In this case, the matching phase |
+ // will yield the previously saved login. |
+ SimulateMatchingPhase(manager, true); |
+ |
+ // Set up the new login. |
+ string16 new_pass = ASCIIToUTF16("newpass2"); |
+ credentials.password_value = new_pass; |
+ manager->ProvisionallySave(credentials); |
+ |
+ // Again, the PasswordFormManager should know this is still a new login. |
+ EXPECT_TRUE(manager->IsNewLogin()); |
+ |
+ // And make sure everything squares up again. |
+ EXPECT_EQ(observed_form2()->origin.spec(), |
+ GetPendingCredentials(manager)->origin.spec()); |
+ EXPECT_EQ(observed_form2()->signon_realm, |
+ GetPendingCredentials(manager)->signon_realm); |
+ 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. |
@@ -197,6 +273,25 @@ |
GetPendingCredentials(manager.get())->action); |
} |
+TEST_F(PasswordFormManagerTest, TestEmptyActionWithoutUsername) { |
+ scoped_ptr<PasswordFormManager> manager(new PasswordFormManager( |
+ profile(), NULL, *observed_form2(), false)); |
+ |
+ saved_match2()->action = GURL(); |
+ SimulateMatchingPhase(manager.get(), true); |
+ // User logs in with the autofilled username / password from saved_match. |
+ PasswordForm login = *observed_form2(); |
+ login.password_value = saved_match2()->password_value; |
+ manager->ProvisionallySave(login); |
+ |
+ // If there's no username, we supporse it's the new login. |
+ EXPECT_TRUE(manager->IsNewLogin()); |
+ // We bless our saved PasswordForm entry with the action URL of the |
+ // observed form. |
+ EXPECT_EQ(observed_form2()->action, |
+ GetPendingCredentials(manager.get())->action); |
+} |
+ |
TEST_F(PasswordFormManagerTest, TestValidForms) { |
// User submits credentials for the observed form. |
PasswordForm credentials = *observed_form(); |
@@ -210,10 +305,12 @@ |
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_FALSE(manager2.HasValidPasswordForm()); |
+ EXPECT_TRUE(manager2.HasValidPasswordForm()); |
// Form without a password_element but with a username_element. |
credentials.username_element = saved_match()->username_element; |
@@ -230,6 +327,24 @@ |
EXPECT_FALSE(manager4.HasValidPasswordForm()); |
} |
+TEST_F(PasswordFormManagerTest, TestValidFormsWithNoUsername) { |
+ // User submits credentials for the observed form. |
+ PasswordForm credentials = *observed_form2(); |
+ credentials.scheme = PasswordForm::SCHEME_HTML; |
+ credentials.password_value = saved_match2()->password_value; |
+ |
+ // Form with a password_element. |
+ PasswordFormManager manager1(profile2(), NULL, credentials, false); |
+ SimulateMatchingPhase(&manager1, false); |
+ EXPECT_TRUE(manager1.HasValidPasswordForm()); |
+ |
+ // Form with no a password_element |
+ credentials.password_element.clear(); |
+ PasswordFormManager manager2(profile2(), NULL, credentials, false); |
+ SimulateMatchingPhase(&manager2, false); |
+ EXPECT_FALSE(manager2.HasValidPasswordForm()); |
+} |
+ |
TEST_F(PasswordFormManagerTest, TestValidFormsBasic) { |
// User submits credentials for the observed form. |
PasswordForm credentials = *observed_form(); |
@@ -262,3 +377,22 @@ |
SimulateMatchingPhase(&manager4, false); |
EXPECT_TRUE(manager4.HasValidPasswordForm()); |
} |
+ |
+TEST_F(PasswordFormManagerTest, TestValidFormsBasicWithoutUsername) { |
+ // User submits credentials for the observed form. |
+ PasswordForm credentials = *observed_form2(); |
+ credentials.scheme = PasswordForm::SCHEME_BASIC; |
+ credentials.password_value = saved_match2()->password_value; |
+ |
+ // Form with a password_element. |
+ PasswordFormManager manager1(profile2(), NULL, credentials, false); |
+ SimulateMatchingPhase(&manager1, false); |
+ EXPECT_TRUE(manager1.HasValidPasswordForm()); |
+ |
+ // Form with no a password_element |
+ credentials.password_element.clear(); |
+ PasswordFormManager manager2(profile2(), NULL, credentials, false); |
+ SimulateMatchingPhase(&manager2, false); |
+ EXPECT_TRUE(manager2.HasValidPasswordForm()); |
+} |
tim (not reviewing)
2012/04/03 16:40:27
What happens if
- a user saves a password for a fo
Yumikiyo Osanai
2012/04/05 00:19:50
Umm... I don't understand what you want to test...
|
+ |