Index: content/browser/browser_main.cc |
=================================================================== |
--- content/browser/browser_main.cc (revision 121246) |
+++ content/browser/browser_main.cc (working copy) |
@@ -1,105 +1,28 @@ |
-// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
+// Copyright (c) 2012 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 "content/browser/browser_main.h" |
-#include "base/allocator/allocator_shim.h" |
-#include "base/base_switches.h" |
-#include "base/command_line.h" |
#include "base/debug/trace_event.h" |
-#include "base/logging.h" |
-#include "base/metrics/histogram.h" |
-#include "content/browser/browser_main_loop.h" |
-#include "content/browser/notification_service_impl.h" |
-#include "content/common/child_process.h" |
-#include "content/public/common/content_switches.h" |
-#include "content/public/common/main_function_params.h" |
+#include "content/public/browser/browser_main_runner.h" |
-#if defined(OS_WIN) |
-#include "base/win/scoped_com_initializer.h" |
-#endif |
- |
-namespace { |
- |
-bool g_exited_main_message_loop = false; |
- |
-} // namespace |
- |
-namespace content { |
- |
-bool ExitedMainMessageLoop() { |
- return g_exited_main_message_loop; |
-} |
- |
-} // namespace content |
- |
// Main routine for running as the Browser process. |
int BrowserMain(const content::MainFunctionParams& parameters) { |
TRACE_EVENT_BEGIN_ETW("BrowserMain", 0, ""); |
- // ChildProcess:: is a misnomer unless you consider context. Use |
- // of --wait-for-debugger only makes sense when Chrome itself is a |
- // child process (e.g. when launched by PyAuto). |
- if (parameters.command_line.HasSwitch(switches::kWaitForDebugger)) |
- ChildProcess::WaitForDebugger("Browser"); |
+ scoped_ptr<content::BrowserMainRunner> main_runner_( |
+ content::BrowserMainRunner::Create()); |
- NotificationServiceImpl main_notification_service; |
+ int exit_code = main_runner_->Initialize(parameters); |
+ if (exit_code >= 0) |
+ return exit_code; |
- scoped_ptr<content::BrowserMainLoop> main_loop( |
- new content::BrowserMainLoop(parameters)); |
+ exit_code = main_runner_->Run(); |
- main_loop->Init(); |
+ main_runner_->Shutdown(); |
- main_loop->EarlyInitialization(); |
- |
- // Must happen before we try to use a message loop or display any UI. |
- main_loop->InitializeToolkit(); |
- |
- main_loop->MainMessageLoopStart(); |
- |
- // WARNING: If we get a WM_ENDSESSION, objects created on the stack here |
- // are NOT deleted. If you need something to run during WM_ENDSESSION add it |
- // to browser_shutdown::Shutdown or BrowserProcess::EndSession. |
- |
- // !!!!!!!!!! READ ME !!!!!!!!!! |
- // I (viettrungluu) am in the process of refactoring |BrowserMain()|. If you |
- // need to add something above this comment, read the documentation in |
- // browser_main.h. If you need to add something below, please do the |
- // following: |
- // - Figure out where you should add your code. Do NOT just pick a random |
- // location "which works". |
- // - Document the dependencies apart from compile-time-checkable ones. What |
- // must happen before your new code is executed? Does your new code need to |
- // run before something else? Are there performance reasons for executing |
- // your code at that point? |
- // - If you need to create a (persistent) object, heap allocate it and keep a |
- // |scoped_ptr| to it rather than allocating it on the stack. Otherwise |
- // I'll have to convert your code when I refactor. |
- // - Unless your new code is just a couple of lines, factor it out into a |
- // function with a well-defined purpose. Do NOT just add it inline in |
- // |BrowserMain()|. |
- // Thanks! |
- |
- // TODO(viettrungluu): put the remainder into BrowserMainParts |
- |
-#if defined(OS_WIN) |
-#if !defined(NO_TCMALLOC) |
- // When linking shared libraries, NO_TCMALLOC is defined, and dynamic |
- // allocator selection is not supported. |
- |
- // Make this call before going multithreaded, or spawning any subprocesses. |
- base::allocator::SetupSubprocessAllocator(); |
-#endif |
- |
- base::win::ScopedCOMInitializer com_initializer; |
-#endif // OS_WIN |
- |
- base::StatisticsRecorder statistics; |
- |
- main_loop->RunMainMessageLoopParts(&g_exited_main_message_loop); |
- |
TRACE_EVENT_END_ETW("BrowserMain", 0, 0); |
- return main_loop->GetResultCode(); |
+ return exit_code; |
} |