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

Unified Diff: components/metrics/environment_recorder.cc

Issue 2687393004: Gather stability prefs into managing objects. (Closed)
Patch Set: Incorporate Feedback Created 3 years, 10 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
« no previous file with comments | « components/metrics/environment_recorder.h ('k') | components/metrics/environment_recorder_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/metrics/environment_recorder.cc
diff --git a/components/metrics/environment_recorder.cc b/components/metrics/environment_recorder.cc
new file mode 100644
index 0000000000000000000000000000000000000000..07ead8c20f37651d9d435764091b2aac1d448804
--- /dev/null
+++ b/components/metrics/environment_recorder.cc
@@ -0,0 +1,96 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/metrics/environment_recorder.h"
+
+#include "base/base64.h"
+#include "base/sha1.h"
+#include "base/strings/string_number_conversions.h"
+#include "components/metrics/metrics_pref_names.h"
+#include "components/metrics/proto/system_profile.pb.h"
+#include "components/prefs/pref_registry_simple.h"
+#include "components/prefs/pref_service.h"
+
+namespace metrics {
+
+namespace {
+
+// Computes a SHA-1 hash of |data| and returns it as a hex string.
+std::string ComputeSHA1(const std::string& data) {
+ const std::string sha1 = base::SHA1HashString(data);
+ return base::HexEncode(sha1.data(), sha1.size());
+}
+
+} // namespace
+
+EnvironmentRecorder::EnvironmentRecorder(PrefService* local_state)
+ : local_state_(local_state) {}
+
+EnvironmentRecorder::~EnvironmentRecorder() = default;
+
+std::string EnvironmentRecorder::SerializeAndRecordEnvironmentToPrefs(
+ const SystemProfileProto& system_profile) {
+ std::string serialized_system_profile;
+ std::string base64_system_profile;
+ if (system_profile.SerializeToString(&serialized_system_profile)) {
+ // Persist the system profile to disk. In the event of an unclean shutdown,
+ // it will be used as part of the initial stability report.
+ base::Base64Encode(serialized_system_profile, &base64_system_profile);
+ local_state_->SetString(prefs::kStabilitySavedSystemProfile,
+ base64_system_profile);
+ local_state_->SetString(prefs::kStabilitySavedSystemProfileHash,
+ ComputeSHA1(serialized_system_profile));
+ }
+
+ return serialized_system_profile;
+}
+
+bool EnvironmentRecorder::LoadEnvironmentFromPrefs(
+ SystemProfileProto* system_profile) {
+ DCHECK(system_profile);
+
+ const std::string base64_system_profile =
+ local_state_->GetString(prefs::kStabilitySavedSystemProfile);
+ if (base64_system_profile.empty())
+ return false;
+ const std::string system_profile_hash =
+ local_state_->GetString(prefs::kStabilitySavedSystemProfileHash);
+
+ std::string serialized_system_profile;
+ return base::Base64Decode(base64_system_profile,
+ &serialized_system_profile) &&
+ ComputeSHA1(serialized_system_profile) == system_profile_hash &&
+ system_profile->ParseFromString(serialized_system_profile);
+}
+
+void EnvironmentRecorder::ClearEnvironmentFromPrefs() {
+ local_state_->ClearPref(prefs::kStabilitySavedSystemProfile);
+ local_state_->ClearPref(prefs::kStabilitySavedSystemProfileHash);
+}
+
+int64_t EnvironmentRecorder::GetLastBuildtime() {
+ return local_state_->GetInt64(prefs::kStabilityStatsBuildTime);
+}
+
+std::string EnvironmentRecorder::GetLastVersion() {
+ return local_state_->GetString(prefs::kStabilityStatsVersion);
+}
+
+void EnvironmentRecorder::SetBuildtimeAndVersion(int64_t buildtime,
+ const std::string& version) {
+ local_state_->SetInt64(prefs::kStabilityStatsBuildTime, buildtime);
+ local_state_->SetString(prefs::kStabilityStatsVersion, version);
+}
+
+// static
+void EnvironmentRecorder::RegisterPrefs(PrefRegistrySimple* registry) {
+ registry->RegisterStringPref(prefs::kStabilitySavedSystemProfile,
+ std::string());
+ registry->RegisterStringPref(prefs::kStabilitySavedSystemProfileHash,
+ std::string());
+ registry->RegisterStringPref(prefs::kStabilityStatsVersion, std::string());
+ registry->RegisterInt64Pref(prefs::kStabilityStatsBuildTime, 0);
+}
+
+} // namespace metrics
« no previous file with comments | « components/metrics/environment_recorder.h ('k') | components/metrics/environment_recorder_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698