OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "base/memory/scoped_ptr.h" | 5 #include "base/memory/scoped_ptr.h" |
6 #include "base/message_loop/message_loop.h" | 6 #include "base/message_loop/message_loop.h" |
7 #include "base/prefs/pref_registry_simple.h" | 7 #include "base/prefs/pref_registry_simple.h" |
8 #include "base/prefs/pref_service.h" | 8 #include "base/prefs/pref_service.h" |
9 #include "base/prefs/testing_pref_service.h" | 9 #include "base/prefs/testing_pref_service.h" |
10 #include "base/run_loop.h" | 10 #include "base/run_loop.h" |
(...skipping 405 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
416 | 416 |
417 // Can't verify time, so ignore it. | 417 // Can't verify time, so ignore it. |
418 actual_saved_form.date_created = base::Time(); | 418 actual_saved_form.date_created = base::Time(); |
419 EXPECT_EQ(expected_saved_form, actual_saved_form); | 419 EXPECT_EQ(expected_saved_form, actual_saved_form); |
420 } | 420 } |
421 | 421 |
422 TEST_F(PasswordFormManagerTest, TestNewLoginFromNewPasswordElement) { | 422 TEST_F(PasswordFormManagerTest, TestNewLoginFromNewPasswordElement) { |
423 // Add a new password field to the test form. The PasswordFormManager should | 423 // Add a new password field to the test form. The PasswordFormManager should |
424 // save the password from this field, instead of the current password field. | 424 // save the password from this field, instead of the current password field. |
425 observed_form()->new_password_element = ASCIIToUTF16("NewPasswd"); | 425 observed_form()->new_password_element = ASCIIToUTF16("NewPasswd"); |
| 426 observed_form()->username_marked_by_site = true; |
426 | 427 |
427 PasswordFormManager manager(NULL, client(), kNoDriver, *observed_form(), | 428 PasswordFormManager manager(NULL, client(), kNoDriver, *observed_form(), |
428 false); | 429 false); |
429 SimulateMatchingPhase(&manager, RESULT_NO_MATCH); | 430 SimulateMatchingPhase(&manager, RESULT_NO_MATCH); |
430 | 431 |
431 // User enters current and new credentials to the observed form. | 432 // User enters current and new credentials to the observed form. |
432 PasswordForm credentials(*observed_form()); | 433 PasswordForm credentials(*observed_form()); |
433 credentials.username_value = saved_match()->username_value; | 434 credentials.username_value = saved_match()->username_value; |
434 credentials.password_value = saved_match()->password_value; | 435 credentials.password_value = saved_match()->password_value; |
435 credentials.new_password_value = ASCIIToUTF16("newpassword"); | 436 credentials.new_password_value = ASCIIToUTF16("newpassword"); |
(...skipping 930 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1366 | 1367 |
1367 form_manager.OnGetPasswordStoreResults(simulated_results.Pass()); | 1368 form_manager.OnGetPasswordStoreResults(simulated_results.Pass()); |
1368 EXPECT_EQ(1u, form_manager.best_matches().size()); | 1369 EXPECT_EQ(1u, form_manager.best_matches().size()); |
1369 EXPECT_EQ(form_manager.preferred_match(), | 1370 EXPECT_EQ(form_manager.preferred_match(), |
1370 form_manager.best_matches().begin()->second); | 1371 form_manager.best_matches().begin()->second); |
1371 // Make sure to access all fields of preferred_match; this way if it was | 1372 // Make sure to access all fields of preferred_match; this way if it was |
1372 // deleted, ASAN might notice it. | 1373 // deleted, ASAN might notice it. |
1373 PasswordForm dummy(*form_manager.preferred_match()); | 1374 PasswordForm dummy(*form_manager.preferred_match()); |
1374 } | 1375 } |
1375 | 1376 |
| 1377 TEST_F(PasswordFormManagerTest, |
| 1378 IsIngnorableChangePasswordForm_MatchingUsernameAndPassword) { |
| 1379 observed_form()->new_password_element = |
| 1380 base::ASCIIToUTF16("new_password_field"); |
| 1381 |
| 1382 TestPasswordManagerClient client_with_store(mock_store()); |
| 1383 PasswordFormManager manager(nullptr, &client_with_store, |
| 1384 client_with_store.driver(), *observed_form(), |
| 1385 false); |
| 1386 SimulateMatchingPhase(&manager, RESULT_MATCH_FOUND); |
| 1387 |
| 1388 // The user submits a password on a change-password form, which does not use |
| 1389 // the "autocomplete=username" mark-up (therefore Chrome had to guess what is |
| 1390 // the username), but the user-typed credentials match something already |
| 1391 // stored (which confirms that the guess was right). |
| 1392 PasswordForm credentials(*observed_form()); |
| 1393 credentials.username_value = saved_match()->username_value; |
| 1394 credentials.password_value = saved_match()->password_value; |
| 1395 credentials.new_password_value = ASCIIToUTF16("NewPassword"); |
| 1396 |
| 1397 EXPECT_FALSE(manager.IsIgnorableChangePasswordForm( |
| 1398 credentials.username_value, credentials.password_value)); |
| 1399 } |
| 1400 |
| 1401 TEST_F(PasswordFormManagerTest, |
| 1402 IsIngnorableChangePasswordForm_NotMatchingPassword) { |
| 1403 observed_form()->new_password_element = |
| 1404 base::ASCIIToUTF16("new_password_field"); |
| 1405 |
| 1406 TestPasswordManagerClient client_with_store(mock_store()); |
| 1407 PasswordFormManager manager(nullptr, &client_with_store, |
| 1408 client_with_store.driver(), *observed_form(), |
| 1409 false); |
| 1410 SimulateMatchingPhase(&manager, RESULT_MATCH_FOUND); |
| 1411 |
| 1412 // The user submits a password on a change-password form, which does not use |
| 1413 // the "autocomplete=username" mark-up (therefore Chrome had to guess what is |
| 1414 // the username), and the user-typed password do not match anything already |
| 1415 // stored. There is not much confidence in the guess being right, so the |
| 1416 // password should not be stored. |
| 1417 EXPECT_TRUE(manager.IsIgnorableChangePasswordForm( |
| 1418 saved_match()->username_value, ASCIIToUTF16("DifferentPassword"))); |
| 1419 } |
| 1420 |
| 1421 TEST_F(PasswordFormManagerTest, |
| 1422 IsIngnorableChangePasswordForm_NotMatchingUsername) { |
| 1423 observed_form()->new_password_element = |
| 1424 base::ASCIIToUTF16("new_password_field"); |
| 1425 |
| 1426 TestPasswordManagerClient client_with_store(mock_store()); |
| 1427 PasswordFormManager manager(nullptr, &client_with_store, |
| 1428 client_with_store.driver(), *observed_form(), |
| 1429 false); |
| 1430 SimulateMatchingPhase(&manager, RESULT_MATCH_FOUND); |
| 1431 |
| 1432 // The user submits a password on a change-password form, which does not use |
| 1433 // the "autocomplete=username" mark-up (therefore Chrome had to guess what is |
| 1434 // the username), and the user-typed username does not match anything already |
| 1435 // stored. There is not much confidence in the guess being right, so the |
| 1436 // password should not be stored. |
| 1437 EXPECT_TRUE(manager.IsIgnorableChangePasswordForm( |
| 1438 ASCIIToUTF16("DifferentUsername"), saved_match()->password_value)); |
| 1439 } |
| 1440 |
1376 } // namespace password_manager | 1441 } // namespace password_manager |
OLD | NEW |