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..728d62d1e7536446196fd6250bbd357bbb88d5d8 100644 |
--- a/chrome/browser/chrome_browser_main_linux.cc |
+++ b/chrome/browser/chrome_browser_main_linux.cc |
@@ -43,9 +43,11 @@ 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; |
+ |
#if defined(OS_CHROMEOS) |
bool is_guest_session = |
CommandLine::ForCurrentProcess()->HasSwitch(switches::kGuestSession); |
@@ -57,17 +59,32 @@ bool IsCrashReportingEnabled(const PrefService* local_state) { |
&reporting_enabled); |
bool breakpad_enabled = |
!(is_guest_session && is_stable_channel) && reporting_enabled; |
- if (!breakpad_enabled) |
- breakpad_enabled = getenv(env_vars::kHeadless) != NULL; |
#else |
const PrefService::Preference* metrics_reporting_enabled = |
local_state->FindPreference(prefs::kMetricsReportingEnabled); |
CHECK(metrics_reporting_enabled); |
bool breakpad_enabled = |
Lei Zhang
2013/01/09 22:36:49
I'm concerned that a Chromium build can have this
Mark Seaborn
2013/01/10 00:48:28
To clarify, is your concern about when Chromium is
Lei Zhang
2013/01/10 00:58:49
My concern is about users running it on their desk
Mark Seaborn
2013/01/10 01:23:02
Oh, I thought you'd say the opposite. I'm not so
|
local_state->GetBoolean(prefs::kMetricsReportingEnabled); |
- if (!breakpad_enabled && metrics_reporting_enabled->IsUserModifiable()) |
- breakpad_enabled = getenv(env_vars::kHeadless) != NULL; |
+ 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 defined(GOOGLE_CHROME_BUILD) |
+ if (!breakpad_enabled) |
+ breakpad_enabled = getenv(env_vars::kHeadless) != NULL; |
+#endif |
+ if (!breakpad_enabled) |
+ breakpad_enabled = getenv("CHROME_ENABLE_BREAKPAD") != NULL; |
Lei Zhang
2013/01/09 22:36:49
Likely some other pieces of C++ code will use this
Mark Seaborn
2013/01/10 00:48:28
OK, done.
|
+ } |
+ |
return breakpad_enabled; |
} |
#endif // defined(USE_LINUX_BREAKPAD) |