15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chrome_browser_main_android.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/command_line.h" 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/debug/trace_event.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/path_service.h" 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/bookmarks/enhanced_bookmarks_features.h" 116d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "chrome/browser/google/google_search_counter_android.h" 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/signin/signin_manager_factory.h" 138bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "chrome/common/chrome_paths.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/chrome_switches.h" 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/crash/app/breakpad_linux.h" 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/crash/browser/crash_dump_manager_android.h" 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/signin/core/browser/signin_manager.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/android/compositor.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/main_function_params.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/android/network_change_notifier_factory_android.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/network_change_notifier.h" 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/base/ui_base_paths.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ChromeBrowserMainPartsAndroid::ChromeBrowserMainPartsAndroid( 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::MainFunctionParams& parameters) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ChromeBrowserMainParts(parameters) { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ChromeBrowserMainPartsAndroid::~ChromeBrowserMainPartsAndroid() { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeBrowserMainPartsAndroid::PreProfileInit() { 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TRACE_EVENT0("startup", "ChromeBrowserMainPartsAndroid::PreProfileInit") 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(GOOGLE_CHROME_BUILD) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(jcivelli): we should not initialize the crash-reporter when it was not 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // enabled. Right now if it is disabled we still generate the minidumps but we 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // do not upload them. 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool breakpad_enabled = true; 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool breakpad_enabled = false; 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Allow Breakpad to be enabled in Chromium builds for testing purposes. 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!breakpad_enabled) 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) breakpad_enabled = CommandLine::ForCurrentProcess()->HasSwitch( 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switches::kEnableCrashReporterForTesting); 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (breakpad_enabled) { 498bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) base::FilePath crash_dump_dir; 508bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) PathService::Get(chrome::DIR_CRASH_DUMPS, &crash_dump_dir); 518bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) crash_dump_manager_.reset(new breakpad::CrashDumpManager(crash_dump_dir)); 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromeBrowserMainParts::PreProfileInit(); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 576d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)void ChromeBrowserMainPartsAndroid::PostProfileInit() { 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Profile* main_profile = profile(); 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci search_counter_.reset(new GoogleSearchCounterAndroid(main_profile)); 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci InitBookmarksExperimentState(main_profile); 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 626d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ChromeBrowserMainParts::PostProfileInit(); 636d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} 646d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeBrowserMainPartsAndroid::PreEarlyInitialization() { 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TRACE_EVENT0("startup", 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "ChromeBrowserMainPartsAndroid::PreEarlyInitialization") 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::NetworkChangeNotifier::SetFactory( 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new net::NetworkChangeNotifierFactoryAndroid()); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::Compositor::Initialize(); 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Chrome on Android does not use default MessageLoop. It has its own 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Android specific MessageLoop. 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(!main_message_loop_.get()); 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Create and start the MessageLoop. 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // This is a critical point in the startup process. 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TRACE_EVENT0("startup", 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "ChromeBrowserMainPartsAndroid::PreEarlyInitialization:CreateUiMsgLoop"); 825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) main_message_loop_.reset(new base::MessageLoopForUI); 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TRACE_EVENT0("startup", 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "ChromeBrowserMainPartsAndroid::PreEarlyInitialization:StartUiMsgLoop"); 8890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoopForUI::current()->Start(); 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromeBrowserMainParts::PreEarlyInitialization(); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeBrowserMainPartsAndroid::ShowMissingLocaleMessageBox() { 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 97