| 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 f018d34ad6bf8e13408ce774971bc3728eff15ce..a2c4808796797d160c9df1fff0859685466df107 100644
|
| --- a/components/password_manager/core/browser/password_form_manager.cc
|
| +++ b/components/password_manager/core/browser/password_form_manager.cc
|
| @@ -15,6 +15,7 @@
|
| #include "base/memory/ptr_util.h"
|
| #include "base/metrics/field_trial.h"
|
| #include "base/metrics/histogram_macros.h"
|
| +#include "base/metrics/user_metrics.h"
|
| #include "base/strings/string16.h"
|
| #include "base/strings/string_split.h"
|
| #include "base/strings/string_util.h"
|
| @@ -349,7 +350,7 @@ void PasswordFormManager::Save() {
|
|
|
| if ((user_action_ == kUserActionNone) &&
|
| DidPreferenceChange(best_matches_, pending_credentials_.username_value)) {
|
| - user_action_ = kUserActionChoose;
|
| + SetUserAction(kUserActionChoose);
|
| }
|
| base::Optional<PasswordForm> old_primary_key;
|
| if (is_new_login_) {
|
| @@ -573,7 +574,7 @@ void PasswordFormManager::ProcessFrame(
|
| void PasswordFormManager::ProcessFrameInternal(
|
| const base::WeakPtr<PasswordManagerDriver>& driver) {
|
| DCHECK_EQ(PasswordForm::SCHEME_HTML, observed_form_.scheme);
|
| - if (!driver || manager_action_ == kManagerActionBlacklisted)
|
| + if (!driver)
|
| return;
|
|
|
| // Allow generation for any non-blacklisted form.
|
| @@ -597,10 +598,12 @@ void PasswordFormManager::ProcessFrameInternal(
|
| preferred_match_->action.GetWithEmptyPath() ||
|
| preferred_match_->is_public_suffix_match ||
|
| observed_form_.IsPossibleChangePasswordForm()));
|
| - if (wait_for_username)
|
| + if (wait_for_username) {
|
| manager_action_ = kManagerActionNone;
|
| - else
|
| + } else {
|
| manager_action_ = kManagerActionAutofilled;
|
| + base::RecordAction(base::UserMetricsAction("PasswordManager_Autofilled"));
|
| + }
|
| if (ShouldShowInitialPasswordAccountSuggestions()) {
|
| // This is for the fill-on-account-select experiment. Instead of autofilling
|
| // found usernames and passwords on load, this instructs the renderer to
|
| @@ -657,12 +660,10 @@ void PasswordFormManager::OnGetPasswordStoreResults(
|
| if (provisionally_saved_form_)
|
| CreatePendingCredentials();
|
|
|
| - if (manager_action_ != kManagerActionBlacklisted) {
|
| - for (auto const& driver : drivers_)
|
| - ProcessFrameInternal(driver);
|
| - if (observed_form_.scheme != PasswordForm::SCHEME_HTML)
|
| - ProcessLoginPrompt();
|
| - }
|
| + for (auto const& driver : drivers_)
|
| + ProcessFrameInternal(driver);
|
| + if (observed_form_.scheme != PasswordForm::SCHEME_HTML)
|
| + ProcessLoginPrompt();
|
| }
|
|
|
| void PasswordFormManager::OnGetSiteStatistics(
|
| @@ -972,8 +973,8 @@ void PasswordFormManager::CreatePendingCredentials() {
|
| // from Android apps store a copy with the current origin and signon
|
| // realm. This ensures that on the next visit, a precise match is found.
|
| is_new_login_ = true;
|
| - user_action_ = password_overridden_ ? kUserActionOverridePassword
|
| - : kUserActionChoosePslMatch;
|
| + SetUserAction(password_overridden_ ? kUserActionOverridePassword
|
| + : kUserActionChoosePslMatch);
|
|
|
| // Since this credential will not overwrite a previously saved credential,
|
| // username_value can be updated now.
|
| @@ -1024,7 +1025,7 @@ void PasswordFormManager::CreatePendingCredentials() {
|
| } else { // Not a PSL match.
|
| is_new_login_ = false;
|
| if (password_overridden_)
|
| - user_action_ = kUserActionOverridePassword;
|
| + SetUserAction(kUserActionOverridePassword);
|
| }
|
| } else if (other_possible_username_action_ ==
|
| ALLOW_OTHER_POSSIBLE_USERNAMES &&
|
| @@ -1235,7 +1236,7 @@ PasswordForm* PasswordFormManager::FindBestSavedMatch(
|
|
|
| void PasswordFormManager::CreatePendingCredentialsForNewCredentials() {
|
| // User typed in a new, unknown username.
|
| - user_action_ = kUserActionOverrideUsernameAndPassword;
|
| + SetUserAction(kUserActionOverrideUsernameAndPassword);
|
| pending_credentials_ = observed_form_;
|
| if (provisionally_saved_form_->was_parsed_using_autofill_predictions)
|
| pending_credentials_.username_element =
|
| @@ -1276,6 +1277,7 @@ void PasswordFormManager::LogSubmitPassed() {
|
| metrics_util::PASSWORD_SUBMITTED);
|
| }
|
| }
|
| + base::RecordAction(base::UserMetricsAction("PasswordManager_SubmitPassed"));
|
| submit_result_ = kSubmitResultPassed;
|
| }
|
|
|
| @@ -1287,6 +1289,7 @@ void PasswordFormManager::LogSubmitFailed() {
|
| metrics_util::LogPasswordGenerationAvailableSubmissionEvent(
|
| metrics_util::PASSWORD_SUBMISSION_FAILED);
|
| }
|
| + base::RecordAction(base::UserMetricsAction("PasswordManager_SubmitFailed"));
|
| submit_result_ = kSubmitResultFailed;
|
| }
|
|
|
| @@ -1329,6 +1332,21 @@ void PasswordFormManager::SendVotesOnSave() {
|
| }
|
| }
|
|
|
| +void PasswordFormManager::SetUserAction(UserAction user_action) {
|
| + if (user_action == kUserActionChoose) {
|
| + base::RecordAction(base::UserMetricsAction("PasswordManager_Choose"));
|
| + } else if (user_action == kUserActionChoosePslMatch) {
|
| + base::RecordAction(base::UserMetricsAction("PasswordManager_ChoosePSL"));
|
| + } else if (user_action == kUserActionOverridePassword) {
|
| + base::RecordAction(
|
| + base::UserMetricsAction("PasswordManager_OverridePassword"));
|
| + } else if (user_action == kUserActionOverrideUsernameAndPassword) {
|
| + base::RecordAction(
|
| + base::UserMetricsAction("PasswordManager_OverrideUsernameAndPassword"));
|
| + }
|
| + user_action_ = user_action;
|
| +}
|
| +
|
| base::Optional<PasswordForm> PasswordFormManager::UpdatePendingAndGetOldKey(
|
| std::vector<const PasswordForm*>* credentials_to_update) {
|
| base::Optional<PasswordForm> old_primary_key;
|
|
|