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..db7148eac759ea9e779b24fe94ccb4a2fd0e759a 100644 |
--- a/chrome/browser/password_manager/password_manager.cc |
+++ b/chrome/browser/password_manager/password_manager.cc |
@@ -137,12 +137,16 @@ bool PasswordManager::IsSavingEnabled() const { |
} |
void PasswordManager::ProvisionallySavePassword(const PasswordForm& form) { |
- if (!IsSavingEnabled()) |
+ if (!IsSavingEnabled()) { |
+ RecordFailure(SAVING_DISABLED); |
return; |
+ } |
// No password to save? Then don't. |
- if (form.password_value.empty()) |
+ if (form.password_value.empty()) { |
+ RecordFailure(EMPTY_PASSWORD); |
return; |
+ } |
scoped_ptr<PasswordFormManager> manager; |
ScopedVector<PasswordFormManager>::iterator matched_manager_it = |
@@ -173,6 +177,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); |
return; |
} |
@@ -180,23 +185,31 @@ 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()) { |
+ RecordFailure(MATCHING_NOT_COMPLETE); |
return; |
+ } |
// Also get out of here if the user told us to 'never remember' passwords for |
// this form. |
- if (manager->IsBlacklisted()) |
+ if (manager->IsBlacklisted()) { |
+ RecordFailure(FORM_BLACKLISTED); |
return; |
+ } |
// Bail if we're missing any of the necessary form components. |
- if (!manager->HasValidPasswordForm()) |
+ if (!manager->HasValidPasswordForm()) { |
+ RecordFailure(INVALID_FORM); |
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) { |
+ RecordFailure(AUTOCOMPLETE_OFF); |
return; |
+ } |
PasswordForm provisionally_saved_form(form); |
provisionally_saved_form.ssl_valid = form.origin.SchemeIsSecure() && |
@@ -210,6 +223,11 @@ void PasswordManager::ProvisionallySavePassword(const PasswordForm& form) { |
provisional_save_manager_.swap(manager); |
} |
+void PasswordManager::RecordFailure(ProvisionalSaveFailure failure) { |
+ UMA_HISTOGRAM_ENUMERATION("PasswordManager.ProvisionalSaveFailure", |
+ failure, MAX_FAILURE_VALUE); |
+} |
+ |
void PasswordManager::AddObserver(LoginModelObserver* observer) { |
observers_.AddObserver(observer); |
} |