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 @@
#include "base/memory/ptr_util.h"
#include "base/strings/string_number_conversions.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/common/password_manager_pref_names.h"
#include "components/prefs/pref_service.h"
......@@ -56,6 +57,16 @@ base::Optional<SyncPasswordData> HashPasswordManager::RetrievePasswordHash() {
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() {
char buffer[kSyncPasswordSaltLength];
crypto::RandBytes(buffer, kSyncPasswordSaltLength);
......
......@@ -33,6 +33,8 @@ class HashPasswordManager {
// Returns empty if no hash is available.
base::Optional<SyncPasswordData> RetrievePasswordHash();
void ReportIsSyncPasswordHashSavedMetric();
void set_prefs(PrefService* prefs) { prefs_ = prefs; }
private:
......
......@@ -199,12 +199,21 @@ void LogSubmittedFormFrame(SubmittedFormFrame frame) {
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) {
UMA_HISTOGRAM_ENUMERATION(
"PasswordManager.SyncPasswordHashChange", event,
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 password_manager
......@@ -193,13 +193,6 @@ enum class SubmittedFormFrame {
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"
enum AccessPasswordInSettingsEvent {
ACCESS_PASSWORD_VIEWED = 0,
......@@ -215,6 +208,22 @@ enum ReauthToAccessPasswordInSettingsEvent {
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|
// to vary over the program's runtime.
void LogUMAHistogramBoolean(const std::string& name, bool sample);
......@@ -304,9 +313,15 @@ void LogPasswordAcceptedSaveUpdateSubmissionIndicatorEvent(
// Log a frame of a submitted password form.
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.
void LogSyncPasswordHashChange(SyncPasswordHashChange event);
// Log whether a sync password hash saved.
void LogIsSyncPasswordHashSaved(IsSyncPasswordHashSaved state);
#endif
} // namespace metrics_util
} // namespace password_manager
......
......@@ -270,6 +270,12 @@ void PasswordStore::ReportMetrics(const std::string& sync_username,
task_runner->PostDelayedTask(FROM_HERE, task,
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) {
......
......@@ -20779,6 +20779,11 @@ uploading your change for review. These are checked by presubmit scripts.
<int value="2" label="Failed to determine"/>
</enum>
<enum name="IsSyncPasswordHashSaved">
<int value="0" label="Not saved"/>
<int value="1" label="Saved"/>
</enum>
<enum name="JavaScriptAPIName">
<int value="0" label="GetUserMedia"/>
<int value="1" label="PeerConnection00"/>
......@@ -52375,6 +52375,16 @@ http://cs/file:chrome/histograms.xml - but prefer this file for new entries.
</summary>
</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
name="PasswordManager.KeychainMigration.NumChromeOwnedInaccessiblePasswords">
<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