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

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: Modify some indents in the code 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 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());
}

Powered by Google App Engine
This is Rietveld 408576698