mirror of
https://github.com/electron/electron.git
synced 2026-04-10 03:01:51 -04:00
fix: send guid with linux crashes (#24897)
* fix: send guid with linux crashes * simplify with file_util Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
This commit is contained in:
@@ -40,7 +40,11 @@
|
||||
#endif
|
||||
|
||||
#if defined(OS_LINUX)
|
||||
#include "base/containers/span.h"
|
||||
#include "base/files/file_util.h"
|
||||
#include "base/guid.h"
|
||||
#include "components/crash/core/app/breakpad_linux.h"
|
||||
#include "components/crash/core/common/crash_keys.h"
|
||||
#include "v8/include/v8-wasm-trap-handler-posix.h"
|
||||
#include "v8/include/v8.h"
|
||||
#endif
|
||||
@@ -81,6 +85,40 @@ bool IsCrashReporterEnabled() {
|
||||
const std::map<std::string, std::string>& GetGlobalCrashKeys() {
|
||||
return GetGlobalCrashKeysMutable();
|
||||
}
|
||||
|
||||
base::FilePath GetClientIdPath() {
|
||||
base::FilePath path;
|
||||
base::PathService::Get(electron::DIR_CRASH_DUMPS, &path);
|
||||
return path.Append("client_id");
|
||||
}
|
||||
|
||||
std::string ReadClientId() {
|
||||
base::ThreadRestrictions::ScopedAllowIO allow_io;
|
||||
std::string client_id;
|
||||
// "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".length == 36
|
||||
if (!base::ReadFileToStringWithMaxSize(GetClientIdPath(), &client_id, 36) ||
|
||||
client_id.size() != 36)
|
||||
return std::string();
|
||||
return client_id;
|
||||
}
|
||||
|
||||
void WriteClientId(const std::string& client_id) {
|
||||
DCHECK_EQ(client_id.size(), 36u);
|
||||
base::ThreadRestrictions::ScopedAllowIO allow_io;
|
||||
base::WriteFile(GetClientIdPath(), client_id);
|
||||
}
|
||||
|
||||
std::string GetClientId() {
|
||||
static base::NoDestructor<std::string> client_id;
|
||||
if (!client_id->empty())
|
||||
return *client_id;
|
||||
*client_id = ReadClientId();
|
||||
if (client_id->empty()) {
|
||||
*client_id = base::GenerateGUID();
|
||||
WriteClientId(*client_id);
|
||||
}
|
||||
return *client_id;
|
||||
}
|
||||
#endif
|
||||
|
||||
void Start(const std::string& submit_url,
|
||||
@@ -107,6 +145,7 @@ void Start(const std::string& submit_url,
|
||||
? "node"
|
||||
: command_line->GetSwitchValueASCII(::switches::kProcessType);
|
||||
#if defined(OS_LINUX)
|
||||
::crash_keys::SetMetricsClientIdFromGUID(GetClientId());
|
||||
auto& global_crash_keys = GetGlobalCrashKeysMutable();
|
||||
for (const auto& pair : global_extra) {
|
||||
global_crash_keys[pair.first] = pair.second;
|
||||
|
||||
@@ -19,6 +19,7 @@ bool IsCrashReporterEnabled();
|
||||
|
||||
#if defined(OS_LINUX)
|
||||
const std::map<std::string, std::string>& GetGlobalCrashKeys();
|
||||
std::string GetClientId();
|
||||
#endif
|
||||
|
||||
// JS bindings API; exposed publicly because it's also called from node_main.cc
|
||||
|
||||
@@ -721,8 +721,10 @@ void ElectronBrowserClient::AppendExtraCommandLineSwitches(
|
||||
bool enable_crash_reporter = false;
|
||||
enable_crash_reporter = breakpad::IsCrashReporterEnabled();
|
||||
if (enable_crash_reporter) {
|
||||
command_line->AppendSwitch(::switches::kEnableCrashReporter);
|
||||
std::string switch_value;
|
||||
std::string switch_value =
|
||||
api::crash_reporter::GetClientId() + ",no_channel";
|
||||
command_line->AppendSwitchASCII(::switches::kEnableCrashReporter,
|
||||
switch_value);
|
||||
for (const auto& pair : api::crash_reporter::GetGlobalCrashKeys()) {
|
||||
if (!switch_value.empty())
|
||||
switch_value += ",";
|
||||
|
||||
Reference in New Issue
Block a user