blob: b32d0138207e5cc12c7a5379641d48fcb9bf85d5 [file] [log] [blame]
[email protected]844ac63d2014-07-11 02:44:291// Copyright 2014 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
gunschf44ffcb2014-10-13 23:01:455#ifndef CHROMECAST_BROWSER_CAST_BROWSER_MAIN_PARTS_H_
6#define CHROMECAST_BROWSER_CAST_BROWSER_MAIN_PARTS_H_
[email protected]844ac63d2014-07-11 02:44:297
dcheng3c3c93d52016-04-08 05:12:318#include <memory>
9
alokpff847a102016-03-23 17:57:3110#include "base/memory/ref_counted.h"
ziyangche75f9cd2018-08-23 18:21:3011#include "build/build_config.h"
tsunghung38c960952017-03-16 18:23:0012#include "build/buildflag.h"
Shiv Sakhuja45c65fd2021-04-29 22:32:3013#include "chromecast/browser/display_configurator_observer.h"
Scott Violet6200d332018-02-23 21:29:2314#include "chromecast/chromecast_buildflags.h"
Albert J. Wong23183a12021-08-13 00:23:3515#include "components/memory_pressure/multi_source_memory_pressure_monitor.h"
Albert Chaulk3ae73b12018-01-17 18:34:3416#include "content/public/browser/browser_context.h"
[email protected]844ac63d2014-07-11 02:44:2917#include "content/public/browser/browser_main_parts.h"
Thoren Paulson63e13602019-07-11 00:38:3218#include "content/public/common/main_function_params.h"
[email protected]844ac63d2014-07-11 02:44:2919
ziyangche75f9cd2018-08-23 18:21:3020#if defined(OS_ANDROID)
21#include "base/timer/timer.h"
22#endif
23
Albert Chaulk3ae73b12018-01-17 18:34:3424class PrefService;
25
Albert Chaulk3ae73b12018-01-17 18:34:3426namespace extensions {
27class ExtensionsClient;
28class ExtensionsBrowserClient;
29} // namespace extensions
30
Daniel Nicoara64564f7a2019-05-16 19:56:0731#if defined(USE_AURA)
32namespace views {
33class ViewsDelegate;
34} // namespace views
35#endif // defined(USE_AURA)
36
[email protected]844ac63d2014-07-11 02:44:2937namespace chromecast {
Guohui Deng9e8999b2019-09-28 00:53:4338class CastSystemMemoryPressureEvaluatorAdjuster;
Sean Toppingd23e5722021-11-22 20:48:4939class CastWebService;
Junbo Ke03a23902021-12-03 00:55:0440class DisplaySettingsManager;
Ken Rockot4acbabe2019-12-09 19:43:3141class ServiceConnector;
Ken Rockot0acd14a2020-11-23 22:14:1142class ServiceManagerContext;
Shawn Galleaf12f6eb2018-12-04 23:08:0843class WaylandServerController;
Ryan Daumf29b2e32018-06-01 16:05:2044
45#if defined(USE_AURA)
46class CastWindowManagerAura;
Jiaqi Hana2d06682019-11-29 20:43:1147class CastScreen;
Shawn Galleaeb1975642020-07-09 02:13:0148class RoundedWindowCornersManager;
Ryan Daumce22b4322020-02-14 19:32:0549namespace shell {
50class CastUIDevTools;
51} // namespace shell
Ryan Daumf29b2e32018-06-01 16:05:2052#else
jlevasseurbc99b5bd2017-01-23 19:01:3353class CastWindowManager;
Ryan Daumf29b2e32018-06-01 16:05:2054#endif // #if defined(USE_AURA)
alokpff847a102016-03-23 17:57:3155
Sean Toppingd23e5722021-11-22 20:48:4956namespace external_mojo {
57class BrokerService;
58} // namespace external_mojo
59
60namespace external_service_support {
61class ExternalConnector;
62class ExternalService;
63} // namespace external_service_support
64
alokpff847a102016-03-23 17:57:3165namespace media {
halliwell9f001f22016-08-08 18:07:5666class MediaCapsImpl;
tianyuwangc7e35d82016-04-06 21:24:1867class MediaPipelineBackendManager;
alokpff847a102016-03-23 17:57:3168class VideoPlaneController;
69} // namespace media
70
Guohui Dengd95df0e82021-07-20 23:29:3171namespace metrics {
72class MetricsHelperImpl;
73} // namespace metrics
74
[email protected]844ac63d2014-07-11 02:44:2975namespace shell {
Junbo Ke03a23902021-12-03 00:55:0476class AccessibilityServiceImpl;
gunsch611228e2014-08-30 01:47:0477class CastBrowserProcess;
Xi Han362d7c272018-10-05 19:27:5878class CastContentBrowserClient;
[email protected]844ac63d2014-07-11 02:44:2979
80class CastBrowserMainParts : public content::BrowserMainParts {
81 public:
Luke Halliwellc85564a2017-12-07 03:00:2082 // Creates an implementation of CastBrowserMainParts. Platform should
83 // link in an implementation as needed.
84 static std::unique_ptr<CastBrowserMainParts> Create(
Gabriel Charettefbeeb1c2021-11-10 20:50:0685 content::MainFunctionParams parameters,
Xi Han362d7c272018-10-05 19:27:5886 CastContentBrowserClient* cast_content_browser_client);
Luke Halliwellc85564a2017-12-07 03:00:2087
slan830b0c5d2015-04-30 18:51:0888 // This class does not take ownership of |url_request_content_factory|.
Gabriel Charettefbeeb1c2021-11-10 20:50:0689 CastBrowserMainParts(content::MainFunctionParams parameters,
Xi Han362d7c272018-10-05 19:27:5890 CastContentBrowserClient* cast_content_browser_client);
Peter Boström8b91a252021-09-23 21:08:5991
92 CastBrowserMainParts(const CastBrowserMainParts&) = delete;
93 CastBrowserMainParts& operator=(const CastBrowserMainParts&) = delete;
94
gunsch3e085e52014-12-09 18:49:1895 ~CastBrowserMainParts() override;
[email protected]844ac63d2014-07-11 02:44:2996
tianyuwangc7e35d82016-04-06 21:24:1897 media::MediaPipelineBackendManager* media_pipeline_backend_manager();
halliwell9f001f22016-08-08 18:07:5698 media::MediaCapsImpl* media_caps();
Guohui Dengd95df0e82021-07-20 23:29:3199 metrics::MetricsHelperImpl* metrics_helper();
Albert Chaulk3ae73b12018-01-17 18:34:34100 content::BrowserContext* browser_context();
Sean Toppingd23e5722021-11-22 20:48:49101 external_mojo::BrokerService* broker_service();
102 external_service_support::ExternalConnector* connector();
103 external_service_support::ExternalConnector* media_connector();
Junbo Ke03a23902021-12-03 00:55:04104 AccessibilityServiceImpl* accessibility_service();
alokpff847a102016-03-23 17:57:31105
[email protected]844ac63d2014-07-11 02:44:29106 // content::BrowserMainParts implementation:
Gabriel Charette09c6a96e2021-05-17 14:52:59107 void PreCreateMainMessageLoop() override;
108 void PostCreateMainMessageLoop() override;
esum76138f12015-11-11 23:15:13109 void ToolkitInitialized() override;
gunsch3e085e52014-12-09 18:49:18110 int PreCreateThreads() override;
Sean Toppingd23e5722021-11-22 20:48:49111 void PostCreateThreads() override;
Gabriel Charettec716bcf32021-03-16 16:25:35112 int PreMainMessageLoopRun() override;
113 void WillRunMainMessageLoop(
114 std::unique_ptr<base::RunLoop>& run_loop) override;
gunsch3e085e52014-12-09 18:49:18115 void PostMainMessageLoopRun() override;
alokpff847a102016-03-23 17:57:31116 void PostDestroyThreads() override;
[email protected]844ac63d2014-07-11 02:44:29117
[email protected]844ac63d2014-07-11 02:44:29118 private:
dcheng3c3c93d52016-04-08 05:12:31119 std::unique_ptr<CastBrowserProcess> cast_browser_process_;
Gabriel Charettefbeeb1c2021-11-10 20:50:06120 content::MainFunctionParams parameters_; // For running browser tests.
Xi Han362d7c272018-10-05 19:27:58121 // Caches a pointer of the CastContentBrowserClient.
122 CastContentBrowserClient* const cast_content_browser_client_ = nullptr;
Ken Rockot0acd14a2020-11-23 22:14:11123 std::unique_ptr<ServiceManagerContext> service_manager_context_;
dcheng3c3c93d52016-04-08 05:12:31124 std::unique_ptr<media::VideoPlaneController> video_plane_controller_;
halliwell9f001f22016-08-08 18:07:56125 std::unique_ptr<media::MediaCapsImpl> media_caps_;
Guohui Dengd95df0e82021-07-20 23:29:31126 std::unique_ptr<metrics::MetricsHelperImpl> metrics_helper_;
Ken Rockot4acbabe2019-12-09 19:43:31127 std::unique_ptr<ServiceConnector> service_connector_;
Ryan Daumf29b2e32018-06-01 16:05:20128
Sean Toppingd23e5722021-11-22 20:48:49129 // Created in CastBrowserMainParts::PostCreateThreads():
130 std::unique_ptr<external_mojo::BrokerService> broker_service_;
131 std::unique_ptr<external_service_support::ExternalService> browser_service_;
132 // ExternalConnectors should be destroyed before registered services.
133 std::unique_ptr<external_service_support::ExternalConnector> connector_;
134 // ExternalConnector for running on the media task runner.
135 std::unique_ptr<external_service_support::ExternalConnector> media_connector_;
136
Ryan Daumf29b2e32018-06-01 16:05:20137#if defined(USE_AURA)
Daniel Nicoara64564f7a2019-05-16 19:56:07138 std::unique_ptr<views::ViewsDelegate> views_delegate_;
Jiaqi Hana2d06682019-11-29 20:43:11139 std::unique_ptr<CastScreen> cast_screen_;
Ryan Daumf29b2e32018-06-01 16:05:20140 std::unique_ptr<CastWindowManagerAura> window_manager_;
Shawn Galleaeb1975642020-07-09 02:13:01141 std::unique_ptr<RoundedWindowCornersManager> rounded_window_corners_manager_;
Shiv Sakhuja45c65fd2021-04-29 22:32:30142 std::unique_ptr<DisplayConfiguratorObserver> display_change_observer_;
Ryan Daumf29b2e32018-06-01 16:05:20143#else
jlevasseurbc99b5bd2017-01-23 19:01:33144 std::unique_ptr<CastWindowManager> window_manager_;
Ryan Daumf29b2e32018-06-01 16:05:20145#endif // defined(USE_AURA)
Sean Toppingd23e5722021-11-22 20:48:49146 std::unique_ptr<CastWebService> web_service_;
Junbo Ke03a23902021-12-03 00:55:04147 std::unique_ptr<DisplaySettingsManager> display_settings_manager_;
148 std::unique_ptr<AccessibilityServiceImpl> accessibility_service_;
Ryan Daumf29b2e32018-06-01 16:05:20149
ziyangche75f9cd2018-08-23 18:21:30150#if defined(OS_ANDROID)
151 void StartPeriodicCrashReportUpload();
152 void OnStartPeriodicCrashReportUpload();
Alex Leung6e4445d1d2018-09-06 19:24:14153 scoped_refptr<base::SequencedTaskRunner> crash_reporter_runner_;
ziyangche75f9cd2018-08-23 18:21:30154 std::unique_ptr<base::RepeatingTimer> crash_reporter_timer_;
155#endif
156
tianyuwangc7e35d82016-04-06 21:24:18157 // Tracks all media pipeline backends.
dcheng3c3c93d52016-04-08 05:12:31158 std::unique_ptr<media::MediaPipelineBackendManager>
tianyuwangc7e35d82016-04-06 21:24:18159 media_pipeline_backend_manager_;
Simeon Anfinrud08677dd2019-06-30 23:30:47160#if !defined(OS_ANDROID) && !defined(OS_FUCHSIA)
Albert J. Wong23183a12021-08-13 00:23:35161 std::unique_ptr<memory_pressure::MultiSourceMemoryPressureMonitor>
Ryan Powell00e61aea42019-09-04 18:33:44162 memory_pressure_monitor_;
Simeon Anfinrud08677dd2019-06-30 23:30:47163#endif // !defined(OS_ANDROID) && !defined(OS_FUCHSIA)
Guohui Deng9e8999b2019-09-28 00:53:43164 CastSystemMemoryPressureEvaluatorAdjuster*
165 cast_system_memory_pressure_evaluator_adjuster_;
halliwellb862bc4a2016-03-24 18:26:58166
Albert Chaulk3ae73b12018-01-17 18:34:34167#if BUILDFLAG(ENABLE_CHROMECAST_EXTENSIONS)
168 std::unique_ptr<extensions::ExtensionsClient> extensions_client_;
169 std::unique_ptr<extensions::ExtensionsBrowserClient>
170 extensions_browser_client_;
171 std::unique_ptr<PrefService> local_state_;
172 std::unique_ptr<PrefService> user_pref_service_;
173#endif
174
Sean McAllister992119a2020-08-14 22:55:41175#if (defined(OS_LINUX) || defined(OS_CHROMEOS)) && defined(USE_OZONE)
Shawn Galleaf12f6eb2018-12-04 23:08:08176 std::unique_ptr<WaylandServerController> wayland_server_controller_;
177#endif
178
Ryan Daumce22b4322020-02-14 19:32:05179#if defined(USE_AURA) && !defined(OS_FUCHSIA)
180 // Only used when running with --enable-ui-devtools.
181 std::unique_ptr<CastUIDevTools> ui_devtools_;
182#endif // defined(USE_AURA) && !defined(OS_FUCHSIA)
[email protected]844ac63d2014-07-11 02:44:29183};
184
185} // namespace shell
186} // namespace chromecast
187
gunschf44ffcb2014-10-13 23:01:45188#endif // CHROMECAST_BROWSER_CAST_BROWSER_MAIN_PARTS_H_