feat: support crashpad on linux (#29719)
This commit is contained in:
parent
612361c4da
commit
c9ba0d02d7
13 changed files with 547 additions and 455 deletions
|
@ -153,6 +153,9 @@ bool ElectronCrashReporterClient::GetCrashDumpLocation(
|
|||
base::FilePath* crash_dir) {
|
||||
bool result = base::PathService::Get(electron::DIR_CRASH_DUMPS, crash_dir);
|
||||
{
|
||||
// If the DIR_CRASH_DUMPS path is overridden with
|
||||
// app.setPath('crashDumps', ...) then the directory might not have been
|
||||
// created.
|
||||
base::ThreadRestrictions::ScopedAllowIO allow_io;
|
||||
if (result && !base::PathExists(*crash_dir)) {
|
||||
return base::CreateDirectory(*crash_dir);
|
||||
|
@ -162,13 +165,6 @@ bool ElectronCrashReporterClient::GetCrashDumpLocation(
|
|||
}
|
||||
#endif
|
||||
|
||||
#if defined(OS_MAC) || defined(OS_LINUX)
|
||||
bool ElectronCrashReporterClient::GetCrashMetricsLocation(
|
||||
base::FilePath* metrics_dir) {
|
||||
return base::PathService::Get(chrome::DIR_USER_DATA, metrics_dir);
|
||||
}
|
||||
#endif // OS_MAC || OS_LINUX
|
||||
|
||||
bool ElectronCrashReporterClient::IsRunningUnattended() {
|
||||
return !collect_stats_consent_;
|
||||
}
|
||||
|
|
|
@ -52,10 +52,6 @@ class ElectronCrashReporterClient : public crash_reporter::CrashReporterClient {
|
|||
bool GetCrashDumpLocation(base::FilePath* crash_dir) override;
|
||||
#endif
|
||||
|
||||
#if defined(OS_MAC) || defined(OS_LINUX)
|
||||
bool GetCrashMetricsLocation(base::FilePath* metrics_dir) override;
|
||||
#endif
|
||||
|
||||
bool IsRunningUnattended() override;
|
||||
|
||||
bool GetCollectStatsConsent() override;
|
||||
|
|
|
@ -58,7 +58,8 @@
|
|||
#endif
|
||||
|
||||
#if !defined(MAS_BUILD)
|
||||
#include "components/crash/core/app/crashpad.h" // nogncheck
|
||||
#include "components/crash/core/app/crash_switches.h" // nogncheck
|
||||
#include "components/crash/core/app/crashpad.h" // nogncheck
|
||||
#include "components/crash/core/common/crash_key.h"
|
||||
#include "components/crash/core/common/crash_keys.h"
|
||||
#include "shell/app/electron_crash_reporter_client.h"
|
||||
|
@ -369,9 +370,19 @@ void ElectronMainDelegate::PreSandboxStartup() {
|
|||
#endif
|
||||
|
||||
#if defined(OS_LINUX)
|
||||
// Zygote needs to call InitCrashReporter() in RunZygote().
|
||||
if (process_type != ::switches::kZygoteProcess && !process_type.empty()) {
|
||||
ElectronCrashReporterClient::Create();
|
||||
breakpad::InitCrashReporter(process_type);
|
||||
if (crash_reporter::IsCrashpadEnabled()) {
|
||||
if (command_line->HasSwitch(
|
||||
crash_reporter::switches::kCrashpadHandlerPid)) {
|
||||
crash_reporter::InitializeCrashpad(false, process_type);
|
||||
crash_reporter::SetFirstChanceExceptionHandler(
|
||||
v8::TryHandleWebAssemblyTrapPosix);
|
||||
}
|
||||
} else {
|
||||
breakpad::InitCrashReporter(process_type);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -466,7 +477,16 @@ void ElectronMainDelegate::ZygoteForked() {
|
|||
base::CommandLine::ForCurrentProcess();
|
||||
std::string process_type =
|
||||
command_line->GetSwitchValueASCII(::switches::kProcessType);
|
||||
breakpad::InitCrashReporter(process_type);
|
||||
if (crash_reporter::IsCrashpadEnabled()) {
|
||||
if (command_line->HasSwitch(
|
||||
crash_reporter::switches::kCrashpadHandlerPid)) {
|
||||
crash_reporter::InitializeCrashpad(false, process_type);
|
||||
crash_reporter::SetFirstChanceExceptionHandler(
|
||||
v8::TryHandleWebAssemblyTrapPosix);
|
||||
}
|
||||
} else {
|
||||
breakpad::InitCrashReporter(process_type);
|
||||
}
|
||||
|
||||
// Reset the command line for the newly spawned process.
|
||||
crash_keys::SetCrashKeysFromCommandLine(*command_line);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue