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

Unified Diff: chrome/common/child_process_logging_win.cc

Issue 2088133002: Switch chrome_elf exception handling from breakpad to crashpad. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix build error Created 4 years, 6 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 | « chrome/chrome_browser.gypi ('k') | chrome/common/chrome_constants.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/common/child_process_logging_win.cc
diff --git a/chrome/common/child_process_logging_win.cc b/chrome/common/child_process_logging_win.cc
index 3963bc3cc2eefd5c6e74ed5c4883d453c91ff7ee..bd1063b0cdb5ac1f2b1156aee742f063772bb1db 100644
--- a/chrome/common/child_process_logging_win.cc
+++ b/chrome/common/child_process_logging_win.cc
@@ -29,10 +29,10 @@ typedef void(__cdecl* ClearCrashKeyValue)(const wchar_t*);
void SetCrashKeyValueTrampoline(const base::StringPiece& key,
const base::StringPiece& value) {
- static SetCrashKeyValue set_crash_key = [](){
- HMODULE exe_module = GetModuleHandle(chrome::kBrowserProcessExecutableName);
+ static SetCrashKeyValue set_crash_key = []() {
+ HMODULE elf_module = GetModuleHandle(chrome::kChromeElfDllName);
return reinterpret_cast<SetCrashKeyValue>(
- exe_module ? GetProcAddress(exe_module, "SetCrashKeyValueImpl")
+ elf_module ? GetProcAddress(elf_module, "SetCrashKeyValueImpl")
: nullptr);
}();
if (set_crash_key) {
@@ -42,10 +42,10 @@ void SetCrashKeyValueTrampoline(const base::StringPiece& key,
}
void ClearCrashKeyValueTrampoline(const base::StringPiece& key) {
- static ClearCrashKeyValue clear_crash_key = [](){
- HMODULE exe_module = GetModuleHandle(chrome::kBrowserProcessExecutableName);
+ static ClearCrashKeyValue clear_crash_key = []() {
+ HMODULE elf_module = GetModuleHandle(chrome::kChromeElfDllName);
return reinterpret_cast<ClearCrashKeyValue>(
- exe_module ? GetProcAddress(exe_module, "ClearCrashKeyValueImpl")
+ elf_module ? GetProcAddress(elf_module, "ClearCrashKeyValueImpl")
: nullptr);
}();
if (clear_crash_key)
@@ -55,7 +55,6 @@ void ClearCrashKeyValueTrampoline(const base::StringPiece& key) {
} // namespace
void Init() {
- crash_keys::RegisterChromeCrashKeys();
base::debug::SetCrashKeyReportingFunctions(&SetCrashKeyValueTrampoline,
&ClearCrashKeyValueTrampoline);
@@ -63,10 +62,39 @@ void Init() {
// because of the aforementioned issue, crash keys aren't ready yet at the
// time of Breakpad initialization, load the client id backed up in Google
// Update settings instead.
+ // Please note if we are using Crashpad via chrome_elf then we need to call
+ // into chrome_elf to pass in the client id.
std::unique_ptr<metrics::ClientInfo> client_info =
GoogleUpdateSettings::LoadMetricsClientInfo();
- if (client_info)
- crash_keys::SetMetricsClientIdFromGUID(client_info->client_id);
+
+ // Set the client id in chrome_elf if it is loaded. We should not be
+ // registering crash keys in this case as that would already have been
+ // done by chrome_elf.
+ HMODULE elf_module = GetModuleHandle(chrome::kChromeElfDllName);
+ if (elf_module) {
+ // TODO(ananta)
+ // Remove this when the change to not require crash key registration lands.
+ // Please note that we are registering the crash keys twice if chrome_elf is
+ // loaded. Once in chrome_elf and once in the current module. Alternatively
+ // we could implement a crash key lookup trampoline which defers to
+ // chrome_elf. We decided to go with the duplicate key registration for
+ // simplicity.
+#if !defined(COMPONENT_BUILD)
+ crash_keys::RegisterChromeCrashKeys();
+#endif
+ using SetMetricsClientIdFunction = void (*)(const char* client_id);
+ SetMetricsClientIdFunction set_metrics_id_fn =
+ reinterpret_cast<SetMetricsClientIdFunction>(
+ ::GetProcAddress(elf_module, "SetMetricsClientId"));
+ DCHECK(set_metrics_id_fn);
+ set_metrics_id_fn(client_info ? client_info->client_id.c_str() : nullptr);
+ } else {
+ // TODO(ananta)
+ // Remove this when the change to not require crash key registration lands.
+ crash_keys::RegisterChromeCrashKeys();
+ if (client_info)
+ crash_keys::SetMetricsClientIdFromGUID(client_info->client_id);
+ }
}
} // namespace child_process_logging
« no previous file with comments | « chrome/chrome_browser.gypi ('k') | chrome/common/chrome_constants.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698