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/app/android/chrome_main_delegate_android.h" 6 7#include "base/android/jni_android.h" 8#include "base/debug/trace_event.h" 9#include "chrome/browser/android/chrome_jni_registrar.h" 10#include "chrome/browser/android/chrome_startup_flags.h" 11#include "chrome/browser/android/uma_utils.h" 12#include "components/startup_metric_utils/startup_metric_utils.h" 13#include "content/public/browser/browser_main_runner.h" 14 15// ChromeMainDelegateAndroid is created when the library is loaded. It is always 16// done in the process's main Java thread. But for non browser process, e.g. 17// renderer process, it is not the native Chrome's main thread. 18ChromeMainDelegateAndroid::ChromeMainDelegateAndroid() { 19} 20 21ChromeMainDelegateAndroid::~ChromeMainDelegateAndroid() { 22} 23 24void ChromeMainDelegateAndroid::SandboxInitialized( 25 const std::string& process_type) { 26 ChromeMainDelegate::SandboxInitialized(process_type); 27} 28 29int ChromeMainDelegateAndroid::RunProcess( 30 const std::string& process_type, 31 const content::MainFunctionParams& main_function_params) { 32 TRACE_EVENT0("startup", "ChromeMainDelegateAndroid::RunProcess") 33 if (process_type.empty()) { 34 JNIEnv* env = base::android::AttachCurrentThread(); 35 RegisterApplicationNativeMethods(env); 36 37 // Because the browser process can be started asynchronously as a series of 38 // UI thread tasks a second request to start it can come in while the 39 // first request is still being processed. Chrome must keep the same 40 // browser runner for the second request. 41 // Also only record the start time the first time round, since this is the 42 // start time of the application, and will be same for all requests. 43 if (!browser_runner_.get()) { 44 base::Time startTime = chrome::android::GetMainEntryPointTime(); 45 startup_metric_utils::RecordSavedMainEntryPointTime(startTime); 46 browser_runner_.reset(content::BrowserMainRunner::Create()); 47 } 48 return browser_runner_->Initialize(main_function_params); 49 } 50 51 return ChromeMainDelegate::RunProcess(process_type, main_function_params); 52} 53 54bool ChromeMainDelegateAndroid::BasicStartupComplete(int* exit_code) { 55 SetChromeSpecificCommandLineFlags(); 56 return ChromeMainDelegate::BasicStartupComplete(exit_code); 57} 58 59bool ChromeMainDelegateAndroid::RegisterApplicationNativeMethods(JNIEnv* env) { 60 return chrome::android::RegisterJni(env); 61} 62