summaryrefslogtreecommitdiffstats
path: root/chrome/browser
diff options
context:
space:
mode:
authorstevenjb@google.com <stevenjb@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-26 18:03:30 +0000
committerstevenjb@google.com <stevenjb@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-26 18:03:30 +0000
commitb48c918f8397747d9a157a87a5cfc63eeed74710 (patch)
tree20bf06e2bb203915d5e135498538550d6b891e4f /chrome/browser
parent45952868429c278087b68d0e0e96f33ec70388fa (diff)
downloadchromium_src-b48c918f8397747d9a157a87a5cfc63eeed74710.zip
chromium_src-b48c918f8397747d9a157a87a5cfc63eeed74710.tar.gz
chromium_src-b48c918f8397747d9a157a87a5cfc63eeed74710.tar.bz2
Make GTK and Aura parts orthogonal to OS parts
This CL moves GTK and Aura "Parts" out of the primary BrowserMainParts tree and into orthogonal parts that can be added independently. This was done in a way that will facilitate adding additional parts if (when) we need them. The motivation for this was to a) eliminate the existing typedef in chrome_browser_main_chromeos.h b) reduce the number of #ifdefs required in the setup / parts code For an outline of the new parts see: https://docs.google.com/drawings/d/1-gIMl-81c4SvcMrT1xaxnDGibDe7VQfMkFT1bMnIvrg/edit?hl=en_US Please consider this a proposal; I am entirely open to feedback. BUG=none TEST=Chrome compiles and passes tests on all platfroms. Review URL: http://codereview.chromium.org/8302016 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@107383 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser')
-rw-r--r--chrome/browser/chrome_browser_main.cc71
-rw-r--r--chrome/browser/chrome_browser_main.h41
-rw-r--r--chrome/browser/chrome_browser_main_aura.cc25
-rw-r--r--chrome/browser/chrome_browser_main_aura.h21
-rw-r--r--chrome/browser/chrome_browser_main_gtk.h25
-rw-r--r--chrome/browser/chrome_browser_main_linux.cc29
-rw-r--r--chrome/browser/chrome_browser_main_linux.h22
-rw-r--r--chrome/browser/chrome_browser_main_mac.h4
-rw-r--r--chrome/browser/chrome_browser_main_mac.mm20
-rw-r--r--chrome/browser/chrome_browser_main_unittest.cc69
-rw-r--r--chrome/browser/chrome_browser_main_win.cc69
-rw-r--r--chrome/browser/chrome_browser_main_win.h50
-rw-r--r--chrome/browser/chrome_browser_main_x11.cc11
-rw-r--r--chrome/browser/chrome_browser_parts_aura.cc28
-rw-r--r--chrome/browser/chrome_browser_parts_aura.h31
-rw-r--r--chrome/browser/chrome_browser_parts_gtk.cc (renamed from chrome/browser/chrome_browser_main_gtk.cc)26
-rw-r--r--chrome/browser/chrome_browser_parts_gtk.h33
-rw-r--r--chrome/browser/chrome_content_browser_client.cc59
-rw-r--r--chrome/browser/chrome_content_browser_client.h5
-rw-r--r--chrome/browser/chromeos/chrome_browser_main_chromeos.cc8
-rw-r--r--chrome/browser/chromeos/chrome_browser_main_chromeos.h13
21 files changed, 385 insertions, 275 deletions
diff --git a/chrome/browser/chrome_browser_main.cc b/chrome/browser/chrome_browser_main.cc
index 10a0a1f..2fb3af6 100644
--- a/chrome/browser/chrome_browser_main.cc
+++ b/chrome/browser/chrome_browser_main.cc
@@ -33,8 +33,6 @@
#include "chrome/browser/background/background_mode_manager.h"
#include "chrome/browser/browser_process_impl.h"
#include "chrome/browser/browser_shutdown.h"
-#include "chrome/browser/chrome_browser_main_gtk.h"
-#include "chrome/browser/chrome_browser_main_win.h"
#include "chrome/browser/defaults.h"
#include "chrome/browser/extensions/default_apps_trial.h"
#include "chrome/browser/extensions/extension_protocols.h"
@@ -121,10 +119,6 @@
#include "chrome/app/breakpad_linux.h"
#endif
-#if defined(TOOLKIT_USES_GTK)
-#include "chrome/browser/ui/gtk/gtk_util.h"
-#endif
-
#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
#include "chrome/browser/first_run/upgrade_util_linux.h"
#endif
@@ -161,6 +155,7 @@
#include "base/win/windows_version.h"
#include "chrome/browser/browser_trial.h"
#include "chrome/browser/browser_util_win.h"
+#include "chrome/browser/chrome_browser_main_win.h"
#include "chrome/browser/first_run/try_chrome_dialog_view.h"
#include "chrome/browser/first_run/upgrade_util_win.h"
#include "chrome/browser/fragmentation_checker_win.h"
@@ -195,6 +190,7 @@
#endif
#if defined(TOOLKIT_USES_GTK)
+#include "chrome/browser/ui/gtk/gtk_util.h"
#include "ui/gfx/gtk_util.h"
#endif
@@ -202,6 +198,10 @@
#include "ui/base/touch/touch_factory.h"
#endif
+#if defined(USE_X11)
+#include "chrome/browser/chrome_browser_main_x11.h"
+#endif
+
#if defined(USE_AURA)
#include "chrome/browser/ui/views/aura/chrome_shell_delegate.h"
#include "ui/aura/desktop.h"
@@ -681,7 +681,9 @@ const char kMissingLocaleDataMessage[] =
ChromeBrowserMainParts::ChromeBrowserMainParts(
const MainFunctionParams& parameters)
- : BrowserMainParts(parameters),
+ : parameters_(parameters),
+ parsed_command_line_(parameters.command_line_),
+ result_code_(content::RESULT_CODE_NORMAL_EXIT),
shutdown_watcher_(new ShutdownWatcherHelper()),
record_search_engine_(false),
translate_manager_(NULL),
@@ -698,12 +700,12 @@ ChromeBrowserMainParts::~ChromeBrowserMainParts() {
// This will be called after the command-line has been mutated by about:flags
MetricsService* ChromeBrowserMainParts::SetupMetricsAndFieldTrials(
- const CommandLine& parsed_command_line,
PrefService* local_state) {
// Must initialize metrics after labs have been converted into switches,
// but before field trials are set up (so that client ID is available for
// one-time randomized field trials).
- MetricsService* metrics = InitializeMetrics(parsed_command_line, local_state);
+ MetricsService* metrics = InitializeMetrics(
+ parsed_command_line_, local_state);
// Initialize FieldTrialList to support FieldTrials that use one-time
// randomization. The client ID will be empty if the user has not opted
@@ -1176,10 +1178,10 @@ DLLEXPORT void __cdecl RelaunchChromeBrowserWithNewCommandLineIfNeeded() {
#endif
void ChromeBrowserMainParts::PreMainMessageLoopRun() {
- set_result_code(PreMainMessageLoopRunInternal());
+ result_code_ = PreMainMessageLoopRunImpl();
}
-int ChromeBrowserMainParts::PreMainMessageLoopRunInternal() {
+int ChromeBrowserMainParts::PreMainMessageLoopRunImpl() {
run_message_loop_ = false;
FilePath user_data_dir;
#if defined(OS_WIN)
@@ -1382,8 +1384,7 @@ int ChromeBrowserMainParts::PreMainMessageLoopRunInternal() {
// Now the command line has been mutated based on about:flags, we can
// set up metrics and initialize field trials.
- MetricsService* metrics =
- SetupMetricsAndFieldTrials(parsed_command_line(), local_state);
+ MetricsService* metrics = SetupMetricsAndFieldTrials(local_state);
#if defined(USE_WEBKIT_COMPOSITOR)
// We need to ensure WebKit has been initialized before we start the WebKit
@@ -1472,12 +1473,14 @@ int ChromeBrowserMainParts::PreMainMessageLoopRunInternal() {
if (parsed_command_line().HasSwitch(switches::kUninstall)) {
return DoUninstallTasks(already_running);
}
-#endif
if (parsed_command_line().HasSwitch(switches::kHideIcons) ||
parsed_command_line().HasSwitch(switches::kShowIcons)) {
- return HandleIconsCommands(parsed_command_line());
+ return ChromeBrowserMainPartsWin::HandleIconsCommands(
+ parsed_command_line_);
}
+#endif
+
if (parsed_command_line().HasSwitch(switches::kMakeDefaultBrowser)) {
return ShellIntegration::SetAsDefaultBrowser() ?
static_cast<int>(content::RESULT_CODE_NORMAL_EXIT) :
@@ -1630,7 +1633,6 @@ int ChromeBrowserMainParts::PreMainMessageLoopRunInternal() {
// Do the tasks if chrome has been upgraded while it was last running.
if (!already_running && upgrade_util::DoUpgradeTasks(parsed_command_line()))
return content::RESULT_CODE_NORMAL_EXIT;
-#endif
// Check if there is any machine level Chrome installed on the current
// machine. If yes and the current Chrome process is user level, we do not
@@ -1641,9 +1643,10 @@ int ChromeBrowserMainParts::PreMainMessageLoopRunInternal() {
// processes etc).
// Do not allow this to occur for Chrome Frame user-to-system handoffs.
if (!parsed_command_line().HasSwitch(switches::kChromeFrame) &&
- CheckMachineLevelInstall()) {
+ ChromeBrowserMainPartsWin::CheckMachineLevelInstall()) {
return chrome::RESULT_CODE_MACHINE_LEVEL_INSTALL_EXISTS;
}
+#endif
// Create the TranslateManager singleton.
translate_manager_ = TranslateManager::GetInstance();
@@ -1691,26 +1694,24 @@ int ChromeBrowserMainParts::PreMainMessageLoopRunInternal() {
g_browser_process->profile_manager()->OnImportFinished(profile_);
} // if (is_first_run)
+#if defined(OS_WIN)
// Sets things up so that if we crash from this point on, a dialog will
// popup asking the user to restart chrome. It is done this late to avoid
// testing against a bunch of special cases that are taken care early on.
- PrepareRestartOnCrashEnviroment(parsed_command_line());
+ ChromeBrowserMainPartsWin::PrepareRestartOnCrashEnviroment(
+ parsed_command_line());
- // Start watching for hangs during startup. We disarm this hang detector when
- // ThreadWatcher takes over or when browser is shutdown.
- StartupTimeBomb::Arm(base::TimeDelta::FromSeconds(300));
-
-#if defined(OS_WIN)
// Registers Chrome with the Windows Restart Manager, which will restore the
// Chrome session when the computer is restarted after a system update.
// This could be run as late as WM_QUERYENDSESSION for system update reboots,
// but should run on startup if extended to handle crashes/hangs/patches.
// Also, better to run once here than once for each HWND's WM_QUERYENDSESSION.
- if (base::win::GetVersion() >= base::win::VERSION_VISTA)
- RegisterApplicationRestart(parsed_command_line());
-#endif // OS_WIN
+ if (base::win::GetVersion() >= base::win::VERSION_VISTA) {
+ ChromeBrowserMainPartsWin::RegisterApplicationRestart(
+ parsed_command_line());
+ }
-#if defined(OS_WIN) && defined(GOOGLE_CHROME_BUILD)
+#if defined(GOOGLE_CHROME_BUILD)
// Init the RLZ library. This just binds the dll and schedules a task on the
// file thread to be run sometime later. If this is the first run we record
// the installation event.
@@ -1743,7 +1744,12 @@ int ChromeBrowserMainParts::PreMainMessageLoopRunInternal() {
// for the startup page if needed (i.e., when the startup page is set to
// the home page).
RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_HOME_PAGE, NULL);
-#endif // GOOGLE_CHROME_BUILD && OS_WIN
+#endif // GOOGLE_CHROME_BUILD
+#endif // OS_WIN
+
+ // Start watching for hangs during startup. We disarm this hang detector when
+ // ThreadWatcher takes over or when browser is shutdown.
+ StartupTimeBomb::Arm(base::TimeDelta::FromSeconds(300));
// Configure modules that need access to resources.
net::NetModule::SetResourceProvider(chrome_common_net::NetResourceProvider);
@@ -1948,9 +1954,12 @@ int ChromeBrowserMainParts::PreMainMessageLoopRunInternal() {
return result_code;
}
-void ChromeBrowserMainParts::MainMessageLoopRun() {
+bool ChromeBrowserMainParts::MainMessageLoopRun(int* result_code) {
+ // Set the result code set in PreMainMessageLoopRun.
+ *result_code = result_code_;
+
if (!run_message_loop_)
- return;
+ return true; // Don't run the default message loop.
// This should be invoked as close to the start of the browser's
// UI thread message loop as possible to get a stable measurement
@@ -1971,6 +1980,8 @@ void ChromeBrowserMainParts::MainMessageLoopRun() {
chromeos::BootTimesLoader::Get()->AddLogoutTimeMarker("UIMessageLoopEnded",
true);
#endif
+
+ return true;
}
void ChromeBrowserMainParts::PostMainMessageLoopRun() {
diff --git a/chrome/browser/chrome_browser_main.h b/chrome/browser/chrome_browser_main.h
index 95f2fea..817e8de 100644
--- a/chrome/browser/chrome_browser_main.h
+++ b/chrome/browser/chrome_browser_main.h
@@ -8,11 +8,12 @@
#include "base/basictypes.h"
#include "base/gtest_prod_util.h"
+#include "base/memory/scoped_ptr.h"
#include "base/metrics/field_trial.h"
#include "base/tracked_objects.h"
#include "chrome/browser/first_run/first_run.h"
#include "chrome/browser/process_singleton.h"
-#include "content/browser/browser_main.h"
+#include "content/public/browser/browser_main_parts.h"
class BrowserProcessImpl;
class FieldTrialSynchronizer;
@@ -22,6 +23,7 @@ class PrefService;
class Profile;
class ShutdownWatcherHelper;
class TranslateManager;
+struct MainFunctionParams;
namespace chrome_browser {
// For use by ShowMissingLocaleMessageBox.
@@ -36,18 +38,30 @@ class ChromeBrowserMainParts : public content::BrowserMainParts {
// Constructs metrics service and does related initialization, including
// creation of field trials. Call only after labs have been converted to
// switches.
- MetricsService* SetupMetricsAndFieldTrials(
- const CommandLine& parsed_command_line,
- PrefService* local_state);
+ MetricsService* SetupMetricsAndFieldTrials(PrefService* local_state);
+
+ const MainFunctionParams& parameters() const {
+ return parameters_;
+ }
+ const CommandLine& parsed_command_line() const {
+ return parsed_command_line_;
+ }
protected:
explicit ChromeBrowserMainParts(const MainFunctionParams& parameters);
- virtual void PreMainMessageLoopRun() OVERRIDE;
- int PreMainMessageLoopRunInternal();
- virtual void MainMessageLoopRun() OVERRIDE;
- virtual void PostMainMessageLoopRun() OVERRIDE;
+ // content::BrowserParts overrides
+ virtual void PreEarlyInitialization() OVERRIDE {}
+ virtual void PostEarlyInitialization() OVERRIDE {}
+ virtual void PreMainMessageLoopStart() OVERRIDE {}
virtual void ToolkitInitialized() OVERRIDE;
+ virtual void PostMainMessageLoopStart() OVERRIDE {}
+ virtual void PreMainMessageLoopRun() OVERRIDE;
+ virtual bool MainMessageLoopRun(int* result_code) OVERRIDE;
+ virtual void PostMainMessageLoopRun();
+
+ // Displays a warning message that we can't find any locale data files.
+ virtual void ShowMissingLocaleMessageBox() = 0;
private:
// Methods for |EarlyInitialization()| ---------------------------------------
@@ -89,8 +103,16 @@ class ChromeBrowserMainParts : public content::BrowserMainParts {
void SetupFieldTrials(bool metrics_recording_enabled,
bool proxy_policy_is_set);
+ // Methods for Main Message Loop -------------------------------------------
+
+ int PreMainMessageLoopRunImpl();
+
// Members initialized on construction ---------------------------------------
+ const MainFunctionParams& parameters_;
+ const CommandLine& parsed_command_line_;
+ int result_code_;
+
// Create ShutdownWatcherHelper object for watching jank during shutdown.
// Please keep |shutdown_watcher| as the first object constructed, and hence
// it is destroyed last.
@@ -138,9 +160,6 @@ void RecordBreakpadStatusUMA(MetricsService* metrics);
// present on the current platform.
void WarnAboutMinimumSystemRequirements();
-// Displays a warning message that we can't find any locale data files.
-void ShowMissingLocaleMessageBox();
-
// Records the time from our process' startup to the present time in
// the UMA histogram |metric_name|.
void RecordBrowserStartupTime();
diff --git a/chrome/browser/chrome_browser_main_aura.cc b/chrome/browser/chrome_browser_main_aura.cc
deleted file mode 100644
index e795b38..0000000
--- a/chrome/browser/chrome_browser_main_aura.cc
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright (c) 2011 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/browser/chrome_browser_main_aura.h"
-
-#include "base/logging.h"
-
-ChromeBrowserMainPartsAura::ChromeBrowserMainPartsAura(
- const MainFunctionParams& parameters)
- : ChromeBrowserMainParts(parameters) {
- NOTIMPLEMENTED();
-}
-
-void ChromeBrowserMainPartsAura::PreEarlyInitialization() {
- NOTIMPLEMENTED();
-}
-
-void ChromeBrowserMainPartsAura::PostMainMessageLoopStart() {
- NOTIMPLEMENTED();
-}
-
-void ShowMissingLocaleMessageBox() {
- NOTIMPLEMENTED();
-}
diff --git a/chrome/browser/chrome_browser_main_aura.h b/chrome/browser/chrome_browser_main_aura.h
deleted file mode 100644
index 3b11d4e..0000000
--- a/chrome/browser/chrome_browser_main_aura.h
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright (c) 2011 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.
-
-#ifndef CHROME_BROWSER_CHROME_BROWSER_MAIN_AURA_H_
-#define CHROME_BROWSER_CHROME_BROWSER_MAIN_AURA_H_
-
-#include "chrome/browser/chrome_browser_main.h"
-
-class ChromeBrowserMainPartsAura : public ChromeBrowserMainParts {
- public:
- explicit ChromeBrowserMainPartsAura(const MainFunctionParams& parameters);
-
- virtual void PreEarlyInitialization() OVERRIDE;
- virtual void PostMainMessageLoopStart() OVERRIDE;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(ChromeBrowserMainPartsAura);
-};
-
-#endif // CHROME_BROWSER_CHROME_BROWSER_MAIN_AURA_H_
diff --git a/chrome/browser/chrome_browser_main_gtk.h b/chrome/browser/chrome_browser_main_gtk.h
deleted file mode 100644
index e55e4fe..0000000
--- a/chrome/browser/chrome_browser_main_gtk.h
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright (c) 2011 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.
-
-// Contains functions used by BrowserMain() that are gtk-specific.
-
-#ifndef CHROME_BROWSER_CHROME_BROWSER_MAIN_GTK_H_
-#define CHROME_BROWSER_CHROME_BROWSER_MAIN_GTK_H_
-#pragma once
-
-#include "base/compiler_specific.h"
-#include "chrome/browser/chrome_browser_main_posix.h"
-#include "chrome/browser/chrome_browser_main_x11.h"
-
-class ChromeBrowserMainPartsGtk : public ChromeBrowserMainPartsPosix {
- public:
- explicit ChromeBrowserMainPartsGtk(const MainFunctionParams& parameters);
-
- virtual void PreEarlyInitialization() OVERRIDE;
-
- private:
- void DetectRunningAsRoot();
-};
-
-#endif // CHROME_BROWSER_CHROME_BROWSER_MAIN_GTK_H_
diff --git a/chrome/browser/chrome_browser_main_linux.cc b/chrome/browser/chrome_browser_main_linux.cc
new file mode 100644
index 0000000..8e595ee
--- /dev/null
+++ b/chrome/browser/chrome_browser_main_linux.cc
@@ -0,0 +1,29 @@
+// Copyright (c) 2011 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/browser/chrome_browser_main_linux.h"
+
+#if defined(USE_AURA)
+#include "chrome/browser/chrome_browser_parts_aura.h"
+#endif
+#if defined(TOOLKIT_USES_GTK)
+#include "chrome/browser/chrome_browser_parts_gtk.h"
+#endif
+
+ChromeBrowserMainPartsLinux::ChromeBrowserMainPartsLinux(
+ const MainFunctionParams& parameters)
+ : ChromeBrowserMainPartsPosix(parameters) {
+}
+
+void ChromeBrowserMainPartsLinux::ShowMissingLocaleMessageBox() {
+#if defined(USE_AURA)
+ ChromeBrowserPartsAura::ShowMessageBox(
+ chrome_browser::kMissingLocaleDataMessage);
+#elif defined(TOOLKIT_USES_GTK)
+ ChromeBrowserPartsGtk::ShowMessageBox(
+ chrome_browser::kMissingLocaleDataMessage);
+#else
+#error "Need MessageBox implementation for linux without Aura or Gtk"
+#endif
+}
diff --git a/chrome/browser/chrome_browser_main_linux.h b/chrome/browser/chrome_browser_main_linux.h
new file mode 100644
index 0000000..80f3e55
--- /dev/null
+++ b/chrome/browser/chrome_browser_main_linux.h
@@ -0,0 +1,22 @@
+// Copyright (c) 2011 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.
+
+// Contains functions used by BrowserMain() that are linux-specific.
+
+#ifndef CHROME_BROWSER_CHROME_BROWSER_MAIN_LINUX_H_
+#define CHROME_BROWSER_CHROME_BROWSER_MAIN_LINUX_H_
+#pragma once
+
+#include "base/compiler_specific.h"
+#include "chrome/browser/chrome_browser_main_posix.h"
+
+class ChromeBrowserMainPartsLinux : public ChromeBrowserMainPartsPosix {
+ public:
+ explicit ChromeBrowserMainPartsLinux(const MainFunctionParams& parameters);
+
+ // ChromeBrowserMainParts overrides.
+ virtual void ShowMissingLocaleMessageBox() OVERRIDE;
+};
+
+#endif // CHROME_BROWSER_CHROME_BROWSER_MAIN_LINUX_H_
diff --git a/chrome/browser/chrome_browser_main_mac.h b/chrome/browser/chrome_browser_main_mac.h
index cf71045..2ba7e7b 100644
--- a/chrome/browser/chrome_browser_main_mac.h
+++ b/chrome/browser/chrome_browser_main_mac.h
@@ -12,9 +12,13 @@ class ChromeBrowserMainPartsMac : public ChromeBrowserMainPartsPosix {
public:
explicit ChromeBrowserMainPartsMac(const MainFunctionParams& parameters);
+ // BrowserParts overrides.
virtual void PreEarlyInitialization() OVERRIDE;
virtual void PreMainMessageLoopStart() OVERRIDE;
+ // ChromeBrowserMainParts overrides.
+ virtual void ShowMissingLocaleMessageBox() OVERRIDE;
+
// Perform platform-specific work that needs to be done after the main event
// loop has ended. The embedder must be sure to call this.
static void DidEndMainMessageLoop();
diff --git a/chrome/browser/chrome_browser_main_mac.mm b/chrome/browser/chrome_browser_main_mac.mm
index fe7913d..99428ee 100644
--- a/chrome/browser/chrome_browser_main_mac.mm
+++ b/chrome/browser/chrome_browser_main_mac.mm
@@ -37,27 +37,12 @@ void WarnAboutMinimumSystemRequirements() {
// Nothing to check for on Mac right now.
}
-void ShowMissingLocaleMessageBox() {
- // Not called on Mac because we load the locale files differently.
-}
-
// From browser_main_win.h, stubs until we figure out the right thing...
int DoUninstallTasks(bool chrome_still_running) {
return content::RESULT_CODE_NORMAL_EXIT;
}
-int HandleIconsCommands(const CommandLine& parsed_command_line) {
- return 0;
-}
-
-bool CheckMachineLevelInstall() {
- return false;
-}
-
-void PrepareRestartOnCrashEnviroment(const CommandLine& parsed_command_line) {
-}
-
// ChromeBrowserMainPartsMac ---------------------------------------------------
ChromeBrowserMainPartsMac::ChromeBrowserMainPartsMac(
@@ -128,6 +113,11 @@ void ChromeBrowserMainPartsMac::PreMainMessageLoopStart() {
setObject:@"NO" forKey:@"NSTreatUnknownArgumentsAsOpen"];
}
+void ChromeBrowserMainPartsMac::ShowMissingLocaleMessageBox() {
+ // Not called on Mac because we load the locale files differently.
+ NOTREACHED();
+}
+
void ChromeBrowserMainPartsMac::DidEndMainMessageLoop() {
AppController* appController = [NSApp delegate];
[appController didEndMainMessageLoop];
diff --git a/chrome/browser/chrome_browser_main_unittest.cc b/chrome/browser/chrome_browser_main_unittest.cc
index e3c99b7..9bcd07f 100644
--- a/chrome/browser/chrome_browser_main_unittest.cc
+++ b/chrome/browser/chrome_browser_main_unittest.cc
@@ -6,6 +6,7 @@
#include <vector>
#include "base/command_line.h"
#include "base/memory/scoped_ptr.h"
+#include "base/memory/scoped_vector.h"
#include "chrome/browser/chrome_browser_main.h"
#include "chrome/browser/chrome_content_browser_client.h"
#include "chrome/common/chrome_switches.h"
@@ -34,30 +35,37 @@ TEST_F(BrowserMainTest, WarmConnectionFieldTrial_WarmestSocket) {
scoped_ptr<MainFunctionParams> params(
new MainFunctionParams(command_line_, *sandbox_init_wrapper_, NULL));
- scoped_ptr<content::BrowserMainParts> bw(
- content::GetContentClient()->browser()->CreateBrowserMainParts(
- *params));
-
- ChromeBrowserMainParts* cbw = static_cast<ChromeBrowserMainParts*>(bw.get());
- cbw->WarmConnectionFieldTrial();
-
- EXPECT_EQ(0, net::GetSocketReusePolicy());
+ ScopedVector<content::BrowserMainParts> bwv;
+ content::GetContentClient()->browser()->CreateBrowserMainParts(
+ *params, &(bwv.get()));
+ ChromeBrowserMainParts* cbw = NULL;
+ if (bwv.size() >= 1)
+ cbw = static_cast<ChromeBrowserMainParts*>(bwv[0]);
+ EXPECT_TRUE(cbw);
+ if (cbw) {
+ cbw->WarmConnectionFieldTrial();
+ EXPECT_EQ(0, net::GetSocketReusePolicy());
+ }
}
TEST_F(BrowserMainTest, WarmConnectionFieldTrial_Random) {
scoped_ptr<MainFunctionParams> params(
new MainFunctionParams(command_line_, *sandbox_init_wrapper_, NULL));
- scoped_ptr<content::BrowserMainParts> bw(
- content::GetContentClient()->browser()->CreateBrowserMainParts(
- *params));
- ChromeBrowserMainParts* cbw = static_cast<ChromeBrowserMainParts*>(bw.get());
-
- const int kNumRuns = 1000;
- for (int i = 0; i < kNumRuns; i++) {
- cbw->WarmConnectionFieldTrial();
- int val = net::GetSocketReusePolicy();
- EXPECT_LE(val, 2);
- EXPECT_GE(val, 0);
+ ScopedVector<content::BrowserMainParts> bwv;
+ content::GetContentClient()->browser()->CreateBrowserMainParts(
+ *params, &(bwv.get()));
+ ChromeBrowserMainParts* cbw = NULL;
+ if (bwv.size() >= 1)
+ cbw = static_cast<ChromeBrowserMainParts*>(bwv[0]);
+ EXPECT_TRUE(cbw);
+ if (cbw) {
+ const int kNumRuns = 1000;
+ for (int i = 0; i < kNumRuns; i++) {
+ cbw->WarmConnectionFieldTrial();
+ int val = net::GetSocketReusePolicy();
+ EXPECT_LE(val, 2);
+ EXPECT_GE(val, 0);
+ }
}
}
@@ -68,20 +76,25 @@ TEST_F(BrowserMainTest, WarmConnectionFieldTrial_Invalid) {
new MainFunctionParams(command_line_, *sandbox_init_wrapper_, NULL));
// This test ends up launching a new process, and that doesn't initialize the
// ContentClient interfaces.
- scoped_ptr<content::BrowserMainParts> bw;
+ ScopedVector<content::BrowserMainParts> bwv;
if (content::GetContentClient()) {
- bw.reset(content::GetContentClient()->browser()->CreateBrowserMainParts(
- *params));
+ content::GetContentClient()->browser()->CreateBrowserMainParts(
+ *params, &(bwv.get()));
} else {
chrome::ChromeContentBrowserClient ccbc;
- bw.reset(ccbc.CreateBrowserMainParts(*params));
+ ccbc.CreateBrowserMainParts(*params, &(bwv.get()));
}
- ChromeBrowserMainParts* cbw = static_cast<ChromeBrowserMainParts*>(bw.get());
+ ChromeBrowserMainParts* cbw = NULL;
+ if (bwv.size() >= 1)
+ cbw = static_cast<ChromeBrowserMainParts*>(bwv[0]);
+ EXPECT_TRUE(cbw);
+ if (cbw) {
#if defined(NDEBUG) && defined(DCHECK_ALWAYS_ON)
- EXPECT_DEATH(cbw->WarmConnectionFieldTrial(),
- "Not a valid socket reuse policy group");
+ EXPECT_DEATH(cbw->WarmConnectionFieldTrial(),
+ "Not a valid socket reuse policy group");
#else
- EXPECT_DEBUG_DEATH(cbw->WarmConnectionFieldTrial(),
- "Not a valid socket reuse policy group");
+ EXPECT_DEBUG_DEATH(cbw->WarmConnectionFieldTrial(),
+ "Not a valid socket reuse policy group");
#endif
+ }
}
diff --git a/chrome/browser/chrome_browser_main_win.cc b/chrome/browser/chrome_browser_main_win.cc
index f723969..6064a00 100644
--- a/chrome/browser/chrome_browser_main_win.cc
+++ b/chrome/browser/chrome_browser_main_win.cc
@@ -74,14 +74,6 @@ void WarnAboutMinimumSystemRequirements() {
}
}
-#if !defined(USE_AURA)
-void ShowMissingLocaleMessageBox() {
- ui::MessageBox(NULL, ASCIIToUTF16(chrome_browser::kMissingLocaleDataMessage),
- ASCIIToUTF16(chrome_browser::kMissingLocaleDataTitle),
- MB_OK | MB_ICONERROR | MB_TOPMOST);
-}
-#endif
-
void RecordBrowserStartupTime() {
// Calculate the time that has elapsed from our own process creation.
FILETIME creation_time = {};
@@ -141,11 +133,23 @@ int DoUninstallTasks(bool chrome_still_running) {
return ret;
}
-// Prepares the localized strings that are going to be displayed to
-// the user if the browser process dies. These strings are stored in the
-// environment block so they are accessible in the early stages of the
-// chrome executable's lifetime.
-void PrepareRestartOnCrashEnviroment(const CommandLine& parsed_command_line) {
+// ChromeBrowserMainPartsWin ---------------------------------------------------
+
+ChromeBrowserMainPartsWin::ChromeBrowserMainPartsWin(
+ const MainFunctionParams& parameters)
+ : ChromeBrowserMainParts(parameters) {
+}
+
+void ChromeBrowserMainPartsWin::PreMainMessageLoopStart() {
+ if (!parameters().ui_task) {
+ // Make sure that we know how to handle exceptions from the message loop.
+ InitializeWindowProcExceptions();
+ }
+}
+
+// static
+void ChromeBrowserMainPartsWin::PrepareRestartOnCrashEnviroment(
+ const CommandLine& parsed_command_line) {
// Clear this var so child processes don't show the dialog by default.
scoped_ptr<base::Environment> env(base::Environment::Create());
env->UnSetVar(env_vars::kShowRestart);
@@ -177,7 +181,9 @@ void PrepareRestartOnCrashEnviroment(const CommandLine& parsed_command_line) {
env->SetVar(env_vars::kRestartInfo, UTF16ToUTF8(dlg_strings));
}
-void RegisterApplicationRestart(const CommandLine& parsed_command_line) {
+// static
+void ChromeBrowserMainPartsWin::RegisterApplicationRestart(
+ const CommandLine& parsed_command_line) {
DCHECK(base::win::GetVersion() >= base::win::VERSION_VISTA);
base::ScopedNativeLibrary library(FilePath(L"kernel32.dll"));
// Get the function pointer for RegisterApplicationRestart.
@@ -207,11 +213,15 @@ void RegisterApplicationRestart(const CommandLine& parsed_command_line) {
DCHECK(SUCCEEDED(hr)) << "RegisterApplicationRestart failed.";
}
-// This method handles the --hide-icons and --show-icons command line options
-// for chrome that get triggered by Windows from registry entries
-// HideIconsCommand & ShowIconsCommand. Chrome doesn't support hide icons
-// functionality so we just ask the users if they want to uninstall Chrome.
-int HandleIconsCommands(const CommandLine& parsed_command_line) {
+void ChromeBrowserMainPartsWin::ShowMissingLocaleMessageBox() {
+ ui::MessageBox(NULL, ASCIIToUTF16(chrome_browser::kMissingLocaleDataMessage),
+ ASCIIToUTF16(chrome_browser::kMissingLocaleDataTitle),
+ MB_OK | MB_ICONERROR | MB_TOPMOST);
+}
+
+// static
+int ChromeBrowserMainPartsWin::HandleIconsCommands(
+ const CommandLine& parsed_command_line) {
if (parsed_command_line.HasSwitch(switches::kHideIcons)) {
string16 cp_applet;
base::win::Version version = base::win::GetVersion();
@@ -237,11 +247,8 @@ int HandleIconsCommands(const CommandLine& parsed_command_line) {
return chrome::RESULT_CODE_UNSUPPORTED_PARAM;
}
-// Check if there is any machine level Chrome installed on the current
-// machine. If yes and the current Chrome process is user level, we do not
-// allow the user level Chrome to run. So we notify the user and uninstall
-// user level Chrome.
-bool CheckMachineLevelInstall() {
+// static
+bool ChromeBrowserMainPartsWin::CheckMachineLevelInstall() {
// TODO(tommi): Check if using the default distribution is always the right
// thing to do.
BrowserDistribution* dist = BrowserDistribution::GetDistribution();
@@ -270,17 +277,3 @@ bool CheckMachineLevelInstall() {
}
return false;
}
-
-// ChromeBrowserMainPartsWin ---------------------------------------------------
-
-ChromeBrowserMainPartsWin::ChromeBrowserMainPartsWin(
- const MainFunctionParams& parameters)
- : ChromeBrowserMainParts(parameters) {
-}
-
-void ChromeBrowserMainPartsWin::PreMainMessageLoopStart() {
- if (!parameters().ui_task) {
- // Make sure that we know how to handle exceptions from the message loop.
- InitializeWindowProcExceptions();
- }
-}
diff --git a/chrome/browser/chrome_browser_main_win.h b/chrome/browser/chrome_browser_main_win.h
index c866211..f54f557 100644
--- a/chrome/browser/chrome_browser_main_win.h
+++ b/chrome/browser/chrome_browser_main_win.h
@@ -17,33 +17,39 @@ class CommandLine;
// user to close the other chrome instance.
int DoUninstallTasks(bool chrome_still_running);
-// Prepares the localized strings that are going to be displayed to
-// the user if the browser process dies. These strings are stored in the
-// environment block so they are accessible in the early stages of the
-// chrome executable's lifetime.
-void PrepareRestartOnCrashEnviroment(const CommandLine& parsed_command_line);
-
-// Registers Chrome with the Windows Restart Manager, which will restore the
-// Chrome session when the computer is restarted after a system update.
-void RegisterApplicationRestart(const CommandLine& parsed_command_line);
-
-// This method handles the --hide-icons and --show-icons command line options
-// for chrome that get triggered by Windows from registry entries
-// HideIconsCommand & ShowIconsCommand. Chrome doesn't support hide icons
-// functionality so we just ask the users if they want to uninstall Chrome.
-int HandleIconsCommands(const CommandLine& parsed_command_line);
-
-// Check if there is any machine level Chrome installed on the current
-// machine. If yes and the current Chrome process is user level, we do not
-// allow the user level Chrome to run. So we notify the user and uninstall
-// user level Chrome.
-bool CheckMachineLevelInstall();
-
class ChromeBrowserMainPartsWin : public ChromeBrowserMainParts {
public:
explicit ChromeBrowserMainPartsWin(const MainFunctionParams& parameters);
+ // BrowserParts overrides.
virtual void PreMainMessageLoopStart() OVERRIDE;
+
+ // ChromeBrowserMainParts overrides.
+ virtual void ShowMissingLocaleMessageBox() OVERRIDE;
+
+ // Prepares the localized strings that are going to be displayed to
+ // the user if the browser process dies. These strings are stored in the
+ // environment block so they are accessible in the early stages of the
+ // chrome executable's lifetime.
+ static void PrepareRestartOnCrashEnviroment(
+ const CommandLine& parsed_command_line);
+
+ // Registers Chrome with the Windows Restart Manager, which will restore the
+ // Chrome session when the computer is restarted after a system update.
+ static void RegisterApplicationRestart(
+ const CommandLine& parsed_command_line);
+
+ // This method handles the --hide-icons and --show-icons command line options
+ // for chrome that get triggered by Windows from registry entries
+ // HideIconsCommand & ShowIconsCommand. Chrome doesn't support hide icons
+ // functionality so we just ask the users if they want to uninstall Chrome.
+ static int HandleIconsCommands(const CommandLine& parsed_command_line);
+
+ // Check if there is any machine level Chrome installed on the current
+ // machine. If yes and the current Chrome process is user level, we do not
+ // allow the user level Chrome to run. So we notify the user and uninstall
+ // user level Chrome.
+ static bool CheckMachineLevelInstall();
};
#endif // CHROME_BROWSER_CHROME_BROWSER_MAIN_WIN_H_
diff --git a/chrome/browser/chrome_browser_main_x11.cc b/chrome/browser/chrome_browser_main_x11.cc
index adc8ae1..e7986f1 100644
--- a/chrome/browser/chrome_browser_main_x11.cc
+++ b/chrome/browser/chrome_browser_main_x11.cc
@@ -88,17 +88,6 @@ int DoUninstallTasks(bool chrome_still_running) {
return content::RESULT_CODE_NORMAL_EXIT;
}
-int HandleIconsCommands(const CommandLine &parsed_command_line) {
- return 0;
-}
-
-bool CheckMachineLevelInstall() {
- return false;
-}
-
-void PrepareRestartOnCrashEnviroment(const CommandLine &parsed_command_line) {
-}
-
void SetBrowserX11ErrorHandlers() {
// Set up error handlers to make sure profile gets written if X server
// goes away.
diff --git a/chrome/browser/chrome_browser_parts_aura.cc b/chrome/browser/chrome_browser_parts_aura.cc
new file mode 100644
index 0000000..5ebe45f
--- /dev/null
+++ b/chrome/browser/chrome_browser_parts_aura.cc
@@ -0,0 +1,28 @@
+// Copyright (c) 2011 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/browser/chrome_browser_parts_aura.h"
+
+#include "base/logging.h"
+
+ChromeBrowserPartsAura::ChromeBrowserPartsAura()
+ : content::BrowserMainParts() {
+}
+
+void ChromeBrowserPartsAura::PreEarlyInitialization() {
+ NOTIMPLEMENTED();
+}
+
+bool ChromeBrowserPartsAura::MainMessageLoopRun(int* result_code) {
+ return false;
+}
+
+void ChromeBrowserPartsAura::PostMainMessageLoopStart() {
+ NOTIMPLEMENTED();
+}
+
+void ChromeBrowserPartsAura::ShowMessageBox(const char* message) {
+ LOG(ERROR) << "ShowMessageBox (not implemented): " << message;
+ NOTIMPLEMENTED();
+}
diff --git a/chrome/browser/chrome_browser_parts_aura.h b/chrome/browser/chrome_browser_parts_aura.h
new file mode 100644
index 0000000..d2fdc70
--- /dev/null
+++ b/chrome/browser/chrome_browser_parts_aura.h
@@ -0,0 +1,31 @@
+// Copyright (c) 2011 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.
+
+#ifndef CHROME_BROWSER_CHROME_BROWSER_PARTS_AURA_H_
+#define CHROME_BROWSER_CHROME_BROWSER_PARTS_AURA_H_
+
+#include "base/basictypes.h"
+#include "base/compiler_specific.h"
+#include "content/public/browser/browser_main_parts.h"
+
+class ChromeBrowserPartsAura : public content::BrowserMainParts {
+ public:
+ ChromeBrowserPartsAura();
+
+ virtual void PreEarlyInitialization() OVERRIDE;
+ virtual void PostEarlyInitialization() OVERRIDE {}
+ virtual void PreMainMessageLoopStart() OVERRIDE {}
+ virtual void ToolkitInitialized() OVERRIDE {}
+ virtual void PostMainMessageLoopStart() OVERRIDE;
+ virtual void PreMainMessageLoopRun() OVERRIDE {}
+ virtual bool MainMessageLoopRun(int* result_code) OVERRIDE;
+ virtual void PostMainMessageLoopRun() {}
+
+ static void ShowMessageBox(const char* message);
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(ChromeBrowserPartsAura);
+};
+
+#endif // CHROME_BROWSER_CHROME_BROWSER_PARTS_AURA_H_
diff --git a/chrome/browser/chrome_browser_main_gtk.cc b/chrome/browser/chrome_browser_parts_gtk.cc
index abf3f7a..b51363f 100644
--- a/chrome/browser/chrome_browser_main_gtk.cc
+++ b/chrome/browser/chrome_browser_parts_gtk.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "chrome/browser/chrome_browser_main_gtk.h"
+#include "chrome/browser/chrome_browser_parts_gtk.h"
#include <gtk/gtk.h>
@@ -14,21 +14,22 @@
#include "ui/base/resource/resource_bundle.h"
#include "ui/gfx/gtk_util.h"
-ChromeBrowserMainPartsGtk::ChromeBrowserMainPartsGtk(
- const MainFunctionParams& parameters)
- : ChromeBrowserMainPartsPosix(parameters) {
+ChromeBrowserPartsGtk::ChromeBrowserPartsGtk()
+ : content::BrowserMainParts() {
}
-void ChromeBrowserMainPartsGtk::PreEarlyInitialization() {
+void ChromeBrowserPartsGtk::PreEarlyInitialization() {
DetectRunningAsRoot();
+}
- ChromeBrowserMainPartsPosix::PreEarlyInitialization();
+bool ChromeBrowserPartsGtk::MainMessageLoopRun(int* result_code) {
+ return false;
}
-void ChromeBrowserMainPartsGtk::DetectRunningAsRoot() {
+void ChromeBrowserPartsGtk::DetectRunningAsRoot() {
if (geteuid() == 0) {
const CommandLine& command_line = *CommandLine::ForCurrentProcess();
- if (parsed_command_line().HasSwitch(switches::kUserDataDir))
+ if (command_line.HasSwitch(switches::kUserDataDir))
return;
gfx::GtkInitFromCommandLine(command_line);
@@ -66,18 +67,17 @@ void ChromeBrowserMainPartsGtk::DetectRunningAsRoot() {
}
}
-void ShowMissingLocaleMessageBox() {
+// static
+void ChromeBrowserPartsGtk::ShowMessageBox(const char* message) {
GtkWidget* dialog = gtk_message_dialog_new(
NULL,
static_cast<GtkDialogFlags>(0),
GTK_MESSAGE_ERROR,
GTK_BUTTONS_CLOSE,
"%s",
- chrome_browser::kMissingLocaleDataMessage);
-
- gtk_window_set_title(GTK_WINDOW(dialog),
- chrome_browser::kMissingLocaleDataTitle);
+ message);
+ gtk_window_set_title(GTK_WINDOW(dialog), message);
gtk_dialog_run(GTK_DIALOG(dialog));
gtk_widget_destroy(dialog);
}
diff --git a/chrome/browser/chrome_browser_parts_gtk.h b/chrome/browser/chrome_browser_parts_gtk.h
new file mode 100644
index 0000000..8a19321
--- /dev/null
+++ b/chrome/browser/chrome_browser_parts_gtk.h
@@ -0,0 +1,33 @@
+// Copyright (c) 2011 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.
+
+// Contains functions used by BrowserMain() that are gtk-specific.
+
+#ifndef CHROME_BROWSER_CHROME_BROWSER_PARTS_GTK_H_
+#define CHROME_BROWSER_CHROME_BROWSER_PARTS_GTK_H_
+#pragma once
+
+#include "base/compiler_specific.h"
+#include "content/public/browser/browser_main_parts.h"
+
+class ChromeBrowserPartsGtk : public content::BrowserMainParts {
+ public:
+ ChromeBrowserPartsGtk();
+
+ virtual void PreEarlyInitialization() OVERRIDE;
+ virtual void PostEarlyInitialization() OVERRIDE {}
+ virtual void PreMainMessageLoopStart() OVERRIDE {}
+ virtual void ToolkitInitialized() OVERRIDE {}
+ virtual void PostMainMessageLoopStart() OVERRIDE {}
+ virtual void PreMainMessageLoopRun() OVERRIDE {}
+ virtual bool MainMessageLoopRun(int* result_code) OVERRIDE;
+ virtual void PostMainMessageLoopRun() {}
+
+ static void ShowMessageBox(const char* message);
+
+ private:
+ void DetectRunningAsRoot();
+};
+
+#endif // CHROME_BROWSER_CHROME_BROWSER_PARTS_GTK_H_
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
index 9789afd..d1651a8 100644
--- a/chrome/browser/chrome_content_browser_client.cc
+++ b/chrome/browser/chrome_content_browser_client.cc
@@ -68,6 +68,7 @@
#include "content/browser/tab_contents/tab_contents_view.h"
#include "content/browser/worker_host/worker_process_host.h"
#include "content/common/desktop_notification_messages.h"
+#include "content/public/browser/browser_main_parts.h"
#include "grit/generated_resources.h"
#include "grit/ui_resources.h"
#include "net/base/cookie_monster.h"
@@ -75,16 +76,24 @@
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/resource/resource_bundle.h"
-#if defined(OS_CHROMEOS)
-#include "chrome/browser/chromeos/chrome_browser_main_chromeos.h"
-#elif defined(USE_AURA)
-#include "chrome/browser/chrome_browser_main_aura.h"
-#elif defined(OS_WIN)
+#if defined(OS_WIN)
#include "chrome/browser/chrome_browser_main_win.h"
#elif defined(OS_MACOSX)
#include "chrome/browser/chrome_browser_main_mac.h"
-#elif defined(TOOLKIT_USES_GTK)
-#include "chrome/browser/chrome_browser_main_gtk.h"
+#elif defined(OS_CHROMEOS)
+#include "chrome/browser/chromeos/chrome_browser_main_chromeos.h"
+#elif defined(OS_LINUX)
+#include "chrome/browser/chrome_browser_main_linux.h"
+#elif defined(OS_POSIX)
+#include "chrome/browser/chrome_browser_main_posix.h"
+#endif
+
+#if defined(USE_AURA)
+#include "chrome/browser/chrome_browser_parts_aura.h"
+#endif
+
+#if defined(TOOLKIT_USES_GTK)
+#include "chrome/browser/chrome_browser_parts_gtk.h"
#endif
#if defined(OS_LINUX)
@@ -104,7 +113,6 @@
#include "chrome/browser/ui/crypto_module_password_dialog.h"
#endif
-
#if defined(USE_AURA) || defined(TOUCH_UI)
#include "chrome/browser/renderer_host/render_widget_host_view_views.h"
#elif defined(OS_WIN)
@@ -191,20 +199,31 @@ RenderProcessHostPrivilege GetProcessPrivilege(
namespace chrome {
-content::BrowserMainParts* ChromeContentBrowserClient::CreateBrowserMainParts(
- const MainFunctionParams& parameters) {
-#if defined(OS_CHROMEOS)
- return new ChromeBrowserMainPartsChromeos(parameters);
-#elif defined(USE_AURA)
- return new ChromeBrowserMainPartsAura(parameters);
-#elif defined(OS_WIN)
- return new ChromeBrowserMainPartsWin(parameters);
+void ChromeContentBrowserClient::CreateBrowserMainParts(
+ const MainFunctionParams& parameters,
+ std::vector<content::BrowserMainParts*>* parts_list) {
+ // Construct the Main browser parts based on the OS type.
+#if defined(OS_WIN)
+ parts_list->push_back(new ChromeBrowserMainPartsWin(parameters));
#elif defined(OS_MACOSX)
- return new ChromeBrowserMainPartsMac(parameters);
-#elif defined(TOOLKIT_USES_GTK)
- return new ChromeBrowserMainPartsGtk(parameters);
+ parts_list->push_back(new ChromeBrowserMainPartsMac(parameters));
+#elif defined(OS_CHROMEOS)
+ parts_list->push_back(new ChromeBrowserMainPartsChromeos(parameters));
+#elif defined(OS_LINUX)
+ parts_list->push_back(new ChromeBrowserMainPartsLinux(parameters));
+#elif defined(OS_POSIX)
+ parts_list->push_back(new ChromeBrowserMainPartsPosix(parameters));
#else
- return NULL;
+ NOTREACHED();
+ parts_list->push_back(new ChromeBrowserMainParts(parameters));
+#endif
+
+ // Construct additional browser parts.
+#if defined(USE_AURA)
+ parts_list->push_back(new ChromeBrowserPartsAura());
+#endif
+#if defined(TOOLKIT_USES_GTK)
+ parts_list->push_back(new ChromeBrowserPartsGtk());
#endif
}
diff --git a/chrome/browser/chrome_content_browser_client.h b/chrome/browser/chrome_content_browser_client.h
index d8fb323..bb8d55a 100644
--- a/chrome/browser/chrome_content_browser_client.h
+++ b/chrome/browser/chrome_content_browser_client.h
@@ -15,8 +15,9 @@ namespace chrome {
class ChromeContentBrowserClient : public content::ContentBrowserClient {
public:
- virtual content::BrowserMainParts* CreateBrowserMainParts(
- const MainFunctionParams& parameters) OVERRIDE;
+ virtual void CreateBrowserMainParts(
+ const MainFunctionParams& parameters,
+ std::vector<content::BrowserMainParts*>* parts_list) OVERRIDE;
virtual RenderWidgetHostView* CreateViewForWidget(
RenderWidgetHost* widget) OVERRIDE;
virtual TabContentsView* CreateTabContentsView(
diff --git a/chrome/browser/chromeos/chrome_browser_main_chromeos.cc b/chrome/browser/chromeos/chrome_browser_main_chromeos.cc
index 6ac1340..88a3535 100644
--- a/chrome/browser/chromeos/chrome_browser_main_chromeos.cc
+++ b/chrome/browser/chromeos/chrome_browser_main_chromeos.cc
@@ -71,7 +71,7 @@ static base::LazyInstance<MessageLoopObserver> g_message_loop_observer(
ChromeBrowserMainPartsChromeos::ChromeBrowserMainPartsChromeos(
const MainFunctionParams& parameters)
- : ChromeBrowserMainPartsBase(parameters) {
+ : ChromeBrowserMainPartsLinux(parameters) {
}
ChromeBrowserMainPartsChromeos::~ChromeBrowserMainPartsChromeos() {
@@ -99,7 +99,7 @@ ChromeBrowserMainPartsChromeos::~ChromeBrowserMainPartsChromeos() {
}
void ChromeBrowserMainPartsChromeos::PreEarlyInitialization() {
- ChromeBrowserMainPartsBase::PreEarlyInitialization();
+ ChromeBrowserMainPartsLinux::PreEarlyInitialization();
if (parsed_command_line().HasSwitch(switches::kGuestSession)) {
// Disable sync and extensions if we're in "browse without sign-in" mode.
CommandLine* singleton_command_line = CommandLine::ForCurrentProcess();
@@ -110,7 +110,7 @@ void ChromeBrowserMainPartsChromeos::PreEarlyInitialization() {
}
void ChromeBrowserMainPartsChromeos::PreMainMessageLoopStart() {
- ChromeBrowserMainPartsBase::PreMainMessageLoopStart();
+ ChromeBrowserMainPartsLinux::PreMainMessageLoopStart();
// Initialize CrosLibrary only for the browser, unless running tests
// (which do their own CrosLibrary setup).
if (!parameters().ui_task) {
@@ -125,7 +125,7 @@ void ChromeBrowserMainPartsChromeos::PreMainMessageLoopStart() {
void ChromeBrowserMainPartsChromeos::PreMainMessageLoopRun() {
// FILE thread is created in ChromeBrowserMainParts::PreMainMessageLoopRun().
- ChromeBrowserMainPartsBase::PreMainMessageLoopRun();
+ ChromeBrowserMainPartsLinux::PreMainMessageLoopRun();
// Get the statistics provider instance here to start loading statistcs
// on the background FILE thread.
chromeos::system::StatisticsProvider::GetInstance();
diff --git a/chrome/browser/chromeos/chrome_browser_main_chromeos.h b/chrome/browser/chromeos/chrome_browser_main_chromeos.h
index 2786642..790477f 100644
--- a/chrome/browser/chromeos/chrome_browser_main_chromeos.h
+++ b/chrome/browser/chromeos/chrome_browser_main_chromeos.h
@@ -6,24 +6,16 @@
#define CHROME_BROWSER_CHROMEOS_CHROME_BROWSER_MAIN_CHROMEOS_H_
#include "base/memory/scoped_ptr.h"
-#if defined(TOOLKIT_USES_GTK)
-#include "chrome/browser/chrome_browser_main_gtk.h"
-typedef ChromeBrowserMainPartsGtk ChromeBrowserMainPartsBase;
-#else
-#include "chrome/browser/chrome_browser_main_posix.h"
-#include "chrome/browser/chrome_browser_main_x11.h"
-typedef ChromeBrowserMainPartsPosix ChromeBrowserMainPartsBase;
-#endif
+#include "chrome/browser/chrome_browser_main_linux.h"
namespace chromeos {
class BrightnessObserver;
class SessionManagerObserver;
} // namespace chromeos
-class ChromeBrowserMainPartsChromeos : public ChromeBrowserMainPartsBase {
+class ChromeBrowserMainPartsChromeos : public ChromeBrowserMainPartsLinux {
public:
explicit ChromeBrowserMainPartsChromeos(const MainFunctionParams& parameters);
-
virtual ~ChromeBrowserMainPartsChromeos();
virtual void PreEarlyInitialization() OVERRIDE;
@@ -34,6 +26,7 @@ class ChromeBrowserMainPartsChromeos : public ChromeBrowserMainPartsBase {
private:
scoped_ptr<chromeos::BrightnessObserver> brightness_observer_;
scoped_ptr<chromeos::SessionManagerObserver> session_manager_observer_;
+
DISALLOW_COPY_AND_ASSIGN(ChromeBrowserMainPartsChromeos);
};