#include "chrome/app/chrome_crash_reporter_client.h"
#include "base/command_line.h"
#include "base/environment.h"
#include "base/files/file_path.h"
#include "base/logging.h"
#include "base/no_destructor.h"
#include "base/path_service.h"
#include "base/strings/string_split.h"
#include "base/strings/utf_string_conversions.h"
#include "build/branding_buildflags.h"
#include "build/build_config.h"
#include "build/chromeos_buildflags.h"
#include "chrome/common/channel_info.h"
#include "chrome/common/chrome_paths.h"
#include "chrome/common/chrome_paths_internal.h"
#include "chrome/common/chrome_result_codes.h"
#include "chrome/common/env_vars.h"
#include "chrome/installer/util/google_update_settings.h"
#include "components/crash/core/common/crash_keys.h"
#include "content/public/common/content_switches.h"
#if BUILDFLAG(IS_POSIX) && !BUILDFLAG(IS_MAC)
#include "components/upload_list/crash_upload_list.h"
#include "components/version_info/version_info.h"
#include "components/version_info/version_info_values.h"
#endif
#if BUILDFLAG(IS_POSIX)
#include "base/debug/dump_without_crashing.h"
#endif
#if BUILDFLAG(IS_ANDROID)
#include "chrome/common/chrome_descriptors.h"
#endif
#if BUILDFLAG(IS_CHROMEOS_ASH)
#include "ash/constants/ash_switches.h"
#endif
#if BUILDFLAG(IS_CHROMEOS_LACROS)
#include "chromeos/lacros/lacros_paths.h"
#include "chromeos/startup/browser_params_proxy.h"
#include "chromeos/startup/startup.h"
#endif
void ChromeCrashReporterClient::Create() { … }
#if BUILDFLAG(IS_CHROMEOS_ASH)
bool ChromeCrashReporterClient::ShouldPassCrashLoopBefore(
const std::string& process_type) {
if (process_type == ::switches::kRendererProcess ||
process_type == ::switches::kUtilityProcess ||
process_type == ::switches::kPpapiPluginProcess ||
process_type == ::switches::kZygoteProcess) {
return false;
}
return true;
}
#endif
#if BUILDFLAG(IS_CHROMEOS_LACROS)
bool ChromeCrashReporterClient::GetCollectStatsConsentFromAshDir() {
base::FilePath consent_dir;
CHECK(base::PathService::Get(chromeos::lacros_paths::ASH_DATA_DIR,
&consent_dir));
return GoogleUpdateSettings::GetCollectStatsConsentFromDir(consent_dir);
}
#endif
ChromeCrashReporterClient::ChromeCrashReporterClient() { … }
ChromeCrashReporterClient::~ChromeCrashReporterClient() { … }
#if !BUILDFLAG(IS_MAC) && !BUILDFLAG(IS_ANDROID)
void ChromeCrashReporterClient::SetCrashReporterClientIdFromGUID(
const std::string& client_guid) { … }
#endif
#if BUILDFLAG(IS_POSIX) && !BUILDFLAG(IS_MAC)
void ChromeCrashReporterClient::GetProductNameAndVersion(
const char** product_name,
const char** version) { … }
void ChromeCrashReporterClient::GetProductNameAndVersion(
std::string* product_name,
std::string* version,
std::string* channel) { … }
base::FilePath ChromeCrashReporterClient::GetReporterLogFilename() { … }
bool ChromeCrashReporterClient::GetShouldDumpLargerDumps() { … }
#endif
bool ChromeCrashReporterClient::GetCrashDumpLocation(
base::FilePath* crash_dir) { … }
#if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
bool ChromeCrashReporterClient::GetCrashMetricsLocation(
base::FilePath* metrics_dir) { … }
#endif
bool ChromeCrashReporterClient::IsRunningUnattended() { … }
bool ChromeCrashReporterClient::GetCollectStatsConsent() { … }
#if BUILDFLAG(IS_ANDROID)
int ChromeCrashReporterClient::GetAndroidMinidumpDescriptor() {
return kAndroidMinidumpDescriptor;
}
#endif
#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
bool ChromeCrashReporterClient::ShouldMonitorCrashHandlerExpensively() { … }
#endif
bool ChromeCrashReporterClient::EnableBreakpadForProcess(
const std::string& process_type) { … }