Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1409)

Unified Diff: chrome/browser/password_manager/password_form_manager_unittest.cc

Issue 9625026: Save password without an associated username. (Closed) Base URL: http://src.chromium.org/svn/trunk/src/
Patch Set: Refine the unit_test codes Created 8 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/password_manager/password_form_manager_unittest.cc
===================================================================
--- chrome/browser/password_manager/password_form_manager_unittest.cc (revision 133421)
+++ chrome/browser/password_manager/password_form_manager_unittest.cc (working copy)
@@ -35,6 +35,26 @@
profile_ = new TestingProfile();
}
+ // Remove the username and regenerate the profile.
+ // This function changes the observed_form_ and saved_match_.
+ // This function should be called at the beginning of tests
+ // for which there is no username.
Ilya Sherman 2012/04/26 23:42:42 nit: "no username" -> "no username field".
+ 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,109 @@
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());
+ 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);
+ }
+
+ void TestEmptyAction() {
+ scoped_ptr<PasswordFormManager> manager(new PasswordFormManager(
+ profile(), NULL, *observed_form(), false));
+
+ 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);
+ }
+
+ void 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;
+
+ // 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 TestValidFormsBasic() {
+ // 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_; }
@@ -71,58 +194,79 @@
};
TEST_F(PasswordFormManagerTest, TestNewLogin) {
- PasswordFormManager* manager = new PasswordFormManager(
- profile(), NULL, *observed_form(), false);
- SimulateMatchingPhase(manager, false);
+ PasswordFormManager manager(profile(), NULL, *observed_form(), false);
+ 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);
+ 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.
- SimulateMatchingPhase(manager, true);
+ SimulateMatchingPhase(&manager, true);
// Set up the new login.
string16 new_user = ASCIIToUTF16("newuser");
string16 new_pass = ASCIIToUTF16("newpass");
credentials.username_value = new_user;
credentials.password_value = new_pass;
- manager->ProvisionallySave(credentials);
+ manager.ProvisionallySave(credentials);
// Again, the PasswordFormManager should know this is still a new login.
- EXPECT_TRUE(manager->IsNewLogin());
+ EXPECT_TRUE(manager.IsNewLogin());
// And make sure everything squares up again.
EXPECT_EQ(observed_form()->origin.spec(),
- GetPendingCredentials(manager)->origin.spec());
+ GetPendingCredentials(&manager)->origin.spec());
EXPECT_EQ(observed_form()->signon_realm,
- GetPendingCredentials(manager)->signon_realm);
- EXPECT_TRUE(GetPendingCredentials(manager)->preferred);
+ GetPendingCredentials(&manager)->signon_realm);
+ EXPECT_TRUE(GetPendingCredentials(&manager)->preferred);
EXPECT_EQ(new_pass,
- GetPendingCredentials(manager)->password_value);
+ GetPendingCredentials(&manager)->password_value);
EXPECT_EQ(new_user,
- GetPendingCredentials(manager)->username_value);
+ GetPendingCredentials(&manager)->username_value);
// Done.
- delete manager;
}
+TEST_F(PasswordFormManagerTest, TestNewLoginAndUpdateWithoutUsername) {
+ SetUpForNoUsernameTests();
+ PasswordFormManager manager(profile(), NULL, *observed_form(), false);
+ 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 assume it's an update.
+ EXPECT_FALSE(manager.IsNewLogin());
+
+ // And make sure everything squares up again.
+ EXPECT_EQ(saved_match()->origin.spec(),
+ GetPendingCredentials(&manager)->origin.spec());
+ EXPECT_EQ(saved_match()->signon_realm,
+ GetPendingCredentials(&manager)->signon_realm);
+ EXPECT_TRUE(GetPendingCredentials(&manager)->preferred);
+ EXPECT_EQ(new_pass,
+ GetPendingCredentials(&manager)->password_value);
+}
+
+
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 +324,45 @@
}
TEST_F(PasswordFormManagerTest, TestEmptyAction) {
- scoped_ptr<PasswordFormManager> manager(new PasswordFormManager(
- profile(), NULL, *observed_form(), false));
+ TestEmptyAction();
+}
- 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();
+ TestEmptyAction();
}
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;
+ TestValidForms();
+}
- // 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();
+ TestValidForms();
+}
- // 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) {
+ TestValidFormsBasic();
+}
- // 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();
+ TestValidFormsBasic();
}
-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(profile(), NULL, *observed_form(), false);
+ 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);
Ilya Sherman 2012/04/26 23:42:42 nit: Please remove this blank line (367)
- // 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());
}
« no previous file with comments | « chrome/browser/password_manager/password_form_manager.cc ('k') | chrome/renderer/autofill/password_autofill_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698