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

Unified Diff: components/password_manager/core/browser/password_form_manager.cc

Issue 2113743002: Add instrumentation for password autofill and Credential Manager API user flows. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: more comments Created 4 years, 5 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 side-by-side diff with in-line comments
Download patch
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..9245ff1c4fa8dfc054016db7367ca7dc865d18fd 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,10 +574,9 @@ 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.
driver->AllowPasswordGenerationForForm(observed_form_);
if (best_matches_.empty())
@@ -597,10 +597,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 +659,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 +972,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 +1024,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 +1235,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 +1276,7 @@ void PasswordFormManager::LogSubmitPassed() {
metrics_util::PASSWORD_SUBMITTED);
}
}
+ base::RecordAction(base::UserMetricsAction("PasswordManager_LoginPassed"));
submit_result_ = kSubmitResultPassed;
}
@@ -1287,6 +1288,7 @@ void PasswordFormManager::LogSubmitFailed() {
metrics_util::LogPasswordGenerationAvailableSubmissionEvent(
metrics_util::PASSWORD_SUBMISSION_FAILED);
}
+ base::RecordAction(base::UserMetricsAction("PasswordManager_LoginFailed"));
submit_result_ = kSubmitResultFailed;
}
@@ -1329,6 +1331,25 @@ void PasswordFormManager::SendVotesOnSave() {
}
}
+void PasswordFormManager::SetUserAction(UserAction user_action) {
+ if (user_action == kUserActionChoose) {
+ base::RecordAction(
+ base::UserMetricsAction("PasswordManager_UsedNonDefaultUsername"));
+ } else if (user_action == kUserActionChoosePslMatch) {
+ base::RecordAction(
+ base::UserMetricsAction("PasswordManager_ChoseSubdomainPassword"));
+ } else if (user_action == kUserActionOverridePassword) {
+ base::RecordAction(
+ base::UserMetricsAction("PasswordManager_LoggedInWithNewPassword"));
+ } else if (user_action == kUserActionOverrideUsernameAndPassword) {
+ base::RecordAction(
+ base::UserMetricsAction("PasswordManager_LoggedInWithNewUsername"));
+ } else {
+ NOTREACHED();
+ }
+ user_action_ = user_action;
+}
+
base::Optional<PasswordForm> PasswordFormManager::UpdatePendingAndGetOldKey(
std::vector<const PasswordForm*>* credentials_to_update) {
base::Optional<PasswordForm> old_primary_key;

Powered by Google App Engine
This is Rietveld 408576698