Commit e8700159 authored by Vadym Doroshenko's avatar Vadym Doroshenko Committed by Commit Bot

UMA metrics for saved sync hash passwords.

Bug:657041

Change-Id: Idafd23621f458dfd73757899bca952f470f31767
Reviewed-on: https://chromium-review.googlesource.com/563299
Commit-Queue: Vadym Doroshenko <dvadym@chromium.org>
Reviewed-by: default avatarRobert Kaplow <rkaplow@chromium.org>
Reviewed-by: default avatarVasilii Sukhanov <vasilii@chromium.org>
Cr-Commit-Position: refs/heads/master@{#485924}
parent 694787fb
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include "base/memory/ptr_util.h" #include "base/memory/ptr_util.h"
#include "base/strings/string_number_conversions.h" #include "base/strings/string_number_conversions.h"
#include "components/os_crypt/os_crypt.h" #include "components/os_crypt/os_crypt.h"
#include "components/password_manager/core/browser/password_manager_metrics_util.h"
#include "components/password_manager/core/browser/password_manager_util.h" #include "components/password_manager/core/browser/password_manager_util.h"
#include "components/password_manager/core/common/password_manager_pref_names.h" #include "components/password_manager/core/common/password_manager_pref_names.h"
#include "components/prefs/pref_service.h" #include "components/prefs/pref_service.h"
...@@ -56,6 +57,16 @@ base::Optional<SyncPasswordData> HashPasswordManager::RetrievePasswordHash() { ...@@ -56,6 +57,16 @@ base::Optional<SyncPasswordData> HashPasswordManager::RetrievePasswordHash() {
return result; return result;
} }
void HashPasswordManager::ReportIsSyncPasswordHashSavedMetric() {
if (!prefs_)
return;
auto hash_password_state =
prefs_->HasPrefPath(prefs::kSyncPasswordHash)
? metrics_util::IsSyncPasswordHashSaved::SAVED
: metrics_util::IsSyncPasswordHashSaved::NOT_SAVED;
metrics_util::LogIsSyncPasswordHashSaved(hash_password_state);
}
std::string HashPasswordManager::CreateRandomSalt() { std::string HashPasswordManager::CreateRandomSalt() {
char buffer[kSyncPasswordSaltLength]; char buffer[kSyncPasswordSaltLength];
crypto::RandBytes(buffer, kSyncPasswordSaltLength); crypto::RandBytes(buffer, kSyncPasswordSaltLength);
......
...@@ -33,6 +33,8 @@ class HashPasswordManager { ...@@ -33,6 +33,8 @@ class HashPasswordManager {
// Returns empty if no hash is available. // Returns empty if no hash is available.
base::Optional<SyncPasswordData> RetrievePasswordHash(); base::Optional<SyncPasswordData> RetrievePasswordHash();
void ReportIsSyncPasswordHashSavedMetric();
void set_prefs(PrefService* prefs) { prefs_ = prefs; } void set_prefs(PrefService* prefs) { prefs_ = prefs; }
private: private:
......
...@@ -199,12 +199,21 @@ void LogSubmittedFormFrame(SubmittedFormFrame frame) { ...@@ -199,12 +199,21 @@ void LogSubmittedFormFrame(SubmittedFormFrame frame) {
SubmittedFormFrame::SUBMITTED_FORM_FRAME_COUNT); SubmittedFormFrame::SUBMITTED_FORM_FRAME_COUNT);
} }
#if defined(OS_WIN) || (defined(OS_MACOSX) && !defined(OS_IOS)) || \
(defined(OS_LINUX) && !defined(OS_CHROMEOS))
void LogSyncPasswordHashChange(SyncPasswordHashChange event) { void LogSyncPasswordHashChange(SyncPasswordHashChange event) {
UMA_HISTOGRAM_ENUMERATION( UMA_HISTOGRAM_ENUMERATION(
"PasswordManager.SyncPasswordHashChange", event, "PasswordManager.SyncPasswordHashChange", event,
SyncPasswordHashChange::SAVED_SYNC_PASSWORD_CHANGE_COUNT); SyncPasswordHashChange::SAVED_SYNC_PASSWORD_CHANGE_COUNT);
} }
void LogIsSyncPasswordHashSaved(IsSyncPasswordHashSaved state) {
UMA_HISTOGRAM_ENUMERATION(
"PasswordManager.IsSyncPasswordHashSaved", state,
IsSyncPasswordHashSaved::IS_SYNC_PASSWORD_HASH_SAVED_COUNT);
}
#endif
} // namespace metrics_util } // namespace metrics_util
} // namespace password_manager } // namespace password_manager
...@@ -193,13 +193,6 @@ enum class SubmittedFormFrame { ...@@ -193,13 +193,6 @@ enum class SubmittedFormFrame {
SUBMITTED_FORM_FRAME_COUNT SUBMITTED_FORM_FRAME_COUNT
}; };
enum class SyncPasswordHashChange {
SAVED_ON_CHROME_SIGNIN,
SAVED_IN_CONTENT_AREA,
CLEARED_ON_CHROME_SIGNOUT,
SAVED_SYNC_PASSWORD_CHANGE_COUNT
};
// Metrics: "PasswordManager.AccessPasswordInSettings" // Metrics: "PasswordManager.AccessPasswordInSettings"
enum AccessPasswordInSettingsEvent { enum AccessPasswordInSettingsEvent {
ACCESS_PASSWORD_VIEWED = 0, ACCESS_PASSWORD_VIEWED = 0,
...@@ -215,6 +208,22 @@ enum ReauthToAccessPasswordInSettingsEvent { ...@@ -215,6 +208,22 @@ enum ReauthToAccessPasswordInSettingsEvent {
REAUTH_COUNT REAUTH_COUNT
}; };
#if defined(OS_WIN) || (defined(OS_MACOSX) && !defined(OS_IOS)) || \
(defined(OS_LINUX) && !defined(OS_CHROMEOS))
enum class SyncPasswordHashChange {
SAVED_ON_CHROME_SIGNIN,
SAVED_IN_CONTENT_AREA,
CLEARED_ON_CHROME_SIGNOUT,
SAVED_SYNC_PASSWORD_CHANGE_COUNT
};
enum class IsSyncPasswordHashSaved {
NOT_SAVED,
SAVED,
IS_SYNC_PASSWORD_HASH_SAVED_COUNT
};
#endif
// A version of the UMA_HISTOGRAM_BOOLEAN macro that allows the |name| // A version of the UMA_HISTOGRAM_BOOLEAN macro that allows the |name|
// to vary over the program's runtime. // to vary over the program's runtime.
void LogUMAHistogramBoolean(const std::string& name, bool sample); void LogUMAHistogramBoolean(const std::string& name, bool sample);
...@@ -304,9 +313,15 @@ void LogPasswordAcceptedSaveUpdateSubmissionIndicatorEvent( ...@@ -304,9 +313,15 @@ void LogPasswordAcceptedSaveUpdateSubmissionIndicatorEvent(
// Log a frame of a submitted password form. // Log a frame of a submitted password form.
void LogSubmittedFormFrame(SubmittedFormFrame frame); void LogSubmittedFormFrame(SubmittedFormFrame frame);
#if defined(OS_WIN) || (defined(OS_MACOSX) && !defined(OS_IOS)) || \
(defined(OS_LINUX) && !defined(OS_CHROMEOS))
// Log a save sync password change event. // Log a save sync password change event.
void LogSyncPasswordHashChange(SyncPasswordHashChange event); void LogSyncPasswordHashChange(SyncPasswordHashChange event);
// Log whether a sync password hash saved.
void LogIsSyncPasswordHashSaved(IsSyncPasswordHashSaved state);
#endif
} // namespace metrics_util } // namespace metrics_util
} // namespace password_manager } // namespace password_manager
......
...@@ -270,6 +270,12 @@ void PasswordStore::ReportMetrics(const std::string& sync_username, ...@@ -270,6 +270,12 @@ void PasswordStore::ReportMetrics(const std::string& sync_username,
task_runner->PostDelayedTask(FROM_HERE, task, task_runner->PostDelayedTask(FROM_HERE, task,
base::TimeDelta::FromSeconds(30)); base::TimeDelta::FromSeconds(30));
} }
#if defined(OS_WIN) || (defined(OS_MACOSX) && !defined(OS_IOS)) || \
(defined(OS_LINUX) && !defined(OS_CHROMEOS))
if (!sync_username.empty())
hash_password_manager_.ReportIsSyncPasswordHashSavedMetric();
#endif
} }
void PasswordStore::AddSiteStats(const InteractionsStats& stats) { void PasswordStore::AddSiteStats(const InteractionsStats& stats) {
......
...@@ -20779,6 +20779,11 @@ uploading your change for review. These are checked by presubmit scripts. ...@@ -20779,6 +20779,11 @@ uploading your change for review. These are checked by presubmit scripts.
<int value="2" label="Failed to determine"/> <int value="2" label="Failed to determine"/>
</enum> </enum>
<enum name="IsSyncPasswordHashSaved">
<int value="0" label="Not saved"/>
<int value="1" label="Saved"/>
</enum>
<enum name="JavaScriptAPIName"> <enum name="JavaScriptAPIName">
<int value="0" label="GetUserMedia"/> <int value="0" label="GetUserMedia"/>
<int value="1" label="PeerConnection00"/> <int value="1" label="PeerConnection00"/>
...@@ -52375,6 +52375,16 @@ http://cs/file:chrome/histograms.xml - but prefer this file for new entries. ...@@ -52375,6 +52375,16 @@ http://cs/file:chrome/histograms.xml - but prefer this file for new entries.
</summary> </summary>
</histogram> </histogram>
<histogram name="PasswordManager.IsSyncPasswordHashSaved"
enum="IsSyncPasswordHashSaved">
<owner>dvadym@chromium.org</owner>
<owner>nparker@chromium.org</owner>
<summary>
This metric reports whether a sync password hash is saved. Recorded shortly
after Chrome startup.
</summary>
</histogram>
<histogram <histogram
name="PasswordManager.KeychainMigration.NumChromeOwnedInaccessiblePasswords"> name="PasswordManager.KeychainMigration.NumChromeOwnedInaccessiblePasswords">
<obsolete> <obsolete>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment