From a5e8c6d4aa3dbe86823813bab9935557c3db1e38 Mon Sep 17 00:00:00 2001 From: "thestig@chromium.org" Date: Mon, 9 Apr 2012 20:22:01 +0000 Subject: Cleanup: Move some Linux only bits from ChromeBrowserMainParts to ChromeBrowserMainPartsLinux. (try 2) previous attempt: https://chromiumcodereview.appspot.com/9866028/ BUG=none TEST=none Review URL: http://codereview.chromium.org/9949045 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@131422 0039d316-1c4b-4281-b951-d872f2087c98 --- chrome/browser/chrome_browser_main_linux.cc | 76 +++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) (limited to '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 b27580d..2ba1b41 100644 --- a/chrome/browser/chrome_browser_main_linux.cc +++ b/chrome/browser/chrome_browser_main_linux.cc @@ -4,7 +4,83 @@ #include "chrome/browser/chrome_browser_main_linux.h" +#if defined(USE_LINUX_BREAKPAD) +#include + +#include "base/linux_util.h" +#include "chrome/app/breakpad_linux.h" +#include "chrome/browser/prefs/pref_service.h" +#include "chrome/common/env_vars.h" +#include "chrome/common/pref_names.h" +#include "content/public/browser/browser_thread.h" + +#if defined(OS_CHROMEOS) +#include "chrome/browser/chromeos/cros_settings.h" +#include "chrome/browser/chromeos/cros_settings_names.h" +#include "chrome/common/chrome_switches.h" +#include "chrome/common/chrome_version_info.h" +#endif + +#endif // defined(USE_LINUX_BREAKPAD) + +namespace { + +#if defined(USE_LINUX_BREAKPAD) +void GetLinuxDistroCallback() { + base::GetLinuxDistro(); // Initialize base::linux_distro if needed. +} + +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. +#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; +#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; +#endif // defined(OS_CHROMEOS) + return breakpad_enabled; +} +#endif // defined(USE_LINUX_BREAKPAD) + +} // namespace + ChromeBrowserMainPartsLinux::ChromeBrowserMainPartsLinux( const content::MainFunctionParams& parameters) : ChromeBrowserMainPartsPosix(parameters) { } + +void ChromeBrowserMainPartsLinux::PreProfileInit() { +#if defined(USE_LINUX_BREAKPAD) + // Needs to be called after we have chrome::DIR_USER_DATA and + // g_browser_process. This happens in PreCreateThreads. + content::BrowserThread::PostTask(content::BrowserThread::FILE, + FROM_HERE, + base::Bind(&GetLinuxDistroCallback)); + + if (IsCrashReportingEnabled(local_state())) + InitCrashReporter(); +#endif + + ChromeBrowserMainPartsPosix::PreProfileInit(); +} -- cgit v1.1