Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "testing/gtest/include/gtest/gtest.h" | 5 #include "testing/gtest/include/gtest/gtest.h" |
| 6 | 6 |
| 7 #include "base/string_util.h" | 7 #include "base/string_util.h" |
| 8 #include "base/utf_string_conversions.h" | 8 #include "base/utf_string_conversions.h" |
| 9 #include "chrome/browser/password_manager/password_form_manager.h" | 9 #include "chrome/browser/password_manager/password_form_manager.h" |
| 10 #include "chrome/browser/password_manager/password_manager.h" | 10 #include "chrome/browser/password_manager/password_manager.h" |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 28 | 28 |
| 29 saved_match_ = observed_form_; | 29 saved_match_ = observed_form_; |
| 30 saved_match_.origin = GURL("http://www.google.com/a/ServiceLoginAuth"); | 30 saved_match_.origin = GURL("http://www.google.com/a/ServiceLoginAuth"); |
| 31 saved_match_.action = GURL("http://www.google.com/a/ServiceLogin"); | 31 saved_match_.action = GURL("http://www.google.com/a/ServiceLogin"); |
| 32 saved_match_.preferred = true; | 32 saved_match_.preferred = true; |
| 33 saved_match_.username_value = ASCIIToUTF16("test@gmail.com"); | 33 saved_match_.username_value = ASCIIToUTF16("test@gmail.com"); |
| 34 saved_match_.password_value = ASCIIToUTF16("test1"); | 34 saved_match_.password_value = ASCIIToUTF16("test1"); |
| 35 profile_ = new TestingProfile(); | 35 profile_ = new TestingProfile(); |
| 36 } | 36 } |
| 37 | 37 |
| 38 // Remove the username and regenerate the profile. | |
| 39 // This function changes the observed_form_ and saved_match_. | |
| 40 // This function should be called at the beginning of tests | |
| 41 // for which there is no username. | |
|
Ilya Sherman
2012/04/26 23:42:42
nit: "no username" -> "no username field".
| |
| 42 void SetUpForNoUsernameTests() { | |
| 43 observed_form_.origin = GURL("http://www.google.com/b/LoginAuth"); | |
| 44 observed_form_.action = GURL("http://www.google.com/b/Login"); | |
| 45 observed_form_.username_element = ASCIIToUTF16(""); | |
| 46 observed_form_.password_element = ASCIIToUTF16("Passwd"); | |
| 47 observed_form_.submit_element = ASCIIToUTF16("signIn"); | |
| 48 observed_form_.signon_realm = "http://www.google.com"; | |
| 49 | |
| 50 saved_match_ = observed_form_; | |
| 51 saved_match_.origin = GURL("http://www.google.com/b/ServiceLoginAuth"); | |
| 52 saved_match_.action = GURL("http://www.google.com/b/ServiceLogin"); | |
| 53 saved_match_.preferred = true; | |
| 54 saved_match_.username_value = ASCIIToUTF16(""); | |
| 55 saved_match_.password_value = ASCIIToUTF16("test2"); | |
| 56 } | |
| 57 | |
| 38 virtual void TearDown() { | 58 virtual void TearDown() { |
| 39 delete profile_; | 59 delete profile_; |
| 40 } | 60 } |
| 41 | 61 |
| 42 PasswordForm* GetPendingCredentials(PasswordFormManager* p) { | 62 PasswordForm* GetPendingCredentials(PasswordFormManager* p) { |
| 43 return &p->pending_credentials_; | 63 return &p->pending_credentials_; |
| 44 } | 64 } |
| 45 | 65 |
| 46 void SimulateMatchingPhase(PasswordFormManager* p, bool find_match) { | 66 void SimulateMatchingPhase(PasswordFormManager* p, bool find_match) { |
| 47 // Roll up the state to mock out the matching phase. | 67 // Roll up the state to mock out the matching phase. |
| 48 p->state_ = PasswordFormManager::POST_MATCHING_PHASE; | 68 p->state_ = PasswordFormManager::POST_MATCHING_PHASE; |
| 49 if (!find_match) | 69 if (!find_match) |
| 50 return; | 70 return; |
| 51 | 71 |
| 52 PasswordForm* match = new PasswordForm(saved_match_); | 72 PasswordForm* match = new PasswordForm(saved_match_); |
| 53 // Heap-allocated form is owned by p. | 73 // Heap-allocated form is owned by p. |
| 54 p->best_matches_[match->username_value] = match; | 74 p->best_matches_[match->username_value] = match; |
| 55 p->preferred_match_ = match; | 75 p->preferred_match_ = match; |
| 56 } | 76 } |
| 57 | 77 |
| 58 bool IgnoredResult(PasswordFormManager* p, PasswordForm* form) { | 78 bool IgnoredResult(PasswordFormManager* p, PasswordForm* form) { |
| 59 return p->IgnoreResult(*form); | 79 return p->IgnoreResult(*form); |
| 60 } | 80 } |
| 61 | 81 |
| 82 void VerifyNewLogin(PasswordFormManager* manager) { | |
| 83 // Successful login. The PasswordManager would instruct PasswordFormManager | |
| 84 // to save, which should know this is a new login. | |
| 85 EXPECT_TRUE(manager->IsNewLogin()); | |
| 86 // Make sure the credentials that would be submitted on successful login | |
| 87 // are going to match the stored entry in the db. | |
| 88 EXPECT_EQ(observed_form()->origin.spec(), | |
| 89 GetPendingCredentials(manager)->origin.spec()); | |
| 90 EXPECT_EQ(observed_form()->signon_realm, | |
| 91 GetPendingCredentials(manager)->signon_realm); | |
| 92 EXPECT_TRUE(GetPendingCredentials(manager)->preferred); | |
| 93 EXPECT_EQ(saved_match()->password_value, | |
| 94 GetPendingCredentials(manager)->password_value); | |
| 95 EXPECT_EQ(saved_match()->username_value, | |
| 96 GetPendingCredentials(manager)->username_value); | |
| 97 } | |
| 98 | |
| 99 void TestEmptyAction() { | |
| 100 scoped_ptr<PasswordFormManager> manager(new PasswordFormManager( | |
| 101 profile(), NULL, *observed_form(), false)); | |
| 102 | |
| 103 saved_match()->action = GURL(); | |
| 104 SimulateMatchingPhase(manager.get(), true); | |
| 105 // User logs in with the autofilled username / password from saved_match. | |
| 106 PasswordForm login = *observed_form(); | |
| 107 login.username_value = saved_match()->username_value; | |
| 108 login.password_value = saved_match()->password_value; | |
| 109 manager->ProvisionallySave(login); | |
| 110 EXPECT_FALSE(manager->IsNewLogin()); | |
| 111 // We bless our saved PasswordForm entry with the action URL of the | |
| 112 // observed form. | |
| 113 EXPECT_EQ(observed_form()->action, | |
| 114 GetPendingCredentials(manager.get())->action); | |
| 115 } | |
| 116 | |
| 117 void TestValidForms() { | |
| 118 // User submits credentials for the observed form. | |
| 119 PasswordForm credentials = *observed_form(); | |
| 120 credentials.scheme = PasswordForm::SCHEME_HTML; | |
| 121 credentials.username_value = saved_match()->username_value; | |
| 122 credentials.password_value = saved_match()->password_value; | |
| 123 | |
| 124 // Form with both username_element and password_element. | |
| 125 PasswordFormManager manager1(profile(), NULL, credentials, false); | |
| 126 SimulateMatchingPhase(&manager1, false); | |
| 127 EXPECT_TRUE(manager1.HasValidPasswordForm()); | |
| 128 | |
| 129 // Form without a username_element but with a password_element. | |
| 130 // It should be true, because we should save and autofill a password | |
| 131 // if there isn't any username. | |
| 132 credentials.username_element.clear(); | |
| 133 PasswordFormManager manager2(profile(), NULL, credentials, false); | |
| 134 SimulateMatchingPhase(&manager2, false); | |
| 135 EXPECT_TRUE(manager2.HasValidPasswordForm()); | |
| 136 | |
| 137 // Form without a password_element but with a username_element. | |
| 138 credentials.username_element = saved_match()->username_element; | |
| 139 credentials.password_element.clear(); | |
| 140 PasswordFormManager manager3(profile(), NULL, credentials, false); | |
| 141 SimulateMatchingPhase(&manager3, false); | |
| 142 EXPECT_FALSE(manager3.HasValidPasswordForm()); | |
| 143 | |
| 144 // Form with neither a password_element nor a username_element. | |
| 145 credentials.username_element.clear(); | |
| 146 credentials.password_element.clear(); | |
| 147 PasswordFormManager manager4(profile(), NULL, credentials, false); | |
| 148 SimulateMatchingPhase(&manager4, false); | |
| 149 EXPECT_FALSE(manager4.HasValidPasswordForm()); | |
| 150 } | |
| 151 | |
| 152 void TestValidFormsBasic() { | |
| 153 // User submits credentials for the observed form. | |
| 154 PasswordForm credentials = *observed_form(); | |
| 155 credentials.scheme = PasswordForm::SCHEME_BASIC; | |
| 156 credentials.username_value = saved_match()->username_value; | |
| 157 credentials.password_value = saved_match()->password_value; | |
| 158 | |
| 159 // Form with both username_element and password_element. | |
| 160 PasswordFormManager manager1(profile(), NULL, credentials, false); | |
| 161 SimulateMatchingPhase(&manager1, false); | |
| 162 EXPECT_TRUE(manager1.HasValidPasswordForm()); | |
| 163 | |
| 164 // Form without a username_element but with a password_element. | |
| 165 credentials.username_element.clear(); | |
| 166 PasswordFormManager manager2(profile(), NULL, credentials, false); | |
| 167 SimulateMatchingPhase(&manager2, false); | |
| 168 EXPECT_TRUE(manager2.HasValidPasswordForm()); | |
| 169 | |
| 170 // Form without a password_element but with a username_element. | |
| 171 credentials.username_element = saved_match()->username_element; | |
| 172 credentials.password_element.clear(); | |
| 173 PasswordFormManager manager3(profile(), NULL, credentials, false); | |
| 174 SimulateMatchingPhase(&manager3, false); | |
| 175 EXPECT_TRUE(manager3.HasValidPasswordForm()); | |
| 176 | |
| 177 // Form with neither a password_element nor a username_element. | |
| 178 credentials.username_element.clear(); | |
| 179 credentials.password_element.clear(); | |
| 180 PasswordFormManager manager4(profile(), NULL, credentials, false); | |
| 181 SimulateMatchingPhase(&manager4, false); | |
| 182 EXPECT_TRUE(manager4.HasValidPasswordForm()); | |
| 183 } | |
| 184 | |
| 62 Profile* profile() { return profile_; } | 185 Profile* profile() { return profile_; } |
| 63 | 186 |
| 64 PasswordForm* observed_form() { return &observed_form_; } | 187 PasswordForm* observed_form() { return &observed_form_; } |
| 65 PasswordForm* saved_match() { return &saved_match_; } | 188 PasswordForm* saved_match() { return &saved_match_; } |
| 66 | 189 |
| 67 private: | 190 private: |
| 68 PasswordForm observed_form_; | 191 PasswordForm observed_form_; |
| 69 PasswordForm saved_match_; | 192 PasswordForm saved_match_; |
| 70 Profile* profile_; | 193 Profile* profile_; |
| 71 }; | 194 }; |
| 72 | 195 |
| 73 TEST_F(PasswordFormManagerTest, TestNewLogin) { | 196 TEST_F(PasswordFormManagerTest, TestNewLogin) { |
| 74 PasswordFormManager* manager = new PasswordFormManager( | 197 PasswordFormManager manager(profile(), NULL, *observed_form(), false); |
| 75 profile(), NULL, *observed_form(), false); | 198 SimulateMatchingPhase(&manager, false); |
| 76 SimulateMatchingPhase(manager, false); | |
| 77 // User submits credentials for the observed form. | 199 // User submits credentials for the observed form. |
| 78 PasswordForm credentials = *observed_form(); | 200 PasswordForm credentials = *observed_form(); |
| 79 credentials.username_value = saved_match()->username_value; | 201 credentials.username_value = saved_match()->username_value; |
| 80 credentials.password_value = saved_match()->password_value; | 202 credentials.password_value = saved_match()->password_value; |
| 81 credentials.preferred = true; | 203 credentials.preferred = true; |
| 82 manager->ProvisionallySave(credentials); | 204 manager.ProvisionallySave(credentials); |
| 83 | 205 VerifyNewLogin(&manager); |
| 84 // Successful login. The PasswordManager would instruct PasswordFormManager | |
| 85 // to save, which should know this is a new login. | |
| 86 EXPECT_TRUE(manager->IsNewLogin()); | |
| 87 // Make sure the credentials that would be submitted on successful login | |
| 88 // are going to match the stored entry in the db. | |
| 89 EXPECT_EQ(observed_form()->origin.spec(), | |
| 90 GetPendingCredentials(manager)->origin.spec()); | |
| 91 EXPECT_EQ(observed_form()->signon_realm, | |
| 92 GetPendingCredentials(manager)->signon_realm); | |
| 93 EXPECT_TRUE(GetPendingCredentials(manager)->preferred); | |
| 94 EXPECT_EQ(saved_match()->password_value, | |
| 95 GetPendingCredentials(manager)->password_value); | |
| 96 EXPECT_EQ(saved_match()->username_value, | |
| 97 GetPendingCredentials(manager)->username_value); | |
| 98 | 206 |
| 99 // Now, suppose the user re-visits the site and wants to save an additional | 207 // Now, suppose the user re-visits the site and wants to save an additional |
| 100 // login for the site with a new username. In this case, the matching phase | 208 // login for the site with a new username. In this case, the matching phase |
| 101 // will yield the previously saved login. | 209 // will yield the previously saved login. |
| 102 SimulateMatchingPhase(manager, true); | 210 SimulateMatchingPhase(&manager, true); |
| 103 // Set up the new login. | 211 // Set up the new login. |
| 104 string16 new_user = ASCIIToUTF16("newuser"); | 212 string16 new_user = ASCIIToUTF16("newuser"); |
| 105 string16 new_pass = ASCIIToUTF16("newpass"); | 213 string16 new_pass = ASCIIToUTF16("newpass"); |
| 106 credentials.username_value = new_user; | 214 credentials.username_value = new_user; |
| 107 credentials.password_value = new_pass; | 215 credentials.password_value = new_pass; |
| 108 manager->ProvisionallySave(credentials); | 216 manager.ProvisionallySave(credentials); |
| 109 | 217 |
| 110 // Again, the PasswordFormManager should know this is still a new login. | 218 // Again, the PasswordFormManager should know this is still a new login. |
| 111 EXPECT_TRUE(manager->IsNewLogin()); | 219 EXPECT_TRUE(manager.IsNewLogin()); |
| 112 // And make sure everything squares up again. | 220 // And make sure everything squares up again. |
| 113 EXPECT_EQ(observed_form()->origin.spec(), | 221 EXPECT_EQ(observed_form()->origin.spec(), |
| 114 GetPendingCredentials(manager)->origin.spec()); | 222 GetPendingCredentials(&manager)->origin.spec()); |
| 115 EXPECT_EQ(observed_form()->signon_realm, | 223 EXPECT_EQ(observed_form()->signon_realm, |
| 116 GetPendingCredentials(manager)->signon_realm); | 224 GetPendingCredentials(&manager)->signon_realm); |
| 117 EXPECT_TRUE(GetPendingCredentials(manager)->preferred); | 225 EXPECT_TRUE(GetPendingCredentials(&manager)->preferred); |
| 118 EXPECT_EQ(new_pass, | 226 EXPECT_EQ(new_pass, |
| 119 GetPendingCredentials(manager)->password_value); | 227 GetPendingCredentials(&manager)->password_value); |
| 120 EXPECT_EQ(new_user, | 228 EXPECT_EQ(new_user, |
| 121 GetPendingCredentials(manager)->username_value); | 229 GetPendingCredentials(&manager)->username_value); |
| 122 // Done. | 230 // Done. |
| 123 delete manager; | |
| 124 } | 231 } |
| 125 | 232 |
| 233 TEST_F(PasswordFormManagerTest, TestNewLoginAndUpdateWithoutUsername) { | |
| 234 SetUpForNoUsernameTests(); | |
| 235 PasswordFormManager manager(profile(), NULL, *observed_form(), false); | |
| 236 SimulateMatchingPhase(&manager, false); | |
| 237 | |
| 238 // User submits credentials for the observed form. | |
| 239 PasswordForm credentials = *observed_form(); | |
| 240 credentials.username_value = saved_match()->username_value; | |
| 241 credentials.password_value = saved_match()->password_value; | |
| 242 credentials.preferred = true; | |
| 243 manager.ProvisionallySave(credentials); | |
| 244 VerifyNewLogin(&manager); | |
| 245 | |
| 246 // Now, suppose the user re-visits the site and wants to save an additional | |
| 247 // login for the site with a new password. In this case, the matching phase | |
| 248 // will yield the previously saved login. | |
| 249 SimulateMatchingPhase(&manager, true); | |
| 250 | |
| 251 // Set up the update login. | |
| 252 string16 new_pass = ASCIIToUTF16("newpass2"); | |
| 253 credentials.password_value = new_pass; | |
| 254 manager.ProvisionallySave(credentials); | |
| 255 | |
| 256 // If there is no username, we assume it's an update. | |
| 257 EXPECT_FALSE(manager.IsNewLogin()); | |
| 258 | |
| 259 // And make sure everything squares up again. | |
| 260 EXPECT_EQ(saved_match()->origin.spec(), | |
| 261 GetPendingCredentials(&manager)->origin.spec()); | |
| 262 EXPECT_EQ(saved_match()->signon_realm, | |
| 263 GetPendingCredentials(&manager)->signon_realm); | |
| 264 EXPECT_TRUE(GetPendingCredentials(&manager)->preferred); | |
| 265 EXPECT_EQ(new_pass, | |
| 266 GetPendingCredentials(&manager)->password_value); | |
| 267 } | |
| 268 | |
| 269 | |
| 126 TEST_F(PasswordFormManagerTest, TestUpdatePassword) { | 270 TEST_F(PasswordFormManagerTest, TestUpdatePassword) { |
| 127 // Create a PasswordFormManager with observed_form, as if we just | 271 // Create a PasswordFormManager with observed_form, as if we just |
| 128 // saw this form and need to find matching logins. | 272 // saw this form and need to find matching logins. |
| 129 PasswordFormManager* manager = new PasswordFormManager( | 273 PasswordFormManager* manager = new PasswordFormManager( |
| 130 profile(), NULL, *observed_form(), false); | 274 profile(), NULL, *observed_form(), false); |
| 131 SimulateMatchingPhase(manager, true); | 275 SimulateMatchingPhase(manager, true); |
| 132 | 276 |
| 133 // User submits credentials for the observed form using a username previously | 277 // User submits credentials for the observed form using a username previously |
| 134 // stored, but a new password. Note that the observed form may have different | 278 // stored, but a new password. Note that the observed form may have different |
| 135 // origin URL (as it does in this case) than the saved_match, but we want to | 279 // origin URL (as it does in this case) than the saved_match, but we want to |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 173 // Different paths for action / origin are okay. | 317 // Different paths for action / origin are okay. |
| 174 saved_match()->action = GURL("http://www.google.com/b/Login"); | 318 saved_match()->action = GURL("http://www.google.com/b/Login"); |
| 175 saved_match()->origin = GURL("http://www.google.com/foo"); | 319 saved_match()->origin = GURL("http://www.google.com/foo"); |
| 176 EXPECT_FALSE(IgnoredResult(manager, saved_match())); | 320 EXPECT_FALSE(IgnoredResult(manager, saved_match())); |
| 177 | 321 |
| 178 // Done. | 322 // Done. |
| 179 delete manager; | 323 delete manager; |
| 180 } | 324 } |
| 181 | 325 |
| 182 TEST_F(PasswordFormManagerTest, TestEmptyAction) { | 326 TEST_F(PasswordFormManagerTest, TestEmptyAction) { |
| 183 scoped_ptr<PasswordFormManager> manager(new PasswordFormManager( | 327 TestEmptyAction(); |
| 184 profile(), NULL, *observed_form(), false)); | 328 } |
| 185 | 329 |
| 186 saved_match()->action = GURL(); | 330 TEST_F(PasswordFormManagerTest, TestEmptyActionWithoutUsername) { |
| 187 SimulateMatchingPhase(manager.get(), true); | 331 SetUpForNoUsernameTests(); |
| 188 // User logs in with the autofilled username / password from saved_match. | 332 TestEmptyAction(); |
| 189 PasswordForm login = *observed_form(); | |
| 190 login.username_value = saved_match()->username_value; | |
| 191 login.password_value = saved_match()->password_value; | |
| 192 manager->ProvisionallySave(login); | |
| 193 EXPECT_FALSE(manager->IsNewLogin()); | |
| 194 // We bless our saved PasswordForm entry with the action URL of the | |
| 195 // observed form. | |
| 196 EXPECT_EQ(observed_form()->action, | |
| 197 GetPendingCredentials(manager.get())->action); | |
| 198 } | 333 } |
| 199 | 334 |
| 200 TEST_F(PasswordFormManagerTest, TestValidForms) { | 335 TEST_F(PasswordFormManagerTest, TestValidForms) { |
| 201 // User submits credentials for the observed form. | 336 TestValidForms(); |
| 202 PasswordForm credentials = *observed_form(); | 337 } |
| 203 credentials.scheme = PasswordForm::SCHEME_HTML; | |
| 204 credentials.username_value = saved_match()->username_value; | |
| 205 credentials.password_value = saved_match()->password_value; | |
| 206 | 338 |
| 207 // Form with both username_element and password_element. | 339 TEST_F(PasswordFormManagerTest, TestValidFormsWithNoUsername) { |
| 208 PasswordFormManager manager1(profile(), NULL, credentials, false); | 340 SetUpForNoUsernameTests(); |
| 209 SimulateMatchingPhase(&manager1, false); | 341 TestValidForms(); |
| 210 EXPECT_TRUE(manager1.HasValidPasswordForm()); | |
| 211 | |
| 212 // Form without a username_element but with a password_element. | |
| 213 credentials.username_element.clear(); | |
| 214 PasswordFormManager manager2(profile(), NULL, credentials, false); | |
| 215 SimulateMatchingPhase(&manager2, false); | |
| 216 EXPECT_FALSE(manager2.HasValidPasswordForm()); | |
| 217 | |
| 218 // Form without a password_element but with a username_element. | |
| 219 credentials.username_element = saved_match()->username_element; | |
| 220 credentials.password_element.clear(); | |
| 221 PasswordFormManager manager3(profile(), NULL, credentials, false); | |
| 222 SimulateMatchingPhase(&manager3, false); | |
| 223 EXPECT_FALSE(manager3.HasValidPasswordForm()); | |
| 224 | |
| 225 // Form with neither a password_element nor a username_element. | |
| 226 credentials.username_element.clear(); | |
| 227 credentials.password_element.clear(); | |
| 228 PasswordFormManager manager4(profile(), NULL, credentials, false); | |
| 229 SimulateMatchingPhase(&manager4, false); | |
| 230 EXPECT_FALSE(manager4.HasValidPasswordForm()); | |
| 231 } | 342 } |
| 232 | 343 |
| 233 TEST_F(PasswordFormManagerTest, TestValidFormsBasic) { | 344 TEST_F(PasswordFormManagerTest, TestValidFormsBasic) { |
| 234 // User submits credentials for the observed form. | 345 TestValidFormsBasic(); |
| 346 } | |
| 347 | |
| 348 TEST_F(PasswordFormManagerTest, TestValidFormsBasicWithoutUsername) { | |
| 349 SetUpForNoUsernameTests(); | |
| 350 TestValidFormsBasic(); | |
| 351 } | |
| 352 | |
| 353 TEST_F(PasswordFormManagerTest, TestVisitOtherForm) { | |
| 354 // Create forms haven't username element. | |
| 355 SetUpForNoUsernameTests(); | |
| 356 | |
| 357 // Save the password for a form with no username element | |
| 358 // on http://www.google.com/b/LoginAuth | |
| 359 PasswordFormManager manager(profile(), NULL, *observed_form(), false); | |
| 360 SimulateMatchingPhase(&manager, false); | |
| 235 PasswordForm credentials = *observed_form(); | 361 PasswordForm credentials = *observed_form(); |
| 236 credentials.scheme = PasswordForm::SCHEME_BASIC; | |
| 237 credentials.username_value = saved_match()->username_value; | 362 credentials.username_value = saved_match()->username_value; |
| 238 credentials.password_value = saved_match()->password_value; | 363 credentials.password_value = saved_match()->password_value; |
| 364 credentials.preferred = true; | |
| 365 manager.ProvisionallySave(credentials); | |
| 366 VerifyNewLogin(&manager); | |
| 239 | 367 |
|
Ilya Sherman
2012/04/26 23:42:42
nit: Please remove this blank line (367)
| |
| 240 // Form with both username_element and password_element. | |
| 241 PasswordFormManager manager1(profile(), NULL, credentials, false); | |
| 242 SimulateMatchingPhase(&manager1, false); | |
| 243 EXPECT_TRUE(manager1.HasValidPasswordForm()); | |
| 244 | |
| 245 // Form without a username_element but with a password_element. | |
| 246 credentials.username_element.clear(); | |
| 247 PasswordFormManager manager2(profile(), NULL, credentials, false); | |
| 248 SimulateMatchingPhase(&manager2, false); | |
| 249 EXPECT_TRUE(manager2.HasValidPasswordForm()); | |
| 250 | |
| 251 // Form without a password_element but with a username_element. | |
| 252 credentials.username_element = saved_match()->username_element; | |
| 253 credentials.password_element.clear(); | |
| 254 PasswordFormManager manager3(profile(), NULL, credentials, false); | |
| 255 SimulateMatchingPhase(&manager3, false); | |
| 256 EXPECT_TRUE(manager3.HasValidPasswordForm()); | |
| 257 | |
| 258 // Form with neither a password_element nor a username_element. | |
| 259 credentials.username_element.clear(); | |
| 260 credentials.password_element.clear(); | |
| 261 PasswordFormManager manager4(profile(), NULL, credentials, false); | |
| 262 SimulateMatchingPhase(&manager4, false); | |
| 263 EXPECT_TRUE(manager4.HasValidPasswordForm()); | |
| 264 } | 368 } |
| OLD | NEW |