Index: components/crash/content/app/crashpad_win.cc |
diff --git a/components/crash/content/app/crashpad_win.cc b/components/crash/content/app/crashpad_win.cc |
index fa50b012bc755f7ce2d1fcbd1df39be759da60dc..c1b5e891a0c5037af33d226ec6151349f1a689f2 100644 |
--- a/components/crash/content/app/crashpad_win.cc |
+++ b/components/crash/content/app/crashpad_win.cc |
@@ -35,7 +35,14 @@ void GetPlatformCrashpadAnnotations( |
exe_file, &product_name, &version, &special_build, &channel_name); |
(*annotations)["prod"] = base::UTF16ToUTF8(product_name); |
(*annotations)["ver"] = base::UTF16ToUTF8(version); |
- (*annotations)["channel"] = base::UTF16ToUTF8(channel_name); |
+#if defined(GOOGLE_CHROME_BUILD) |
+ // Empty means stable. |
+ const bool allow_empty_channel = true; |
+#else |
+ const bool allow_empty_channel = false; |
+#endif |
+ if (allow_empty_channel || !channel_name.empty()) |
+ (*annotations)["channel"] = base::UTF16ToUTF8(channel_name); |
if (!special_build.empty()) |
(*annotations)["special"] = base::UTF16ToUTF8(special_build); |
#if defined(ARCH_CPU_X86) |
@@ -96,18 +103,34 @@ base::FilePath PlatformCrashpadInitialization(bool initial_client, |
// If the handler is embedded in the binary (e.g. chrome, setup), we |
// reinvoke it with --type=crashpad-handler. Otherwise, we use the |
// standalone crashpad_handler.exe (for tests, etc.). |
- std::vector<std::string> arguments; |
+ std::vector<std::string> start_arguments; |
if (embedded_handler) { |
- arguments.push_back(std::string("--type=") + switches::kCrashpadHandler); |
+ start_arguments.push_back(std::string("--type=") + |
+ switches::kCrashpadHandler); |
// The prefetch argument added here has to be documented in |
// chrome_switches.cc, below the kPrefetchArgument* constants. A constant |
// can't be used here because crashpad can't depend on Chrome. |
- arguments.push_back("/prefetch:7"); |
+ start_arguments.push_back("/prefetch:7"); |
} else { |
base::FilePath exe_dir = exe_file.DirName(); |
exe_file = exe_dir.Append(FILE_PATH_LITERAL("crashpad_handler.exe")); |
} |
+ std::vector<std::string> arguments(start_arguments); |
+ |
+ if (crash_reporter_client->ShouldMonitorCrashHandlerExpensively()) { |
+ arguments.push_back("--monitor-self"); |
+ for (const std::string& start_argument : start_arguments) { |
+ arguments.push_back(std::string("--monitor-self-argument=") + |
+ start_argument); |
+ } |
+ } |
+ |
+ // Set up --monitor-self-annotation even in the absence of --monitor-self so |
+ // that minidumps produced by generate_dump will contain these annotations. |
+ arguments.push_back(std::string("--monitor-self-annotation=ptype=") + |
+ switches::kCrashpadHandler); |
+ |
GetCrashpadClient().StartHandler(exe_file, database_path, metrics_path, url, |
process_annotations, arguments, false, |
false); |