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