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 f6834accce6c7044010c70b161ca070203b026db..6f7be7705a9021334069d8eafc10bf3e17053a9a 100644 |
--- a/chrome/browser/password_manager/password_manager.cc |
+++ b/chrome/browser/password_manager/password_manager.cc |
@@ -14,6 +14,7 @@ |
#include "chrome/browser/content_settings/tab_specific_content_settings.h" |
#include "chrome/browser/password_manager/password_form_manager.h" |
#include "chrome/browser/password_manager/password_manager_delegate.h" |
+#include "chrome/browser/password_manager/password_manager_metrics_util.h" |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/common/chrome_switches.h" |
#include "chrome/common/chrome_version_info.h" |
@@ -55,12 +56,7 @@ void ReportMetrics(bool password_manager_enabled) { |
return; |
ran_once = true; |
- // TODO(isherman): This does not actually measure a user action. It should be |
- // a boolean histogram. |
- if (password_manager_enabled) |
- content::RecordAction(UserMetricsAction("PasswordManager_Enabled")); |
- else |
- content::RecordAction(UserMetricsAction("PasswordManager_Disabled")); |
+ UMA_HISTOGRAM_BOOLEAN("PasswordManager.Enabled", password_manager_enabled); |
} |
} // namespace |
@@ -139,13 +135,13 @@ bool PasswordManager::IsSavingEnabled() const { |
void PasswordManager::ProvisionallySavePassword(const PasswordForm& form) { |
if (!IsSavingEnabled()) { |
- RecordFailure(SAVING_DISABLED); |
+ RecordFailure(SAVING_DISABLED, form.origin.host()); |
return; |
} |
// No password to save? Then don't. |
if (form.password_value.empty()) { |
- RecordFailure(EMPTY_PASSWORD); |
+ RecordFailure(EMPTY_PASSWORD, form.origin.host()); |
return; |
} |
@@ -178,7 +174,7 @@ void PasswordManager::ProvisionallySavePassword(const PasswordForm& form) { |
manager.reset(*matched_manager_it); |
pending_login_managers_.weak_erase(matched_manager_it); |
} else { |
- RecordFailure(NO_MATCHING_FORM); |
+ RecordFailure(NO_MATCHING_FORM, form.origin.host()); |
return; |
} |
@@ -187,20 +183,20 @@ void PasswordManager::ProvisionallySavePassword(const PasswordForm& form) { |
// results for the given form and autofill. If this is the case, we just |
// give up. |
if (!manager->HasCompletedMatching()) { |
- RecordFailure(MATCHING_NOT_COMPLETE); |
+ RecordFailure(MATCHING_NOT_COMPLETE, form.origin.host()); |
return; |
} |
// Also get out of here if the user told us to 'never remember' passwords for |
// this form. |
if (manager->IsBlacklisted()) { |
- RecordFailure(FORM_BLACKLISTED); |
+ RecordFailure(FORM_BLACKLISTED, form.origin.host()); |
return; |
} |
// Bail if we're missing any of the necessary form components. |
if (!manager->HasValidPasswordForm()) { |
- RecordFailure(INVALID_FORM); |
+ RecordFailure(INVALID_FORM, form.origin.host()); |
return; |
} |
@@ -208,7 +204,7 @@ void PasswordManager::ProvisionallySavePassword(const PasswordForm& form) { |
// Chrome to manage such passwords. For other passwords, respect the |
// autocomplete attribute. |
if (!manager->HasGeneratedPassword() && !form.password_autocomplete_set) { |
- RecordFailure(AUTOCOMPLETE_OFF); |
+ RecordFailure(AUTOCOMPLETE_OFF, form.origin.host()); |
return; |
} |
@@ -224,9 +220,18 @@ void PasswordManager::ProvisionallySavePassword(const PasswordForm& form) { |
provisional_save_manager_.swap(manager); |
} |
-void PasswordManager::RecordFailure(ProvisionalSaveFailure failure) { |
+void PasswordManager::RecordFailure(ProvisionalSaveFailure failure, |
+ const std::string& url_host) { |
UMA_HISTOGRAM_ENUMERATION("PasswordManager.ProvisionalSaveFailure", |
failure, MAX_FAILURE_VALUE); |
+ |
+ std::string bucket_name; |
+ bucket_name = password_manager_metrics_util::IsDomainNameMonitored(url_host); |
+ if (!bucket_name.empty()) { |
+ password_manager_metrics_util::LogUMAHistogramEnumeration( |
+ "PasswordManager.ProvisionalSaveFailure_" + bucket_name, failure, |
+ MAX_FAILURE_VALUE); |
+ } |
} |
void PasswordManager::AddSubmissionCallback( |
@@ -301,8 +306,8 @@ void PasswordManager::OnPasswordFormsParsed( |
bool PasswordManager::ShouldShowSavePasswordInfoBar() const { |
return provisional_save_manager_->IsNewLogin() && |
- !provisional_save_manager_->HasGeneratedPassword() && |
- !provisional_save_manager_->IsPendingCredentialsPublicSuffixMatch(); |
+ !provisional_save_manager_->HasGeneratedPassword() && |
+ !provisional_save_manager_->IsPendingCredentialsPublicSuffixMatch(); |
} |
void PasswordManager::OnPasswordFormsRendered( |