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

Unified Diff: chrome/browser/password_manager/password_manager.cc

Issue 23140005: Added of new UMA signals in order to be able to discover early if the "save password" feature gets … (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 years, 4 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: chrome/browser/password_manager/password_manager.cc
diff --git a/chrome/browser/password_manager/password_manager.cc b/chrome/browser/password_manager/password_manager.cc
index dbeec6b27480552cb19fb5626680514dd9adb1d5..e47d8424acd08e06921706c7f1decdc807fa4a85 100644
--- a/chrome/browser/password_manager/password_manager.cc
+++ b/chrome/browser/password_manager/password_manager.cc
@@ -62,6 +62,21 @@ void ReportMetrics(bool password_manager_enabled) {
content::RecordAction(UserMetricsAction("PasswordManager_Disabled"));
}
+void ReportSavePasswordInfoBarFailure(
+ const enum PasswordManager::PotentialInfoBarErrorReasons reason_id,
+ const GURL& url) {
+ std::string domain_name = url.host();
+
+ if (domain_name.size())
+ domain_name.insert(0, "_");
vabr (Chromium) 2013/08/14 14:39:58 We may not append any domain name, only one of a c
Garrett Casto 2013/08/14 23:02:47 I didn't even realize you could send any identifia
vabr (Chromium) 2013/08/16 09:02:14 Yeah, we have to be careful. Logging the domain fo
+
+ UMA_HISTOGRAM_BOOLEAN("PasswordManager.InfobarDisplayed" + domain_name,
Garrett Casto 2013/08/14 23:02:47 I'm not sure if this is necessary as if this is ne
vabr (Chromium) 2013/08/16 09:02:14 That's a good point. Jordy, when you are back, le
+ false);
+ UMA_HISTOGRAM_ENUMERATION(
+ "PasswordManager.PotentialInfoBarErrorReasons" + domain_name, reason_id,
+ PasswordManager::NUM_ERROR_TYPES);
+}
+
} // namespace
// static
@@ -137,12 +152,16 @@ bool PasswordManager::IsSavingEnabled() const {
}
void PasswordManager::ProvisionallySavePassword(const PasswordForm& form) {
- if (!IsSavingEnabled())
+ if (!IsSavingEnabled()) {
Garrett Casto 2013/08/14 23:02:47 I actually just submitted a CL (https://codereview
+ ReportSavePasswordInfoBarFailure(SAVE_PASSWORD_DISABLE, form.origin);
return;
+ }
// No password to save? Then don't.
- if (form.password_value.empty())
+ if (form.password_value.empty()) {
+ ReportSavePasswordInfoBarFailure(EMPTY_PASSWORD, form.origin);
return;
+ }
scoped_ptr<PasswordFormManager> manager;
ScopedVector<PasswordFormManager>::iterator matched_manager_it =
@@ -173,6 +192,7 @@ void PasswordManager::ProvisionallySavePassword(const PasswordForm& form) {
manager.reset(*matched_manager_it);
pending_login_managers_.weak_erase(matched_manager_it);
} else {
+ ReportSavePasswordInfoBarFailure(FIRST_PAGE_NOT_LOADED, form.origin);
return;
}
@@ -180,23 +200,32 @@ void PasswordManager::ProvisionallySavePassword(const PasswordForm& form) {
// tried to submit credentials before we had time to even find matching
// results for the given form and autofill. If this is the case, we just
// give up.
- if (!manager->HasCompletedMatching())
+ if (!manager->HasCompletedMatching()) {
+ ReportSavePasswordInfoBarFailure(MATCHING_ONGOING, form.origin);
return;
+ }
// Also get out of here if the user told us to 'never remember' passwords for
// this form.
- if (manager->IsBlacklisted())
+ if (manager->IsBlacklisted()) {
+ ReportSavePasswordInfoBarFailure(NEVER_REMEMBER, form.origin);
return;
+ }
// Bail if we're missing any of the necessary form components.
- if (!manager->HasValidPasswordForm())
+ if (!manager->HasValidPasswordForm()) {
+ ReportSavePasswordInfoBarFailure(INVALID_FORM, form.origin);
return;
+ }
// Always save generated passwords, as the user expresses explicit intent for
// Chrome to manage such passwords. For other passwords, respect the
// autocomplete attribute.
- if (!manager->HasGeneratedPassword() && !form.password_autocomplete_set)
+ if (!manager->HasGeneratedPassword() && !form.password_autocomplete_set) {
+ ReportSavePasswordInfoBarFailure(PASSWORD_GENERATED_OR_AUTOCOMPLETED,
+ form.origin);
return;
+ }
PasswordForm provisionally_saved_form(form);
provisionally_saved_form.ssl_valid = form.origin.SchemeIsSecure() &&
@@ -271,15 +300,34 @@ void PasswordManager::OnPasswordFormsParsed(
}
bool PasswordManager::ShouldShowSavePasswordInfoBar() const {
Garrett Casto 2013/08/14 23:02:47 I don't think that this function does what you thi
- return provisional_save_manager_->IsNewLogin() &&
- !provisional_save_manager_->HasGeneratedPassword() &&
- !provisional_save_manager_->IsPendingCredentialsPublicSuffixMatch();
+
+ // All functions are tested on by one in order to send the appropriate
vabr (Chromium) 2013/08/14 14:39:58 on by one -> one by one
+ // UMA signal with the ReportSavePasswordInfoBarFailure function.
+ if (!provisional_save_manager_->IsNewLogin()) {
+ ReportSavePasswordInfoBarFailure(LOGIN_ALREADY_KNEW,
+ GURL(provisional_save_manager_->realm()));
+ return false;
+ }
+ if (provisional_save_manager_->HasGeneratedPassword()) {
+ ReportSavePasswordInfoBarFailure(PASSWORD_GENERATED,
+ GURL(provisional_save_manager_->realm()));
+ return false;
+ }
+ if (provisional_save_manager_->IsPendingCredentialsPublicSuffixMatch()) {
+ ReportSavePasswordInfoBarFailure(ORIGIN_MATCHING_OF_PUBLIC_SUFFIX,
+ GURL(provisional_save_manager_->realm()));
+ return false;
+ }
+ return true;
}
void PasswordManager::OnPasswordFormsRendered(
const std::vector<PasswordForm>& visible_forms) {
- if (!provisional_save_manager_.get())
+ if (!provisional_save_manager_.get()) {
+ ReportSavePasswordInfoBarFailure(CANNOT_GET_THE_PROVIOSIONAL_PASSWORD,
+ visible_forms[0].origin);
Garrett Casto 2013/08/14 23:02:47 Not sure if any of the reporting in this function
return;
+ }
DCHECK(IsSavingEnabled());
@@ -290,6 +338,8 @@ void PasswordManager::OnPasswordFormsRendered(
*iter, PasswordFormManager::ACTION_MATCH_REQUIRED)) {
// The form trying to be saved has immediately re-appeared. Assume login
// failure and abort this save, by clearing provisional_save_manager_.
+ ReportSavePasswordInfoBarFailure(
+ FORM_REAPPEARED, GURL(provisional_save_manager_->realm()));
Garrett Casto 2013/08/14 23:02:47 We already keep track of this stat in the provisio
provisional_save_manager_->SubmitFailed();
provisional_save_manager_.reset();
return;
@@ -299,6 +349,8 @@ void PasswordManager::OnPasswordFormsRendered(
if (!provisional_save_manager_->HasValidPasswordForm()) {
// Form is not completely valid - we do not support it.
NOTREACHED();
+ ReportSavePasswordInfoBarFailure(INVALID_FORM,
+ GURL(provisional_save_manager_->realm()));
provisional_save_manager_.reset();
return;
}

Powered by Google App Engine
This is Rietveld 408576698