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

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

Issue 2926833002: Revert of [Password Manager] Convert |pending_login_managers_| to an array of scoped_refptr (Closed)
Patch Set: Created 3 years, 6 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 "components/password_manager/core/browser/password_form_manager.h" 5 #include "components/password_manager/core/browser/password_form_manager.h"
6 6
7 #include <map> 7 #include <map>
8 #include <memory> 8 #include <memory>
9 #include <set> 9 #include <set>
10 #include <utility> 10 #include <utility>
(...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after
380 field.name = ASCIIToUTF16("Email"); 380 field.name = ASCIIToUTF16("Email");
381 field.form_control_type = "text"; 381 field.form_control_type = "text";
382 saved_match_.form_data.fields.push_back(field); 382 saved_match_.form_data.fields.push_back(field);
383 383
384 field.label = ASCIIToUTF16("password"); 384 field.label = ASCIIToUTF16("password");
385 field.name = ASCIIToUTF16("Passwd"); 385 field.name = ASCIIToUTF16("Passwd");
386 field.form_control_type = "password"; 386 field.form_control_type = "password";
387 saved_match_.form_data.fields.push_back(field); 387 saved_match_.form_data.fields.push_back(field);
388 388
389 password_manager_.reset(new PasswordManager(&client_)); 389 password_manager_.reset(new PasswordManager(&client_));
390 form_manager_ = base::MakeRefCounted<PasswordFormManager>( 390 form_manager_.reset(new PasswordFormManager(
391 password_manager_.get(), &client_, client_.driver(), observed_form_, 391 password_manager_.get(), &client_, client_.driver(), observed_form_,
392 base::MakeUnique<NiceMock<MockFormSaver>>(), &fake_form_fetcher_); 392 base::MakeUnique<NiceMock<MockFormSaver>>(), &fake_form_fetcher_));
393 } 393 }
394 394
395 // Save saved_match() for observed_form() where |observed_form_data|, 395 // Save saved_match() for observed_form() where |observed_form_data|,
396 // |times_used|, and |status| are used to overwrite the default values for 396 // |times_used|, and |status| are used to overwrite the default values for
397 // observed_form(). |field_type| is the upload that we expect from saving, 397 // observed_form(). |field_type| is the upload that we expect from saving,
398 // with nullptr meaning no upload expected. 398 // with nullptr meaning no upload expected.
399 void AccountCreationUploadTest(const autofill::FormData& observed_form_data, 399 void AccountCreationUploadTest(const autofill::FormData& observed_form_data,
400 int times_used, 400 int times_used,
401 PasswordForm::GenerationUploadStatus status, 401 PasswordForm::GenerationUploadStatus status,
402 const autofill::ServerFieldType* field_type) { 402 const autofill::ServerFieldType* field_type) {
403 PasswordForm form(*observed_form()); 403 PasswordForm form(*observed_form());
404 404
405 form.form_data = observed_form_data; 405 form.form_data = observed_form_data;
406 406
407 FakeFormFetcher fetcher; 407 FakeFormFetcher fetcher;
408 fetcher.Fetch(); 408 fetcher.Fetch();
409 scoped_refptr<PasswordFormManager> form_manager( 409 PasswordFormManager form_manager(
410 base::MakeRefCounted<PasswordFormManager>( 410 password_manager(), client(), client()->driver(), form,
411 password_manager(), client(), client()->driver(), form, 411 base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher);
412 base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher));
413 PasswordForm match = CreateSavedMatch(false); 412 PasswordForm match = CreateSavedMatch(false);
414 match.generation_upload_status = status; 413 match.generation_upload_status = status;
415 match.times_used = times_used; 414 match.times_used = times_used;
416 415
417 PasswordForm form_to_save(form); 416 PasswordForm form_to_save(form);
418 form_to_save.preferred = true; 417 form_to_save.preferred = true;
419 form_to_save.username_element = ASCIIToUTF16("observed-username-field"); 418 form_to_save.username_element = ASCIIToUTF16("observed-username-field");
420 form_to_save.username_value = match.username_value; 419 form_to_save.username_value = match.username_value;
421 form_to_save.password_value = match.password_value; 420 form_to_save.password_value = match.password_value;
422 421
423 fetcher.SetNonFederated({&match}, 0u); 422 fetcher.SetNonFederated({&match}, 0u);
424 std::string expected_login_signature; 423 std::string expected_login_signature;
425 autofill::FormStructure observed_structure(observed_form_data); 424 autofill::FormStructure observed_structure(observed_form_data);
426 autofill::FormStructure pending_structure(saved_match()->form_data); 425 autofill::FormStructure pending_structure(saved_match()->form_data);
427 if (observed_structure.FormSignatureAsStr() != 426 if (observed_structure.FormSignatureAsStr() !=
428 pending_structure.FormSignatureAsStr() && 427 pending_structure.FormSignatureAsStr() &&
429 times_used == 0) { 428 times_used == 0) {
430 expected_login_signature = observed_structure.FormSignatureAsStr(); 429 expected_login_signature = observed_structure.FormSignatureAsStr();
431 } 430 }
432 autofill::ServerFieldTypeSet expected_available_field_types; 431 autofill::ServerFieldTypeSet expected_available_field_types;
433 FieldTypeMap expected_types; 432 FieldTypeMap expected_types;
434 expected_types[ASCIIToUTF16("full_name")] = autofill::UNKNOWN_TYPE; 433 expected_types[ASCIIToUTF16("full_name")] = autofill::UNKNOWN_TYPE;
435 expected_types[match.username_element] = autofill::UNKNOWN_TYPE; 434 expected_types[match.username_element] = autofill::UNKNOWN_TYPE;
436 435
437 bool expect_generation_vote = false; 436 bool expect_generation_vote = false;
438 if (field_type) { 437 if (field_type) {
439 // Show the password generation popup to check that the generation vote 438 // Show the password generation popup to check that the generation vote
440 // would be ignored. 439 // would be ignored.
441 form_manager->set_generation_element(saved_match()->password_element); 440 form_manager.set_generation_element(saved_match()->password_element);
442 form_manager->set_generation_popup_was_shown(true); 441 form_manager.set_generation_popup_was_shown(true);
443 expect_generation_vote = 442 expect_generation_vote =
444 *field_type != autofill::ACCOUNT_CREATION_PASSWORD; 443 *field_type != autofill::ACCOUNT_CREATION_PASSWORD;
445 444
446 expected_available_field_types.insert(*field_type); 445 expected_available_field_types.insert(*field_type);
447 expected_types[saved_match()->password_element] = *field_type; 446 expected_types[saved_match()->password_element] = *field_type;
448 } 447 }
449 448
450 if (field_type) { 449 if (field_type) {
451 EXPECT_CALL( 450 EXPECT_CALL(
452 *client()->mock_driver()->mock_autofill_download_manager(), 451 *client()->mock_driver()->mock_autofill_download_manager(),
453 StartUploadRequest(CheckUploadedAutofillTypesAndSignature( 452 StartUploadRequest(CheckUploadedAutofillTypesAndSignature(
454 pending_structure.FormSignatureAsStr(), 453 pending_structure.FormSignatureAsStr(),
455 expected_types, expect_generation_vote), 454 expected_types, expect_generation_vote),
456 false, expected_available_field_types, 455 false, expected_available_field_types,
457 expected_login_signature, true)); 456 expected_login_signature, true));
458 } else { 457 } else {
459 EXPECT_CALL(*client()->mock_driver()->mock_autofill_download_manager(), 458 EXPECT_CALL(*client()->mock_driver()->mock_autofill_download_manager(),
460 StartUploadRequest(_, _, _, _, _)) 459 StartUploadRequest(_, _, _, _, _))
461 .Times(0); 460 .Times(0);
462 } 461 }
463 form_manager->ProvisionallySave( 462 form_manager.ProvisionallySave(
464 form_to_save, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); 463 form_to_save, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
465 form_manager->Save(); 464 form_manager.Save();
466 Mock::VerifyAndClearExpectations( 465 Mock::VerifyAndClearExpectations(
467 client()->mock_driver()->mock_autofill_download_manager()); 466 client()->mock_driver()->mock_autofill_download_manager());
468 } 467 }
469 468
470 // Test upload votes on change password forms. |field_type| is a vote that we 469 // Test upload votes on change password forms. |field_type| is a vote that we
471 // expect to be uploaded. 470 // expect to be uploaded.
472 void ChangePasswordUploadTest(autofill::ServerFieldType field_type, 471 void ChangePasswordUploadTest(autofill::ServerFieldType field_type,
473 bool has_confirmation_field) { 472 bool has_confirmation_field) {
474 SCOPED_TRACE(testing::Message() 473 SCOPED_TRACE(testing::Message()
475 << "field_type=" << field_type 474 << "field_type=" << field_type
(...skipping 13 matching lines...) Expand all
489 observed_form()->form_data.fields.push_back(empty_field); 488 observed_form()->form_data.fields.push_back(empty_field);
490 if (has_confirmation_field) { 489 if (has_confirmation_field) {
491 field.label = ASCIIToUTF16("ConfPwd"); 490 field.label = ASCIIToUTF16("ConfPwd");
492 field.name = ASCIIToUTF16("ConfPwd"); 491 field.name = ASCIIToUTF16("ConfPwd");
493 field.form_control_type = "password"; 492 field.form_control_type = "password";
494 observed_form()->form_data.fields.push_back(field); 493 observed_form()->form_data.fields.push_back(field);
495 } 494 }
496 495
497 FakeFormFetcher fetcher; 496 FakeFormFetcher fetcher;
498 fetcher.Fetch(); 497 fetcher.Fetch();
499 scoped_refptr<PasswordFormManager> form_manager( 498 PasswordFormManager form_manager(
500 base::MakeRefCounted<PasswordFormManager>( 499 password_manager(), client(), client()->driver(), *observed_form(),
501 password_manager(), client(), client()->driver(), *observed_form(), 500 base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher);
502 base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher));
503 fetcher.SetNonFederated({saved_match()}, 0u); 501 fetcher.SetNonFederated({saved_match()}, 0u);
504 502
505 // User submits current and new credentials to the observed form. 503 // User submits current and new credentials to the observed form.
506 PasswordForm submitted_form(*observed_form()); 504 PasswordForm submitted_form(*observed_form());
507 // credentials.username_element.clear(); 505 // credentials.username_element.clear();
508 submitted_form.username_value = saved_match()->username_value; 506 submitted_form.username_value = saved_match()->username_value;
509 submitted_form.password_value = saved_match()->password_value; 507 submitted_form.password_value = saved_match()->password_value;
510 submitted_form.new_password_value = ASCIIToUTF16("test2"); 508 submitted_form.new_password_value = ASCIIToUTF16("test2");
511 submitted_form.preferred = true; 509 submitted_form.preferred = true;
512 form_manager->ProvisionallySave( 510 form_manager.ProvisionallySave(
513 submitted_form, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); 511 submitted_form, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
514 512
515 // Successful login. The PasswordManager would instruct PasswordFormManager 513 // Successful login. The PasswordManager would instruct PasswordFormManager
516 // to update. 514 // to update.
517 EXPECT_FALSE(form_manager->IsNewLogin()); 515 EXPECT_FALSE(form_manager.IsNewLogin());
518 EXPECT_FALSE( 516 EXPECT_FALSE(
519 form_manager->is_possible_change_password_form_without_username()); 517 form_manager.is_possible_change_password_form_without_username());
520 518
521 // By now, the PasswordFormManager should have promoted the new password 519 // By now, the PasswordFormManager should have promoted the new password
522 // value already to be the current password, and should no longer maintain 520 // value already to be the current password, and should no longer maintain
523 // any info about the new password value. 521 // any info about the new password value.
524 EXPECT_EQ(submitted_form.new_password_value, 522 EXPECT_EQ(submitted_form.new_password_value,
525 form_manager->pending_credentials().password_value); 523 form_manager.pending_credentials().password_value);
526 EXPECT_TRUE(form_manager->pending_credentials().new_password_value.empty()); 524 EXPECT_TRUE(form_manager.pending_credentials().new_password_value.empty());
527 525
528 std::map<base::string16, autofill::ServerFieldType> expected_types; 526 std::map<base::string16, autofill::ServerFieldType> expected_types;
529 expected_types[ASCIIToUTF16("full_name")] = autofill::UNKNOWN_TYPE; 527 expected_types[ASCIIToUTF16("full_name")] = autofill::UNKNOWN_TYPE;
530 expected_types[observed_form_.username_element] = autofill::UNKNOWN_TYPE; 528 expected_types[observed_form_.username_element] = autofill::UNKNOWN_TYPE;
531 expected_types[observed_form_.password_element] = autofill::PASSWORD; 529 expected_types[observed_form_.password_element] = autofill::PASSWORD;
532 expected_types[observed_form_.new_password_element] = field_type; 530 expected_types[observed_form_.new_password_element] = field_type;
533 expected_types[base::string16()] = autofill::UNKNOWN_TYPE; 531 expected_types[base::string16()] = autofill::UNKNOWN_TYPE;
534 532
535 autofill::ServerFieldTypeSet expected_available_field_types; 533 autofill::ServerFieldTypeSet expected_available_field_types;
536 expected_available_field_types.insert(autofill::PASSWORD); 534 expected_available_field_types.insert(autofill::PASSWORD);
(...skipping 15 matching lines...) Expand all
552 } 550 }
553 EXPECT_CALL(*client()->mock_driver()->mock_autofill_download_manager(), 551 EXPECT_CALL(*client()->mock_driver()->mock_autofill_download_manager(),
554 StartUploadRequest(CheckUploadedAutofillTypesAndSignature( 552 StartUploadRequest(CheckUploadedAutofillTypesAndSignature(
555 observed_form_signature, expected_types, 553 observed_form_signature, expected_types,
556 false /* expect_generation_vote */), 554 false /* expect_generation_vote */),
557 false, expected_available_field_types, 555 false, expected_available_field_types,
558 expected_login_signature, true)); 556 expected_login_signature, true));
559 557
560 switch (field_type) { 558 switch (field_type) {
561 case autofill::NEW_PASSWORD: 559 case autofill::NEW_PASSWORD:
562 form_manager->Update(*saved_match()); 560 form_manager.Update(*saved_match());
563 break; 561 break;
564 case autofill::PROBABLY_NEW_PASSWORD: 562 case autofill::PROBABLY_NEW_PASSWORD:
565 form_manager->OnNoInteraction(true /* it is an update */); 563 form_manager.OnNoInteraction(true /* it is an update */);
566 break; 564 break;
567 case autofill::NOT_NEW_PASSWORD: 565 case autofill::NOT_NEW_PASSWORD:
568 form_manager->OnNopeUpdateClicked(); 566 form_manager.OnNopeUpdateClicked();
569 break; 567 break;
570 default: 568 default:
571 NOTREACHED(); 569 NOTREACHED();
572 } 570 }
573 Mock::VerifyAndClearExpectations( 571 Mock::VerifyAndClearExpectations(
574 client()->mock_driver()->mock_autofill_download_manager()); 572 client()->mock_driver()->mock_autofill_download_manager());
575 } 573 }
576 574
577 autofill::AutofillUploadContents::Field::PasswordGenerationType 575 autofill::AutofillUploadContents::Field::PasswordGenerationType
578 GetExpectedPasswordGenerationType(bool is_manual_generation, 576 GetExpectedPasswordGenerationType(bool is_manual_generation,
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
633 submitted_form.username_value = saved_match()->username_value; 631 submitted_form.username_value = saved_match()->username_value;
634 submitted_form.password_value = saved_match()->password_value; 632 submitted_form.password_value = saved_match()->password_value;
635 633
636 if (is_change_password_form) { 634 if (is_change_password_form) {
637 submitted_form.new_password_value = 635 submitted_form.new_password_value =
638 saved_match()->password_value + ASCIIToUTF16("1"); 636 saved_match()->password_value + ASCIIToUTF16("1");
639 } 637 }
640 638
641 FakeFormFetcher fetcher; 639 FakeFormFetcher fetcher;
642 fetcher.Fetch(); 640 fetcher.Fetch();
643 scoped_refptr<PasswordFormManager> form_manager( 641 PasswordFormManager form_manager(
644 base::MakeRefCounted<PasswordFormManager>( 642 password_manager(), client(), client()->driver(), form,
645 password_manager(), client(), client()->driver(), form, 643 base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher);
646 base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher));
647 644
648 fetcher.SetNonFederated(std::vector<const PasswordForm*>(), 0u); 645 fetcher.SetNonFederated(std::vector<const PasswordForm*>(), 0u);
649 646
650 autofill::ServerFieldTypeSet expected_available_field_types; 647 autofill::ServerFieldTypeSet expected_available_field_types;
651 // Don't send autofill votes if the user didn't press "Save" button. 648 // Don't send autofill votes if the user didn't press "Save" button.
652 if (interaction == SAVE) 649 if (interaction == SAVE)
653 expected_available_field_types.insert(autofill::PASSWORD); 650 expected_available_field_types.insert(autofill::PASSWORD);
654 651
655 form_manager->set_is_manual_generation(is_manual_generation); 652 form_manager.set_is_manual_generation(is_manual_generation);
656 base::string16 generation_element = is_change_password_form 653 base::string16 generation_element = is_change_password_form
657 ? form.new_password_element 654 ? form.new_password_element
658 : form.password_element; 655 : form.password_element;
659 form_manager->set_generation_element(generation_element); 656 form_manager.set_generation_element(generation_element);
660 form_manager->set_generation_popup_was_shown(true); 657 form_manager.set_generation_popup_was_shown(true);
661 form_manager->set_has_generated_password(has_generated_password); 658 form_manager.set_has_generated_password(has_generated_password);
662 659
663 // Figure out expected generation event type. 660 // Figure out expected generation event type.
664 autofill::AutofillUploadContents::Field::PasswordGenerationType 661 autofill::AutofillUploadContents::Field::PasswordGenerationType
665 expected_generation_type = GetExpectedPasswordGenerationType( 662 expected_generation_type = GetExpectedPasswordGenerationType(
666 is_manual_generation, is_change_password_form, 663 is_manual_generation, is_change_password_form,
667 has_generated_password); 664 has_generated_password);
668 std::map<base::string16, 665 std::map<base::string16,
669 autofill::AutofillUploadContents::Field::PasswordGenerationType> 666 autofill::AutofillUploadContents::Field::PasswordGenerationType>
670 expected_generation_types; 667 expected_generation_types;
671 expected_generation_types[generation_element] = expected_generation_type; 668 expected_generation_types[generation_element] = expected_generation_type;
672 669
673 autofill::FormStructure form_structure(submitted_form.form_data); 670 autofill::FormStructure form_structure(submitted_form.form_data);
674 671
675 EXPECT_CALL( 672 EXPECT_CALL(
676 *client()->mock_driver()->mock_autofill_download_manager(), 673 *client()->mock_driver()->mock_autofill_download_manager(),
677 StartUploadRequest( 674 StartUploadRequest(
678 CheckUploadedGenerationTypesAndSignature( 675 CheckUploadedGenerationTypesAndSignature(
679 form_structure.FormSignatureAsStr(), expected_generation_types), 676 form_structure.FormSignatureAsStr(), expected_generation_types),
680 false, expected_available_field_types, std::string(), true)); 677 false, expected_available_field_types, std::string(), true));
681 678
682 form_manager->ProvisionallySave( 679 form_manager.ProvisionallySave(
683 submitted_form, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); 680 submitted_form, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
684 switch (interaction) { 681 switch (interaction) {
685 case SAVE: 682 case SAVE:
686 form_manager->Save(); 683 form_manager.Save();
687 break; 684 break;
688 case NEVER: 685 case NEVER:
689 form_manager->OnNeverClicked(); 686 form_manager.OnNeverClicked();
690 break; 687 break;
691 case NO_INTERACTION: 688 case NO_INTERACTION:
692 form_manager->OnNoInteraction(false /* not an update prompt*/); 689 form_manager.OnNoInteraction(false /* not an update prompt*/);
693 break; 690 break;
694 } 691 }
695 Mock::VerifyAndClearExpectations( 692 Mock::VerifyAndClearExpectations(
696 client()->mock_driver()->mock_autofill_download_manager()); 693 client()->mock_driver()->mock_autofill_download_manager());
697 } 694 }
698 695
699 PasswordForm* observed_form() { return &observed_form_; } 696 PasswordForm* observed_form() { return &observed_form_; }
700 PasswordForm* saved_match() { return &saved_match_; } 697 PasswordForm* saved_match() { return &saved_match_; }
701 PasswordForm* psl_saved_match() { return &psl_saved_match_; } 698 PasswordForm* psl_saved_match() { return &psl_saved_match_; }
702 PasswordForm CreateSavedMatch(bool blacklisted) { 699 PasswordForm CreateSavedMatch(bool blacklisted) {
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
746 return form; 743 return form;
747 } 744 }
748 745
749 void SimulateActionsOnHTTPObservedForm( 746 void SimulateActionsOnHTTPObservedForm(
750 FakeFormFetcher* fetcher, 747 FakeFormFetcher* fetcher,
751 SimulatedManagerAction manager_action, 748 SimulatedManagerAction manager_action,
752 SimulatedSubmitResult submit_result, 749 SimulatedSubmitResult submit_result,
753 const char* filled_username, 750 const char* filled_username,
754 const char* filled_password, 751 const char* filled_password,
755 const char* submitted_password = nullptr) { 752 const char* submitted_password = nullptr) {
756 scoped_refptr<PasswordFormManager> form_manager( 753 PasswordFormManager form_manager(
757 base::MakeRefCounted<PasswordFormManager>( 754 password_manager(), client(), client()->driver(), *observed_form(),
758 password_manager(), client(), client()->driver(), *observed_form(), 755 base::MakeUnique<NiceMock<MockFormSaver>>(), fetcher);
759 base::MakeUnique<NiceMock<MockFormSaver>>(), fetcher));
760 756
761 EXPECT_CALL(*client()->mock_driver()->mock_autofill_download_manager(), 757 EXPECT_CALL(*client()->mock_driver()->mock_autofill_download_manager(),
762 StartUploadRequest(_, _, _, _, _)) 758 StartUploadRequest(_, _, _, _, _))
763 .Times(::testing::AnyNumber()); 759 .Times(::testing::AnyNumber());
764 760
765 PasswordForm http_stored_form = *saved_match(); 761 PasswordForm http_stored_form = *saved_match();
766 http_stored_form.username_value = base::ASCIIToUTF16(filled_username); 762 http_stored_form.username_value = base::ASCIIToUTF16(filled_username);
767 http_stored_form.password_value = base::ASCIIToUTF16(filled_password); 763 http_stored_form.password_value = base::ASCIIToUTF16(filled_password);
768 if (manager_action == SimulatedManagerAction::OFFERED_PSL) 764 if (manager_action == SimulatedManagerAction::OFFERED_PSL)
769 http_stored_form.is_public_suffix_match = true; 765 http_stored_form.is_public_suffix_match = true;
(...skipping 15 matching lines...) Expand all
785 fetcher->SetNonFederated(matches, 0u); 781 fetcher->SetNonFederated(matches, 0u);
786 782
787 if (submit_result != SimulatedSubmitResult::NONE) { 783 if (submit_result != SimulatedSubmitResult::NONE) {
788 PasswordForm submitted_form(*observed_form()); 784 PasswordForm submitted_form(*observed_form());
789 submitted_form.preferred = true; 785 submitted_form.preferred = true;
790 submitted_form.username_value = base::ASCIIToUTF16(filled_username); 786 submitted_form.username_value = base::ASCIIToUTF16(filled_username);
791 submitted_form.password_value = 787 submitted_form.password_value =
792 submitted_password ? base::ASCIIToUTF16(submitted_password) 788 submitted_password ? base::ASCIIToUTF16(submitted_password)
793 : base::ASCIIToUTF16(filled_password); 789 : base::ASCIIToUTF16(filled_password);
794 790
795 form_manager->ProvisionallySave( 791 form_manager.ProvisionallySave(
796 submitted_form, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); 792 submitted_form, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
797 if (submit_result == SimulatedSubmitResult::PASSED) { 793 if (submit_result == SimulatedSubmitResult::PASSED) {
798 form_manager->LogSubmitPassed(); 794 form_manager.LogSubmitPassed();
799 form_manager->Save(); 795 form_manager.Save();
800 } else { 796 } else {
801 form_manager->LogSubmitFailed(); 797 form_manager.LogSubmitFailed();
802 } 798 }
803 } 799 }
804 } 800 }
805 801
806 private: 802 private:
807 // Necessary for callbacks, and for TestAutofillDriver. 803 // Necessary for callbacks, and for TestAutofillDriver.
808 base::MessageLoop message_loop_; 804 base::MessageLoop message_loop_;
809 805
810 PasswordForm observed_form_; 806 PasswordForm observed_form_;
811 PasswordForm saved_match_; 807 PasswordForm saved_match_;
812 PasswordForm psl_saved_match_; 808 PasswordForm psl_saved_match_;
813 TestPasswordManagerClient client_; 809 TestPasswordManagerClient client_;
814 std::unique_ptr<PasswordManager> password_manager_; 810 std::unique_ptr<PasswordManager> password_manager_;
815 // Define |fake_form_fetcher_| before |form_manager_|, because the former 811 // Define |fake_form_fetcher_| before |form_manager_|, because the former
816 // needs to outlive the latter. 812 // needs to outlive the latter.
817 FakeFormFetcher fake_form_fetcher_; 813 FakeFormFetcher fake_form_fetcher_;
818 scoped_refptr<PasswordFormManager> form_manager_; 814 std::unique_ptr<PasswordFormManager> form_manager_;
819 }; 815 };
820 816
821 class PasswordFormManagerFillOnAccountSelectTest 817 class PasswordFormManagerFillOnAccountSelectTest
822 : public PasswordFormManagerTest { 818 : public PasswordFormManagerTest {
823 public: 819 public:
824 PasswordFormManagerFillOnAccountSelectTest() { 820 PasswordFormManagerFillOnAccountSelectTest() {
825 scoped_feature_list_.InitAndEnableFeature(features::kFillOnAccountSelect); 821 scoped_feature_list_.InitAndEnableFeature(features::kFillOnAccountSelect);
826 } 822 }
827 823
828 base::test::ScopedFeatureList scoped_feature_list_; 824 base::test::ScopedFeatureList scoped_feature_list_;
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
927 } 923 }
928 924
929 // Test that stored blacklisted forms are correctly evaluated for whether they 925 // Test that stored blacklisted forms are correctly evaluated for whether they
930 // apply to the observed form. 926 // apply to the observed form.
931 TEST_F(PasswordFormManagerTest, TestBlacklistMatching) { 927 TEST_F(PasswordFormManagerTest, TestBlacklistMatching) {
932 observed_form()->origin = GURL("http://accounts.google.com/a/LoginAuth"); 928 observed_form()->origin = GURL("http://accounts.google.com/a/LoginAuth");
933 observed_form()->action = GURL("http://accounts.google.com/a/Login"); 929 observed_form()->action = GURL("http://accounts.google.com/a/Login");
934 observed_form()->signon_realm = "http://accounts.google.com"; 930 observed_form()->signon_realm = "http://accounts.google.com";
935 FakeFormFetcher fetcher; 931 FakeFormFetcher fetcher;
936 fetcher.Fetch(); 932 fetcher.Fetch();
937 scoped_refptr<PasswordFormManager> form_manager( 933 PasswordFormManager form_manager(password_manager(), client(),
938 base::MakeRefCounted<PasswordFormManager>( 934 client()->driver(), *observed_form(),
939 password_manager(), client(), client()->driver(), *observed_form(), 935 base::MakeUnique<MockFormSaver>(), &fetcher);
940 base::MakeUnique<MockFormSaver>(), &fetcher));
941 936
942 // Doesn't apply because it is just a PSL match of the observed form. 937 // Doesn't apply because it is just a PSL match of the observed form.
943 PasswordForm blacklisted_psl = *observed_form(); 938 PasswordForm blacklisted_psl = *observed_form();
944 blacklisted_psl.signon_realm = "http://m.accounts.google.com"; 939 blacklisted_psl.signon_realm = "http://m.accounts.google.com";
945 blacklisted_psl.is_public_suffix_match = true; 940 blacklisted_psl.is_public_suffix_match = true;
946 blacklisted_psl.blacklisted_by_user = true; 941 blacklisted_psl.blacklisted_by_user = true;
947 942
948 // Doesn't apply because of different origin. 943 // Doesn't apply because of different origin.
949 PasswordForm blacklisted_not_match = *observed_form(); 944 PasswordForm blacklisted_not_match = *observed_form();
950 blacklisted_not_match.origin = GURL("http://google.com/a/LoginAuth"); 945 blacklisted_not_match.origin = GURL("http://google.com/a/LoginAuth");
(...skipping 22 matching lines...) Expand all
973 968
974 std::vector<const PasswordForm*> matches = {&blacklisted_psl, 969 std::vector<const PasswordForm*> matches = {&blacklisted_psl,
975 &blacklisted_not_match, 970 &blacklisted_not_match,
976 &blacklisted_not_match2, 971 &blacklisted_not_match2,
977 &blacklisted_not_match3, 972 &blacklisted_not_match3,
978 &blacklisted_match, 973 &blacklisted_match,
979 &blacklisted_match2, 974 &blacklisted_match2,
980 saved_match()}; 975 saved_match()};
981 fetcher.SetNonFederated(matches, 0u); 976 fetcher.SetNonFederated(matches, 0u);
982 977
983 EXPECT_TRUE(form_manager->IsBlacklisted()); 978 EXPECT_TRUE(form_manager.IsBlacklisted());
984 EXPECT_THAT(form_manager->blacklisted_matches(), 979 EXPECT_THAT(form_manager.blacklisted_matches(),
985 UnorderedElementsAre(Pointee(blacklisted_match), 980 UnorderedElementsAre(Pointee(blacklisted_match),
986 Pointee(blacklisted_match2))); 981 Pointee(blacklisted_match2)));
987 EXPECT_EQ(1u, form_manager->best_matches().size()); 982 EXPECT_EQ(1u, form_manager.best_matches().size());
988 EXPECT_EQ(*saved_match(), *form_manager->preferred_match()); 983 EXPECT_EQ(*saved_match(), *form_manager.preferred_match());
989 } 984 }
990 985
991 // Test that even in the presence of blacklisted matches, the non-blacklisted 986 // Test that even in the presence of blacklisted matches, the non-blacklisted
992 // ones are still autofilled. 987 // ones are still autofilled.
993 TEST_F(PasswordFormManagerTest, AutofillBlacklisted) { 988 TEST_F(PasswordFormManagerTest, AutofillBlacklisted) {
994 PasswordForm saved_form = *observed_form(); 989 PasswordForm saved_form = *observed_form();
995 saved_form.username_value = ASCIIToUTF16("user"); 990 saved_form.username_value = ASCIIToUTF16("user");
996 saved_form.password_value = ASCIIToUTF16("pass"); 991 saved_form.password_value = ASCIIToUTF16("pass");
997 992
998 PasswordForm blacklisted = *observed_form(); 993 PasswordForm blacklisted = *observed_form();
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
1068 } 1063 }
1069 1064
1070 // Test that when the submitted form contains a "new-password" field, then the 1065 // Test that when the submitted form contains a "new-password" field, then the
1071 // password value is taken from there. 1066 // password value is taken from there.
1072 TEST_F(PasswordFormManagerTest, TestNewLoginFromNewPasswordElement) { 1067 TEST_F(PasswordFormManagerTest, TestNewLoginFromNewPasswordElement) {
1073 observed_form()->new_password_element = ASCIIToUTF16("NewPasswd"); 1068 observed_form()->new_password_element = ASCIIToUTF16("NewPasswd");
1074 observed_form()->username_marked_by_site = true; 1069 observed_form()->username_marked_by_site = true;
1075 1070
1076 FakeFormFetcher fetcher; 1071 FakeFormFetcher fetcher;
1077 fetcher.Fetch(); 1072 fetcher.Fetch();
1078 scoped_refptr<PasswordFormManager> form_manager( 1073 PasswordFormManager form_manager(password_manager(), client(),
1079 base::MakeRefCounted<PasswordFormManager>( 1074 client()->driver(), *observed_form(),
1080 password_manager(), client(), client()->driver(), *observed_form(), 1075 base::MakeUnique<MockFormSaver>(), &fetcher);
1081 base::MakeUnique<MockFormSaver>(), &fetcher));
1082 fetcher.SetNonFederated(std::vector<const PasswordForm*>(), 0u); 1076 fetcher.SetNonFederated(std::vector<const PasswordForm*>(), 0u);
1083 1077
1084 // User enters current and new credentials to the observed form. 1078 // User enters current and new credentials to the observed form.
1085 PasswordForm credentials(*observed_form()); 1079 PasswordForm credentials(*observed_form());
1086 credentials.username_value = saved_match()->username_value; 1080 credentials.username_value = saved_match()->username_value;
1087 credentials.password_value = ASCIIToUTF16("oldpassword"); 1081 credentials.password_value = ASCIIToUTF16("oldpassword");
1088 credentials.new_password_value = ASCIIToUTF16("newpassword"); 1082 credentials.new_password_value = ASCIIToUTF16("newpassword");
1089 credentials.preferred = true; 1083 credentials.preferred = true;
1090 form_manager->ProvisionallySave( 1084 form_manager.ProvisionallySave(
1091 credentials, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); 1085 credentials, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
1092 1086
1093 // Successful login. The PasswordManager would instruct PasswordFormManager 1087 // Successful login. The PasswordManager would instruct PasswordFormManager
1094 // to save, which should know this is a new login. 1088 // to save, which should know this is a new login.
1095 EXPECT_TRUE(form_manager->IsNewLogin()); 1089 EXPECT_TRUE(form_manager.IsNewLogin());
1096 EXPECT_EQ(credentials.origin, form_manager->pending_credentials().origin); 1090 EXPECT_EQ(credentials.origin, form_manager.pending_credentials().origin);
1097 EXPECT_EQ(credentials.signon_realm, 1091 EXPECT_EQ(credentials.signon_realm,
1098 form_manager->pending_credentials().signon_realm); 1092 form_manager.pending_credentials().signon_realm);
1099 EXPECT_EQ(credentials.action, form_manager->pending_credentials().action); 1093 EXPECT_EQ(credentials.action, form_manager.pending_credentials().action);
1100 EXPECT_TRUE(form_manager->pending_credentials().preferred); 1094 EXPECT_TRUE(form_manager.pending_credentials().preferred);
1101 EXPECT_EQ(credentials.username_value, 1095 EXPECT_EQ(credentials.username_value,
1102 form_manager->pending_credentials().username_value); 1096 form_manager.pending_credentials().username_value);
1103 1097
1104 // By this point, the PasswordFormManager should have promoted the new 1098 // By this point, the PasswordFormManager should have promoted the new
1105 // password value to be the current password, and should have wiped the 1099 // password value to be the current password, and should have wiped the
1106 // password element name: it is likely going to be different on a login 1100 // password element name: it is likely going to be different on a login
1107 // form, so it is not worth remembering them. 1101 // form, so it is not worth remembering them.
1108 EXPECT_EQ(credentials.new_password_value, 1102 EXPECT_EQ(credentials.new_password_value,
1109 form_manager->pending_credentials().password_value); 1103 form_manager.pending_credentials().password_value);
1110 EXPECT_TRUE(form_manager->pending_credentials().password_element.empty()); 1104 EXPECT_TRUE(form_manager.pending_credentials().password_element.empty());
1111 EXPECT_TRUE(form_manager->pending_credentials().new_password_value.empty()); 1105 EXPECT_TRUE(form_manager.pending_credentials().new_password_value.empty());
1112 } 1106 }
1113 1107
1114 TEST_F(PasswordFormManagerTest, TestUpdatePassword) { 1108 TEST_F(PasswordFormManagerTest, TestUpdatePassword) {
1115 fake_form_fetcher()->SetNonFederated({saved_match()}, 0u); 1109 fake_form_fetcher()->SetNonFederated({saved_match()}, 0u);
1116 1110
1117 // User submits credentials for the observed form using a username previously 1111 // User submits credentials for the observed form using a username previously
1118 // stored, but a new password. Note that the observed form may have different 1112 // stored, but a new password. Note that the observed form may have different
1119 // origin URL (as it does in this case) than the saved_match, but we want to 1113 // origin URL (as it does in this case) than the saved_match, but we want to
1120 // make sure the updated password is reflected in saved_match, because that is 1114 // make sure the updated password is reflected in saved_match, because that is
1121 // what we autofilled. 1115 // what we autofilled.
(...skipping 30 matching lines...) Expand all
1152 // should not serve as a source for updating meta-information stored with the 1146 // should not serve as a source for updating meta-information stored with the
1153 // old credentials, such as element names, as they are likely going to be 1147 // old credentials, such as element names, as they are likely going to be
1154 // different between change password and login forms. To test this in depth, 1148 // different between change password and login forms. To test this in depth,
1155 // forcibly wipe |submit_element|, which should normally trigger updating 1149 // forcibly wipe |submit_element|, which should normally trigger updating
1156 // this field from |observed_form| during updating as a special case. We will 1150 // this field from |observed_form| during updating as a special case. We will
1157 // verify in the end that this did not happen. 1151 // verify in the end that this did not happen.
1158 saved_match()->submit_element.clear(); 1152 saved_match()->submit_element.clear();
1159 1153
1160 FakeFormFetcher fetcher; 1154 FakeFormFetcher fetcher;
1161 fetcher.Fetch(); 1155 fetcher.Fetch();
1162 scoped_refptr<PasswordFormManager> form_manager( 1156 PasswordFormManager form_manager(password_manager(), client(),
1163 base::MakeRefCounted<PasswordFormManager>( 1157 client()->driver(), *observed_form(),
1164 password_manager(), client(), client()->driver(), *observed_form(), 1158 base::MakeUnique<MockFormSaver>(), &fetcher);
1165 base::MakeUnique<MockFormSaver>(), &fetcher));
1166 fetcher.SetNonFederated({saved_match()}, 0u); 1159 fetcher.SetNonFederated({saved_match()}, 0u);
1167 1160
1168 // User submits current and new credentials to the observed form. 1161 // User submits current and new credentials to the observed form.
1169 PasswordForm credentials(*observed_form()); 1162 PasswordForm credentials(*observed_form());
1170 credentials.username_value = saved_match()->username_value; 1163 credentials.username_value = saved_match()->username_value;
1171 credentials.password_value = saved_match()->password_value; 1164 credentials.password_value = saved_match()->password_value;
1172 credentials.new_password_value = ASCIIToUTF16("test2"); 1165 credentials.new_password_value = ASCIIToUTF16("test2");
1173 credentials.preferred = true; 1166 credentials.preferred = true;
1174 form_manager->ProvisionallySave( 1167 form_manager.ProvisionallySave(
1175 credentials, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); 1168 credentials, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
1176 1169
1177 // Successful login. The PasswordManager would instruct PasswordFormManager 1170 // Successful login. The PasswordManager would instruct PasswordFormManager
1178 // to save, and since this is an update, it should know not to save as a new 1171 // to save, and since this is an update, it should know not to save as a new
1179 // login. 1172 // login.
1180 EXPECT_FALSE(form_manager->IsNewLogin()); 1173 EXPECT_FALSE(form_manager.IsNewLogin());
1181 1174
1182 // By now, the PasswordFormManager should have promoted the new password value 1175 // By now, the PasswordFormManager should have promoted the new password value
1183 // already to be the current password, and should no longer maintain any info 1176 // already to be the current password, and should no longer maintain any info
1184 // about the new password. 1177 // about the new password.
1185 EXPECT_EQ(credentials.new_password_value, 1178 EXPECT_EQ(credentials.new_password_value,
1186 form_manager->pending_credentials().password_value); 1179 form_manager.pending_credentials().password_value);
1187 EXPECT_TRUE(form_manager->pending_credentials().new_password_element.empty()); 1180 EXPECT_TRUE(form_manager.pending_credentials().new_password_element.empty());
1188 EXPECT_TRUE(form_manager->pending_credentials().new_password_value.empty()); 1181 EXPECT_TRUE(form_manager.pending_credentials().new_password_value.empty());
1189 1182
1190 // Trigger saving to exercise some special case handling for updating. 1183 // Trigger saving to exercise some special case handling for updating.
1191 PasswordForm new_credentials; 1184 PasswordForm new_credentials;
1192 EXPECT_CALL(MockFormSaver::Get(form_manager.get()), Update(_, _, _, nullptr)) 1185 EXPECT_CALL(MockFormSaver::Get(&form_manager), Update(_, _, _, nullptr))
1193 .WillOnce(testing::SaveArg<0>(&new_credentials)); 1186 .WillOnce(testing::SaveArg<0>(&new_credentials));
1194 1187
1195 form_manager->Save(); 1188 form_manager.Save();
1196 1189
1197 // No meta-information should be updated, only the password. 1190 // No meta-information should be updated, only the password.
1198 EXPECT_EQ(credentials.new_password_value, new_credentials.password_value); 1191 EXPECT_EQ(credentials.new_password_value, new_credentials.password_value);
1199 EXPECT_EQ(saved_match()->username_element, new_credentials.username_element); 1192 EXPECT_EQ(saved_match()->username_element, new_credentials.username_element);
1200 EXPECT_EQ(saved_match()->password_element, new_credentials.password_element); 1193 EXPECT_EQ(saved_match()->password_element, new_credentials.password_element);
1201 EXPECT_EQ(saved_match()->submit_element, new_credentials.submit_element); 1194 EXPECT_EQ(saved_match()->submit_element, new_credentials.submit_element);
1202 } 1195 }
1203 1196
1204 // Test that saved results are not ignored if they differ in paths for action or 1197 // Test that saved results are not ignored if they differ in paths for action or
1205 // origin. 1198 // origin.
1206 TEST_F(PasswordFormManagerTest, TestIgnoreResult_Paths) { 1199 TEST_F(PasswordFormManagerTest, TestIgnoreResult_Paths) {
1207 PasswordForm observed(*observed_form()); 1200 PasswordForm observed(*observed_form());
1208 observed.origin = GURL("https://accounts.google.com/a/LoginAuth"); 1201 observed.origin = GURL("https://accounts.google.com/a/LoginAuth");
1209 observed.action = GURL("https://accounts.google.com/a/Login"); 1202 observed.action = GURL("https://accounts.google.com/a/Login");
1210 observed.signon_realm = "https://accounts.google.com"; 1203 observed.signon_realm = "https://accounts.google.com";
1211 1204
1212 FakeFormFetcher fetcher; 1205 FakeFormFetcher fetcher;
1213 fetcher.Fetch(); 1206 fetcher.Fetch();
1214 scoped_refptr<PasswordFormManager> form_manager( 1207 PasswordFormManager form_manager(password_manager(), client(),
1215 base::MakeRefCounted<PasswordFormManager>( 1208 client()->driver(), observed,
1216 password_manager(), client(), client()->driver(), observed, 1209 base::MakeUnique<MockFormSaver>(), &fetcher);
1217 base::MakeUnique<MockFormSaver>(), &fetcher));
1218 1210
1219 PasswordForm saved_form = observed; 1211 PasswordForm saved_form = observed;
1220 saved_form.origin = GURL("https://accounts.google.com/a/OtherLoginAuth"); 1212 saved_form.origin = GURL("https://accounts.google.com/a/OtherLoginAuth");
1221 saved_form.action = GURL("https://accounts.google.com/a/OtherLogin"); 1213 saved_form.action = GURL("https://accounts.google.com/a/OtherLogin");
1222 fetcher.SetNonFederated({&saved_form}, 0u); 1214 fetcher.SetNonFederated({&saved_form}, 0u);
1223 1215
1224 // Different paths for action / origin are okay. 1216 // Different paths for action / origin are okay.
1225 EXPECT_EQ(1u, form_manager->best_matches().size()); 1217 EXPECT_EQ(1u, form_manager.best_matches().size());
1226 EXPECT_EQ(*form_manager->best_matches().begin()->second, saved_form); 1218 EXPECT_EQ(*form_manager.best_matches().begin()->second, saved_form);
1227 } 1219 }
1228 1220
1229 // Test that saved empty action URL is updated with the submitted action URL. 1221 // Test that saved empty action URL is updated with the submitted action URL.
1230 TEST_F(PasswordFormManagerTest, TestEmptyAction) { 1222 TEST_F(PasswordFormManagerTest, TestEmptyAction) {
1231 saved_match()->action = GURL(); 1223 saved_match()->action = GURL();
1232 fake_form_fetcher()->SetNonFederated({saved_match()}, 0u); 1224 fake_form_fetcher()->SetNonFederated({saved_match()}, 0u);
1233 1225
1234 // User logs in with the autofilled username / password from saved_match. 1226 // User logs in with the autofilled username / password from saved_match.
1235 PasswordForm login = *observed_form(); 1227 PasswordForm login = *observed_form();
1236 login.username_value = saved_match()->username_value; 1228 login.username_value = saved_match()->username_value;
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
1376 TEST_F(PasswordFormManagerTest, 1368 TEST_F(PasswordFormManagerTest,
1377 TestSendNotBlacklistedMessage_DroppedCredentials) { 1369 TestSendNotBlacklistedMessage_DroppedCredentials) {
1378 // There are cases, such as when a form is made explicitly for creating a new 1370 // There are cases, such as when a form is made explicitly for creating a new
1379 // password, where we may ignore saved credentials. Make sure that we still 1371 // password, where we may ignore saved credentials. Make sure that we still
1380 // allow generation in that case. 1372 // allow generation in that case.
1381 PasswordForm signup_form(*observed_form()); 1373 PasswordForm signup_form(*observed_form());
1382 signup_form.new_password_element = base::ASCIIToUTF16("new_password_field"); 1374 signup_form.new_password_element = base::ASCIIToUTF16("new_password_field");
1383 1375
1384 FakeFormFetcher fetcher; 1376 FakeFormFetcher fetcher;
1385 fetcher.Fetch(); 1377 fetcher.Fetch();
1386 scoped_refptr<PasswordFormManager> form_manager( 1378 PasswordFormManager form_manager(password_manager(), client(),
1387 base::MakeRefCounted<PasswordFormManager>( 1379 client()->driver(), signup_form,
1388 password_manager(), client(), client()->driver(), signup_form, 1380 base::MakeUnique<MockFormSaver>(), &fetcher);
1389 base::MakeUnique<MockFormSaver>(), &fetcher));
1390 EXPECT_CALL(*(client()->mock_driver()), AllowPasswordGenerationForForm(_)); 1381 EXPECT_CALL(*(client()->mock_driver()), AllowPasswordGenerationForForm(_));
1391 PasswordForm simulated_result = CreateSavedMatch(false); 1382 PasswordForm simulated_result = CreateSavedMatch(false);
1392 fetcher.SetNonFederated({&simulated_result}, 0u); 1383 fetcher.SetNonFederated({&simulated_result}, 0u);
1393 } 1384 }
1394 1385
1395 TEST_F(PasswordFormManagerTest, 1386 TEST_F(PasswordFormManagerTest,
1396 TestSendNotBlacklistedMessage_BlacklistedCredentials) { 1387 TestSendNotBlacklistedMessage_BlacklistedCredentials) {
1397 // Signing up on a previously visited site. Credentials are found in the 1388 // Signing up on a previously visited site. Credentials are found in the
1398 // password store, but they are blacklisted. AllowPasswordGenerationForForm 1389 // password store, but they are blacklisted. AllowPasswordGenerationForForm
1399 // is still called. 1390 // is still called.
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
1529 encountered_form.signon_realm = "http://accounts.google.com/"; 1520 encountered_form.signon_realm = "http://accounts.google.com/";
1530 encountered_form.action = GURL("http://accounts.google.com/Login"); 1521 encountered_form.action = GURL("http://accounts.google.com/Login");
1531 encountered_form.username_element = ASCIIToUTF16("Email"); 1522 encountered_form.username_element = ASCIIToUTF16("Email");
1532 encountered_form.password_element = ASCIIToUTF16("Passwd"); 1523 encountered_form.password_element = ASCIIToUTF16("Passwd");
1533 encountered_form.submit_element = ASCIIToUTF16("signIn"); 1524 encountered_form.submit_element = ASCIIToUTF16("signIn");
1534 1525
1535 EXPECT_CALL(*(client()->mock_driver()), AllowPasswordGenerationForForm(_)); 1526 EXPECT_CALL(*(client()->mock_driver()), AllowPasswordGenerationForForm(_));
1536 1527
1537 FakeFormFetcher fetcher; 1528 FakeFormFetcher fetcher;
1538 fetcher.Fetch(); 1529 fetcher.Fetch();
1539 scoped_refptr<PasswordFormManager> form_manager( 1530 PasswordFormManager form_manager(password_manager(), client(),
1540 base::MakeRefCounted<PasswordFormManager>( 1531 client()->driver(), encountered_form,
1541 password_manager(), client(), client()->driver(), encountered_form, 1532 base::MakeUnique<MockFormSaver>(), &fetcher);
1542 base::MakeUnique<MockFormSaver>(), &fetcher));
1543 1533
1544 PasswordForm incomplete_form; 1534 PasswordForm incomplete_form;
1545 incomplete_form.origin = GURL("http://accounts.google.com/LoginAuth"); 1535 incomplete_form.origin = GURL("http://accounts.google.com/LoginAuth");
1546 incomplete_form.signon_realm = "http://accounts.google.com/"; 1536 incomplete_form.signon_realm = "http://accounts.google.com/";
1547 incomplete_form.password_value = ASCIIToUTF16("my_password"); 1537 incomplete_form.password_value = ASCIIToUTF16("my_password");
1548 incomplete_form.username_value = ASCIIToUTF16("my_username"); 1538 incomplete_form.username_value = ASCIIToUTF16("my_username");
1549 incomplete_form.preferred = true; 1539 incomplete_form.preferred = true;
1550 incomplete_form.scheme = PasswordForm::SCHEME_HTML; 1540 incomplete_form.scheme = PasswordForm::SCHEME_HTML;
1551 1541
1552 // We expect to see this form eventually sent to the Password store. It 1542 // We expect to see this form eventually sent to the Password store. It
1553 // has password/username values from the store and 'username_element', 1543 // has password/username values from the store and 'username_element',
1554 // 'password_element', 'submit_element' and 'action' fields copied from 1544 // 'password_element', 'submit_element' and 'action' fields copied from
1555 // the encountered form. 1545 // the encountered form.
1556 PasswordForm complete_form(incomplete_form); 1546 PasswordForm complete_form(incomplete_form);
1557 complete_form.action = encountered_form.action; 1547 complete_form.action = encountered_form.action;
1558 complete_form.password_element = encountered_form.password_element; 1548 complete_form.password_element = encountered_form.password_element;
1559 complete_form.username_element = encountered_form.username_element; 1549 complete_form.username_element = encountered_form.username_element;
1560 complete_form.submit_element = encountered_form.submit_element; 1550 complete_form.submit_element = encountered_form.submit_element;
1561 1551
1562 PasswordForm obsolete_form(incomplete_form); 1552 PasswordForm obsolete_form(incomplete_form);
1563 obsolete_form.action = encountered_form.action; 1553 obsolete_form.action = encountered_form.action;
1564 1554
1565 // Feed the incomplete credentials to the manager. 1555 // Feed the incomplete credentials to the manager.
1566 fetcher.SetNonFederated({&incomplete_form}, 0u); 1556 fetcher.SetNonFederated({&incomplete_form}, 0u);
1567 1557
1568 form_manager->ProvisionallySave( 1558 form_manager.ProvisionallySave(
1569 complete_form, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); 1559 complete_form, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
1570 // By now that form has been used once. 1560 // By now that form has been used once.
1571 complete_form.times_used = 1; 1561 complete_form.times_used = 1;
1572 obsolete_form.times_used = 1; 1562 obsolete_form.times_used = 1;
1573 1563
1574 // Check that PasswordStore receives an update request with the complete form. 1564 // Check that PasswordStore receives an update request with the complete form.
1575 EXPECT_CALL(MockFormSaver::Get(form_manager.get()), 1565 EXPECT_CALL(MockFormSaver::Get(&form_manager),
1576 Update(complete_form, _, _, Pointee(obsolete_form))); 1566 Update(complete_form, _, _, Pointee(obsolete_form)));
1577 form_manager->Save(); 1567 form_manager.Save();
1578 } 1568 }
1579 1569
1580 // Test that public-suffix-matched credentials score lower than same-origin 1570 // Test that public-suffix-matched credentials score lower than same-origin
1581 // ones. 1571 // ones.
1582 TEST_F(PasswordFormManagerTest, TestScoringPublicSuffixMatch) { 1572 TEST_F(PasswordFormManagerTest, TestScoringPublicSuffixMatch) {
1583 EXPECT_CALL(*(client()->mock_driver()), AllowPasswordGenerationForForm(_)); 1573 EXPECT_CALL(*(client()->mock_driver()), AllowPasswordGenerationForForm(_));
1584 1574
1585 PasswordForm base_match = CreateSavedMatch(false); 1575 PasswordForm base_match = CreateSavedMatch(false);
1586 base_match.origin = GURL("http://accounts.google.com/a/ServiceLoginAuth"); 1576 base_match.origin = GURL("http://accounts.google.com/a/ServiceLoginAuth");
1587 base_match.action = GURL("http://accounts.google.com/a/ServiceLogin"); 1577 base_match.action = GURL("http://accounts.google.com/a/ServiceLogin");
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
1709 PasswordForm invalid_action_form(*observed_form()); 1699 PasswordForm invalid_action_form(*observed_form());
1710 invalid_action_form.action = GURL("http://"); 1700 invalid_action_form.action = GURL("http://");
1711 ASSERT_FALSE(invalid_action_form.action.is_valid()); 1701 ASSERT_FALSE(invalid_action_form.action.is_valid());
1712 ASSERT_FALSE(invalid_action_form.action.is_empty()); 1702 ASSERT_FALSE(invalid_action_form.action.is_empty());
1713 // Non-empty invalid action URLs should not match other actions. 1703 // Non-empty invalid action URLs should not match other actions.
1714 // First when the compared form has an invalid URL: 1704 // First when the compared form has an invalid URL:
1715 EXPECT_EQ(0, form_manager()->DoesManage(invalid_action_form, nullptr) & 1705 EXPECT_EQ(0, form_manager()->DoesManage(invalid_action_form, nullptr) &
1716 PasswordFormManager::RESULT_ACTION_MATCH); 1706 PasswordFormManager::RESULT_ACTION_MATCH);
1717 // Then when the observed form has an invalid URL: 1707 // Then when the observed form has an invalid URL:
1718 PasswordForm valid_action_form(*observed_form()); 1708 PasswordForm valid_action_form(*observed_form());
1719 scoped_refptr<PasswordFormManager> invalid_manager( 1709 PasswordFormManager invalid_manager(
1720 base::MakeRefCounted<PasswordFormManager>( 1710 password_manager(), client(), client()->driver(), invalid_action_form,
1721 password_manager(), client(), client()->driver(), invalid_action_form, 1711 base::MakeUnique<MockFormSaver>(), fake_form_fetcher());
1722 base::MakeUnique<MockFormSaver>(), fake_form_fetcher())); 1712 EXPECT_EQ(0, invalid_manager.DoesManage(valid_action_form, nullptr) &
1723 EXPECT_EQ(0, invalid_manager->DoesManage(valid_action_form, nullptr) &
1724 PasswordFormManager::RESULT_ACTION_MATCH); 1713 PasswordFormManager::RESULT_ACTION_MATCH);
1725 } 1714 }
1726 1715
1727 TEST_F(PasswordFormManagerTest, EmptyActionURLsDoNotMatchNonEmpty) { 1716 TEST_F(PasswordFormManagerTest, EmptyActionURLsDoNotMatchNonEmpty) {
1728 PasswordForm empty_action_form(*observed_form()); 1717 PasswordForm empty_action_form(*observed_form());
1729 empty_action_form.action = GURL(); 1718 empty_action_form.action = GURL();
1730 ASSERT_FALSE(empty_action_form.action.is_valid()); 1719 ASSERT_FALSE(empty_action_form.action.is_valid());
1731 ASSERT_TRUE(empty_action_form.action.is_empty()); 1720 ASSERT_TRUE(empty_action_form.action.is_empty());
1732 // First when the compared form has an empty URL: 1721 // First when the compared form has an empty URL:
1733 EXPECT_EQ(0, form_manager()->DoesManage(empty_action_form, nullptr) & 1722 EXPECT_EQ(0, form_manager()->DoesManage(empty_action_form, nullptr) &
1734 PasswordFormManager::RESULT_ACTION_MATCH); 1723 PasswordFormManager::RESULT_ACTION_MATCH);
1735 // Then when the observed form has an empty URL: 1724 // Then when the observed form has an empty URL:
1736 PasswordForm valid_action_form(*observed_form()); 1725 PasswordForm valid_action_form(*observed_form());
1737 scoped_refptr<PasswordFormManager> empty_action_manager( 1726 PasswordFormManager empty_action_manager(
1738 base::MakeRefCounted<PasswordFormManager>( 1727 password_manager(), client(), client()->driver(), empty_action_form,
1739 password_manager(), client(), client()->driver(), empty_action_form, 1728 base::MakeUnique<MockFormSaver>(), fake_form_fetcher());
1740 base::MakeUnique<MockFormSaver>(), fake_form_fetcher())); 1729 EXPECT_EQ(0, empty_action_manager.DoesManage(valid_action_form, nullptr) &
1741 EXPECT_EQ(0, empty_action_manager->DoesManage(valid_action_form, nullptr) &
1742 PasswordFormManager::RESULT_ACTION_MATCH); 1730 PasswordFormManager::RESULT_ACTION_MATCH);
1743 } 1731 }
1744 1732
1745 TEST_F(PasswordFormManagerTest, NonHTMLFormsDoNotMatchHTMLForms) { 1733 TEST_F(PasswordFormManagerTest, NonHTMLFormsDoNotMatchHTMLForms) {
1746 ASSERT_EQ(PasswordForm::SCHEME_HTML, observed_form()->scheme); 1734 ASSERT_EQ(PasswordForm::SCHEME_HTML, observed_form()->scheme);
1747 PasswordForm non_html_form(*observed_form()); 1735 PasswordForm non_html_form(*observed_form());
1748 non_html_form.scheme = PasswordForm::SCHEME_DIGEST; 1736 non_html_form.scheme = PasswordForm::SCHEME_DIGEST;
1749 EXPECT_EQ(0, form_manager()->DoesManage(non_html_form, nullptr) & 1737 EXPECT_EQ(0, form_manager()->DoesManage(non_html_form, nullptr) &
1750 PasswordFormManager::RESULT_HTML_ATTRIBUTES_MATCH); 1738 PasswordFormManager::RESULT_HTML_ATTRIBUTES_MATCH);
1751 1739
1752 // The other way round: observing a non-HTML form, don't match a HTML form. 1740 // The other way round: observing a non-HTML form, don't match a HTML form.
1753 PasswordForm html_form(*observed_form()); 1741 PasswordForm html_form(*observed_form());
1754 scoped_refptr<PasswordFormManager> non_html_manager( 1742 PasswordFormManager non_html_manager(
1755 base::MakeRefCounted<PasswordFormManager>( 1743 password_manager(), client(), kNoDriver, non_html_form,
1756 password_manager(), client(), kNoDriver, non_html_form, 1744 base::MakeUnique<MockFormSaver>(), fake_form_fetcher());
1757 base::MakeUnique<MockFormSaver>(), fake_form_fetcher())); 1745 EXPECT_EQ(0, non_html_manager.DoesManage(html_form, nullptr) &
1758 EXPECT_EQ(0, non_html_manager->DoesManage(html_form, nullptr) &
1759 PasswordFormManager::RESULT_HTML_ATTRIBUTES_MATCH); 1746 PasswordFormManager::RESULT_HTML_ATTRIBUTES_MATCH);
1760 } 1747 }
1761 1748
1762 TEST_F(PasswordFormManagerTest, OriginCheck_HostsMatchExactly) { 1749 TEST_F(PasswordFormManagerTest, OriginCheck_HostsMatchExactly) {
1763 // Host part of origins must match exactly, not just by prefix. 1750 // Host part of origins must match exactly, not just by prefix.
1764 PasswordForm form_longer_host(*observed_form()); 1751 PasswordForm form_longer_host(*observed_form());
1765 form_longer_host.origin = GURL("http://accounts.google.com.au/a/LoginAuth"); 1752 form_longer_host.origin = GURL("http://accounts.google.com.au/a/LoginAuth");
1766 // Check that accounts.google.com does not match accounts.google.com.au. 1753 // Check that accounts.google.com does not match accounts.google.com.au.
1767 EXPECT_EQ(0, form_manager()->DoesManage(form_longer_host, nullptr) & 1754 EXPECT_EQ(0, form_manager()->DoesManage(form_longer_host, nullptr) &
1768 PasswordFormManager::RESULT_HTML_ATTRIBUTES_MATCH); 1755 PasswordFormManager::RESULT_HTML_ATTRIBUTES_MATCH);
(...skipping 13 matching lines...) Expand all
1782 // If the origin URL scheme of the compared form is not more secure than that 1769 // If the origin URL scheme of the compared form is not more secure than that
1783 // of the observed form, then the paths must match exactly. 1770 // of the observed form, then the paths must match exactly.
1784 PasswordForm form_longer_path(*observed_form()); 1771 PasswordForm form_longer_path(*observed_form());
1785 form_longer_path.origin = GURL("http://accounts.google.com/a/LoginAuth/sec"); 1772 form_longer_path.origin = GURL("http://accounts.google.com/a/LoginAuth/sec");
1786 // Check that /a/LoginAuth does not match /a/LoginAuth/more. 1773 // Check that /a/LoginAuth does not match /a/LoginAuth/more.
1787 EXPECT_EQ(0, form_manager()->DoesManage(form_longer_path, nullptr) & 1774 EXPECT_EQ(0, form_manager()->DoesManage(form_longer_path, nullptr) &
1788 PasswordFormManager::RESULT_HTML_ATTRIBUTES_MATCH); 1775 PasswordFormManager::RESULT_HTML_ATTRIBUTES_MATCH);
1789 1776
1790 PasswordForm secure_observed_form(*observed_form()); 1777 PasswordForm secure_observed_form(*observed_form());
1791 secure_observed_form.origin = GURL("https://accounts.google.com/a/LoginAuth"); 1778 secure_observed_form.origin = GURL("https://accounts.google.com/a/LoginAuth");
1792 scoped_refptr<PasswordFormManager> secure_manager( 1779 PasswordFormManager secure_manager(
1793 base::MakeRefCounted<PasswordFormManager>( 1780 password_manager(), client(), client()->driver(), secure_observed_form,
1794 password_manager(), client(), client()->driver(), 1781 base::MakeUnique<MockFormSaver>(), fake_form_fetcher());
1795 secure_observed_form, base::MakeUnique<MockFormSaver>(),
1796 fake_form_fetcher()));
1797 // Also for HTTPS in the observed form, and HTTP in the compared form, an 1782 // Also for HTTPS in the observed form, and HTTP in the compared form, an
1798 // exact path match is expected. 1783 // exact path match is expected.
1799 EXPECT_EQ(0, secure_manager->DoesManage(form_longer_path, nullptr) & 1784 EXPECT_EQ(0, secure_manager.DoesManage(form_longer_path, nullptr) &
1800 PasswordFormManager::RESULT_HTML_ATTRIBUTES_MATCH); 1785 PasswordFormManager::RESULT_HTML_ATTRIBUTES_MATCH);
1801 // Not even upgrade to HTTPS in the compared form should help. 1786 // Not even upgrade to HTTPS in the compared form should help.
1802 form_longer_path.origin = GURL("https://accounts.google.com/a/LoginAuth/sec"); 1787 form_longer_path.origin = GURL("https://accounts.google.com/a/LoginAuth/sec");
1803 EXPECT_EQ(0, secure_manager->DoesManage(form_longer_path, nullptr) & 1788 EXPECT_EQ(0, secure_manager.DoesManage(form_longer_path, nullptr) &
1804 PasswordFormManager::RESULT_HTML_ATTRIBUTES_MATCH); 1789 PasswordFormManager::RESULT_HTML_ATTRIBUTES_MATCH);
1805 } 1790 }
1806 1791
1807 TEST_F(PasswordFormManagerTest, OriginCheck_OnlyOriginsMatch) { 1792 TEST_F(PasswordFormManagerTest, OriginCheck_OnlyOriginsMatch) {
1808 // Make sure DoesManage() can distinguish when only origins match. 1793 // Make sure DoesManage() can distinguish when only origins match.
1809 1794
1810 PasswordForm different_html_attributes(*observed_form()); 1795 PasswordForm different_html_attributes(*observed_form());
1811 different_html_attributes.password_element = ASCIIToUTF16("random_pass"); 1796 different_html_attributes.password_element = ASCIIToUTF16("random_pass");
1812 different_html_attributes.username_element = ASCIIToUTF16("random_user"); 1797 different_html_attributes.username_element = ASCIIToUTF16("random_user");
1813 1798
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
1881 EXPECT_EQ(ASCIIToUTF16("third"), credentials_to_update[0].password_value); 1866 EXPECT_EQ(ASCIIToUTF16("third"), credentials_to_update[0].password_value);
1882 EXPECT_FALSE(credentials_to_update[0].password_element.empty()); 1867 EXPECT_FALSE(credentials_to_update[0].password_element.empty());
1883 EXPECT_TRUE(credentials_to_update[0].username_element.empty()); 1868 EXPECT_TRUE(credentials_to_update[0].username_element.empty());
1884 } 1869 }
1885 1870
1886 TEST_F(PasswordFormManagerTest, UploadFormData_NewPassword) { 1871 TEST_F(PasswordFormManagerTest, UploadFormData_NewPassword) {
1887 // For newly saved passwords, upload a password vote for autofill::PASSWORD. 1872 // For newly saved passwords, upload a password vote for autofill::PASSWORD.
1888 // Don't vote for the username field yet. 1873 // Don't vote for the username field yet.
1889 FakeFormFetcher fetcher; 1874 FakeFormFetcher fetcher;
1890 fetcher.Fetch(); 1875 fetcher.Fetch();
1891 scoped_refptr<PasswordFormManager> form_manager( 1876 PasswordFormManager form_manager(
1892 base::MakeRefCounted<PasswordFormManager>( 1877 password_manager(), client(), client()->driver(), *saved_match(),
1893 password_manager(), client(), client()->driver(), *saved_match(), 1878 base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher);
1894 base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher));
1895 fetcher.SetNonFederated(std::vector<const PasswordForm*>(), 0u); 1879 fetcher.SetNonFederated(std::vector<const PasswordForm*>(), 0u);
1896 1880
1897 PasswordForm form_to_save(*saved_match()); 1881 PasswordForm form_to_save(*saved_match());
1898 form_to_save.preferred = true; 1882 form_to_save.preferred = true;
1899 form_to_save.username_value = ASCIIToUTF16("username"); 1883 form_to_save.username_value = ASCIIToUTF16("username");
1900 form_to_save.password_value = ASCIIToUTF16("1234"); 1884 form_to_save.password_value = ASCIIToUTF16("1234");
1901 1885
1902 autofill::ServerFieldTypeSet expected_available_field_types; 1886 autofill::ServerFieldTypeSet expected_available_field_types;
1903 expected_available_field_types.insert(autofill::PASSWORD); 1887 expected_available_field_types.insert(autofill::PASSWORD);
1904 EXPECT_CALL( 1888 EXPECT_CALL(
1905 *client()->mock_driver()->mock_autofill_download_manager(), 1889 *client()->mock_driver()->mock_autofill_download_manager(),
1906 StartUploadRequest(_, false, expected_available_field_types, _, true)); 1890 StartUploadRequest(_, false, expected_available_field_types, _, true));
1907 form_manager->ProvisionallySave( 1891 form_manager.ProvisionallySave(
1908 form_to_save, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); 1892 form_to_save, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
1909 form_manager->Save(); 1893 form_manager.Save();
1910 } 1894 }
1911 1895
1912 TEST_F(PasswordFormManagerTest, UploadFormData_NewPassword_Blacklist) { 1896 TEST_F(PasswordFormManagerTest, UploadFormData_NewPassword_Blacklist) {
1913 // Do not upload a vote if the user is blacklisting the form. 1897 // Do not upload a vote if the user is blacklisting the form.
1914 FakeFormFetcher fetcher; 1898 FakeFormFetcher fetcher;
1915 fetcher.Fetch(); 1899 fetcher.Fetch();
1916 scoped_refptr<PasswordFormManager> blacklist_form_manager( 1900 PasswordFormManager blacklist_form_manager(
1917 base::MakeRefCounted<PasswordFormManager>( 1901 password_manager(), client(), client()->driver(), *saved_match(),
1918 password_manager(), client(), client()->driver(), *saved_match(), 1902 base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher);
1919 base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher));
1920 fetcher.SetNonFederated(std::vector<const PasswordForm*>(), 0u); 1903 fetcher.SetNonFederated(std::vector<const PasswordForm*>(), 0u);
1921 1904
1922 autofill::ServerFieldTypeSet expected_available_field_types; 1905 autofill::ServerFieldTypeSet expected_available_field_types;
1923 expected_available_field_types.insert(autofill::USERNAME); 1906 expected_available_field_types.insert(autofill::USERNAME);
1924 expected_available_field_types.insert(autofill::PASSWORD); 1907 expected_available_field_types.insert(autofill::PASSWORD);
1925 EXPECT_CALL(*client()->mock_driver()->mock_autofill_download_manager(), 1908 EXPECT_CALL(*client()->mock_driver()->mock_autofill_download_manager(),
1926 StartUploadRequest(_, _, expected_available_field_types, _, true)) 1909 StartUploadRequest(_, _, expected_available_field_types, _, true))
1927 .Times(0); 1910 .Times(0);
1928 blacklist_form_manager->PermanentlyBlacklist(); 1911 blacklist_form_manager.PermanentlyBlacklist();
1929 } 1912 }
1930 1913
1931 TEST_F(PasswordFormManagerTest, UploadPasswordForm) { 1914 TEST_F(PasswordFormManagerTest, UploadPasswordForm) {
1932 autofill::FormData observed_form_data; 1915 autofill::FormData observed_form_data;
1933 autofill::FormFieldData field; 1916 autofill::FormFieldData field;
1934 field.label = ASCIIToUTF16("Email"); 1917 field.label = ASCIIToUTF16("Email");
1935 field.name = ASCIIToUTF16("observed-username-field"); 1918 field.name = ASCIIToUTF16("observed-username-field");
1936 field.form_control_type = "text"; 1919 field.form_control_type = "text";
1937 observed_form_data.fields.push_back(field); 1920 observed_form_data.fields.push_back(field);
1938 1921
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
2003 PasswordForm form; 1986 PasswordForm form;
2004 form.origin = GURL(example_url); 1987 form.origin = GURL(example_url);
2005 form.signon_realm = example_url; 1988 form.signon_realm = example_url;
2006 form.action = GURL(example_url); 1989 form.action = GURL(example_url);
2007 form.username_element = ASCIIToUTF16("u"); 1990 form.username_element = ASCIIToUTF16("u");
2008 form.password_element = ASCIIToUTF16("p"); 1991 form.password_element = ASCIIToUTF16("p");
2009 form.submit_element = ASCIIToUTF16("s"); 1992 form.submit_element = ASCIIToUTF16("s");
2010 1993
2011 FakeFormFetcher fetcher; 1994 FakeFormFetcher fetcher;
2012 fetcher.Fetch(); 1995 fetcher.Fetch();
2013 scoped_refptr<PasswordFormManager> form_manager( 1996 PasswordFormManager form_manager(password_manager(), client(),
2014 base::MakeRefCounted<PasswordFormManager>( 1997 client()->driver(), form,
2015 password_manager(), client(), client()->driver(), form, 1998 base::MakeUnique<MockFormSaver>(), &fetcher);
2016 base::MakeUnique<MockFormSaver>(), &fetcher));
2017 1999
2018 // Suddenly, the frame and its driver disappear. 2000 // Suddenly, the frame and its driver disappear.
2019 client()->KillDriver(); 2001 client()->KillDriver();
2020 2002
2021 fetcher.SetNonFederated({&form}, 0u); 2003 fetcher.SetNonFederated({&form}, 0u);
2022 } 2004 }
2023 2005
2024 TEST_F(PasswordFormManagerTest, PreferredMatchIsUpToDate) { 2006 TEST_F(PasswordFormManagerTest, PreferredMatchIsUpToDate) {
2025 // Check that preferred_match() is always a member of best_matches(). 2007 // Check that preferred_match() is always a member of best_matches().
2026 PasswordForm form = *observed_form(); 2008 PasswordForm form = *observed_form();
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
2084 } 2066 }
2085 2067
2086 TEST_F(PasswordFormManagerTest, TestSuggestingPasswordChangeForms) { 2068 TEST_F(PasswordFormManagerTest, TestSuggestingPasswordChangeForms) {
2087 // Suggesting password on the password change form on the previously visited 2069 // Suggesting password on the password change form on the previously visited
2088 // site. Credentials are found in the password store, and are not blacklisted. 2070 // site. Credentials are found in the password store, and are not blacklisted.
2089 PasswordForm observed_change_password_form = *observed_form(); 2071 PasswordForm observed_change_password_form = *observed_form();
2090 observed_change_password_form.new_password_element = 2072 observed_change_password_form.new_password_element =
2091 base::ASCIIToUTF16("new_pwd"); 2073 base::ASCIIToUTF16("new_pwd");
2092 FakeFormFetcher fetcher; 2074 FakeFormFetcher fetcher;
2093 fetcher.Fetch(); 2075 fetcher.Fetch();
2094 scoped_refptr<PasswordFormManager> manager_creds( 2076 PasswordFormManager manager_creds(
2095 base::MakeRefCounted<PasswordFormManager>( 2077 password_manager(), client(), client()->driver(),
2096 password_manager(), client(), client()->driver(), 2078 observed_change_password_form, base::MakeUnique<MockFormSaver>(),
2097 observed_change_password_form, base::MakeUnique<MockFormSaver>(), 2079 &fetcher);
2098 &fetcher));
2099 2080
2100 autofill::PasswordFormFillData fill_data; 2081 autofill::PasswordFormFillData fill_data;
2101 EXPECT_CALL(*client()->mock_driver(), FillPasswordForm(_)) 2082 EXPECT_CALL(*client()->mock_driver(), FillPasswordForm(_))
2102 .WillOnce(SaveArg<0>(&fill_data)); 2083 .WillOnce(SaveArg<0>(&fill_data));
2103 2084
2104 PasswordForm result = CreateSavedMatch(false); 2085 PasswordForm result = CreateSavedMatch(false);
2105 fetcher.SetNonFederated({&result}, 0u); 2086 fetcher.SetNonFederated({&result}, 0u);
2106 EXPECT_EQ(1u, manager_creds->best_matches().size()); 2087 EXPECT_EQ(1u, manager_creds.best_matches().size());
2107 EXPECT_EQ(0u, fill_data.additional_logins.size()); 2088 EXPECT_EQ(0u, fill_data.additional_logins.size());
2108 EXPECT_TRUE(fill_data.wait_for_username); 2089 EXPECT_TRUE(fill_data.wait_for_username);
2109 } 2090 }
2110 2091
2111 TEST_F(PasswordFormManagerTest, TestUpdateMethod) { 2092 TEST_F(PasswordFormManagerTest, TestUpdateMethod) {
2112 // Add a new password field to the test form. The PasswordFormManager should 2093 // Add a new password field to the test form. The PasswordFormManager should
2113 // save the password from this field, instead of the current password field. 2094 // save the password from this field, instead of the current password field.
2114 observed_form()->new_password_element = ASCIIToUTF16("NewPasswd"); 2095 observed_form()->new_password_element = ASCIIToUTF16("NewPasswd");
2115 autofill::FormFieldData field; 2096 autofill::FormFieldData field;
2116 field.label = ASCIIToUTF16("NewPasswd"); 2097 field.label = ASCIIToUTF16("NewPasswd");
2117 field.name = ASCIIToUTF16("NewPasswd"); 2098 field.name = ASCIIToUTF16("NewPasswd");
2118 field.form_control_type = "password"; 2099 field.form_control_type = "password";
2119 observed_form()->form_data.fields.push_back(field); 2100 observed_form()->form_data.fields.push_back(field);
2120 2101
2121 // Given that |observed_form| was most likely a change password form, it 2102 // Given that |observed_form| was most likely a change password form, it
2122 // should not serve as a source for updating meta-information stored with the 2103 // should not serve as a source for updating meta-information stored with the
2123 // old credentials, such as element names, as they are likely going to be 2104 // old credentials, such as element names, as they are likely going to be
2124 // different between change password and login forms. To test this in depth, 2105 // different between change password and login forms. To test this in depth,
2125 // forcibly wipe |submit_element|, which should normally trigger updating 2106 // forcibly wipe |submit_element|, which should normally trigger updating
2126 // this field from |observed_form| during updating as a special case. We will 2107 // this field from |observed_form| during updating as a special case. We will
2127 // verify in the end that this did not happen. 2108 // verify in the end that this did not happen.
2128 saved_match()->submit_element.clear(); 2109 saved_match()->submit_element.clear();
2129 2110
2130 FakeFormFetcher fetcher; 2111 FakeFormFetcher fetcher;
2131 fetcher.Fetch(); 2112 fetcher.Fetch();
2132 scoped_refptr<PasswordFormManager> form_manager( 2113 PasswordFormManager form_manager(password_manager(), client(),
2133 base::MakeRefCounted<PasswordFormManager>( 2114 client()->driver(), *observed_form(),
2134 password_manager(), client(), client()->driver(), *observed_form(), 2115 base::MakeUnique<MockFormSaver>(), &fetcher);
2135 base::MakeUnique<MockFormSaver>(), &fetcher));
2136 2116
2137 fetcher.SetNonFederated({saved_match()}, 0u); 2117 fetcher.SetNonFederated({saved_match()}, 0u);
2138 2118
2139 // User submits current and new credentials to the observed form. 2119 // User submits current and new credentials to the observed form.
2140 PasswordForm credentials(*observed_form()); 2120 PasswordForm credentials(*observed_form());
2141 credentials.username_element.clear(); 2121 credentials.username_element.clear();
2142 credentials.password_value = saved_match()->password_value; 2122 credentials.password_value = saved_match()->password_value;
2143 credentials.new_password_value = ASCIIToUTF16("test2"); 2123 credentials.new_password_value = ASCIIToUTF16("test2");
2144 credentials.preferred = true; 2124 credentials.preferred = true;
2145 form_manager->ProvisionallySave( 2125 form_manager.ProvisionallySave(
2146 credentials, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); 2126 credentials, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
2147 2127
2148 // Successful login. The PasswordManager would instruct PasswordFormManager 2128 // Successful login. The PasswordManager would instruct PasswordFormManager
2149 // to save, and since this is an update, it should know not to save as a new 2129 // to save, and since this is an update, it should know not to save as a new
2150 // login. 2130 // login.
2151 EXPECT_FALSE(form_manager->IsNewLogin()); 2131 EXPECT_FALSE(form_manager.IsNewLogin());
2152 EXPECT_FALSE( 2132 EXPECT_FALSE(
2153 form_manager->is_possible_change_password_form_without_username()); 2133 form_manager.is_possible_change_password_form_without_username());
2154 2134
2155 // By now, the PasswordFormManager should have promoted the new password value 2135 // By now, the PasswordFormManager should have promoted the new password value
2156 // already to be the current password, and should no longer maintain any info 2136 // already to be the current password, and should no longer maintain any info
2157 // about the new password value. 2137 // about the new password value.
2158 EXPECT_EQ(credentials.new_password_value, 2138 EXPECT_EQ(credentials.new_password_value,
2159 form_manager->pending_credentials().password_value); 2139 form_manager.pending_credentials().password_value);
2160 EXPECT_TRUE(form_manager->pending_credentials().new_password_value.empty()); 2140 EXPECT_TRUE(form_manager.pending_credentials().new_password_value.empty());
2161 2141
2162 // Trigger saving to exercise some special case handling during updating. 2142 // Trigger saving to exercise some special case handling during updating.
2163 PasswordForm new_credentials; 2143 PasswordForm new_credentials;
2164 EXPECT_CALL(MockFormSaver::Get(form_manager.get()), Update(_, _, _, nullptr)) 2144 EXPECT_CALL(MockFormSaver::Get(&form_manager), Update(_, _, _, nullptr))
2165 .WillOnce(SaveArg<0>(&new_credentials)); 2145 .WillOnce(SaveArg<0>(&new_credentials));
2166 2146
2167 form_manager->Update(*saved_match()); 2147 form_manager.Update(*saved_match());
2168 2148
2169 // No meta-information should be updated, only the password. 2149 // No meta-information should be updated, only the password.
2170 EXPECT_EQ(credentials.new_password_value, new_credentials.password_value); 2150 EXPECT_EQ(credentials.new_password_value, new_credentials.password_value);
2171 EXPECT_EQ(saved_match()->username_element, new_credentials.username_element); 2151 EXPECT_EQ(saved_match()->username_element, new_credentials.username_element);
2172 EXPECT_EQ(saved_match()->password_element, new_credentials.password_element); 2152 EXPECT_EQ(saved_match()->password_element, new_credentials.password_element);
2173 EXPECT_EQ(saved_match()->submit_element, new_credentials.submit_element); 2153 EXPECT_EQ(saved_match()->submit_element, new_credentials.submit_element);
2174 } 2154 }
2175 2155
2176 TEST_F(PasswordFormManagerTest, TestUpdateNoUsernameTextfieldPresent) { 2156 TEST_F(PasswordFormManagerTest, TestUpdateNoUsernameTextfieldPresent) {
2177 // Add a new password field to the test form and insert a |username_value| 2157 // Add a new password field to the test form and insert a |username_value|
(...skipping 10 matching lines...) Expand all
2188 // should not serve as a source for updating meta-information stored with the 2168 // should not serve as a source for updating meta-information stored with the
2189 // old credentials, such as element names, as they are likely going to be 2169 // old credentials, such as element names, as they are likely going to be
2190 // different between change password and login forms. To test this in depth, 2170 // different between change password and login forms. To test this in depth,
2191 // forcibly wipe |submit_element|, which should normally trigger updating this 2171 // forcibly wipe |submit_element|, which should normally trigger updating this
2192 // field from |observed_form| during updating as a special case. We 2172 // field from |observed_form| during updating as a special case. We
2193 // will verify in the end that this did not happen. 2173 // will verify in the end that this did not happen.
2194 saved_match()->submit_element.clear(); 2174 saved_match()->submit_element.clear();
2195 2175
2196 FakeFormFetcher fetcher; 2176 FakeFormFetcher fetcher;
2197 fetcher.Fetch(); 2177 fetcher.Fetch();
2198 scoped_refptr<PasswordFormManager> form_manager( 2178 PasswordFormManager form_manager(password_manager(), client(),
2199 base::MakeRefCounted<PasswordFormManager>( 2179 client()->driver(), *observed_form(),
2200 password_manager(), client(), client()->driver(), *observed_form(), 2180 base::MakeUnique<MockFormSaver>(), &fetcher);
2201 base::MakeUnique<MockFormSaver>(), &fetcher));
2202 2181
2203 fetcher.SetNonFederated({saved_match()}, 0u); 2182 fetcher.SetNonFederated({saved_match()}, 0u);
2204 2183
2205 // User submits current and new credentials to the observed form. 2184 // User submits current and new credentials to the observed form.
2206 PasswordForm credentials(*observed_form()); 2185 PasswordForm credentials(*observed_form());
2207 // The |username_value| contains a text that's unlikely to be real username. 2186 // The |username_value| contains a text that's unlikely to be real username.
2208 credentials.username_value = ASCIIToUTF16("3"); 2187 credentials.username_value = ASCIIToUTF16("3");
2209 credentials.password_value = saved_match()->password_value; 2188 credentials.password_value = saved_match()->password_value;
2210 credentials.new_password_value = ASCIIToUTF16("test2"); 2189 credentials.new_password_value = ASCIIToUTF16("test2");
2211 credentials.preferred = true; 2190 credentials.preferred = true;
2212 form_manager->ProvisionallySave( 2191 form_manager.ProvisionallySave(
2213 credentials, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); 2192 credentials, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
2214 2193
2215 // Successful login. The PasswordManager would instruct PasswordFormManager 2194 // Successful login. The PasswordManager would instruct PasswordFormManager
2216 // to save, and since this is an update, it should know not to save as a new 2195 // to save, and since this is an update, it should know not to save as a new
2217 // login. 2196 // login.
2218 EXPECT_FALSE(form_manager->IsNewLogin()); 2197 EXPECT_FALSE(form_manager.IsNewLogin());
2219 EXPECT_TRUE( 2198 EXPECT_TRUE(form_manager.is_possible_change_password_form_without_username());
2220 form_manager->is_possible_change_password_form_without_username());
2221 2199
2222 // By now, the PasswordFormManager should have promoted the new password value 2200 // By now, the PasswordFormManager should have promoted the new password value
2223 // already to be the current password, and should no longer maintain any info 2201 // already to be the current password, and should no longer maintain any info
2224 // about the new password value. 2202 // about the new password value.
2225 EXPECT_EQ(saved_match()->username_value, 2203 EXPECT_EQ(saved_match()->username_value,
2226 form_manager->pending_credentials().username_value); 2204 form_manager.pending_credentials().username_value);
2227 EXPECT_EQ(credentials.new_password_value, 2205 EXPECT_EQ(credentials.new_password_value,
2228 form_manager->pending_credentials().password_value); 2206 form_manager.pending_credentials().password_value);
2229 EXPECT_TRUE(form_manager->pending_credentials().new_password_value.empty()); 2207 EXPECT_TRUE(form_manager.pending_credentials().new_password_value.empty());
2230 2208
2231 // Trigger saving to exercise some special case handling during updating. 2209 // Trigger saving to exercise some special case handling during updating.
2232 PasswordForm new_credentials; 2210 PasswordForm new_credentials;
2233 EXPECT_CALL(MockFormSaver::Get(form_manager.get()), Update(_, _, _, nullptr)) 2211 EXPECT_CALL(MockFormSaver::Get(&form_manager), Update(_, _, _, nullptr))
2234 .WillOnce(SaveArg<0>(&new_credentials)); 2212 .WillOnce(SaveArg<0>(&new_credentials));
2235 2213
2236 form_manager->Update(form_manager->pending_credentials()); 2214 form_manager.Update(form_manager.pending_credentials());
2237 2215
2238 // No other information than password value should be updated. In particular 2216 // No other information than password value should be updated. In particular
2239 // not the username. 2217 // not the username.
2240 EXPECT_EQ(saved_match()->username_value, new_credentials.username_value); 2218 EXPECT_EQ(saved_match()->username_value, new_credentials.username_value);
2241 EXPECT_EQ(credentials.new_password_value, new_credentials.password_value); 2219 EXPECT_EQ(credentials.new_password_value, new_credentials.password_value);
2242 EXPECT_EQ(saved_match()->username_element, new_credentials.username_element); 2220 EXPECT_EQ(saved_match()->username_element, new_credentials.username_element);
2243 EXPECT_EQ(saved_match()->password_element, new_credentials.password_element); 2221 EXPECT_EQ(saved_match()->password_element, new_credentials.password_element);
2244 EXPECT_EQ(saved_match()->submit_element, new_credentials.submit_element); 2222 EXPECT_EQ(saved_match()->submit_element, new_credentials.submit_element);
2245 } 2223 }
2246 2224
2247 // Test that if WipeStoreCopyIfOutdated is called before password store 2225 // Test that if WipeStoreCopyIfOutdated is called before password store
2248 // callback, the UMA is signalled accordingly. 2226 // callback, the UMA is signalled accordingly.
2249 TEST_F(PasswordFormManagerTest, WipeStoreCopyIfOutdated_BeforeStoreCallback) { 2227 TEST_F(PasswordFormManagerTest, WipeStoreCopyIfOutdated_BeforeStoreCallback) {
2250 PasswordForm form(*saved_match()); 2228 PasswordForm form(*saved_match());
2251 form.password_value = ASCIIToUTF16("nonempty-password"); 2229 form.password_value = ASCIIToUTF16("nonempty-password");
2252 2230
2253 FakeFormFetcher fetcher; 2231 FakeFormFetcher fetcher;
2254 fetcher.Fetch(); 2232 fetcher.Fetch();
2255 scoped_refptr<PasswordFormManager> form_manager( 2233 PasswordFormManager form_manager(password_manager(), client(),
2256 base::MakeRefCounted<PasswordFormManager>( 2234 client()->driver(), form,
2257 password_manager(), client(), client()->driver(), form, 2235 base::MakeUnique<MockFormSaver>(), &fetcher);
2258 base::MakeUnique<MockFormSaver>(), &fetcher));
2259 // The creation of |fetcher| keeps it waiting for store results. This test 2236 // The creation of |fetcher| keeps it waiting for store results. This test
2260 // keeps the fetcher waiting on purpose. 2237 // keeps the fetcher waiting on purpose.
2261 2238
2262 PasswordForm submitted_form(form); 2239 PasswordForm submitted_form(form);
2263 submitted_form.password_value += ASCIIToUTF16("add stuff, make it different"); 2240 submitted_form.password_value += ASCIIToUTF16("add stuff, make it different");
2264 form_manager->ProvisionallySave( 2241 form_manager.ProvisionallySave(
2265 submitted_form, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); 2242 submitted_form, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
2266 2243
2267 base::HistogramTester histogram_tester; 2244 base::HistogramTester histogram_tester;
2268 EXPECT_CALL(MockFormSaver::Get(form_manager.get()), 2245 EXPECT_CALL(MockFormSaver::Get(&form_manager),
2269 WipeOutdatedCopies(form_manager->pending_credentials(), _, _)); 2246 WipeOutdatedCopies(form_manager.pending_credentials(), _, _));
2270 form_manager->WipeStoreCopyIfOutdated(); 2247 form_manager.WipeStoreCopyIfOutdated();
2271 histogram_tester.ExpectUniqueSample("PasswordManager.StoreReadyWhenWiping", 0, 2248 histogram_tester.ExpectUniqueSample("PasswordManager.StoreReadyWhenWiping", 0,
2272 1); 2249 1);
2273 } 2250 }
2274 2251
2275 TEST_F(PasswordFormManagerTest, GenerationStatusChangedWithPassword) { 2252 TEST_F(PasswordFormManagerTest, GenerationStatusChangedWithPassword) {
2276 PasswordForm generated_form = *observed_form(); 2253 PasswordForm generated_form = *observed_form();
2277 generated_form.type = PasswordForm::TYPE_GENERATED; 2254 generated_form.type = PasswordForm::TYPE_GENERATED;
2278 generated_form.username_value = ASCIIToUTF16("username"); 2255 generated_form.username_value = ASCIIToUTF16("username");
2279 generated_form.password_value = ASCIIToUTF16("password2"); 2256 generated_form.password_value = ASCIIToUTF16("password2");
2280 generated_form.preferred = true; 2257 generated_form.preferred = true;
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
2379 bool kFalseTrue[] = {false, true}; 2356 bool kFalseTrue[] = {false, true};
2380 for (autofill::ServerFieldType vote : kChangePasswordVotes) { 2357 for (autofill::ServerFieldType vote : kChangePasswordVotes) {
2381 for (bool has_confirmation_field : kFalseTrue) 2358 for (bool has_confirmation_field : kFalseTrue)
2382 ChangePasswordUploadTest(vote, has_confirmation_field); 2359 ChangePasswordUploadTest(vote, has_confirmation_field);
2383 } 2360 }
2384 } 2361 }
2385 2362
2386 TEST_F(PasswordFormManagerTest, TestUpdatePSLMatchedCredentials) { 2363 TEST_F(PasswordFormManagerTest, TestUpdatePSLMatchedCredentials) {
2387 FakeFormFetcher fetcher; 2364 FakeFormFetcher fetcher;
2388 fetcher.Fetch(); 2365 fetcher.Fetch();
2389 scoped_refptr<PasswordFormManager> form_manager( 2366 PasswordFormManager form_manager(password_manager(), client(),
2390 base::MakeRefCounted<PasswordFormManager>( 2367 client()->driver(), *observed_form(),
2391 password_manager(), client(), client()->driver(), *observed_form(), 2368 base::MakeUnique<MockFormSaver>(), &fetcher);
2392 base::MakeUnique<MockFormSaver>(), &fetcher));
2393 fetcher.SetNonFederated({saved_match(), psl_saved_match()}, 0u); 2369 fetcher.SetNonFederated({saved_match(), psl_saved_match()}, 0u);
2394 2370
2395 // User submits a credentials with an old username and a new password. 2371 // User submits a credentials with an old username and a new password.
2396 PasswordForm credentials(*observed_form()); 2372 PasswordForm credentials(*observed_form());
2397 credentials.username_value = saved_match()->username_value; 2373 credentials.username_value = saved_match()->username_value;
2398 credentials.password_value = ASCIIToUTF16("new_password"); 2374 credentials.password_value = ASCIIToUTF16("new_password");
2399 credentials.preferred = true; 2375 credentials.preferred = true;
2400 form_manager->ProvisionallySave( 2376 form_manager.ProvisionallySave(
2401 credentials, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); 2377 credentials, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
2402 2378
2403 // Successful login. The PasswordManager would instruct PasswordFormManager 2379 // Successful login. The PasswordManager would instruct PasswordFormManager
2404 // to save, and since this is an update, it should know not to save as a new 2380 // to save, and since this is an update, it should know not to save as a new
2405 // login. 2381 // login.
2406 EXPECT_FALSE(form_manager->IsNewLogin()); 2382 EXPECT_FALSE(form_manager.IsNewLogin());
2407 2383
2408 // Trigger saving to exercise some special case handling during updating. 2384 // Trigger saving to exercise some special case handling during updating.
2409 PasswordForm new_credentials; 2385 PasswordForm new_credentials;
2410 std::vector<autofill::PasswordForm> credentials_to_update; 2386 std::vector<autofill::PasswordForm> credentials_to_update;
2411 EXPECT_CALL(MockFormSaver::Get(form_manager.get()), Update(_, _, _, nullptr)) 2387 EXPECT_CALL(MockFormSaver::Get(&form_manager), Update(_, _, _, nullptr))
2412 .WillOnce(testing::DoAll(SaveArg<0>(&new_credentials), 2388 .WillOnce(testing::DoAll(SaveArg<0>(&new_credentials),
2413 SaveArgPointee<2>(&credentials_to_update))); 2389 SaveArgPointee<2>(&credentials_to_update)));
2414 EXPECT_CALL(*client()->mock_driver()->mock_autofill_download_manager(), 2390 EXPECT_CALL(*client()->mock_driver()->mock_autofill_download_manager(),
2415 StartUploadRequest(_, false, _, _, true)); 2391 StartUploadRequest(_, false, _, _, true));
2416 2392
2417 form_manager->Save(); 2393 form_manager.Save();
2418 2394
2419 // No meta-information should be updated, only the password. 2395 // No meta-information should be updated, only the password.
2420 EXPECT_EQ(credentials.password_value, new_credentials.password_value); 2396 EXPECT_EQ(credentials.password_value, new_credentials.password_value);
2421 EXPECT_EQ(saved_match()->username_value, new_credentials.username_value); 2397 EXPECT_EQ(saved_match()->username_value, new_credentials.username_value);
2422 EXPECT_EQ(saved_match()->username_element, new_credentials.username_element); 2398 EXPECT_EQ(saved_match()->username_element, new_credentials.username_element);
2423 EXPECT_EQ(saved_match()->password_element, new_credentials.password_element); 2399 EXPECT_EQ(saved_match()->password_element, new_credentials.password_element);
2424 EXPECT_EQ(saved_match()->origin, new_credentials.origin); 2400 EXPECT_EQ(saved_match()->origin, new_credentials.origin);
2425 2401
2426 ASSERT_EQ(1u, credentials_to_update.size()); 2402 ASSERT_EQ(1u, credentials_to_update.size());
2427 EXPECT_EQ(credentials.password_value, 2403 EXPECT_EQ(credentials.password_value,
2428 credentials_to_update[0].password_value); 2404 credentials_to_update[0].password_value);
2429 EXPECT_EQ(psl_saved_match()->username_element, 2405 EXPECT_EQ(psl_saved_match()->username_element,
2430 credentials_to_update[0].username_element); 2406 credentials_to_update[0].username_element);
2431 EXPECT_EQ(psl_saved_match()->username_element, 2407 EXPECT_EQ(psl_saved_match()->username_element,
2432 credentials_to_update[0].username_element); 2408 credentials_to_update[0].username_element);
2433 EXPECT_EQ(psl_saved_match()->password_element, 2409 EXPECT_EQ(psl_saved_match()->password_element,
2434 credentials_to_update[0].password_element); 2410 credentials_to_update[0].password_element);
2435 EXPECT_EQ(psl_saved_match()->origin, credentials_to_update[0].origin); 2411 EXPECT_EQ(psl_saved_match()->origin, credentials_to_update[0].origin);
2436 } 2412 }
2437 2413
2438 TEST_F(PasswordFormManagerTest, 2414 TEST_F(PasswordFormManagerTest,
2439 TestNotUpdatePSLMatchedCredentialsWithAnotherUsername) { 2415 TestNotUpdatePSLMatchedCredentialsWithAnotherUsername) {
2440 FakeFormFetcher fetcher; 2416 FakeFormFetcher fetcher;
2441 fetcher.Fetch(); 2417 fetcher.Fetch();
2442 scoped_refptr<PasswordFormManager> form_manager( 2418 PasswordFormManager form_manager(password_manager(), client(),
2443 base::MakeRefCounted<PasswordFormManager>( 2419 client()->driver(), *observed_form(),
2444 password_manager(), client(), client()->driver(), *observed_form(), 2420 base::MakeUnique<MockFormSaver>(), &fetcher);
2445 base::MakeUnique<MockFormSaver>(), &fetcher));
2446 psl_saved_match()->username_value += ASCIIToUTF16("1"); 2421 psl_saved_match()->username_value += ASCIIToUTF16("1");
2447 fetcher.SetNonFederated({saved_match(), psl_saved_match()}, 0u); 2422 fetcher.SetNonFederated({saved_match(), psl_saved_match()}, 0u);
2448 2423
2449 // User submits a credentials with an old username and a new password. 2424 // User submits a credentials with an old username and a new password.
2450 PasswordForm credentials(*observed_form()); 2425 PasswordForm credentials(*observed_form());
2451 credentials.username_value = saved_match()->username_value; 2426 credentials.username_value = saved_match()->username_value;
2452 credentials.password_value = ASCIIToUTF16("new_password"); 2427 credentials.password_value = ASCIIToUTF16("new_password");
2453 credentials.preferred = true; 2428 credentials.preferred = true;
2454 form_manager->ProvisionallySave( 2429 form_manager.ProvisionallySave(
2455 credentials, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); 2430 credentials, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
2456 2431
2457 // Successful login. The PasswordManager would instruct PasswordFormManager 2432 // Successful login. The PasswordManager would instruct PasswordFormManager
2458 // to save, and since this is an update, it should know not to save as a new 2433 // to save, and since this is an update, it should know not to save as a new
2459 // login. 2434 // login.
2460 EXPECT_FALSE(form_manager->IsNewLogin()); 2435 EXPECT_FALSE(form_manager.IsNewLogin());
2461 2436
2462 // Trigger saving to exercise some special case handling during updating. 2437 // Trigger saving to exercise some special case handling during updating.
2463 PasswordForm new_credentials; 2438 PasswordForm new_credentials;
2464 EXPECT_CALL(MockFormSaver::Get(form_manager.get()), 2439 EXPECT_CALL(MockFormSaver::Get(&form_manager),
2465 Update(_, _, Pointee(IsEmpty()), nullptr)) 2440 Update(_, _, Pointee(IsEmpty()), nullptr))
2466 .WillOnce(testing::SaveArg<0>(&new_credentials)); 2441 .WillOnce(testing::SaveArg<0>(&new_credentials));
2467 EXPECT_CALL(*client()->mock_driver()->mock_autofill_download_manager(), 2442 EXPECT_CALL(*client()->mock_driver()->mock_autofill_download_manager(),
2468 StartUploadRequest(_, false, _, _, true)); 2443 StartUploadRequest(_, false, _, _, true));
2469 2444
2470 form_manager->Save(); 2445 form_manager.Save();
2471 2446
2472 // No meta-information should be updated, only the password. 2447 // No meta-information should be updated, only the password.
2473 EXPECT_EQ(credentials.password_value, new_credentials.password_value); 2448 EXPECT_EQ(credentials.password_value, new_credentials.password_value);
2474 EXPECT_EQ(saved_match()->username_value, new_credentials.username_value); 2449 EXPECT_EQ(saved_match()->username_value, new_credentials.username_value);
2475 EXPECT_EQ(saved_match()->password_element, new_credentials.password_element); 2450 EXPECT_EQ(saved_match()->password_element, new_credentials.password_element);
2476 EXPECT_EQ(saved_match()->username_element, new_credentials.username_element); 2451 EXPECT_EQ(saved_match()->username_element, new_credentials.username_element);
2477 EXPECT_EQ(saved_match()->origin, new_credentials.origin); 2452 EXPECT_EQ(saved_match()->origin, new_credentials.origin);
2478 } 2453 }
2479 2454
2480 TEST_F(PasswordFormManagerTest, 2455 TEST_F(PasswordFormManagerTest,
2481 TestNotUpdatePSLMatchedCredentialsWithAnotherPassword) { 2456 TestNotUpdatePSLMatchedCredentialsWithAnotherPassword) {
2482 FakeFormFetcher fetcher; 2457 FakeFormFetcher fetcher;
2483 fetcher.Fetch(); 2458 fetcher.Fetch();
2484 scoped_refptr<PasswordFormManager> form_manager( 2459 PasswordFormManager form_manager(password_manager(), client(),
2485 base::MakeRefCounted<PasswordFormManager>( 2460 client()->driver(), *observed_form(),
2486 password_manager(), client(), client()->driver(), *observed_form(), 2461 base::MakeUnique<MockFormSaver>(), &fetcher);
2487 base::MakeUnique<MockFormSaver>(), &fetcher));
2488 psl_saved_match()->password_value += ASCIIToUTF16("1"); 2462 psl_saved_match()->password_value += ASCIIToUTF16("1");
2489 fetcher.SetNonFederated({saved_match(), psl_saved_match()}, 0u); 2463 fetcher.SetNonFederated({saved_match(), psl_saved_match()}, 0u);
2490 2464
2491 // User submits a credentials with an old username and a new password. 2465 // User submits a credentials with an old username and a new password.
2492 PasswordForm credentials(*observed_form()); 2466 PasswordForm credentials(*observed_form());
2493 credentials.username_value = saved_match()->username_value; 2467 credentials.username_value = saved_match()->username_value;
2494 credentials.password_value = ASCIIToUTF16("new_password"); 2468 credentials.password_value = ASCIIToUTF16("new_password");
2495 credentials.preferred = true; 2469 credentials.preferred = true;
2496 form_manager->ProvisionallySave( 2470 form_manager.ProvisionallySave(
2497 credentials, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); 2471 credentials, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
2498 2472
2499 // Successful login. The PasswordManager would instruct PasswordFormManager 2473 // Successful login. The PasswordManager would instruct PasswordFormManager
2500 // to save, and since this is an update, it should know not to save as a new 2474 // to save, and since this is an update, it should know not to save as a new
2501 // login. 2475 // login.
2502 EXPECT_FALSE(form_manager->IsNewLogin()); 2476 EXPECT_FALSE(form_manager.IsNewLogin());
2503 2477
2504 // Trigger saving to exercise some special case handling during updating. 2478 // Trigger saving to exercise some special case handling during updating.
2505 PasswordForm new_credentials; 2479 PasswordForm new_credentials;
2506 EXPECT_CALL(MockFormSaver::Get(form_manager.get()), 2480 EXPECT_CALL(MockFormSaver::Get(&form_manager),
2507 Update(_, _, Pointee(IsEmpty()), nullptr)) 2481 Update(_, _, Pointee(IsEmpty()), nullptr))
2508 .WillOnce(testing::SaveArg<0>(&new_credentials)); 2482 .WillOnce(testing::SaveArg<0>(&new_credentials));
2509 EXPECT_CALL(*client()->mock_driver()->mock_autofill_download_manager(), 2483 EXPECT_CALL(*client()->mock_driver()->mock_autofill_download_manager(),
2510 StartUploadRequest(_, false, _, _, true)); 2484 StartUploadRequest(_, false, _, _, true));
2511 2485
2512 form_manager->Save(); 2486 form_manager.Save();
2513 2487
2514 // No meta-information should be updated, only the password. 2488 // No meta-information should be updated, only the password.
2515 EXPECT_EQ(credentials.password_value, new_credentials.password_value); 2489 EXPECT_EQ(credentials.password_value, new_credentials.password_value);
2516 EXPECT_EQ(saved_match()->username_value, new_credentials.username_value); 2490 EXPECT_EQ(saved_match()->username_value, new_credentials.username_value);
2517 EXPECT_EQ(saved_match()->password_element, new_credentials.password_element); 2491 EXPECT_EQ(saved_match()->password_element, new_credentials.password_element);
2518 EXPECT_EQ(saved_match()->username_element, new_credentials.username_element); 2492 EXPECT_EQ(saved_match()->username_element, new_credentials.username_element);
2519 EXPECT_EQ(saved_match()->origin, new_credentials.origin); 2493 EXPECT_EQ(saved_match()->origin, new_credentials.origin);
2520 } 2494 }
2521 2495
2522 TEST_F(PasswordFormManagerTest, TestNotUpdateWhenOnlyPSLMatched) { 2496 TEST_F(PasswordFormManagerTest, TestNotUpdateWhenOnlyPSLMatched) {
2523 FakeFormFetcher fetcher; 2497 FakeFormFetcher fetcher;
2524 fetcher.Fetch(); 2498 fetcher.Fetch();
2525 scoped_refptr<PasswordFormManager> form_manager( 2499 PasswordFormManager form_manager(password_manager(), client(),
2526 base::MakeRefCounted<PasswordFormManager>( 2500 client()->driver(), *observed_form(),
2527 password_manager(), client(), client()->driver(), *observed_form(), 2501 base::MakeUnique<MockFormSaver>(), &fetcher);
2528 base::MakeUnique<MockFormSaver>(), &fetcher));
2529 fetcher.SetNonFederated({psl_saved_match()}, 0u); 2502 fetcher.SetNonFederated({psl_saved_match()}, 0u);
2530 2503
2531 // User submits a credentials with an old username and a new password. 2504 // User submits a credentials with an old username and a new password.
2532 PasswordForm credentials(*observed_form()); 2505 PasswordForm credentials(*observed_form());
2533 credentials.username_value = saved_match()->username_value; 2506 credentials.username_value = saved_match()->username_value;
2534 credentials.password_value = ASCIIToUTF16("new_password"); 2507 credentials.password_value = ASCIIToUTF16("new_password");
2535 credentials.preferred = true; 2508 credentials.preferred = true;
2536 form_manager->ProvisionallySave( 2509 form_manager.ProvisionallySave(
2537 credentials, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); 2510 credentials, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
2538 2511
2539 EXPECT_TRUE(form_manager->IsNewLogin()); 2512 EXPECT_TRUE(form_manager.IsNewLogin());
2540 2513
2541 // PSL matched credential should not be updated, since we are not sure that 2514 // PSL matched credential should not be updated, since we are not sure that
2542 // this is the same credential as submitted one. 2515 // this is the same credential as submitted one.
2543 PasswordForm new_credentials; 2516 PasswordForm new_credentials;
2544 EXPECT_CALL(MockFormSaver::Get(form_manager.get()), Save(_, _, nullptr)) 2517 EXPECT_CALL(MockFormSaver::Get(&form_manager), Save(_, _, nullptr))
2545 .WillOnce(testing::SaveArg<0>(&new_credentials)); 2518 .WillOnce(testing::SaveArg<0>(&new_credentials));
2546 2519
2547 form_manager->Save(); 2520 form_manager.Save();
2548 2521
2549 EXPECT_EQ(credentials.password_value, new_credentials.password_value); 2522 EXPECT_EQ(credentials.password_value, new_credentials.password_value);
2550 EXPECT_EQ(credentials.username_value, new_credentials.username_value); 2523 EXPECT_EQ(credentials.username_value, new_credentials.username_value);
2551 EXPECT_EQ(credentials.password_element, new_credentials.password_element); 2524 EXPECT_EQ(credentials.password_element, new_credentials.password_element);
2552 EXPECT_EQ(credentials.username_element, new_credentials.username_element); 2525 EXPECT_EQ(credentials.username_element, new_credentials.username_element);
2553 EXPECT_EQ(credentials.origin, new_credentials.origin); 2526 EXPECT_EQ(credentials.origin, new_credentials.origin);
2554 } 2527 }
2555 2528
2556 TEST_F(PasswordFormManagerTest, 2529 TEST_F(PasswordFormManagerTest,
2557 TestSavingOnChangePasswordFormGenerationNoStoredForms) { 2530 TestSavingOnChangePasswordFormGenerationNoStoredForms) {
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
2672 field.name = ASCIIToUTF16("Passwd"); 2645 field.name = ASCIIToUTF16("Passwd");
2673 field.form_control_type = "password"; 2646 field.form_control_type = "password";
2674 observed_form()->form_data.fields.push_back(field); 2647 observed_form()->form_data.fields.push_back(field);
2675 2648
2676 field.label = ASCIIToUTF16("new password"); 2649 field.label = ASCIIToUTF16("new password");
2677 field.name = ASCIIToUTF16("NewPasswd"); 2650 field.name = ASCIIToUTF16("NewPasswd");
2678 observed_form()->form_data.fields.push_back(field); 2651 observed_form()->form_data.fields.push_back(field);
2679 2652
2680 FakeFormFetcher fetcher; 2653 FakeFormFetcher fetcher;
2681 fetcher.Fetch(); 2654 fetcher.Fetch();
2682 scoped_refptr<PasswordFormManager> form_manager( 2655 PasswordFormManager form_manager(password_manager(), client(),
2683 base::MakeRefCounted<PasswordFormManager>( 2656 client()->driver(), *observed_form(),
2684 password_manager(), client(), client()->driver(), *observed_form(), 2657 base::MakeUnique<MockFormSaver>(), &fetcher);
2685 base::MakeUnique<MockFormSaver>(), &fetcher));
2686 fetcher.SetNonFederated({saved_match()}, 0u); 2658 fetcher.SetNonFederated({saved_match()}, 0u);
2687 2659
2688 // User submits current and new credentials to the observed form. 2660 // User submits current and new credentials to the observed form.
2689 PasswordForm submitted_form(*observed_form()); 2661 PasswordForm submitted_form(*observed_form());
2690 submitted_form.password_value = saved_match()->password_value; 2662 submitted_form.password_value = saved_match()->password_value;
2691 submitted_form.new_password_value = ASCIIToUTF16("test2"); 2663 submitted_form.new_password_value = ASCIIToUTF16("test2");
2692 submitted_form.preferred = true; 2664 submitted_form.preferred = true;
2693 form_manager->ProvisionallySave( 2665 form_manager.ProvisionallySave(
2694 submitted_form, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); 2666 submitted_form, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
2695 2667
2696 // Successful login. The PasswordManager would instruct PasswordFormManager 2668 // Successful login. The PasswordManager would instruct PasswordFormManager
2697 // to update. 2669 // to update.
2698 EXPECT_FALSE(form_manager->IsNewLogin()); 2670 EXPECT_FALSE(form_manager.IsNewLogin());
2699 EXPECT_TRUE( 2671 EXPECT_TRUE(form_manager.is_possible_change_password_form_without_username());
2700 form_manager->is_possible_change_password_form_without_username());
2701 2672
2702 // By now, the PasswordFormManager should have promoted the new password 2673 // By now, the PasswordFormManager should have promoted the new password
2703 // value already to be the current password, and should no longer maintain 2674 // value already to be the current password, and should no longer maintain
2704 // any info about the new password value. 2675 // any info about the new password value.
2705 EXPECT_EQ(submitted_form.new_password_value, 2676 EXPECT_EQ(submitted_form.new_password_value,
2706 form_manager->pending_credentials().password_value); 2677 form_manager.pending_credentials().password_value);
2707 EXPECT_TRUE(form_manager->pending_credentials().new_password_value.empty()); 2678 EXPECT_TRUE(form_manager.pending_credentials().new_password_value.empty());
2708 2679
2709 std::map<base::string16, autofill::ServerFieldType> expected_types; 2680 std::map<base::string16, autofill::ServerFieldType> expected_types;
2710 expected_types[observed_form()->password_element] = autofill::PASSWORD; 2681 expected_types[observed_form()->password_element] = autofill::PASSWORD;
2711 expected_types[observed_form()->new_password_element] = 2682 expected_types[observed_form()->new_password_element] =
2712 autofill::NEW_PASSWORD; 2683 autofill::NEW_PASSWORD;
2713 2684
2714 autofill::ServerFieldTypeSet expected_available_field_types; 2685 autofill::ServerFieldTypeSet expected_available_field_types;
2715 expected_available_field_types.insert(autofill::PASSWORD); 2686 expected_available_field_types.insert(autofill::PASSWORD);
2716 expected_available_field_types.insert(autofill::NEW_PASSWORD); 2687 expected_available_field_types.insert(autofill::NEW_PASSWORD);
2717 2688
2718 std::string observed_form_signature = 2689 std::string observed_form_signature =
2719 autofill::FormStructure(observed_form()->form_data).FormSignatureAsStr(); 2690 autofill::FormStructure(observed_form()->form_data).FormSignatureAsStr();
2720 2691
2721 std::string expected_login_signature = 2692 std::string expected_login_signature =
2722 autofill::FormStructure(saved_match()->form_data).FormSignatureAsStr(); 2693 autofill::FormStructure(saved_match()->form_data).FormSignatureAsStr();
2723 2694
2724 EXPECT_CALL(*client()->mock_driver()->mock_autofill_download_manager(), 2695 EXPECT_CALL(*client()->mock_driver()->mock_autofill_download_manager(),
2725 StartUploadRequest(CheckUploadedAutofillTypesAndSignature( 2696 StartUploadRequest(CheckUploadedAutofillTypesAndSignature(
2726 observed_form_signature, expected_types, 2697 observed_form_signature, expected_types,
2727 false /* expect_generation_vote */), 2698 false /* expect_generation_vote */),
2728 false, expected_available_field_types, 2699 false, expected_available_field_types,
2729 expected_login_signature, true)); 2700 expected_login_signature, true));
2730 2701
2731 form_manager->Update(*saved_match()); 2702 form_manager.Update(*saved_match());
2732 } 2703 }
2733 2704
2734 // Checks uploading a vote about the usage of the password generation popup. 2705 // Checks uploading a vote about the usage of the password generation popup.
2735 TEST_F(PasswordFormManagerTest, GeneratedVoteUpload) { 2706 TEST_F(PasswordFormManagerTest, GeneratedVoteUpload) {
2736 bool kFalseTrue[] = {false, true}; 2707 bool kFalseTrue[] = {false, true};
2737 SavePromptInteraction kSavePromptInterations[] = {SAVE, NEVER, 2708 SavePromptInteraction kSavePromptInterations[] = {SAVE, NEVER,
2738 NO_INTERACTION}; 2709 NO_INTERACTION};
2739 for (bool is_manual_generation : kFalseTrue) { 2710 for (bool is_manual_generation : kFalseTrue) {
2740 for (bool is_change_password_form : kFalseTrue) { 2711 for (bool is_change_password_form : kFalseTrue) {
2741 for (bool has_generated_password : kFalseTrue) { 2712 for (bool has_generated_password : kFalseTrue) {
(...skipping 15 matching lines...) Expand all
2757 form.form_data = saved_match()->form_data; 2728 form.form_data = saved_match()->form_data;
2758 2729
2759 // Create submitted form. 2730 // Create submitted form.
2760 PasswordForm submitted_form(form); 2731 PasswordForm submitted_form(form);
2761 submitted_form.preferred = true; 2732 submitted_form.preferred = true;
2762 submitted_form.username_value = saved_match()->username_value; 2733 submitted_form.username_value = saved_match()->username_value;
2763 submitted_form.password_value = saved_match()->password_value; 2734 submitted_form.password_value = saved_match()->password_value;
2764 2735
2765 FakeFormFetcher fetcher; 2736 FakeFormFetcher fetcher;
2766 fetcher.Fetch(); 2737 fetcher.Fetch();
2767 scoped_refptr<PasswordFormManager> form_manager( 2738 PasswordFormManager form_manager(
2768 base::MakeRefCounted<PasswordFormManager>( 2739 password_manager(), client(), client()->driver(), form,
2769 password_manager(), client(), client()->driver(), form, 2740 base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher);
2770 base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher));
2771 base::string16 generation_element = form.password_element; 2741 base::string16 generation_element = form.password_element;
2772 if (found_generation_element) 2742 if (found_generation_element)
2773 form_manager->SaveGenerationFieldDetectedByClassifier(generation_element); 2743 form_manager.SaveGenerationFieldDetectedByClassifier(generation_element);
2774 else 2744 else
2775 form_manager->SaveGenerationFieldDetectedByClassifier(base::string16()); 2745 form_manager.SaveGenerationFieldDetectedByClassifier(base::string16());
2776 2746
2777 fetcher.SetNonFederated(std::vector<const PasswordForm*>(), 0u); 2747 fetcher.SetNonFederated(std::vector<const PasswordForm*>(), 0u);
2778 2748
2779 autofill::FormStructure form_structure(submitted_form.form_data); 2749 autofill::FormStructure form_structure(submitted_form.form_data);
2780 2750
2781 EXPECT_CALL( 2751 EXPECT_CALL(
2782 *client()->mock_driver()->mock_autofill_download_manager(), 2752 *client()->mock_driver()->mock_autofill_download_manager(),
2783 StartUploadRequest(CheckUploadedFormClassifierVote( 2753 StartUploadRequest(CheckUploadedFormClassifierVote(
2784 found_generation_element, generation_element), 2754 found_generation_element, generation_element),
2785 false, _, _, true)); 2755 false, _, _, true));
2786 2756
2787 form_manager->ProvisionallySave( 2757 form_manager.ProvisionallySave(
2788 submitted_form, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); 2758 submitted_form, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
2789 form_manager->Save(); 2759 form_manager.Save();
2790 } 2760 }
2791 } 2761 }
2792 2762
2793 TEST_F(PasswordFormManagerTest, FieldPropertiesMasksUpload) { 2763 TEST_F(PasswordFormManagerTest, FieldPropertiesMasksUpload) {
2794 PasswordForm form(*observed_form()); 2764 PasswordForm form(*observed_form());
2795 form.form_data = saved_match()->form_data; 2765 form.form_data = saved_match()->form_data;
2796 2766
2797 // Create submitted form. 2767 // Create submitted form.
2798 PasswordForm submitted_form(form); 2768 PasswordForm submitted_form(form);
2799 submitted_form.preferred = true; 2769 submitted_form.preferred = true;
2800 submitted_form.username_value = saved_match()->username_value; 2770 submitted_form.username_value = saved_match()->username_value;
2801 submitted_form.password_value = saved_match()->password_value; 2771 submitted_form.password_value = saved_match()->password_value;
2802 2772
2803 FakeFormFetcher fetcher; 2773 FakeFormFetcher fetcher;
2804 fetcher.Fetch(); 2774 fetcher.Fetch();
2805 scoped_refptr<PasswordFormManager> form_manager( 2775 PasswordFormManager form_manager(
2806 base::MakeRefCounted<PasswordFormManager>( 2776 password_manager(), client(), client()->driver(), form,
2807 password_manager(), client(), client()->driver(), form, 2777 base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher);
2808 base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher));
2809 fetcher.SetNonFederated(std::vector<const PasswordForm*>(), 0u); 2778 fetcher.SetNonFederated(std::vector<const PasswordForm*>(), 0u);
2810 2779
2811 DCHECK_EQ(3U, form.form_data.fields.size()); 2780 DCHECK_EQ(3U, form.form_data.fields.size());
2812 submitted_form.form_data.fields[1].properties_mask = 2781 submitted_form.form_data.fields[1].properties_mask =
2813 FieldPropertiesFlags::USER_TYPED; 2782 FieldPropertiesFlags::USER_TYPED;
2814 submitted_form.form_data.fields[2].properties_mask = 2783 submitted_form.form_data.fields[2].properties_mask =
2815 FieldPropertiesFlags::USER_TYPED; 2784 FieldPropertiesFlags::USER_TYPED;
2816 2785
2817 std::map<base::string16, autofill::FieldPropertiesMask> 2786 std::map<base::string16, autofill::FieldPropertiesMask>
2818 expected_field_properties; 2787 expected_field_properties;
2819 for (const autofill::FormFieldData& field : submitted_form.form_data.fields) 2788 for (const autofill::FormFieldData& field : submitted_form.form_data.fields)
2820 if (field.properties_mask) 2789 if (field.properties_mask)
2821 expected_field_properties[field.name] = field.properties_mask; 2790 expected_field_properties[field.name] = field.properties_mask;
2822 2791
2823 EXPECT_CALL(*client()->mock_driver()->mock_autofill_download_manager(), 2792 EXPECT_CALL(*client()->mock_driver()->mock_autofill_download_manager(),
2824 StartUploadRequest( 2793 StartUploadRequest(
2825 CheckFieldPropertiesMasksUpload(expected_field_properties), 2794 CheckFieldPropertiesMasksUpload(expected_field_properties),
2826 false, _, _, true)); 2795 false, _, _, true));
2827 form_manager->ProvisionallySave( 2796 form_manager.ProvisionallySave(
2828 submitted_form, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); 2797 submitted_form, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
2829 form_manager->Save(); 2798 form_manager.Save();
2830 } 2799 }
2831 2800
2832 TEST_F(PasswordFormManagerTest, TestSavingAPIFormsWithSamePassword) { 2801 TEST_F(PasswordFormManagerTest, TestSavingAPIFormsWithSamePassword) {
2833 // Turn |observed_form| and |saved_match| to API created forms. 2802 // Turn |observed_form| and |saved_match| to API created forms.
2834 observed_form()->username_element.clear(); 2803 observed_form()->username_element.clear();
2835 observed_form()->type = autofill::PasswordForm::TYPE_API; 2804 observed_form()->type = autofill::PasswordForm::TYPE_API;
2836 saved_match()->username_element.clear(); 2805 saved_match()->username_element.clear();
2837 saved_match()->type = autofill::PasswordForm::TYPE_API; 2806 saved_match()->type = autofill::PasswordForm::TYPE_API;
2838 2807
2839 FakeFormFetcher fetcher; 2808 FakeFormFetcher fetcher;
2840 fetcher.Fetch(); 2809 fetcher.Fetch();
2841 scoped_refptr<PasswordFormManager> form_manager( 2810 PasswordFormManager form_manager(password_manager(), client(),
2842 base::MakeRefCounted<PasswordFormManager>( 2811 client()->driver(), *observed_form(),
2843 password_manager(), client(), client()->driver(), *observed_form(), 2812 base::MakeUnique<MockFormSaver>(), &fetcher);
2844 base::MakeUnique<MockFormSaver>(), &fetcher));
2845 fetcher.SetNonFederated({saved_match()}, 0u); 2813 fetcher.SetNonFederated({saved_match()}, 0u);
2846 2814
2847 // User submits new credentials with the same password as in already saved 2815 // User submits new credentials with the same password as in already saved
2848 // one. 2816 // one.
2849 PasswordForm credentials(*observed_form()); 2817 PasswordForm credentials(*observed_form());
2850 credentials.username_value = 2818 credentials.username_value =
2851 saved_match()->username_value + ASCIIToUTF16("1"); 2819 saved_match()->username_value + ASCIIToUTF16("1");
2852 credentials.password_value = saved_match()->password_value; 2820 credentials.password_value = saved_match()->password_value;
2853 credentials.preferred = true; 2821 credentials.preferred = true;
2854 2822
2855 form_manager->ProvisionallySave( 2823 form_manager.ProvisionallySave(
2856 credentials, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); 2824 credentials, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
2857 2825
2858 EXPECT_TRUE(form_manager->IsNewLogin()); 2826 EXPECT_TRUE(form_manager.IsNewLogin());
2859 2827
2860 PasswordForm new_credentials; 2828 PasswordForm new_credentials;
2861 EXPECT_CALL(MockFormSaver::Get(form_manager.get()), Save(_, _, nullptr)) 2829 EXPECT_CALL(MockFormSaver::Get(&form_manager), Save(_, _, nullptr))
2862 .WillOnce(SaveArg<0>(&new_credentials)); 2830 .WillOnce(SaveArg<0>(&new_credentials));
2863 2831
2864 form_manager->Save(); 2832 form_manager.Save();
2865 2833
2866 EXPECT_EQ(saved_match()->username_value + ASCIIToUTF16("1"), 2834 EXPECT_EQ(saved_match()->username_value + ASCIIToUTF16("1"),
2867 new_credentials.username_value); 2835 new_credentials.username_value);
2868 EXPECT_EQ(saved_match()->password_value, new_credentials.password_value); 2836 EXPECT_EQ(saved_match()->password_value, new_credentials.password_value);
2869 EXPECT_EQ(base::string16(), new_credentials.username_element); 2837 EXPECT_EQ(base::string16(), new_credentials.username_element);
2870 EXPECT_EQ(autofill::PasswordForm::TYPE_API, new_credentials.type); 2838 EXPECT_EQ(autofill::PasswordForm::TYPE_API, new_credentials.type);
2871 } 2839 }
2872 2840
2873 TEST_F(PasswordFormManagerTest, SkipZeroClickIntact) { 2841 TEST_F(PasswordFormManagerTest, SkipZeroClickIntact) {
2874 saved_match()->skip_zero_click = true; 2842 saved_match()->skip_zero_click = true;
(...skipping 23 matching lines...) Expand all
2898 ASSERT_EQ(1u, credentials_to_update.size()); 2866 ASSERT_EQ(1u, credentials_to_update.size());
2899 EXPECT_TRUE(credentials_to_update[0].skip_zero_click); 2867 EXPECT_TRUE(credentials_to_update[0].skip_zero_click);
2900 } 2868 }
2901 2869
2902 TEST_F(PasswordFormManagerTest, ProbablyAccountCreationUpload) { 2870 TEST_F(PasswordFormManagerTest, ProbablyAccountCreationUpload) {
2903 PasswordForm form(*observed_form()); 2871 PasswordForm form(*observed_form());
2904 form.form_data = saved_match()->form_data; 2872 form.form_data = saved_match()->form_data;
2905 2873
2906 FakeFormFetcher fetcher; 2874 FakeFormFetcher fetcher;
2907 fetcher.Fetch(); 2875 fetcher.Fetch();
2908 scoped_refptr<PasswordFormManager> form_manager( 2876 PasswordFormManager form_manager(
2909 base::MakeRefCounted<PasswordFormManager>( 2877 password_manager(), client(), client()->driver(), form,
2910 password_manager(), client(), client()->driver(), form, 2878 base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher);
2911 base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher));
2912 2879
2913 PasswordForm form_to_save(form); 2880 PasswordForm form_to_save(form);
2914 form_to_save.preferred = true; 2881 form_to_save.preferred = true;
2915 form_to_save.username_element = ASCIIToUTF16("observed-username-field"); 2882 form_to_save.username_element = ASCIIToUTF16("observed-username-field");
2916 form_to_save.username_value = saved_match()->username_value; 2883 form_to_save.username_value = saved_match()->username_value;
2917 form_to_save.password_value = saved_match()->password_value; 2884 form_to_save.password_value = saved_match()->password_value;
2918 form_to_save.does_look_like_signup_form = true; 2885 form_to_save.does_look_like_signup_form = true;
2919 2886
2920 fetcher.SetNonFederated(std::vector<const PasswordForm*>(), 0u); 2887 fetcher.SetNonFederated(std::vector<const PasswordForm*>(), 0u);
2921 2888
2922 autofill::FormStructure pending_structure(form_to_save.form_data); 2889 autofill::FormStructure pending_structure(form_to_save.form_data);
2923 autofill::ServerFieldTypeSet expected_available_field_types; 2890 autofill::ServerFieldTypeSet expected_available_field_types;
2924 std::map<base::string16, autofill::ServerFieldType> expected_types; 2891 std::map<base::string16, autofill::ServerFieldType> expected_types;
2925 expected_types[ASCIIToUTF16("full_name")] = autofill::UNKNOWN_TYPE; 2892 expected_types[ASCIIToUTF16("full_name")] = autofill::UNKNOWN_TYPE;
2926 expected_types[saved_match()->username_element] = autofill::UNKNOWN_TYPE; 2893 expected_types[saved_match()->username_element] = autofill::UNKNOWN_TYPE;
2927 expected_available_field_types.insert( 2894 expected_available_field_types.insert(
2928 autofill::PROBABLY_ACCOUNT_CREATION_PASSWORD); 2895 autofill::PROBABLY_ACCOUNT_CREATION_PASSWORD);
2929 expected_types[saved_match()->password_element] = 2896 expected_types[saved_match()->password_element] =
2930 autofill::PROBABLY_ACCOUNT_CREATION_PASSWORD; 2897 autofill::PROBABLY_ACCOUNT_CREATION_PASSWORD;
2931 2898
2932 EXPECT_CALL(*client()->mock_driver()->mock_autofill_download_manager(), 2899 EXPECT_CALL(*client()->mock_driver()->mock_autofill_download_manager(),
2933 StartUploadRequest( 2900 StartUploadRequest(
2934 CheckUploadedAutofillTypesAndSignature( 2901 CheckUploadedAutofillTypesAndSignature(
2935 pending_structure.FormSignatureAsStr(), expected_types, 2902 pending_structure.FormSignatureAsStr(), expected_types,
2936 false /* expect_generation_vote */), 2903 false /* expect_generation_vote */),
2937 false, expected_available_field_types, std::string(), true)); 2904 false, expected_available_field_types, std::string(), true));
2938 2905
2939 form_manager->ProvisionallySave( 2906 form_manager.ProvisionallySave(
2940 form_to_save, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); 2907 form_to_save, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
2941 form_manager->Save(); 2908 form_manager.Save();
2942 } 2909 }
2943 2910
2944 TEST_F(PasswordFormManagerFillOnAccountSelectTest, ProcessFrame) { 2911 TEST_F(PasswordFormManagerFillOnAccountSelectTest, ProcessFrame) {
2945 EXPECT_CALL(*client()->mock_driver(), 2912 EXPECT_CALL(*client()->mock_driver(),
2946 ShowInitialPasswordAccountSuggestions(_)); 2913 ShowInitialPasswordAccountSuggestions(_));
2947 fake_form_fetcher()->SetNonFederated({saved_match()}, 0u); 2914 fake_form_fetcher()->SetNonFederated({saved_match()}, 0u);
2948 } 2915 }
2949 2916
2950 // Check that PasswordFormManager records 2917 // Check that PasswordFormManager records
2951 // PasswordManager_LoginFollowingAutofill as part of processing a credential 2918 // PasswordManager_LoginFollowingAutofill as part of processing a credential
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
2987 static_cast<PasswordForm::Scheme>(correct); 2954 static_cast<PasswordForm::Scheme>(correct);
2988 const PasswordForm::Scheme kWrongScheme = 2955 const PasswordForm::Scheme kWrongScheme =
2989 static_cast<PasswordForm::Scheme>(wrong); 2956 static_cast<PasswordForm::Scheme>(wrong);
2990 SCOPED_TRACE(testing::Message() << "Correct scheme = " << kCorrectScheme 2957 SCOPED_TRACE(testing::Message() << "Correct scheme = " << kCorrectScheme
2991 << ", wrong scheme = " << kWrongScheme); 2958 << ", wrong scheme = " << kWrongScheme);
2992 2959
2993 PasswordForm observed = *observed_form(); 2960 PasswordForm observed = *observed_form();
2994 observed.scheme = kCorrectScheme; 2961 observed.scheme = kCorrectScheme;
2995 FakeFormFetcher fetcher; 2962 FakeFormFetcher fetcher;
2996 fetcher.Fetch(); 2963 fetcher.Fetch();
2997 scoped_refptr<PasswordFormManager> form_manager( 2964 PasswordFormManager form_manager(
2998 base::MakeRefCounted<PasswordFormManager>( 2965 password_manager(), client(),
2999 password_manager(), client(), 2966 (kCorrectScheme == PasswordForm::SCHEME_HTML ? client()->driver()
3000 (kCorrectScheme == PasswordForm::SCHEME_HTML ? client()->driver() 2967 : nullptr),
3001 : nullptr), 2968 observed, base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher);
3002 observed, base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher));
3003 2969
3004 PasswordForm match = *saved_match(); 2970 PasswordForm match = *saved_match();
3005 match.scheme = kCorrectScheme; 2971 match.scheme = kCorrectScheme;
3006 2972
3007 PasswordForm non_match = match; 2973 PasswordForm non_match = match;
3008 non_match.scheme = kWrongScheme; 2974 non_match.scheme = kWrongScheme;
3009 2975
3010 // First try putting the correct scheme first in returned matches. 2976 // First try putting the correct scheme first in returned matches.
3011 static_cast<FormFetcher::Consumer*>(form_manager.get()) 2977 static_cast<FormFetcher::Consumer*>(&form_manager)
3012 ->ProcessMatches({&match, &non_match}, 0u); 2978 ->ProcessMatches({&match, &non_match}, 0u);
3013 2979
3014 EXPECT_EQ(1u, form_manager->best_matches().size()); 2980 EXPECT_EQ(1u, form_manager.best_matches().size());
3015 EXPECT_EQ(kCorrectScheme, 2981 EXPECT_EQ(kCorrectScheme,
3016 form_manager->best_matches().begin()->second->scheme); 2982 form_manager.best_matches().begin()->second->scheme);
3017 2983
3018 // Now try putting the correct scheme last in returned matches. 2984 // Now try putting the correct scheme last in returned matches.
3019 static_cast<FormFetcher::Consumer*>(form_manager.get()) 2985 static_cast<FormFetcher::Consumer*>(&form_manager)
3020 ->ProcessMatches({&non_match, &match}, 0u); 2986 ->ProcessMatches({&non_match, &match}, 0u);
3021 2987
3022 EXPECT_EQ(1u, form_manager->best_matches().size()); 2988 EXPECT_EQ(1u, form_manager.best_matches().size());
3023 EXPECT_EQ(kCorrectScheme, 2989 EXPECT_EQ(kCorrectScheme,
3024 form_manager->best_matches().begin()->second->scheme); 2990 form_manager.best_matches().begin()->second->scheme);
3025 } 2991 }
3026 } 2992 }
3027 } 2993 }
3028 2994
3029 // Ensure that DoesManage takes into consideration drivers when origins are 2995 // Ensure that DoesManage takes into consideration drivers when origins are
3030 // different. 2996 // different.
3031 TEST_F(PasswordFormManagerTest, DoesManageDifferentOrigins) { 2997 TEST_F(PasswordFormManagerTest, DoesManageDifferentOrigins) {
3032 for (bool same_drivers : {false, true}) { 2998 for (bool same_drivers : {false, true}) {
3033 PasswordForm submitted_form(*observed_form()); 2999 PasswordForm submitted_form(*observed_form());
3034 observed_form()->origin = GURL("http://accounts.google.com/a/Login"); 3000 observed_form()->origin = GURL("http://accounts.google.com/a/Login");
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
3159 3125
3160 EXPECT_THAT(credentials_to_update, IsEmpty()); 3126 EXPECT_THAT(credentials_to_update, IsEmpty());
3161 } 3127 }
3162 3128
3163 // Check that on changing FormFetcher, the PasswordFormManager removes itself 3129 // Check that on changing FormFetcher, the PasswordFormManager removes itself
3164 // from consuming the old one. 3130 // from consuming the old one.
3165 TEST_F(PasswordFormManagerTest, DropFetcherOnDestruction) { 3131 TEST_F(PasswordFormManagerTest, DropFetcherOnDestruction) {
3166 MockFormFetcher fetcher; 3132 MockFormFetcher fetcher;
3167 FormFetcher::Consumer* added_consumer = nullptr; 3133 FormFetcher::Consumer* added_consumer = nullptr;
3168 EXPECT_CALL(fetcher, AddConsumer(_)).WillOnce(SaveArg<0>(&added_consumer)); 3134 EXPECT_CALL(fetcher, AddConsumer(_)).WillOnce(SaveArg<0>(&added_consumer));
3169 auto form_manager = base::MakeRefCounted<PasswordFormManager>( 3135 auto form_manager = base::MakeUnique<PasswordFormManager>(
3170 password_manager(), client(), client()->driver(), *observed_form(), 3136 password_manager(), client(), client()->driver(), *observed_form(),
3171 base::MakeUnique<MockFormSaver>(), &fetcher); 3137 base::MakeUnique<MockFormSaver>(), &fetcher);
3172 EXPECT_EQ(form_manager.get(), added_consumer); 3138 EXPECT_EQ(form_manager.get(), added_consumer);
3173 3139
3174 EXPECT_CALL(fetcher, RemoveConsumer(form_manager.get())); 3140 EXPECT_CALL(fetcher, RemoveConsumer(form_manager.get()));
3175 form_manager = nullptr; 3141 form_manager.reset();
3176 } 3142 }
3177 3143
3178 // Check that if asked to take ownership of the same FormFetcher which it had 3144 // Check that if asked to take ownership of the same FormFetcher which it had
3179 // consumed before, the PasswordFormManager does not add itself as a consumer 3145 // consumed before, the PasswordFormManager does not add itself as a consumer
3180 // again. 3146 // again.
3181 TEST_F(PasswordFormManagerTest, GrabFetcher_Same) { 3147 TEST_F(PasswordFormManagerTest, GrabFetcher_Same) {
3182 auto fetcher = base::MakeUnique<MockFormFetcher>(); 3148 auto fetcher = base::MakeUnique<MockFormFetcher>();
3183 fetcher->Fetch(); 3149 fetcher->Fetch();
3184 scoped_refptr<PasswordFormManager> form_manager( 3150 PasswordFormManager form_manager(
3185 base::MakeRefCounted<PasswordFormManager>( 3151 password_manager(), client(), client()->driver(), *observed_form(),
3186 password_manager(), client(), client()->driver(), *observed_form(), 3152 base::MakeUnique<MockFormSaver>(), fetcher.get());
3187 base::MakeUnique<MockFormSaver>(), fetcher.get()));
3188 3153
3189 EXPECT_CALL(*fetcher, AddConsumer(_)).Times(0); 3154 EXPECT_CALL(*fetcher, AddConsumer(_)).Times(0);
3190 EXPECT_CALL(*fetcher, RemoveConsumer(_)).Times(0); 3155 EXPECT_CALL(*fetcher, RemoveConsumer(_)).Times(0);
3191 form_manager->GrabFetcher(std::move(fetcher)); 3156 form_manager.GrabFetcher(std::move(fetcher));
3192 // There will be a RemoveConsumer call as soon as form_manager goes out of 3157 // There will be a RemoveConsumer call as soon as form_manager goes out of
3193 // scope, but the test needs to ensure that there is none as a result of 3158 // scope, but the test needs to ensure that there is none as a result of
3194 // GrabFetcher. 3159 // GrabFetcher.
3195 Mock::VerifyAndClearExpectations(form_manager->form_fetcher()); 3160 Mock::VerifyAndClearExpectations(form_manager.form_fetcher());
3196 } 3161 }
3197 3162
3198 // Check that if asked to take ownership of a different FormFetcher than which 3163 // Check that if asked to take ownership of a different FormFetcher than which
3199 // it had consumed before, the PasswordFormManager adds itself as a consumer 3164 // it had consumed before, the PasswordFormManager adds itself as a consumer
3200 // and replaces the references to the old results. 3165 // and replaces the references to the old results.
3201 TEST_F(PasswordFormManagerTest, GrabFetcher_Different) { 3166 TEST_F(PasswordFormManagerTest, GrabFetcher_Different) {
3202 PasswordForm old_match = *observed_form(); 3167 PasswordForm old_match = *observed_form();
3203 old_match.username_value = ASCIIToUTF16("user1"); 3168 old_match.username_value = ASCIIToUTF16("user1");
3204 old_match.password_value = ASCIIToUTF16("pass"); 3169 old_match.password_value = ASCIIToUTF16("pass");
3205 fake_form_fetcher()->SetNonFederated({&old_match}, 0u); 3170 fake_form_fetcher()->SetNonFederated({&old_match}, 0u);
(...skipping 11 matching lines...) Expand all
3217 EXPECT_EQ(0u, form_manager()->best_matches().size()); 3182 EXPECT_EQ(0u, form_manager()->best_matches().size());
3218 } 3183 }
3219 3184
3220 // Check that on changing FormFetcher, the PasswordFormManager removes itself 3185 // Check that on changing FormFetcher, the PasswordFormManager removes itself
3221 // from consuming the old one. 3186 // from consuming the old one.
3222 TEST_F(PasswordFormManagerTest, GrabFetcher_Remove) { 3187 TEST_F(PasswordFormManagerTest, GrabFetcher_Remove) {
3223 MockFormFetcher old_fetcher; 3188 MockFormFetcher old_fetcher;
3224 FormFetcher::Consumer* added_consumer = nullptr; 3189 FormFetcher::Consumer* added_consumer = nullptr;
3225 EXPECT_CALL(old_fetcher, AddConsumer(_)) 3190 EXPECT_CALL(old_fetcher, AddConsumer(_))
3226 .WillOnce(SaveArg<0>(&added_consumer)); 3191 .WillOnce(SaveArg<0>(&added_consumer));
3227 scoped_refptr<PasswordFormManager> form_manager( 3192 PasswordFormManager form_manager(
3228 base::MakeRefCounted<PasswordFormManager>( 3193 password_manager(), client(), client()->driver(), *observed_form(),
3229 password_manager(), client(), client()->driver(), *observed_form(), 3194 base::MakeUnique<MockFormSaver>(), &old_fetcher);
3230 base::MakeUnique<MockFormSaver>(), &old_fetcher)); 3195 EXPECT_EQ(&form_manager, added_consumer);
3231 EXPECT_EQ(form_manager.get(), added_consumer);
3232 3196
3233 auto new_fetcher = base::MakeUnique<MockFormFetcher>(); 3197 auto new_fetcher = base::MakeUnique<MockFormFetcher>();
3234 EXPECT_CALL(*new_fetcher, AddConsumer(form_manager.get())); 3198 EXPECT_CALL(*new_fetcher, AddConsumer(&form_manager));
3235 EXPECT_CALL(old_fetcher, RemoveConsumer(form_manager.get())); 3199 EXPECT_CALL(old_fetcher, RemoveConsumer(&form_manager));
3236 form_manager->GrabFetcher(std::move(new_fetcher)); 3200 form_manager.GrabFetcher(std::move(new_fetcher));
3237 } 3201 }
3238 3202
3239 TEST_F(PasswordFormManagerTest, UploadSignInForm_WithAutofillTypes) { 3203 TEST_F(PasswordFormManagerTest, UploadSignInForm_WithAutofillTypes) {
3240 // For newly saved passwords on a sign-in form, upload an autofill vote for a 3204 // For newly saved passwords on a sign-in form, upload an autofill vote for a
3241 // username field and a autofill::PASSWORD vote for a password field. 3205 // username field and a autofill::PASSWORD vote for a password field.
3242 autofill::FormFieldData field; 3206 autofill::FormFieldData field;
3243 field.name = ASCIIToUTF16("Email"); 3207 field.name = ASCIIToUTF16("Email");
3244 field.form_control_type = "text"; 3208 field.form_control_type = "text";
3245 observed_form()->form_data.fields.push_back(field); 3209 observed_form()->form_data.fields.push_back(field);
3246 3210
3247 field.name = ASCIIToUTF16("Passwd"); 3211 field.name = ASCIIToUTF16("Passwd");
3248 field.form_control_type = "password"; 3212 field.form_control_type = "password";
3249 observed_form()->form_data.fields.push_back(field); 3213 observed_form()->form_data.fields.push_back(field);
3250 3214
3251 FakeFormFetcher fetcher; 3215 FakeFormFetcher fetcher;
3252 fetcher.Fetch(); 3216 fetcher.Fetch();
3253 scoped_refptr<PasswordFormManager> form_manager( 3217 PasswordFormManager form_manager(
3254 base::MakeRefCounted<PasswordFormManager>( 3218 password_manager(), client(), client()->driver(), *observed_form(),
3255 password_manager(), client(), client()->driver(), *observed_form(), 3219 base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher);
3256 base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher));
3257 fetcher.SetNonFederated(std::vector<const PasswordForm*>(), 0u); 3220 fetcher.SetNonFederated(std::vector<const PasswordForm*>(), 0u);
3258 3221
3259 PasswordForm form_to_save(*observed_form()); 3222 PasswordForm form_to_save(*observed_form());
3260 form_to_save.preferred = true; 3223 form_to_save.preferred = true;
3261 form_to_save.username_value = ASCIIToUTF16("test@gmail.com"); 3224 form_to_save.username_value = ASCIIToUTF16("test@gmail.com");
3262 form_to_save.password_value = ASCIIToUTF16("password"); 3225 form_to_save.password_value = ASCIIToUTF16("password");
3263 3226
3264 std::unique_ptr<FormStructure> uploaded_form_structure; 3227 std::unique_ptr<FormStructure> uploaded_form_structure;
3265 auto* mock_autofill_manager = 3228 auto* mock_autofill_manager =
3266 client()->mock_driver()->mock_autofill_manager(); 3229 client()->mock_driver()->mock_autofill_manager();
3267 EXPECT_CALL(*mock_autofill_manager, StartUploadProcessPtr(_, _, true)) 3230 EXPECT_CALL(*mock_autofill_manager, StartUploadProcessPtr(_, _, true))
3268 .WillOnce(WithArg<0>(SaveToUniquePtr(&uploaded_form_structure))); 3231 .WillOnce(WithArg<0>(SaveToUniquePtr(&uploaded_form_structure)));
3269 form_manager->ProvisionallySave( 3232 form_manager.ProvisionallySave(
3270 form_to_save, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); 3233 form_to_save, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
3271 form_manager->Save(); 3234 form_manager.Save();
3272 3235
3273 ASSERT_EQ(2u, uploaded_form_structure->field_count()); 3236 ASSERT_EQ(2u, uploaded_form_structure->field_count());
3274 autofill::ServerFieldTypeSet expected_types = {autofill::PASSWORD}; 3237 autofill::ServerFieldTypeSet expected_types = {autofill::PASSWORD};
3275 EXPECT_EQ(form_to_save.username_value, 3238 EXPECT_EQ(form_to_save.username_value,
3276 uploaded_form_structure->field(0)->value); 3239 uploaded_form_structure->field(0)->value);
3277 EXPECT_EQ(expected_types, 3240 EXPECT_EQ(expected_types,
3278 uploaded_form_structure->field(1)->possible_types()); 3241 uploaded_form_structure->field(1)->possible_types());
3279 } 3242 }
3280 3243
3281 // Checks that there is no upload on saving a password on a password form only 3244 // Checks that there is no upload on saving a password on a password form only
3282 // with 1 field. 3245 // with 1 field.
3283 TEST_F(PasswordFormManagerTest, NoUploadsForSubmittedFormWithOnlyOneField) { 3246 TEST_F(PasswordFormManagerTest, NoUploadsForSubmittedFormWithOnlyOneField) {
3284 autofill::FormFieldData field; 3247 autofill::FormFieldData field;
3285 field.name = ASCIIToUTF16("Passwd"); 3248 field.name = ASCIIToUTF16("Passwd");
3286 field.form_control_type = "password"; 3249 field.form_control_type = "password";
3287 observed_form()->form_data.fields.push_back(field); 3250 observed_form()->form_data.fields.push_back(field);
3288 3251
3289 FakeFormFetcher fetcher; 3252 FakeFormFetcher fetcher;
3290 fetcher.Fetch(); 3253 fetcher.Fetch();
3291 scoped_refptr<PasswordFormManager> form_manager( 3254 PasswordFormManager form_manager(
3292 base::MakeRefCounted<PasswordFormManager>( 3255 password_manager(), client(), client()->driver(), *observed_form(),
3293 password_manager(), client(), client()->driver(), *observed_form(), 3256 base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher);
3294 base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher));
3295 fetcher.SetNonFederated(std::vector<const PasswordForm*>(), 0u); 3257 fetcher.SetNonFederated(std::vector<const PasswordForm*>(), 0u);
3296 3258
3297 PasswordForm form_to_save(*observed_form()); 3259 PasswordForm form_to_save(*observed_form());
3298 form_to_save.preferred = true; 3260 form_to_save.preferred = true;
3299 form_to_save.password_value = ASCIIToUTF16("password"); 3261 form_to_save.password_value = ASCIIToUTF16("password");
3300 3262
3301 auto* mock_autofill_manager = 3263 auto* mock_autofill_manager =
3302 client()->mock_driver()->mock_autofill_manager(); 3264 client()->mock_driver()->mock_autofill_manager();
3303 EXPECT_CALL(*mock_autofill_manager, StartUploadProcessPtr(_, _, _)).Times(0); 3265 EXPECT_CALL(*mock_autofill_manager, StartUploadProcessPtr(_, _, _)).Times(0);
3304 form_manager->ProvisionallySave( 3266 form_manager.ProvisionallySave(
3305 form_to_save, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); 3267 form_to_save, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
3306 form_manager->Save(); 3268 form_manager.Save();
3307 } 3269 }
3308 3270
3309 TEST_F(PasswordFormManagerTest, 3271 TEST_F(PasswordFormManagerTest,
3310 SuppressedHTTPSFormsHistogram_NotRecordedIfStoreWasTooSlow) { 3272 SuppressedHTTPSFormsHistogram_NotRecordedIfStoreWasTooSlow) {
3311 base::HistogramTester histogram_tester; 3273 base::HistogramTester histogram_tester;
3312 3274
3313 fake_form_fetcher()->set_did_complete_querying_suppressed_forms(false); 3275 fake_form_fetcher()->set_did_complete_querying_suppressed_forms(false);
3314 fake_form_fetcher()->Fetch(); 3276 fake_form_fetcher()->Fetch();
3315 scoped_refptr<PasswordFormManager> form_manager( 3277 std::unique_ptr<PasswordFormManager> form_manager =
3316 base::MakeRefCounted<PasswordFormManager>( 3278 base::MakeUnique<PasswordFormManager>(
3317 password_manager(), client(), client()->driver(), *observed_form(), 3279 password_manager(), client(), client()->driver(), *observed_form(),
3318 base::MakeUnique<NiceMock<MockFormSaver>>(), fake_form_fetcher())); 3280 base::MakeUnique<NiceMock<MockFormSaver>>(), fake_form_fetcher());
3319 fake_form_fetcher()->SetNonFederated(std::vector<const PasswordForm*>(), 0u); 3281 fake_form_fetcher()->SetNonFederated(std::vector<const PasswordForm*>(), 0u);
3320 form_manager = nullptr; 3282 form_manager.reset();
3321 3283
3322 histogram_tester.ExpectUniqueSample( 3284 histogram_tester.ExpectUniqueSample(
3323 "PasswordManager.QueryingSuppressedAccountsFinished", false, 1); 3285 "PasswordManager.QueryingSuppressedAccountsFinished", false, 1);
3324 const auto sample_counts = histogram_tester.GetTotalCountsForPrefix( 3286 const auto sample_counts = histogram_tester.GetTotalCountsForPrefix(
3325 "PasswordManager.SuppressedAccount."); 3287 "PasswordManager.SuppressedAccount.");
3326 EXPECT_THAT(sample_counts, IsEmpty()); 3288 EXPECT_THAT(sample_counts, IsEmpty());
3327 } 3289 }
3328 3290
3329 TEST_F(PasswordFormManagerTest, SuppressedFormsHistograms) { 3291 TEST_F(PasswordFormManagerTest, SuppressedFormsHistograms) {
3330 static constexpr const struct { 3292 static constexpr const struct {
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
3503 // scheme of the main frame. 3465 // scheme of the main frame.
3504 ASSERT_FALSE(client()->IsMainFrameSecure()); 3466 ASSERT_FALSE(client()->IsMainFrameSecure());
3505 3467
3506 // Even if there were any suppressed HTTPS forms, they should be are ignored 3468 // Even if there were any suppressed HTTPS forms, they should be are ignored
3507 // (but there should be none in production in this case). 3469 // (but there should be none in production in this case).
3508 FakeFormFetcher fetcher; 3470 FakeFormFetcher fetcher;
3509 fetcher.set_suppressed_https_forms({saved_match()}); 3471 fetcher.set_suppressed_https_forms({saved_match()});
3510 fetcher.set_did_complete_querying_suppressed_forms(true); 3472 fetcher.set_did_complete_querying_suppressed_forms(true);
3511 fetcher.Fetch(); 3473 fetcher.Fetch();
3512 3474
3513 scoped_refptr<PasswordFormManager> form_manager = 3475 std::unique_ptr<PasswordFormManager> form_manager =
3514 base::MakeRefCounted<PasswordFormManager>( 3476 base::MakeUnique<PasswordFormManager>(
3515 password_manager(), client(), client()->driver(), https_observed_form, 3477 password_manager(), client(), client()->driver(), https_observed_form,
3516 base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher); 3478 base::MakeUnique<NiceMock<MockFormSaver>>(), &fetcher);
3517 fetcher.SetNonFederated(std::vector<const PasswordForm*>(), 0u); 3479 fetcher.SetNonFederated(std::vector<const PasswordForm*>(), 0u);
3518 form_manager = nullptr; 3480 form_manager.reset();
3519 3481
3520 histogram_tester.ExpectUniqueSample( 3482 histogram_tester.ExpectUniqueSample(
3521 "PasswordManager.QueryingSuppressedAccountsFinished", true, 1); 3483 "PasswordManager.QueryingSuppressedAccountsFinished", true, 1);
3522 histogram_tester.ExpectTotalCount( 3484 histogram_tester.ExpectTotalCount(
3523 "PasswordManager.SuppressedAccount.Generated.HTTPSNotHTTP", 0); 3485 "PasswordManager.SuppressedAccount.Generated.HTTPSNotHTTP", 0);
3524 histogram_tester.ExpectTotalCount( 3486 histogram_tester.ExpectTotalCount(
3525 "PasswordManager.SuppressedAccount.Manual.HTTPSNotHTTP", 0); 3487 "PasswordManager.SuppressedAccount.Manual.HTTPSNotHTTP", 0);
3526 histogram_tester.ExpectTotalCount( 3488 histogram_tester.ExpectTotalCount(
3527 "PasswordManager.SuppressedAccount.Generated.PSLMatching", 1); 3489 "PasswordManager.SuppressedAccount.Generated.PSLMatching", 1);
3528 histogram_tester.ExpectTotalCount( 3490 histogram_tester.ExpectTotalCount(
3529 "PasswordManager.SuppressedAccount.Manual.PSLMatching", 1); 3491 "PasswordManager.SuppressedAccount.Manual.PSLMatching", 1);
3530 histogram_tester.ExpectTotalCount( 3492 histogram_tester.ExpectTotalCount(
3531 "PasswordManager.SuppressedAccount.Generated.SameOrganizationName", 1); 3493 "PasswordManager.SuppressedAccount.Generated.SameOrganizationName", 1);
3532 histogram_tester.ExpectTotalCount( 3494 histogram_tester.ExpectTotalCount(
3533 "PasswordManager.SuppressedAccount.Manual.SameOrganizationName", 1); 3495 "PasswordManager.SuppressedAccount.Manual.SameOrganizationName", 1);
3534 } 3496 }
3535 3497
3536 } // namespace password_manager 3498 } // namespace password_manager
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698