1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "chrome/browser/chrome_browser_main_android.h" 6 7 #include "base/command_line.h" 8 #include "base/debug/trace_event.h" 9 #include "base/path_service.h" 10 #include "cc/base/switches.h" 11 #include "chrome/common/chrome_paths.h" 12 #include "chrome/common/chrome_switches.h" 13 #include "components/breakpad/app/breakpad_linux.h" 14 #include "components/breakpad/browser/crash_dump_manager_android.h" 15 #include "content/public/browser/android/compositor.h" 16 #include "content/public/common/main_function_params.h" 17 #include "net/android/network_change_notifier_factory_android.h" 18 #include "net/base/network_change_notifier.h" 19 #include "ui/base/resource/resource_bundle.h" 20 #include "ui/base/ui_base_paths.h" 21 22 ChromeBrowserMainPartsAndroid::ChromeBrowserMainPartsAndroid( 23 const content::MainFunctionParams& parameters) 24 : ChromeBrowserMainParts(parameters) { 25 } 26 27 ChromeBrowserMainPartsAndroid::~ChromeBrowserMainPartsAndroid() { 28 } 29 30 void ChromeBrowserMainPartsAndroid::PreProfileInit() { 31 TRACE_EVENT0("startup", "ChromeBrowserMainPartsAndroid::PreProfileInit") 32 #if defined(GOOGLE_CHROME_BUILD) 33 // TODO(jcivelli): we should not initialize the crash-reporter when it was not 34 // enabled. Right now if it is disabled we still generate the minidumps but we 35 // do not upload them. 36 bool breakpad_enabled = true; 37 #else 38 bool breakpad_enabled = false; 39 #endif 40 41 // Allow Breakpad to be enabled in Chromium builds for testing purposes. 42 if (!breakpad_enabled) 43 breakpad_enabled = CommandLine::ForCurrentProcess()->HasSwitch( 44 switches::kEnableCrashReporterForTesting); 45 46 if (breakpad_enabled) { 47 base::FilePath crash_dump_dir; 48 PathService::Get(chrome::DIR_CRASH_DUMPS, &crash_dump_dir); 49 crash_dump_manager_.reset(new breakpad::CrashDumpManager(crash_dump_dir)); 50 } 51 52 ChromeBrowserMainParts::PreProfileInit(); 53 } 54 55 void ChromeBrowserMainPartsAndroid::PreEarlyInitialization() { 56 TRACE_EVENT0("startup", 57 "ChromeBrowserMainPartsAndroid::PreEarlyInitialization") 58 net::NetworkChangeNotifier::SetFactory( 59 new net::NetworkChangeNotifierFactoryAndroid()); 60 61 content::Compositor::Initialize(); 62 63 // Chrome on Android does not use default MessageLoop. It has its own 64 // Android specific MessageLoop. 65 DCHECK(!main_message_loop_.get()); 66 67 // Create and start the MessageLoop. 68 // This is a critical point in the startup process. 69 { 70 TRACE_EVENT0("startup", 71 "ChromeBrowserMainPartsAndroid::PreEarlyInitialization:CreateUiMsgLoop"); 72 main_message_loop_.reset(new base::MessageLoop(base::MessageLoop::TYPE_UI)); 73 } 74 75 { 76 TRACE_EVENT0("startup", 77 "ChromeBrowserMainPartsAndroid::PreEarlyInitialization:StartUiMsgLoop"); 78 base::MessageLoopForUI::current()->Start(); 79 } 80 81 CommandLine::ForCurrentProcess()->AppendSwitch( 82 cc::switches::kCompositeToMailbox); 83 84 ChromeBrowserMainParts::PreEarlyInitialization(); 85 } 86 87 void ChromeBrowserMainPartsAndroid::ShowMissingLocaleMessageBox() { 88 NOTREACHED(); 89 } 90