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

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

Issue 2318533002: [Password Generation] Use signatures for form matching (Closed)
Patch Set: Rebase Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/password_manager/core/browser/password_form_manager.h" 5 #include "components/password_manager/core/browser/password_form_manager.h"
6 6
7 #include <map> 7 #include <map>
8 #include <memory> 8 #include <memory>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 } 112 }
113 113
114 MATCHER_P(CheckUsernamePtr, username_value, "Username incorrect") { 114 MATCHER_P(CheckUsernamePtr, username_value, "Username incorrect") {
115 return arg && arg->username_value == username_value; 115 return arg && arg->username_value == username_value;
116 } 116 }
117 117
118 MATCHER_P2(CheckUploadedAutofillTypesAndSignature, 118 MATCHER_P2(CheckUploadedAutofillTypesAndSignature,
119 form_signature, 119 form_signature,
120 expected_types, 120 expected_types,
121 "Unexpected autofill types or form signature") { 121 "Unexpected autofill types or form signature") {
122 if (form_signature != arg.FormSignature()) { 122 if (form_signature != arg.FormSignatureAsStr()) {
123 // An unexpected form is uploaded. 123 // An unexpected form is uploaded.
124 return false; 124 return false;
125 } 125 }
126 for (const autofill::AutofillField* field : arg) { 126 for (const autofill::AutofillField* field : arg) {
127 if (expected_types.find(field->name) == expected_types.end()) { 127 if (expected_types.find(field->name) == expected_types.end()) {
128 if (!field->possible_types().empty()) { 128 if (!field->possible_types().empty()) {
129 // Unexpected types are uploaded. 129 // Unexpected types are uploaded.
130 return false; 130 return false;
131 } 131 }
132 } else { 132 } else {
(...skipping 16 matching lines...) Expand all
149 } 149 }
150 } 150 }
151 } 151 }
152 return true; 152 return true;
153 } 153 }
154 154
155 MATCHER_P2(CheckUploadedGenerationTypesAndSignature, 155 MATCHER_P2(CheckUploadedGenerationTypesAndSignature,
156 form_signature, 156 form_signature,
157 expected_generation_types, 157 expected_generation_types,
158 "Unexpected generation types or form signature") { 158 "Unexpected generation types or form signature") {
159 if (form_signature != arg.FormSignature()) { 159 if (form_signature != arg.FormSignatureAsStr()) {
160 // Unexpected form's signature. 160 // Unexpected form's signature.
161 ADD_FAILURE() << "Expected form signature is " << form_signature 161 ADD_FAILURE() << "Expected form signature is " << form_signature
162 << ", but found " << arg.FormSignature(); 162 << ", but found " << arg.FormSignatureAsStr();
163 return false; 163 return false;
164 } 164 }
165 for (const autofill::AutofillField* field : arg) { 165 for (const autofill::AutofillField* field : arg) {
166 if (expected_generation_types.find(field->name) == 166 if (expected_generation_types.find(field->name) ==
167 expected_generation_types.end()) { 167 expected_generation_types.end()) {
168 if (field->generation_type() != 168 if (field->generation_type() !=
169 autofill::AutofillUploadContents::Field::NO_GENERATION) { 169 autofill::AutofillUploadContents::Field::NO_GENERATION) {
170 // Unexpected generation type. 170 // Unexpected generation type.
171 ADD_FAILURE() << "Expected no generation type for the field " 171 ADD_FAILURE() << "Expected no generation type for the field "
172 << field->name << ", but found " 172 << field->name << ", but found "
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after
492 // for its username field. 492 // for its username field.
493 base::string16 username_vote = 493 base::string16 username_vote =
494 (field_type && *field_type == autofill::ACCOUNT_CREATION_PASSWORD) 494 (field_type && *field_type == autofill::ACCOUNT_CREATION_PASSWORD)
495 ? result[0]->username_element 495 ? result[0]->username_element
496 : base::string16(); 496 : base::string16();
497 497
498 form_manager.OnGetPasswordStoreResults(std::move(result)); 498 form_manager.OnGetPasswordStoreResults(std::move(result));
499 std::string expected_login_signature; 499 std::string expected_login_signature;
500 autofill::FormStructure observed_structure(observed_form_data); 500 autofill::FormStructure observed_structure(observed_form_data);
501 autofill::FormStructure pending_structure(saved_match()->form_data); 501 autofill::FormStructure pending_structure(saved_match()->form_data);
502 if (observed_structure.FormSignature() != 502 if (observed_structure.FormSignatureAsStr() !=
503 pending_structure.FormSignature() && 503 pending_structure.FormSignatureAsStr() &&
504 times_used == 0) { 504 times_used == 0) {
505 expected_login_signature = observed_structure.FormSignature(); 505 expected_login_signature = observed_structure.FormSignatureAsStr();
506 } 506 }
507 autofill::ServerFieldTypeSet expected_available_field_types; 507 autofill::ServerFieldTypeSet expected_available_field_types;
508 expected_available_field_types.insert(autofill::USERNAME); 508 expected_available_field_types.insert(autofill::USERNAME);
509 std::map<base::string16, autofill::ServerFieldType> expected_types; 509 std::map<base::string16, autofill::ServerFieldType> expected_types;
510 expected_types[ASCIIToUTF16("full_name")] = autofill::UNKNOWN_TYPE; 510 expected_types[ASCIIToUTF16("full_name")] = autofill::UNKNOWN_TYPE;
511 expected_types[saved_match()->username_element] = 511 expected_types[saved_match()->username_element] =
512 username_vote.empty() ? autofill::UNKNOWN_TYPE : autofill::USERNAME; 512 username_vote.empty() ? autofill::UNKNOWN_TYPE : autofill::USERNAME;
513 if (field_type) { 513 if (field_type) {
514 expected_available_field_types.insert(*field_type); 514 expected_available_field_types.insert(*field_type);
515 expected_types[saved_match()->password_element] = *field_type; 515 expected_types[saved_match()->password_element] = *field_type;
516 } else { 516 } else {
517 expected_available_field_types.insert( 517 expected_available_field_types.insert(
518 autofill::NOT_ACCOUNT_CREATION_PASSWORD); 518 autofill::NOT_ACCOUNT_CREATION_PASSWORD);
519 expected_types[saved_match()->password_element] = 519 expected_types[saved_match()->password_element] =
520 autofill::NOT_ACCOUNT_CREATION_PASSWORD; 520 autofill::NOT_ACCOUNT_CREATION_PASSWORD;
521 } 521 }
522 522
523 if (field_type) { 523 if (field_type) {
524 EXPECT_CALL(*client()->mock_driver()->mock_autofill_download_manager(), 524 EXPECT_CALL(*client()->mock_driver()->mock_autofill_download_manager(),
525 StartUploadRequest( 525 StartUploadRequest(CheckUploadedAutofillTypesAndSignature(
526 CheckUploadedAutofillTypesAndSignature( 526 pending_structure.FormSignatureAsStr(),
527 pending_structure.FormSignature(), expected_types), 527 expected_types),
528 false, expected_available_field_types, 528 false, expected_available_field_types,
529 expected_login_signature, true)); 529 expected_login_signature, true));
530 } else { 530 } else {
531 EXPECT_CALL(*client()->mock_driver()->mock_autofill_download_manager(), 531 EXPECT_CALL(*client()->mock_driver()->mock_autofill_download_manager(),
532 StartUploadRequest(_, _, _, _, _)) 532 StartUploadRequest(_, _, _, _, _))
533 .Times(0); 533 .Times(0);
534 } 534 }
535 form_manager.ProvisionallySave( 535 form_manager.ProvisionallySave(
536 form_to_save, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); 536 form_to_save, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
537 form_manager.Save(); 537 form_manager.Save();
538 } 538 }
539 539
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
585 expected_types[observed_form_.username_element] = autofill::USERNAME; 585 expected_types[observed_form_.username_element] = autofill::USERNAME;
586 expected_types[observed_form_.password_element] = autofill::PASSWORD; 586 expected_types[observed_form_.password_element] = autofill::PASSWORD;
587 expected_types[observed_form_.new_password_element] = field_type; 587 expected_types[observed_form_.new_password_element] = field_type;
588 588
589 autofill::ServerFieldTypeSet expected_available_field_types; 589 autofill::ServerFieldTypeSet expected_available_field_types;
590 expected_available_field_types.insert(autofill::USERNAME); 590 expected_available_field_types.insert(autofill::USERNAME);
591 expected_available_field_types.insert(autofill::PASSWORD); 591 expected_available_field_types.insert(autofill::PASSWORD);
592 expected_available_field_types.insert(field_type); 592 expected_available_field_types.insert(field_type);
593 593
594 std::string observed_form_signature = 594 std::string observed_form_signature =
595 autofill::FormStructure(observed_form()->form_data).FormSignature(); 595 autofill::FormStructure(observed_form()->form_data)
596 .FormSignatureAsStr();
596 597
597 std::string expected_login_signature; 598 std::string expected_login_signature;
598 if (field_type == autofill::NEW_PASSWORD) { 599 if (field_type == autofill::NEW_PASSWORD) {
599 autofill::FormStructure pending_structure(saved_match()->form_data); 600 autofill::FormStructure pending_structure(saved_match()->form_data);
600 expected_login_signature = pending_structure.FormSignature(); 601 expected_login_signature = pending_structure.FormSignatureAsStr();
601 } 602 }
602 EXPECT_CALL(*client()->mock_driver()->mock_autofill_download_manager(), 603 EXPECT_CALL(*client()->mock_driver()->mock_autofill_download_manager(),
603 StartUploadRequest(CheckUploadedAutofillTypesAndSignature( 604 StartUploadRequest(CheckUploadedAutofillTypesAndSignature(
604 observed_form_signature, expected_types), 605 observed_form_signature, expected_types),
605 false, expected_available_field_types, 606 false, expected_available_field_types,
606 expected_login_signature, true)); 607 expected_login_signature, true));
607 608
608 switch (field_type) { 609 switch (field_type) {
609 case autofill::NEW_PASSWORD: 610 case autofill::NEW_PASSWORD:
610 form_manager.Update(*saved_match()); 611 form_manager.Update(*saved_match());
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
708 autofill::AutofillUploadContents::Field::PasswordGenerationType> 709 autofill::AutofillUploadContents::Field::PasswordGenerationType>
709 expected_generation_types; 710 expected_generation_types;
710 expected_generation_types[generation_element] = expected_generation_type; 711 expected_generation_types[generation_element] = expected_generation_type;
711 712
712 autofill::FormStructure form_structure(submitted_form.form_data); 713 autofill::FormStructure form_structure(submitted_form.form_data);
713 714
714 EXPECT_CALL( 715 EXPECT_CALL(
715 *client()->mock_driver()->mock_autofill_download_manager(), 716 *client()->mock_driver()->mock_autofill_download_manager(),
716 StartUploadRequest( 717 StartUploadRequest(
717 CheckUploadedGenerationTypesAndSignature( 718 CheckUploadedGenerationTypesAndSignature(
718 form_structure.FormSignature(), expected_generation_types), 719 form_structure.FormSignatureAsStr(), expected_generation_types),
719 false, expected_available_field_types, std::string(), true)); 720 false, expected_available_field_types, std::string(), true));
720 721
721 form_manager.ProvisionallySave( 722 form_manager.ProvisionallySave(
722 submitted_form, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); 723 submitted_form, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
723 form_manager.Save(); 724 form_manager.Save();
724 } 725 }
725 726
726 PasswordForm* observed_form() { return &observed_form_; } 727 PasswordForm* observed_form() { return &observed_form_; }
727 PasswordForm* saved_match() { return &saved_match_; } 728 PasswordForm* saved_match() { return &saved_match_; }
728 PasswordForm* psl_saved_match() { return &psl_saved_match_; } 729 PasswordForm* psl_saved_match() { return &psl_saved_match_; }
(...skipping 2030 matching lines...) Expand 10 before | Expand all | Expand 10 after
2759 std::map<base::string16, autofill::ServerFieldType> expected_types; 2760 std::map<base::string16, autofill::ServerFieldType> expected_types;
2760 expected_types[observed_form()->password_element] = autofill::PASSWORD; 2761 expected_types[observed_form()->password_element] = autofill::PASSWORD;
2761 expected_types[observed_form()->new_password_element] = 2762 expected_types[observed_form()->new_password_element] =
2762 autofill::NEW_PASSWORD; 2763 autofill::NEW_PASSWORD;
2763 2764
2764 autofill::ServerFieldTypeSet expected_available_field_types; 2765 autofill::ServerFieldTypeSet expected_available_field_types;
2765 expected_available_field_types.insert(autofill::PASSWORD); 2766 expected_available_field_types.insert(autofill::PASSWORD);
2766 expected_available_field_types.insert(autofill::NEW_PASSWORD); 2767 expected_available_field_types.insert(autofill::NEW_PASSWORD);
2767 2768
2768 std::string observed_form_signature = 2769 std::string observed_form_signature =
2769 autofill::FormStructure(observed_form()->form_data).FormSignature(); 2770 autofill::FormStructure(observed_form()->form_data).FormSignatureAsStr();
2770 2771
2771 std::string expected_login_signature = 2772 std::string expected_login_signature =
2772 autofill::FormStructure(saved_match()->form_data).FormSignature(); 2773 autofill::FormStructure(saved_match()->form_data).FormSignatureAsStr();
2773 2774
2774 EXPECT_CALL(*client()->mock_driver()->mock_autofill_download_manager(), 2775 EXPECT_CALL(*client()->mock_driver()->mock_autofill_download_manager(),
2775 StartUploadRequest(CheckUploadedAutofillTypesAndSignature( 2776 StartUploadRequest(CheckUploadedAutofillTypesAndSignature(
2776 observed_form_signature, expected_types), 2777 observed_form_signature, expected_types),
2777 false, expected_available_field_types, 2778 false, expected_available_field_types,
2778 expected_login_signature, true)); 2779 expected_login_signature, true));
2779 2780
2780 form_manager.Update(*saved_match()); 2781 form_manager.Update(*saved_match());
2781 } 2782 }
2782 2783
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
2981 expected_available_field_types.insert(autofill::USERNAME); 2982 expected_available_field_types.insert(autofill::USERNAME);
2982 expected_types[saved_match()->username_element] = autofill::USERNAME; 2983 expected_types[saved_match()->username_element] = autofill::USERNAME;
2983 expected_available_field_types.insert( 2984 expected_available_field_types.insert(
2984 autofill::PROBABLY_ACCOUNT_CREATION_PASSWORD); 2985 autofill::PROBABLY_ACCOUNT_CREATION_PASSWORD);
2985 expected_types[saved_match()->password_element] = 2986 expected_types[saved_match()->password_element] =
2986 autofill::PROBABLY_ACCOUNT_CREATION_PASSWORD; 2987 autofill::PROBABLY_ACCOUNT_CREATION_PASSWORD;
2987 2988
2988 EXPECT_CALL(*client()->mock_driver()->mock_autofill_download_manager(), 2989 EXPECT_CALL(*client()->mock_driver()->mock_autofill_download_manager(),
2989 StartUploadRequest( 2990 StartUploadRequest(
2990 CheckUploadedAutofillTypesAndSignature( 2991 CheckUploadedAutofillTypesAndSignature(
2991 pending_structure.FormSignature(), expected_types), 2992 pending_structure.FormSignatureAsStr(), expected_types),
2992 false, expected_available_field_types, std::string(), true)); 2993 false, expected_available_field_types, std::string(), true));
2993 2994
2994 form_manager.ProvisionallySave( 2995 form_manager.ProvisionallySave(
2995 form_to_save, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); 2996 form_to_save, PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES);
2996 form_manager.Save(); 2997 form_manager.Save();
2997 } 2998 }
2998 2999
2999 TEST_F(PasswordFormManagerFillOnAccountSelectTest, ProcessFrame) { 3000 TEST_F(PasswordFormManagerFillOnAccountSelectTest, ProcessFrame) {
3000 EXPECT_CALL(*client()->mock_driver(), 3001 EXPECT_CALL(*client()->mock_driver(),
3001 ShowInitialPasswordAccountSuggestions(_)); 3002 ShowInitialPasswordAccountSuggestions(_));
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
3072 ->ProcessMatches(all_matches, 0u); 3073 ->ProcessMatches(all_matches, 0u);
3073 3074
3074 EXPECT_EQ(1u, form_manager.best_matches().size()); 3075 EXPECT_EQ(1u, form_manager.best_matches().size());
3075 EXPECT_EQ(kCorrectScheme, 3076 EXPECT_EQ(kCorrectScheme,
3076 form_manager.best_matches().begin()->second->scheme); 3077 form_manager.best_matches().begin()->second->scheme);
3077 } 3078 }
3078 } 3079 }
3079 } 3080 }
3080 3081
3081 } // namespace password_manager 3082 } // namespace password_manager
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698