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

Unified Diff: chrome/common/crash_keys.cc

Issue 1000203007: Set a "metrics_client_id" crash key instead of "guid" on Mac OS X (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address review feedback (isherman) Created 5 years, 9 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/common/crash_keys.cc
diff --git a/chrome/common/crash_keys.cc b/chrome/common/crash_keys.cc
index 1983f0d73ec93b37ac16d974176d59dfb2611c88..dfe0f425b16928195c6448753c34cd0e7eb1a6c9 100644
--- a/chrome/common/crash_keys.cc
+++ b/chrome/common/crash_keys.cc
@@ -55,7 +55,13 @@ static_assert(kMediumSize <= kSingleChunkLength,
"mac has medium size crash key chunks");
#endif
+#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";
@@ -123,7 +129,11 @@ size_t RegisterChromeCrashKeys() {
// The following keys may be chunked by the underlying crash logging system,
// but ultimately constitute a single key-value pair.
base::debug::CrashKey fixed_keys[] = {
+#if defined(OS_MACOSX)
+ { kMetricsClientId, kSmallSize },
+#else
{ kClientId, kSmallSize },
+#endif
{ kChannel, kSmallSize },
{ kActiveURL, kLargeSize },
{ kNumSwitches, kSmallSize },
@@ -234,14 +244,40 @@ size_t RegisterChromeCrashKeys() {
kSingleChunkLength);
}
-void SetCrashClientIdFromGUID(const std::string& client_guid) {
- std::string stripped_guid(client_guid);
+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.
ReplaceSubstringsAfterOffset(&stripped_guid, 0, "-", "");
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
}
static bool IsBoringSwitch(const std::string& flag) {
@@ -271,6 +307,11 @@ static bool IsBoringSwitch(const std::string& flag) {
// (If you need to know can always look at the PEB).
flag == "--flag-switches-begin" ||
flag == "--flag-switches-end";
+#elif defined(OS_MACOSX)
+ // These are carried in their own fields.
+ return StartsWithASCII(flag, "--channel=", true) ||
+ StartsWithASCII(flag, "--type=", true) ||
+ StartsWithASCII(flag, "--metrics-client-id=", true);
#elif defined(OS_CHROMEOS)
static const char* const kIgnoreSwitches[] = {
::switches::kEnableLogging,

Powered by Google App Engine
This is Rietveld 408576698