summaryrefslogtreecommitdiffstats
path: root/chrome/browser/chrome_browser_main_linux.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/chrome_browser_main_linux.cc')
-rw-r--r--chrome/browser/chrome_browser_main_linux.cc73
1 files changed, 51 insertions, 22 deletions
diff --git a/chrome/browser/chrome_browser_main_linux.cc b/chrome/browser/chrome_browser_main_linux.cc
index 2bf9e3a..ac48ad2 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)