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

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

Issue 880943002: UMA statistics for Linux password storage backend usage (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 11 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_store_factory.cc
diff --git a/chrome/browser/password_manager/password_store_factory.cc b/chrome/browser/password_manager/password_store_factory.cc
index 69aec1da9f2093d502099431cec7d57ebb8475f9..f2c9e93b24e0b8553ce442b6a33759e05c5f409a 100644
--- a/chrome/browser/password_manager/password_store_factory.cc
+++ b/chrome/browser/password_manager/password_store_factory.cc
@@ -195,6 +195,7 @@ KeyedService* PasswordStoreFactory::BuildServiceInstanceFor(
std::string store_type =
base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
switches::kPasswordStore);
+ LinuxBackendUsed used_backend = PLAINTEXT;
if (store_type == "kwallet") {
desktop_env = base::nix::DESKTOP_ENVIRONMENT_KDE4;
} else if (store_type == "gnome") {
@@ -218,9 +219,10 @@ KeyedService* PasswordStoreFactory::BuildServiceInstanceFor(
// KDE3 didn't use DBus, which our KWallet store uses.
VLOG(1) << "Trying KWallet for password storage.";
backend.reset(new NativeBackendKWallet(id));
- if (backend->Init())
+ if (backend->Init()) {
VLOG(1) << "Using KWallet for password storage.";
- else
+ used_backend = KWALLET;
+ } else
backend.reset();
} else if (desktop_env == base::nix::DESKTOP_ENVIRONMENT_GNOME ||
desktop_env == base::nix::DESKTOP_ENVIRONMENT_UNITY ||
@@ -230,9 +232,10 @@ KeyedService* PasswordStoreFactory::BuildServiceInstanceFor(
kLibsecretFieldTrialDisabledGroupName) {
VLOG(1) << "Trying libsecret for password storage.";
backend.reset(new NativeBackendLibsecret(id));
- if (backend->Init())
+ if (backend->Init()) {
VLOG(1) << "Using libsecret keyring for password storage.";
- else
+ used_backend = LIBSECRET;
+ } else
backend.reset();
}
#endif // defined(USE_LIBSECRET)
@@ -240,9 +243,10 @@ KeyedService* PasswordStoreFactory::BuildServiceInstanceFor(
#if defined(USE_GNOME_KEYRING)
VLOG(1) << "Trying GNOME keyring for password storage.";
backend.reset(new NativeBackendGnome(id));
- if (backend->Init())
+ if (backend->Init()) {
VLOG(1) << "Using GNOME keyring for password storage.";
- else
+ used_backend = GNOME_KEYRING;
+ } else
backend.reset();
#endif // defined(USE_GNOME_KEYRING)
}
@@ -256,6 +260,7 @@ KeyedService* PasswordStoreFactory::BuildServiceInstanceFor(
ps = new PasswordStoreX(main_thread_runner, db_thread_runner, login_db.Pass(),
backend.release());
+ RecordBackendStatistics(desktop_env, store_type, used_backend);
#elif defined(USE_OZONE)
ps = new password_manager::PasswordStoreDefault(
main_thread_runner, db_thread_runner, login_db.Pass());
@@ -292,3 +297,45 @@ content::BrowserContext* PasswordStoreFactory::GetBrowserContextToUse(
bool PasswordStoreFactory::ServiceIsNULLWhileTesting() const {
return true;
}
+
+#if defined(USE_X11)
+void PasswordStoreFactory::RecordBackendStatistics(
+ base::nix::DesktopEnvironment desktop_env,
+ const std::string& store_type,
+ LinuxBackendUsed used_backend) {
+ LinuxBackendUsage usage = OTHER_PLAINTEXT;
vabr (Chromium) 2015/01/27 16:15:51 But what about cases when the user forces a store
dvadym 2015/01/28 11:47:40 Done.
+ if (desktop_env == base::nix::DESKTOP_ENVIRONMENT_KDE4) {
+ bool is_flag_used = store_type == "kwallet";
+ switch (used_backend) {
+ case KWALLET:
+ usage = is_flag_used ? KDE_FLAG_KWALLET : KDE_NOFLAG_KWALLET;
+ break;
+ case PLAINTEXT:
+ usage = is_flag_used ? KDE_FLAG_PLAINTEXT : KDE_NOFLAG_PLAINTEXT;
+ break;
+ case GNOME_KEYRING:
+ case LIBSECRET:
+ NOTREACHED();
+ }
+ } else if (desktop_env == base::nix::DESKTOP_ENVIRONMENT_GNOME ||
+ desktop_env == base::nix::DESKTOP_ENVIRONMENT_UNITY ||
+ desktop_env == base::nix::DESKTOP_ENVIRONMENT_XFCE) {
+ bool is_flag_used = store_type == "gnome";
+ switch (used_backend) {
+ case GNOME_KEYRING:
+ usage = is_flag_used ? GNOME_FLAG_KEYRING : GNOME_NOFLAG_KEYRING;
+ break;
+ case LIBSECRET:
+ usage = is_flag_used ? GNOME_FLAG_LIBSECRET : GNOME_NOFLAG_LIBSECRET;
+ break;
+ case PLAINTEXT:
+ usage = is_flag_used ? GNOME_FLAG_PLAINTEXT : GNOME_NOFLAG_PLAINTEXT;
+ break;
+ case KWALLET:
+ NOTREACHED();
+ }
+ }
+ UMA_HISTOGRAM_ENUMERATION("PasswordManager.LinuxBackendStatistics", usage,
+ MAX_BACKEND_USAGE_VALUE);
+}
+#endif

Powered by Google App Engine
This is Rietveld 408576698