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

Unified Diff: components/crash_keys/crash_keys.cc

Issue 1298743002: Partially componentize chrome/common/crash_keys. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix compilation on iOS Created 5 years, 4 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: components/crash_keys/crash_keys.cc
diff --git a/components/crash_keys/crash_keys.cc b/components/crash_keys/crash_keys.cc
new file mode 100644
index 0000000000000000000000000000000000000000..25b3a125066a44df09f8b472d66a2dd2fabecf5d
--- /dev/null
+++ b/components/crash_keys/crash_keys.cc
@@ -0,0 +1,93 @@
+// Copyright 2015 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/crash_keys/crash_keys.h"
+
+#include "base/debug/crash_logging.h"
+#include "base/format_macros.h"
+#include "base/strings/string_piece.h"
+#include "base/strings/string_util.h"
+#include "base/strings/stringprintf.h"
+
+namespace crash_keys {
+
+#if defined(OS_MACOSX)
+// Crashpad owns the "guid" key. Chrome's metrics client ID is a separate ID
+// carried in a distinct "metrics_client_id" field.
+const char kMetricsClientId[] = "metrics_client_id";
+#else
+const char kClientId[] = "guid";
+#endif
+
+const char kChannel[] = "channel";
+
+const char kNumVariations[] = "num-experiments";
+const char kVariations[] = "variations";
+
+#if defined(OS_MACOSX)
+namespace mac {
+
+const char kZombie[] = "zombie";
+const char kZombieTrace[] = "zombie_dealloc_bt";
+
+} // namespace mac
+#endif
+
+void SetMetricsClientIdFromGUID(const std::string& metrics_client_guid) {
+ std::string stripped_guid(metrics_client_guid);
+ // Remove all instance of '-' char from the GUID. So BCD-WXY becomes BCDWXY.
+ base::ReplaceSubstringsAfterOffset(
+ &stripped_guid, 0, "-", base::StringPiece());
+ if (stripped_guid.empty())
+ return;
+
+#if defined(OS_MACOSX)
+ // The crash client ID is maintained by Crashpad and is distinct from the
+ // metrics client ID, which is carried in its own key.
+ base::debug::SetCrashKeyValue(kMetricsClientId, stripped_guid);
+#else
+ // The crash client ID is set by the application when Breakpad is in use.
+ // The same ID as the metrics client ID is used.
+ base::debug::SetCrashKeyValue(kClientId, stripped_guid);
+#endif
+}
+
+void ClearMetricsClientId() {
+#if defined(OS_MACOSX)
+ // Crashpad always monitors for crashes, but doesn't upload them when
+ // crash reporting is disabled. The preference to upload crash reports is
+ // linked to the preference for metrics reporting. When metrics reporting is
+ // disabled, don't put the metrics client ID into crash dumps. This way, crash
+ // reports that are saved but not uploaded will not have a metrics client ID
+ // from the time that metrics reporting was disabled even if they are uploaded
+ // by user action at a later date.
+ //
+ // Breakpad cannot be enabled or disabled without an application restart, and
+ // it needs to use the metrics client ID as its stable crash client ID, so
+ // leave its client ID intact even when metrics reporting is disabled while
+ // the application is running.
+ base::debug::ClearCrashKey(kMetricsClientId);
+#endif
+}
+
+void SetVariationsList(const std::vector<std::string>& variations) {
+ base::debug::SetCrashKeyValue(kNumVariations,
+ base::StringPrintf("%" PRIuS, variations.size()));
+
+ std::string variations_string;
+ variations_string.reserve(kLargeSize);
+
+ for (size_t i = 0; i < variations.size(); ++i) {
+ const std::string& variation = variations[i];
+ // Do not truncate an individual experiment.
+ if (variations_string.size() + variation.size() >= kLargeSize)
+ break;
+ variations_string += variation;
+ variations_string += ",";
+ }
+
+ base::debug::SetCrashKeyValue(kVariations, variations_string);
+}
+
+} // namespace crash_keys

Powered by Google App Engine
This is Rietveld 408576698