Home | History | Annotate | Download | only in browser
      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