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

Side by Side Diff: components/password_manager/core/browser/password_form_manager_unittest.cc

Issue 870513002: [PasswordManager] Improve detection of ignorable change password forms. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Incorporated reviews. Created 5 years, 10 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 unified diff | Download patch
OLDNEW
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698