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. ChromeMainDelegateAndroid()18ChromeMainDelegateAndroid::ChromeMainDelegateAndroid() { 19 } 20 ~ChromeMainDelegateAndroid()21ChromeMainDelegateAndroid::~ChromeMainDelegateAndroid() { 22 } 23 SandboxInitialized(const std::string & process_type)24void ChromeMainDelegateAndroid::SandboxInitialized( 25 const std::string& process_type) { 26 ChromeMainDelegate::SandboxInitialized(process_type); 27 } 28 RunProcess(const std::string & process_type,const content::MainFunctionParams & main_function_params)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 BasicStartupComplete(int * exit_code)54bool ChromeMainDelegateAndroid::BasicStartupComplete(int* exit_code) { 55 SetChromeSpecificCommandLineFlags(); 56 return ChromeMainDelegate::BasicStartupComplete(exit_code); 57 } 58 RegisterApplicationNativeMethods(JNIEnv * env)59bool ChromeMainDelegateAndroid::RegisterApplicationNativeMethods(JNIEnv* env) { 60 return chrome::android::RegisterJni(env); 61 } 62