diff options
Diffstat (limited to 'content/browser/browser_main.cc')
-rw-r--r-- | content/browser/browser_main.cc | 97 |
1 files changed, 87 insertions, 10 deletions
diff --git a/content/browser/browser_main.cc b/content/browser/browser_main.cc index 99f8247..0efd4ae 100644 --- a/content/browser/browser_main.cc +++ b/content/browser/browser_main.cc @@ -1,28 +1,105 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// 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 "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 "content/public/browser/browser_main_runner.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" + +#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, ""); - scoped_ptr<content::BrowserMainRunner> main_runner_( - content::BrowserMainRunner::Create()); + // 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"); + + NotificationServiceImpl main_notification_service; + + scoped_ptr<content::BrowserMainLoop> main_loop( + new content::BrowserMainLoop(parameters)); + + main_loop->Init(); + + 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 - int exit_code = main_runner_->Initialize(parameters); - if (exit_code >= 0) - return exit_code; + base::win::ScopedCOMInitializer com_initializer; +#endif // OS_WIN - exit_code = main_runner_->Run(); + base::StatisticsRecorder statistics; - main_runner_->Shutdown(); + main_loop->RunMainMessageLoopParts(&g_exited_main_message_loop); TRACE_EVENT_END_ETW("BrowserMain", 0, 0); - return exit_code; + return main_loop->GetResultCode(); } |