| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |