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.
5 #include "chrome/app/android/chrome_main_delegate_android.h"
7 #include "base/android/jni_android.h"
8 #include "base/trace_event/trace_event.h"
9 #include "chrome/browser/android/chrome_startup_flags.h"
10 #include "chrome/browser/android/metrics/uma_utils.h"
11 #include "chrome/browser/android/metrics/uma_utils.h"
12 #include "chrome/browser/media/android/remote/remote_media_player_manager.h"
13 #include "components/startup_metric_utils/startup_metric_utils.h"
14 #include "content/browser/media/android/browser_media_player_manager.h"
15 #include "content/public/browser/browser_main_runner.h"
19 content::BrowserMediaPlayerManager
* CreateRemoteMediaPlayerManager(
20 content::RenderFrameHost
* render_frame_host
,
21 content::MediaPlayersObserver
* audio_monitor
) {
22 return new remote_media::RemoteMediaPlayerManager(render_frame_host
,
28 // ChromeMainDelegateAndroid is created when the library is loaded. It is always
29 // done in the process's main Java thread. But for non browser process, e.g.
30 // renderer process, it is not the native Chrome's main thread.
31 ChromeMainDelegateAndroid::ChromeMainDelegateAndroid() {
34 ChromeMainDelegateAndroid::~ChromeMainDelegateAndroid() {
36 void ChromeMainDelegateAndroid::SandboxInitialized(
37 const std::string
& process_type
) {
38 ChromeMainDelegate::SandboxInitialized(process_type
);
41 int ChromeMainDelegateAndroid::RunProcess(
42 const std::string
& process_type
,
43 const content::MainFunctionParams
& main_function_params
) {
44 TRACE_EVENT0("startup", "ChromeMainDelegateAndroid::RunProcess")
45 if (process_type
.empty()) {
46 // Because the browser process can be started asynchronously as a series of
47 // UI thread tasks a second request to start it can come in while the
48 // first request is still being processed. Chrome must keep the same
49 // browser runner for the second request.
50 // Also only record the start time the first time round, since this is the
51 // start time of the application, and will be same for all requests.
52 if (!browser_runner_
.get()) {
53 base::Time startTime
= chrome::android::GetMainEntryPointTime();
54 startup_metric_utils::RecordSavedMainEntryPointTime(startTime
);
55 browser_runner_
.reset(content::BrowserMainRunner::Create());
57 return browser_runner_
->Initialize(main_function_params
);
60 return ChromeMainDelegate::RunProcess(process_type
, main_function_params
);
63 bool ChromeMainDelegateAndroid::BasicStartupComplete(int* exit_code
) {
64 SetChromeSpecificCommandLineFlags();
66 content::BrowserMediaPlayerManager::RegisterFactory(
67 &CreateRemoteMediaPlayerManager
);
69 return ChromeMainDelegate::BasicStartupComplete(exit_code
);