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