Index: chrome/browser/policy/user_policy_token_cache.cc |
diff --git a/chrome/browser/policy/user_policy_token_cache.cc b/chrome/browser/policy/user_policy_token_cache.cc |
index adba4a4e89c75f5cc9fb03081d753a99fba66216..e2341d88740b284a19cdff0ea078b875255b2040 100644 |
--- a/chrome/browser/policy/user_policy_token_cache.cc |
+++ b/chrome/browser/policy/user_policy_token_cache.cc |
@@ -5,8 +5,28 @@ |
#include "chrome/browser/policy/user_policy_token_cache.h" |
#include "base/file_util.h" |
+#include "base/metrics/histogram.h" |
+#include "chrome/browser/policy/enterprise_metrics.h" |
#include "content/browser/browser_thread.h" |
+namespace { |
+ |
+// Other places can sample on the same UMA counter, so make sure they all do |
+// it on the same thread (UI). |
+void SampleUMAOnUIThread(policy::MetricToken sample) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ UMA_HISTOGRAM_ENUMERATION(policy::kMetricToken, sample, |
+ policy::kMetricTokenSize); |
+} |
+ |
+void SampleUMA(policy::MetricToken sample) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
+ BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |
+ NewRunnableFunction(&SampleUMAOnUIThread, sample)); |
+} |
+ |
+} // namespace |
+ |
namespace policy { |
namespace em = enterprise_management; |
@@ -52,6 +72,9 @@ void UserPolicyTokenCache::LoadOnFileThread() { |
device_credentials.ParseFromArray(data.c_str(), data.size())) { |
device_token = device_credentials.device_token(); |
device_id = device_credentials.device_id(); |
+ SampleUMA(kMetricTokenLoadSucceeded); |
+ } else { |
+ SampleUMA(kMetricTokenLoadFailed); |
} |
} |
@@ -81,16 +104,24 @@ void UserPolicyTokenCache::StoreOnFileThread(const std::string& token, |
if (!success) { |
LOG(WARNING) << "Failed serialize device token data, will not write " |
<< cache_file_.value(); |
+ SampleUMA(kMetricTokenStoreFailed); |
return; |
} |
if (!file_util::CreateDirectory(cache_file_.DirName())) { |
LOG(WARNING) << "Failed to create directory " |
<< cache_file_.DirName().value(); |
+ SampleUMA(kMetricTokenStoreFailed); |
return; |
} |
- file_util::WriteFile(cache_file_, data.c_str(), data.length()); |
+ int size = data.size(); |
+ if (file_util::WriteFile(cache_file_, data.c_str(), size) != size) { |
+ LOG(WARNING) << "Failed to write " << cache_file_.value(); |
+ SampleUMA(kMetricTokenStoreFailed); |
+ } |
+ |
+ SampleUMA(kMetricTokenStoreSucceeded); |
} |
} // namespace policy |