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

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: Addressed review comments. 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 374 matching lines...) Expand 10 before | Expand all | Expand 10 after
385 385
386 // Can't verify time, so ignore it. 386 // Can't verify time, so ignore it.
387 actual_saved_form.date_created = base::Time(); 387 actual_saved_form.date_created = base::Time();
388 EXPECT_EQ(expected_saved_form, actual_saved_form); 388 EXPECT_EQ(expected_saved_form, actual_saved_form);
389 } 389 }
390 390
391 TEST_F(PasswordFormManagerTest, TestNewLoginFromNewPasswordElement) { 391 TEST_F(PasswordFormManagerTest, TestNewLoginFromNewPasswordElement) {
392 // Add a new password field to the test form. The PasswordFormManager should 392 // Add a new password field to the test form. The PasswordFormManager should
393 // save the password from this field, instead of the current password field. 393 // save the password from this field, instead of the current password field.
394 observed_form()->new_password_element = ASCIIToUTF16("NewPasswd"); 394 observed_form()->new_password_element = ASCIIToUTF16("NewPasswd");
395 observed_form()->username_marked_by_site = true;
395 396
396 PasswordFormManager manager(NULL, client(), kNoDriver, *observed_form(), 397 PasswordFormManager manager(NULL, client(), kNoDriver, *observed_form(),
397 false); 398 false);
398 SimulateMatchingPhase(&manager, RESULT_NO_MATCH); 399 SimulateMatchingPhase(&manager, RESULT_NO_MATCH);
399 400
400 // User enters current and new credentials to the observed form. 401 // User enters current and new credentials to the observed form.
401 PasswordForm credentials(*observed_form()); 402 PasswordForm credentials(*observed_form());
402 credentials.username_value = saved_match()->username_value; 403 credentials.username_value = saved_match()->username_value;
403 credentials.password_value = saved_match()->password_value; 404 credentials.password_value = saved_match()->password_value;
404 credentials.new_password_value = ASCIIToUTF16("newpassword"); 405 credentials.new_password_value = ASCIIToUTF16("newpassword");
(...skipping 931 matching lines...) Expand 10 before | Expand all | Expand 10 after
1336 form_manager.FetchMatchingLoginsFromPasswordStore(auth_policy); 1337 form_manager.FetchMatchingLoginsFromPasswordStore(auth_policy);
1337 1338
1338 // Suddenly, the frame and its driver disappear. 1339 // Suddenly, the frame and its driver disappear.
1339 client_with_store.KillDriver(); 1340 client_with_store.KillDriver();
1340 1341
1341 std::vector<PasswordForm*> results; 1342 std::vector<PasswordForm*> results;
1342 results.push_back(form.release()); 1343 results.push_back(form.release());
1343 form_manager.OnGetPasswordStoreResults(results); 1344 form_manager.OnGetPasswordStoreResults(results);
1344 } 1345 }
1345 1346
1347 TEST_F(PasswordFormManagerTest,
1348 SubmitIngnorableChangePasswordForm_MatchingUsernameAndPassword) {
1349 observed_form()->new_password_element =
1350 base::ASCIIToUTF16("new_password_field");
1351
1352 TestPasswordManagerClient client_with_store(mock_store());
1353 PasswordFormManager manager(NULL, &client_with_store,
vabr (Chromium) 2015/02/10 18:54:57 NULL -> nullptr Also below. (See http://chromium-c
Pritam Nikam 2015/02/19 11:18:48 Done.
1354 client_with_store.driver(), *observed_form(),
1355 false);
1356 EXPECT_CALL(*client_with_store.mock_driver(), IsOffTheRecord())
vabr (Chromium) 2015/02/10 18:54:57 Does the test really expect that call? If this is
Pritam Nikam 2015/02/19 11:18:48 Done.
1357 .WillRepeatedly(Return(false));
1358 SimulateMatchingPhase(&manager, RESULT_MATCH_FOUND);
1359
1360 // User submits ignorable change-password form (i.e. without
vabr (Chromium) 2015/02/10 18:54:57 Suggested rewording, because "ignorable" has uncle
Pritam Nikam 2015/02/19 11:18:48 Done.
1361 // *autocomplete=username* markup) having matching username and password to
1362 // the stored form.
1363 PasswordForm credentials(*observed_form());
1364 credentials.username_value = saved_match()->username_value;
1365 credentials.password_value = saved_match()->password_value;
1366 credentials.new_password_value = ASCIIToUTF16("NewPassword");
1367 credentials.preferred = true;
vabr (Chromium) 2015/02/10 18:54:57 Does the test actually need |credentials| to be pr
Pritam Nikam 2015/02/19 11:18:48 Done.
1368 manager.ProvisionallySave(
1369 credentials, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
1370
1371 // Successful match found. The PasswordManager should instruct
1372 // PasswordFormManager to overwrite the password for stored form.
1373 EXPECT_FALSE(manager.IsNewLogin());
1374
1375 EXPECT_EQ(credentials.signon_realm,
1376 GetPendingCredentials(&manager)->signon_realm);
1377 EXPECT_EQ(credentials.username_value,
1378 GetPendingCredentials(&manager)->username_value);
1379
1380 // By this point, the PasswordFormManager should have overwritten the new
1381 // password value to be the current password.
1382 EXPECT_EQ(credentials.new_password_value,
1383 GetPendingCredentials(&manager)->password_value);
1384 }
1385
1386 TEST_F(PasswordFormManagerTest,
1387 SubmitIngnorableChangePasswordForm_NotMatchingPassword) {
1388 observed_form()->new_password_element =
1389 base::ASCIIToUTF16("new_password_field");
1390
1391 TestPasswordManagerClient client_with_store(mock_store());
1392 PasswordFormManager manager(NULL, &client_with_store,
1393 client_with_store.driver(), *observed_form(),
1394 false);
1395 EXPECT_CALL(*client_with_store.mock_driver(), IsOffTheRecord())
1396 .WillRepeatedly(Return(false));
1397 SimulateMatchingPhase(&manager, RESULT_MATCH_FOUND);
1398
1399 // User submits ignorable change-password form (i.e. without
vabr (Chromium) 2015/02/10 18:54:57 Suggested rewording: The user submits a password
Pritam Nikam 2015/02/19 11:18:48 Done.
1400 // *autocomplete=username* markup) having non-matching password to the stored
1401 // form.
1402 PasswordForm credentials(*observed_form());
1403 credentials.username_value = saved_match()->username_value;
1404 credentials.password_value = ASCIIToUTF16("DifferntPassword");
1405 credentials.new_password_value = ASCIIToUTF16("NewPassword");
1406 credentials.preferred = true;
1407 manager.ProvisionallySave(
1408 credentials, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
1409
1410 // No match found. Password manager shall not trigger the save or update the
vabr (Chromium) 2015/02/10 18:54:57 Actually, I would be surprised if this test worked
Pritam Nikam 2015/02/19 11:18:48 Instead we will test the public function IsIgnorab
1411 // credentials.
1412 EXPECT_FALSE(manager.IsNewLogin());
vabr (Chromium) 2015/02/10 18:54:57 I suggest dropping this line. It seems to just tes
Pritam Nikam 2015/02/19 11:18:48 Done.
1413 EXPECT_CALL(*mock_store(), UpdateLogin(_)).Times(testing::Exactly(0));
vabr (Chromium) 2015/02/10 18:54:57 You need to put this expectation before the Provis
Pritam Nikam 2015/02/19 11:18:48 Done.
1414 }
1415
1416 TEST_F(PasswordFormManagerTest,
1417 SubmitIngnorableChangePasswordForm_NotMatchingUsername) {
1418 observed_form()->new_password_element =
1419 base::ASCIIToUTF16("new_password_field");
1420
1421 TestPasswordManagerClient client_with_store(mock_store());
1422 PasswordFormManager manager(NULL, &client_with_store,
1423 client_with_store.driver(), *observed_form(),
1424 false);
1425 EXPECT_CALL(*client_with_store.mock_driver(), IsOffTheRecord())
1426 .WillRepeatedly(Return(false));
1427 SimulateMatchingPhase(&manager, RESULT_MATCH_FOUND);
1428
1429 // User submits ignorable change-password form (i.e. without
vabr (Chromium) 2015/02/10 18:54:57 Suggested rewording: The user submits a password
Pritam Nikam 2015/02/19 11:18:48 Done.
1430 // *autocomplete=username* markup) having non-matching username to the stored
1431 // form.
1432 PasswordForm credentials(*observed_form());
1433 credentials.username_value = ASCIIToUTF16("DifferntUsername");
1434 credentials.password_value = saved_match()->password_value;
1435 credentials.new_password_value = ASCIIToUTF16("NewPassword");
1436 credentials.preferred = true;
1437 manager.ProvisionallySave(
1438 credentials, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
1439
1440 // No matching username found. User typed in a new, unknown username.
1441 EXPECT_TRUE(manager.IsNewLogin());
1442 }
1443
1346 } // namespace password_manager 1444 } // namespace password_manager
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698