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

Unified Diff: chrome/app/chrome_breakpad_client.cc

Issue 585633002: Rename BreakpadClient to CrashReporterClient. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Windows Created 6 years, 3 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/app/chrome_breakpad_client.h ('k') | chrome/app/chrome_breakpad_client_mac.mm » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/app/chrome_breakpad_client.cc
diff --git a/chrome/app/chrome_breakpad_client.cc b/chrome/app/chrome_breakpad_client.cc
deleted file mode 100644
index 38abe834e1952d13aab67b347bbdc6dcb7dbb202..0000000000000000000000000000000000000000
--- a/chrome/app/chrome_breakpad_client.cc
+++ /dev/null
@@ -1,377 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/app/chrome_breakpad_client.h"
-
-#include "base/atomicops.h"
-#include "base/command_line.h"
-#include "base/environment.h"
-#include "base/files/file_path.h"
-#include "base/logging.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/path_service.h"
-#include "base/strings/safe_sprintf.h"
-#include "base/strings/string_split.h"
-#include "base/strings/utf_string_conversions.h"
-#include "chrome/common/chrome_constants.h"
-#include "chrome/common/chrome_paths.h"
-#include "chrome/common/chrome_result_codes.h"
-#include "chrome/common/chrome_switches.h"
-#include "chrome/common/crash_keys.h"
-#include "chrome/common/env_vars.h"
-#include "chrome/installer/util/google_update_settings.h"
-
-#if defined(OS_WIN)
-#include <windows.h>
-
-#include "base/file_version_info.h"
-#include "base/win/registry.h"
-#include "chrome/installer/util/google_chrome_sxs_distribution.h"
-#include "chrome/installer/util/install_util.h"
-#include "chrome/installer/util/util_constants.h"
-#include "policy/policy_constants.h"
-#endif
-
-#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_IOS)
-#include "chrome/browser/crash_upload_list.h"
-#include "chrome/common/chrome_version_info_posix.h"
-#endif
-
-#if defined(OS_POSIX)
-#include "base/debug/dump_without_crashing.h"
-#endif
-
-#if defined(OS_ANDROID)
-#include "chrome/common/descriptors_android.h"
-#endif
-
-#if defined(OS_CHROMEOS)
-#include "chrome/common/chrome_version_info.h"
-#include "chromeos/chromeos_switches.h"
-#endif
-
-namespace chrome {
-
-namespace {
-
-#if defined(OS_WIN)
-// This is the minimum version of google update that is required for deferred
-// crash uploads to work.
-const char kMinUpdateVersion[] = "1.3.21.115";
-
-// The value name prefix will be of the form {chrome-version}-{pid}-{timestamp}
-// (i.e., "#####.#####.#####.#####-########-########") which easily fits into a
-// 63 character buffer.
-const char kBrowserCrashDumpPrefixTemplate[] = "%s-%08x-%08x";
-const size_t kBrowserCrashDumpPrefixLength = 63;
-char g_browser_crash_dump_prefix[kBrowserCrashDumpPrefixLength + 1] = {};
-
-// These registry key to which we'll write a value for each crash dump attempt.
-HKEY g_browser_crash_dump_regkey = NULL;
-
-// A atomic counter to make each crash dump value name unique.
-base::subtle::Atomic32 g_browser_crash_dump_count = 0;
-#endif
-
-} // namespace
-
-ChromeBreakpadClient::ChromeBreakpadClient() {}
-
-ChromeBreakpadClient::~ChromeBreakpadClient() {}
-
-void ChromeBreakpadClient::SetBreakpadClientIdFromGUID(
- const std::string& client_guid) {
- crash_keys::SetCrashClientIdFromGUID(client_guid);
-}
-
-#if defined(OS_WIN)
-bool ChromeBreakpadClient::GetAlternativeCrashDumpLocation(
- base::FilePath* crash_dir) {
- // By setting the BREAKPAD_DUMP_LOCATION environment variable, an alternate
- // location to write breakpad crash dumps can be set.
- scoped_ptr<base::Environment> env(base::Environment::Create());
- std::string alternate_crash_dump_location;
- if (env->GetVar("BREAKPAD_DUMP_LOCATION", &alternate_crash_dump_location)) {
- *crash_dir = base::FilePath::FromUTF8Unsafe(alternate_crash_dump_location);
- return true;
- }
-
- return false;
-}
-
-void ChromeBreakpadClient::GetProductNameAndVersion(
- const base::FilePath& exe_path,
- base::string16* product_name,
- base::string16* version,
- base::string16* special_build,
- base::string16* channel_name) {
- DCHECK(product_name);
- DCHECK(version);
- DCHECK(special_build);
- DCHECK(channel_name);
-
- scoped_ptr<FileVersionInfo> version_info(
- FileVersionInfo::CreateFileVersionInfo(exe_path));
-
- if (version_info.get()) {
- // Get the information from the file.
- *version = version_info->product_version();
- if (!version_info->is_official_build())
- version->append(base::ASCIIToUTF16("-devel"));
-
- *product_name = version_info->product_short_name();
- *special_build = version_info->special_build();
- } else {
- // No version info found. Make up the values.
- *product_name = base::ASCIIToUTF16("Chrome");
- *version = base::ASCIIToUTF16("0.0.0.0-devel");
- }
-
- GoogleUpdateSettings::GetChromeChannelAndModifiers(
- !GetIsPerUserInstall(exe_path), channel_name);
-}
-
-bool ChromeBreakpadClient::ShouldShowRestartDialog(base::string16* title,
- base::string16* message,
- bool* is_rtl_locale) {
- scoped_ptr<base::Environment> env(base::Environment::Create());
- if (!env->HasVar(env_vars::kShowRestart) ||
- !env->HasVar(env_vars::kRestartInfo) ||
- env->HasVar(env_vars::kMetroConnected)) {
- return false;
- }
-
- std::string restart_info;
- env->GetVar(env_vars::kRestartInfo, &restart_info);
-
- // The CHROME_RESTART var contains the dialog strings separated by '|'.
- // See ChromeBrowserMainPartsWin::PrepareRestartOnCrashEnviroment()
- // for details.
- std::vector<std::string> dlg_strings;
- base::SplitString(restart_info, '|', &dlg_strings);
-
- if (dlg_strings.size() < 3)
- return false;
-
- *title = base::UTF8ToUTF16(dlg_strings[0]);
- *message = base::UTF8ToUTF16(dlg_strings[1]);
- *is_rtl_locale = dlg_strings[2] == env_vars::kRtlLocale;
- return true;
-}
-
-bool ChromeBreakpadClient::AboutToRestart() {
- scoped_ptr<base::Environment> env(base::Environment::Create());
- if (!env->HasVar(env_vars::kRestartInfo))
- return false;
-
- env->SetVar(env_vars::kShowRestart, "1");
- return true;
-}
-
-bool ChromeBreakpadClient::GetDeferredUploadsSupported(
- bool is_per_user_install) {
- Version update_version = GoogleUpdateSettings::GetGoogleUpdateVersion(
- !is_per_user_install);
- if (!update_version.IsValid() ||
- update_version.IsOlderThan(std::string(kMinUpdateVersion)))
- return false;
-
- return true;
-}
-
-bool ChromeBreakpadClient::GetIsPerUserInstall(const base::FilePath& exe_path) {
- return InstallUtil::IsPerUserInstall(exe_path.value().c_str());
-}
-
-bool ChromeBreakpadClient::GetShouldDumpLargerDumps(bool is_per_user_install) {
- base::string16 channel_name =
- GoogleUpdateSettings::GetChromeChannel(!is_per_user_install);
-
- // Capture more detail in crash dumps for beta and dev channel builds.
- return (channel_name == installer::kChromeChannelDev ||
- channel_name == installer::kChromeChannelBeta ||
- channel_name == GoogleChromeSxSDistribution::ChannelName());
-}
-
-int ChromeBreakpadClient::GetResultCodeRespawnFailed() {
- return chrome::RESULT_CODE_RESPAWN_FAILED;
-}
-
-void ChromeBreakpadClient::InitBrowserCrashDumpsRegKey() {
- DCHECK(g_browser_crash_dump_regkey == NULL);
-
- base::win::RegKey regkey;
- if (regkey.Create(HKEY_CURRENT_USER,
- chrome::kBrowserCrashDumpAttemptsRegistryPath,
- KEY_ALL_ACCESS) != ERROR_SUCCESS) {
- return;
- }
-
- // We use the current process id and the current tick count as a (hopefully)
- // unique combination for the crash dump value. There's a small chance that
- // across a reboot we might have a crash dump signal written, and the next
- // browser process might have the same process id and tick count, but crash
- // before consuming the signal (overwriting the signal with an identical one).
- // For now, we're willing to live with that risk.
- int length = base::strings::SafeSPrintf(g_browser_crash_dump_prefix,
- kBrowserCrashDumpPrefixTemplate,
- chrome::kChromeVersion,
- ::GetCurrentProcessId(),
- ::GetTickCount());
- if (length <= 0) {
- NOTREACHED();
- g_browser_crash_dump_prefix[0] = '\0';
- return;
- }
-
- // Hold the registry key in a global for update on crash dump.
- g_browser_crash_dump_regkey = regkey.Take();
-}
-
-void ChromeBreakpadClient::RecordCrashDumpAttempt(bool is_real_crash) {
- // If we're not a browser (or the registry is unavailable to us for some
- // reason) then there's nothing to do.
- if (g_browser_crash_dump_regkey == NULL)
- return;
-
- // Generate the final value name we'll use (appends the crash number to the
- // base value name).
- const size_t kMaxValueSize = 2 * kBrowserCrashDumpPrefixLength;
- char value_name[kMaxValueSize + 1] = {};
- int length = base::strings::SafeSPrintf(
- value_name,
- "%s-%x",
- g_browser_crash_dump_prefix,
- base::subtle::NoBarrier_AtomicIncrement(&g_browser_crash_dump_count, 1));
-
- if (length > 0) {
- DWORD value_dword = is_real_crash ? 1 : 0;
- ::RegSetValueExA(g_browser_crash_dump_regkey, value_name, 0, REG_DWORD,
- reinterpret_cast<BYTE*>(&value_dword),
- sizeof(value_dword));
- }
-}
-
-bool ChromeBreakpadClient::ReportingIsEnforcedByPolicy(bool* breakpad_enabled) {
-// Determine whether configuration management allows loading the crash reporter.
-// Since the configuration management infrastructure is not initialized at this
-// point, we read the corresponding registry key directly. The return status
-// indicates whether policy data was successfully read. If it is true,
-// |breakpad_enabled| contains the value set by policy.
- base::string16 key_name =
- base::UTF8ToUTF16(policy::key::kMetricsReportingEnabled);
- DWORD value = 0;
- base::win::RegKey hklm_policy_key(HKEY_LOCAL_MACHINE,
- policy::kRegistryChromePolicyKey, KEY_READ);
- if (hklm_policy_key.ReadValueDW(key_name.c_str(), &value) == ERROR_SUCCESS) {
- *breakpad_enabled = value != 0;
- return true;
- }
-
- base::win::RegKey hkcu_policy_key(HKEY_CURRENT_USER,
- policy::kRegistryChromePolicyKey, KEY_READ);
- if (hkcu_policy_key.ReadValueDW(key_name.c_str(), &value) == ERROR_SUCCESS) {
- *breakpad_enabled = value != 0;
- return true;
- }
-
- return false;
-}
-#endif // defined(OS_WIN)
-
-#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_IOS)
-void ChromeBreakpadClient::GetProductNameAndVersion(std::string* product_name,
- std::string* version) {
- DCHECK(product_name);
- DCHECK(version);
-#if defined(OS_ANDROID)
- *product_name = "Chrome_Android";
-#elif defined(OS_CHROMEOS)
- *product_name = "Chrome_ChromeOS";
-#else // OS_LINUX
-#if !defined(ADDRESS_SANITIZER)
- *product_name = "Chrome_Linux";
-#else
- *product_name = "Chrome_Linux_ASan";
-#endif
-#endif
-
- *version = PRODUCT_VERSION;
-}
-
-base::FilePath ChromeBreakpadClient::GetReporterLogFilename() {
- return base::FilePath(CrashUploadList::kReporterLogFilename);
-}
-#endif
-
-bool ChromeBreakpadClient::GetCrashDumpLocation(base::FilePath* crash_dir) {
- // By setting the BREAKPAD_DUMP_LOCATION environment variable, an alternate
- // location to write breakpad crash dumps can be set.
- scoped_ptr<base::Environment> env(base::Environment::Create());
- std::string alternate_crash_dump_location;
- if (env->GetVar("BREAKPAD_DUMP_LOCATION", &alternate_crash_dump_location)) {
- base::FilePath crash_dumps_dir_path =
- base::FilePath::FromUTF8Unsafe(alternate_crash_dump_location);
- PathService::Override(chrome::DIR_CRASH_DUMPS, crash_dumps_dir_path);
- }
-
- return PathService::Get(chrome::DIR_CRASH_DUMPS, crash_dir);
-}
-
-size_t ChromeBreakpadClient::RegisterCrashKeys() {
- // Note: This is not called on Windows because Breakpad is initialized in the
- // EXE module, but code that uses crash keys is in the DLL module.
- // RegisterChromeCrashKeys() will be called after the DLL is loaded.
- return crash_keys::RegisterChromeCrashKeys();
-}
-
-bool ChromeBreakpadClient::IsRunningUnattended() {
- scoped_ptr<base::Environment> env(base::Environment::Create());
- return env->HasVar(env_vars::kHeadless);
-}
-
-bool ChromeBreakpadClient::GetCollectStatsConsent() {
-#if defined(GOOGLE_CHROME_BUILD)
- bool is_official_chrome_build = true;
-#else
- bool is_official_chrome_build = false;
-#endif
-
-#if defined(OS_CHROMEOS)
- bool is_guest_session = CommandLine::ForCurrentProcess()->HasSwitch(
- chromeos::switches::kGuestSession);
- bool is_stable_channel =
- chrome::VersionInfo::GetChannel() == chrome::VersionInfo::CHANNEL_STABLE;
-
- if (is_guest_session && is_stable_channel)
- return false;
-#endif // defined(OS_CHROMEOS)
-
-#if defined(OS_ANDROID)
- // TODO(jcivelli): we should not initialize the crash-reporter when it was not
- // enabled. Right now if it is disabled we still generate the minidumps but we
- // do not upload them.
- return is_official_chrome_build;
-#else // !defined(OS_ANDROID)
- return is_official_chrome_build &&
- GoogleUpdateSettings::GetCollectStatsConsent();
-#endif // defined(OS_ANDROID)
-}
-
-#if defined(OS_ANDROID)
-int ChromeBreakpadClient::GetAndroidMinidumpDescriptor() {
- return kAndroidMinidumpDescriptor;
-}
-#endif
-
-bool ChromeBreakpadClient::EnableBreakpadForProcess(
- const std::string& process_type) {
- return process_type == switches::kRendererProcess ||
- process_type == switches::kPluginProcess ||
- process_type == switches::kPpapiPluginProcess ||
- process_type == switches::kZygoteProcess ||
- process_type == switches::kGpuProcess;
-}
-
-} // namespace chrome
« no previous file with comments | « chrome/app/chrome_breakpad_client.h ('k') | chrome/app/chrome_breakpad_client_mac.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698