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/app/breakpad_linux.h" 12 #include "chrome/browser/android/crash_dump_manager.h" 13 #include "chrome/common/chrome_switches.h" 14 #include "content/public/browser/android/compositor.h" 15 #include "content/public/common/main_function_params.h" 16 #include "net/android/network_change_notifier_factory_android.h" 17 #include "net/base/network_change_notifier.h" 18 #include "ui/base/resource/resource_bundle.h" 19 #include "ui/base/ui_base_paths.h" 20 21 ChromeBrowserMainPartsAndroid::ChromeBrowserMainPartsAndroid( 22 const content::MainFunctionParams& parameters) 23 : ChromeBrowserMainParts(parameters) { 24 } 25 26 ChromeBrowserMainPartsAndroid::~ChromeBrowserMainPartsAndroid() { 27 } 28 29 void ChromeBrowserMainPartsAndroid::PreProfileInit() { 30 TRACE_EVENT0("startup", "ChromeBrowserMainPartsAndroid::PreProfileInit") 31 #if defined(GOOGLE_CHROME_BUILD) 32 // TODO(jcivelli): we should not initialize the crash-reporter when it was not 33 // enabled. Right now if it is disabled we still generate the minidumps but we 34 // do not upload them. 35 bool breakpad_enabled = true; 36 #else 37 bool breakpad_enabled = false; 38 #endif 39 40 // Allow Breakpad to be enabled in Chromium builds for testing purposes. 41 if (!breakpad_enabled) 42 breakpad_enabled = CommandLine::ForCurrentProcess()->HasSwitch( 43 switches::kEnableCrashReporterForTesting); 44 45 if (breakpad_enabled) { 46 InitCrashReporter(); 47 crash_dump_manager_.reset(new CrashDumpManager()); 48 } 49 50 ChromeBrowserMainParts::PreProfileInit(); 51 } 52 53 void ChromeBrowserMainPartsAndroid::PreEarlyInitialization() { 54 TRACE_EVENT0("startup", 55 "ChromeBrowserMainPartsAndroid::PreEarlyInitialization") 56 net::NetworkChangeNotifier::SetFactory( 57 new net::NetworkChangeNotifierFactoryAndroid()); 58 59 content::Compositor::Initialize(); 60 61 // Chrome on Android does not use default MessageLoop. It has its own 62 // Android specific MessageLoop. 63 DCHECK(!main_message_loop_.get()); 64 65 // Create and start the MessageLoop. 66 // This is a critical point in the startup process. 67 { 68 TRACE_EVENT0("startup", 69 "ChromeBrowserMainPartsAndroid::PreEarlyInitialization:CreateUiMsgLoop"); 70 main_message_loop_.reset(new base::MessageLoop(base::MessageLoop::TYPE_UI)); 71 } 72 73 { 74 TRACE_EVENT0("startup", 75 "ChromeBrowserMainPartsAndroid::PreEarlyInitialization:StartUiMsgLoop"); 76 base::MessageLoopForUI::current()->Start(); 77 } 78 79 CommandLine::ForCurrentProcess()->AppendSwitch( 80 cc::switches::kCompositeToMailbox); 81 82 ChromeBrowserMainParts::PreEarlyInitialization(); 83 } 84 85 void ChromeBrowserMainPartsAndroid::ShowMissingLocaleMessageBox() { 86 NOTREACHED(); 87 } 88