| Index: components/password_manager/core/browser/password_form_manager.cc
|
| diff --git a/components/password_manager/core/browser/password_form_manager.cc b/components/password_manager/core/browser/password_form_manager.cc
|
| index 934f291a2f90d203890ea0e43dde18b26c0f722a..4b8dc17badfc0736abf1aeb16e42f3443eb349d2 100644
|
| --- a/components/password_manager/core/browser/password_form_manager.cc
|
| +++ b/components/password_manager/core/browser/password_form_manager.cc
|
| @@ -158,6 +158,7 @@ PasswordFormManager::PasswordFormManager(
|
| has_generated_password_(false),
|
| is_manual_generation_(false),
|
| generation_popup_was_shown_(false),
|
| + form_classifier_outcome_(kNoOutcome),
|
| password_overridden_(false),
|
| retry_password_form_password_update_(false),
|
| generation_available_(false),
|
| @@ -910,6 +911,8 @@ bool PasswordFormManager::UploadPasswordForm(
|
|
|
| if (generation_popup_was_shown_)
|
| AddGeneratedVote(&form_structure);
|
| + if (form_classifier_outcome_ != kNoOutcome)
|
| + AddFormClassifierVote(&form_structure);
|
|
|
| // Force uploading as these events are relatively rare and we want to make
|
| // sure to receive them.
|
| @@ -990,6 +993,8 @@ bool PasswordFormManager::UploadChangePasswordForm(
|
|
|
| if (generation_popup_was_shown_)
|
| AddGeneratedVote(&form_structure);
|
| + if (form_classifier_outcome_ != kNoOutcome)
|
| + AddFormClassifierVote(&form_structure);
|
|
|
| // Force uploading as these events are relatively rare and we want to make
|
| // sure to receive them. It also makes testing easier if these requests
|
| @@ -1038,6 +1043,24 @@ void PasswordFormManager::AddGeneratedVote(
|
| }
|
| }
|
|
|
| +void PasswordFormManager::AddFormClassifierVote(
|
| + autofill::FormStructure* form_structure) {
|
| + DCHECK(form_structure);
|
| + DCHECK(form_classifier_outcome_ != kNoOutcome);
|
| +
|
| + for (size_t i = 0; i < form_structure->field_count(); ++i) {
|
| + autofill::AutofillField* field = form_structure->field(i);
|
| + if (form_classifier_outcome_ == kFoundGenerationElement &&
|
| + field->name == generation_element_detected_by_classifier_) {
|
| + field->set_form_classifier_outcome(
|
| + autofill::AutofillUploadContents::Field::GENERATION_ELEMENT);
|
| + } else {
|
| + field->set_form_classifier_outcome(
|
| + autofill::AutofillUploadContents::Field::NON_GENERATION_ELEMENT);
|
| + }
|
| + }
|
| +}
|
| +
|
| void PasswordFormManager::CreatePendingCredentials() {
|
| DCHECK(provisionally_saved_form_);
|
| base::string16 password_to_save(PasswordToSave(*provisionally_saved_form_));
|
| @@ -1462,4 +1485,11 @@ void PasswordFormManager::ReplacePresavedPasswordWithPendingCredentials(
|
| presaved_form_.reset();
|
| }
|
|
|
| +void PasswordFormManager::SaveGenerationFieldDetectedByClassifier(
|
| + const base::string16& generation_field) {
|
| + form_classifier_outcome_ =
|
| + generation_field.empty() ? kNoGenerationElement : kFoundGenerationElement;
|
| + generation_element_detected_by_classifier_ = generation_field;
|
| +}
|
| +
|
| } // namespace password_manager
|
|
|