| Index: chrome/browser/chrome_browser_main_linux.cc
|
| diff --git a/chrome/browser/chrome_browser_main_linux.cc b/chrome/browser/chrome_browser_main_linux.cc
|
| index 2bf9e3a8c3cc37cf4ef27ca3d03bd0f39a46c7ca..ac48ad27f06ef9eb61c4221c029a7189a88e9988 100644
|
| --- a/chrome/browser/chrome_browser_main_linux.cc
|
| +++ b/chrome/browser/chrome_browser_main_linux.cc
|
| @@ -43,31 +43,60 @@ bool IsCrashReportingEnabled(const PrefService* local_state) {
|
| // Check whether we should initialize the crash reporter. It may be disabled
|
| // through configuration policy or user preference. It must be disabled for
|
| // Guest mode on Chrome OS in Stable channel.
|
| - // The kHeadless environment variable overrides the decision, but only if the
|
| - // crash service is under control of the user. It is used by QA testing
|
| - // infrastructure to switch on generation of crash reports.
|
| + // Environment variables may override the decision, but only if the
|
| + // crash service is under control of the user. It is used by QA
|
| + // testing infrastructure to switch on generation of crash reports.
|
| + bool use_env_var = true;
|
| +
|
| + // Convert #define to a variable so that we can use if() rather than
|
| + // #if below and so at least compile-test the Chrome code in
|
| + // Chromium builds.
|
| +#if defined(GOOGLE_CHROME_BUILD)
|
| + bool is_chrome_build = true;
|
| +#else
|
| + bool is_chrome_build = false;
|
| +#endif
|
| +
|
| + // Check these settings in Chrome builds only, to reduce the chance
|
| + // that we accidentally upload crash dumps from Chromium builds.
|
| + bool breakpad_enabled = false;
|
| + if (is_chrome_build) {
|
| #if defined(OS_CHROMEOS)
|
| - bool is_guest_session =
|
| - CommandLine::ForCurrentProcess()->HasSwitch(switches::kGuestSession);
|
| - bool is_stable_channel =
|
| - chrome::VersionInfo::GetChannel() == chrome::VersionInfo::CHANNEL_STABLE;
|
| - // TODO(pastarmovj): Consider the TrustedGet here.
|
| - bool reporting_enabled;
|
| - chromeos::CrosSettings::Get()->GetBoolean(chromeos::kStatsReportingPref,
|
| - &reporting_enabled);
|
| - bool breakpad_enabled =
|
| - !(is_guest_session && is_stable_channel) && reporting_enabled;
|
| - if (!breakpad_enabled)
|
| - breakpad_enabled = getenv(env_vars::kHeadless) != NULL;
|
| + bool is_guest_session =
|
| + CommandLine::ForCurrentProcess()->HasSwitch(switches::kGuestSession);
|
| + bool is_stable_channel =
|
| + chrome::VersionInfo::GetChannel() ==
|
| + chrome::VersionInfo::CHANNEL_STABLE;
|
| + // TODO(pastarmovj): Consider the TrustedGet here.
|
| + bool reporting_enabled;
|
| + chromeos::CrosSettings::Get()->GetBoolean(chromeos::kStatsReportingPref,
|
| + &reporting_enabled);
|
| + breakpad_enabled =
|
| + !(is_guest_session && is_stable_channel) && reporting_enabled;
|
| #else
|
| - const PrefService::Preference* metrics_reporting_enabled =
|
| - local_state->FindPreference(prefs::kMetricsReportingEnabled);
|
| - CHECK(metrics_reporting_enabled);
|
| - bool breakpad_enabled =
|
| - local_state->GetBoolean(prefs::kMetricsReportingEnabled);
|
| - if (!breakpad_enabled && metrics_reporting_enabled->IsUserModifiable())
|
| - breakpad_enabled = getenv(env_vars::kHeadless) != NULL;
|
| + const PrefService::Preference* metrics_reporting_enabled =
|
| + local_state->FindPreference(prefs::kMetricsReportingEnabled);
|
| + CHECK(metrics_reporting_enabled);
|
| + breakpad_enabled = local_state->GetBoolean(prefs::kMetricsReportingEnabled);
|
| + use_env_var = metrics_reporting_enabled->IsUserModifiable();
|
| #endif // defined(OS_CHROMEOS)
|
| + }
|
| +
|
| + if (use_env_var) {
|
| + // Linux Breakpad interferes with the debug stack traces produced
|
| + // by EnableInProcessStackDumping(), used in browser_tests, so we
|
| + // do not allow CHROME_HEADLESS=1 to enable Breakpad in Chromium
|
| + // because the buildbots have CHROME_HEADLESS set. However, we
|
| + // allow CHROME_HEADLESS to enable Breakpad in Chrome for
|
| + // compatibility with Breakpad/Chrome tests that may rely on this.
|
| + // TODO(mseaborn): Change tests to use CHROME_ENABLE_BREAKPAD
|
| + // instead.
|
| + if (is_chrome_build && !breakpad_enabled)
|
| + breakpad_enabled = getenv(env_vars::kHeadless) != NULL;
|
| + if (!breakpad_enabled)
|
| + breakpad_enabled = getenv(env_vars::kEnableBreakpad) != NULL;
|
| + }
|
| +
|
| return breakpad_enabled;
|
| }
|
| #endif // defined(USE_LINUX_BREAKPAD)
|
|
|