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 1e570ec17049d40ef34a3e732d309255854a3424..2a2616edb5388d224649853d349613c1afcd0dc8 100644 |
--- a/components/password_manager/core/browser/password_form_manager.cc |
+++ b/components/password_manager/core/browser/password_form_manager.cc |
@@ -38,7 +38,6 @@ |
using autofill::FormStructure; |
using autofill::PasswordForm; |
-using autofill::PossibleUsernamePair; |
using base::Time; |
// Shorten the name to spare line breaks. The code provides enough context |
@@ -112,21 +111,12 @@ |
auto new_end = std::unique(usernames.begin(), usernames.end()); |
// Filter out |form->username_value|. |
- const base::string16& username_value = form->username_value; |
+ new_end = std::remove(usernames.begin(), new_end, form->username_value); |
+ |
+ // Filter out sensitive information. |
new_end = std::remove_if(usernames.begin(), new_end, |
- [&username_value](const PossibleUsernamePair& pair) { |
- return pair.first == username_value; |
- }); |
- |
- // Filter out sensitive information. |
- new_end = std::remove_if( |
- usernames.begin(), new_end, [](const PossibleUsernamePair& pair) { |
- return autofill::IsValidCreditCardNumber(pair.first); |
- }); |
- new_end = std::remove_if(usernames.begin(), new_end, |
- [](const PossibleUsernamePair& pair) { |
- return autofill::IsSSN(pair.first); |
- }); |
+ autofill::IsValidCreditCardNumber); |
+ new_end = std::remove_if(usernames.begin(), new_end, autofill::IsSSN); |
usernames.erase(new_end, usernames.end()); |
} |
@@ -453,7 +443,7 @@ |
const autofill::PasswordForm& credentials_to_update) { |
if (observed_form_.IsPossibleChangePasswordForm()) { |
FormStructure form_structure(credentials_to_update.form_data); |
- UploadPasswordVote(observed_form_, autofill::NEW_PASSWORD, |
+ UploadPasswordVote(autofill::NEW_PASSWORD, |
form_structure.FormSignatureAsStr()); |
} |
base::string16 password_to_save = pending_credentials_.password_value; |
@@ -687,7 +677,7 @@ |
// Do not send votes on change password forms, since they were already sent in |
// Update() method. |
if (!observed_form_.IsPossibleChangePasswordForm()) |
- SendVoteOnCredentialsReuse(observed_form_, &pending_credentials_); |
+ SendAutofillVotes(observed_form_, &pending_credentials_); |
} |
bool PasswordFormManager::UpdatePendingCredentialsIfOtherPossibleUsername( |
@@ -695,7 +685,7 @@ |
for (const auto& key_value : best_matches_) { |
const PasswordForm& match = *key_value.second; |
for (size_t i = 0; i < match.other_possible_usernames.size(); ++i) { |
- if (match.other_possible_usernames[i].first == username) { |
+ if (match.other_possible_usernames[i] == username) { |
pending_credentials_ = match; |
return true; |
} |
@@ -704,40 +694,8 @@ |
return false; |
} |
-bool PasswordFormManager::FindUsernameInOtherPossibleUsernames( |
- const autofill::PasswordForm& match, |
- const base::string16& username) { |
- DCHECK(!username_correction_vote_); |
- |
- for (const PossibleUsernamePair& pair : match.other_possible_usernames) { |
- if (pair.first == username) { |
- username_correction_vote_.reset(new autofill::PasswordForm(match)); |
- username_correction_vote_->username_element = pair.second; |
- return true; |
- } |
- } |
- return false; |
-} |
- |
-void PasswordFormManager::FindCorrectedUsernameElement( |
- const base::string16& username, |
- const base::string16& password) { |
- for (const auto& key_value : best_matches_) { |
- const PasswordForm* match = key_value.second; |
- if ((match->password_value == password) && |
- FindUsernameInOtherPossibleUsernames(*match, username)) |
- return; |
- } |
- for (const autofill::PasswordForm* match : not_best_matches_) { |
- if ((match->password_value == password) && |
- FindUsernameInOtherPossibleUsernames(*match, username)) |
- return; |
- } |
-} |
- |
-void PasswordFormManager::SendVoteOnCredentialsReuse( |
- const PasswordForm& observed, |
- PasswordForm* pending) { |
+void PasswordFormManager::SendAutofillVotes(const PasswordForm& observed, |
+ PasswordForm* pending) { |
// Ignore |pending_structure| if its FormData has no fields. This is to |
// weed out those credentials that were saved before FormData was added |
// to PasswordForm. Even without this check, these FormStructure's won't |
@@ -758,7 +716,7 @@ |
// in cases where we currently save the wrong username isn't great. |
// TODO(gcasto): Determine if generation should be offered in this case. |
if (pending->times_used == 1 && selected_username_.empty()) { |
- if (UploadPasswordVote(*pending, autofill::ACCOUNT_CREATION_PASSWORD, |
+ if (UploadPasswordVote(autofill::ACCOUNT_CREATION_PASSWORD, |
observed_structure.FormSignatureAsStr())) { |
pending->generation_upload_status = |
autofill::PasswordForm::POSITIVE_SIGNAL_SENT; |
@@ -769,7 +727,7 @@ |
// A signal was sent that this was an account creation form, but the |
// credential is now being used on the same form again. This cancels out |
// the previous vote. |
- if (UploadPasswordVote(*pending, autofill::NOT_ACCOUNT_CREATION_PASSWORD, |
+ if (UploadPasswordVote(autofill::NOT_ACCOUNT_CREATION_PASSWORD, |
std::string())) { |
pending->generation_upload_status = |
autofill::PasswordForm::NEGATIVE_SIGNAL_SENT; |
@@ -777,12 +735,11 @@ |
} else if (generation_popup_was_shown_) { |
// Even if there is no autofill vote to be sent, send the vote about the |
// usage of the generation popup. |
- UploadPasswordVote(*pending, autofill::UNKNOWN_TYPE, std::string()); |
+ UploadPasswordVote(autofill::UNKNOWN_TYPE, std::string()); |
} |
} |
bool PasswordFormManager::UploadPasswordVote( |
- const autofill::PasswordForm& form_to_upload, |
const autofill::ServerFieldType& password_type, |
const std::string& login_form_signature) { |
// Check if there is any vote to be sent. |
@@ -796,10 +753,14 @@ |
if (!autofill_manager || !autofill_manager->download_manager()) |
return false; |
+ bool is_update = password_type == autofill::NEW_PASSWORD || |
+ password_type == autofill::PROBABLY_NEW_PASSWORD || |
+ password_type == autofill::NOT_NEW_PASSWORD; |
// If this is an update, a vote about the observed form is sent. If the user |
// re-uses credentials, a vote about the saved form is sent. If the user saves |
// credentials, the observed and pending forms are the same. |
- FormStructure form_structure(form_to_upload.form_data); |
+ FormStructure form_structure(is_update ? observed_form_.form_data |
+ : pending_credentials_.form_data); |
if (!autofill_manager->ShouldUploadForm(form_structure) || |
!form_structure.ShouldBeCrowdsourced()) { |
UMA_HISTOGRAM_BOOLEAN("PasswordGeneration.UploadStarted", false); |
@@ -807,37 +768,30 @@ |
} |
autofill::ServerFieldTypeSet available_field_types; |
- if (password_type != autofill::USERNAME) { |
- if (has_autofill_vote) { |
- // A map from field names to field types. |
- FieldTypeMap field_types; |
- DCHECK(submitted_form_); |
- bool is_update = password_type == autofill::NEW_PASSWORD || |
- password_type == autofill::PROBABLY_NEW_PASSWORD || |
- password_type == autofill::NOT_NEW_PASSWORD; |
- if (is_update) { |
- if (submitted_form_->new_password_element.empty()) |
- return false; |
- SetFieldLabelsOnUpdate(password_type, *submitted_form_, &field_types); |
- } else { // Saving. |
- SetFieldLabelsOnSave(password_type, *submitted_form_, &field_types); |
+ if (has_autofill_vote) { |
+ // A map from field names to field types. |
+ FieldTypeMap field_types; |
+ DCHECK(submitted_form_); |
+ if (is_update) { |
+ if (submitted_form_->new_password_element.empty()) |
+ return false; |
+ SetFieldLabelsOnUpdate(password_type, *submitted_form_, &field_types); |
+ } else { |
+ SetFieldLabelsOnSave(password_type, *submitted_form_, &field_types); |
+ if (password_type == autofill::ACCOUNT_CREATION_PASSWORD) { |
+ field_types[pending_credentials_.username_element] = autofill::USERNAME; |
} |
- field_types[submitted_form_->confirmation_password_element] = |
- autofill::CONFIRMATION_PASSWORD; |
- LabelFields(field_types, &form_structure, &available_field_types); |
- } |
- if (password_type != autofill::ACCOUNT_CREATION_PASSWORD) { |
- if (generation_popup_was_shown_) |
- AddGeneratedVote(&form_structure); |
- if (form_classifier_outcome_ != kNoOutcome) |
- AddFormClassifierVote(&form_structure); |
- } |
- } else { // Username correction vote. |
- FieldTypeMap field_types; |
- field_types[form_to_upload.username_element] = autofill::USERNAME; |
- field_types[form_to_upload.password_element] = |
- autofill::ACCOUNT_CREATION_PASSWORD; |
+ } |
+ field_types[submitted_form_->confirmation_password_element] = |
+ autofill::CONFIRMATION_PASSWORD; |
LabelFields(field_types, &form_structure, &available_field_types); |
+ } |
+ |
+ if (password_type != autofill::ACCOUNT_CREATION_PASSWORD) { |
+ 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 |
@@ -1020,8 +974,6 @@ |
} |
} else { |
CreatePendingCredentialsForNewCredentials(); |
- FindCorrectedUsernameElement(submitted_form_->username_value, |
- submitted_form_->password_value); |
} |
if (!IsValidAndroidFacetURI(pending_credentials_.signon_realm)) { |
@@ -1214,22 +1166,19 @@ |
} |
void PasswordFormManager::OnNopeUpdateClicked() { |
- UploadPasswordVote(observed_form_, autofill::NOT_NEW_PASSWORD, std::string()); |
+ UploadPasswordVote(autofill::NOT_NEW_PASSWORD, std::string()); |
} |
void PasswordFormManager::OnNeverClicked() { |
- UploadPasswordVote(pending_credentials_, autofill::UNKNOWN_TYPE, |
- std::string()); |
+ UploadPasswordVote(autofill::UNKNOWN_TYPE, std::string()); |
PermanentlyBlacklist(); |
} |
void PasswordFormManager::OnNoInteraction(bool is_update) { |
if (is_update) |
- UploadPasswordVote(observed_form_, autofill::PROBABLY_NEW_PASSWORD, |
- std::string()); |
+ UploadPasswordVote(autofill::PROBABLY_NEW_PASSWORD, std::string()); |
else { |
- UploadPasswordVote(pending_credentials_, autofill::UNKNOWN_TYPE, |
- std::string()); |
+ UploadPasswordVote(autofill::UNKNOWN_TYPE, std::string()); |
} |
} |
@@ -1303,17 +1252,12 @@ |
// Credentials that have been previously used (e.g., PSL matches) are checked |
// to see if they are valid account creation forms. |
if (pending_credentials_.times_used == 0) { |
- autofill::ServerFieldType password_type = autofill::PASSWORD; |
- if (does_look_like_signup_form_) |
- password_type = autofill::PROBABLY_ACCOUNT_CREATION_PASSWORD; |
- UploadPasswordVote(pending_credentials_, password_type, std::string()); |
- if (username_correction_vote_) { |
- UploadPasswordVote( |
- *username_correction_vote_, autofill::USERNAME, |
- FormStructure(observed_form_.form_data).FormSignatureAsStr()); |
- } |
+ autofill::ServerFieldType password_type = autofill::PASSWORD; |
+ if (does_look_like_signup_form_) |
+ password_type = autofill::PROBABLY_ACCOUNT_CREATION_PASSWORD; |
+ UploadPasswordVote(password_type, std::string()); |
} else |
- SendVoteOnCredentialsReuse(observed_form_, &pending_credentials_); |
+ SendAutofillVotes(observed_form_, &pending_credentials_); |
} |
void PasswordFormManager::SetUserAction(UserAction user_action) { |