[email protected] | 844ac63d | 2014-07-11 02:44:29 | [diff] [blame] | 1 | // 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 | |
gunsch | f44ffcb | 2014-10-13 23:01:45 | [diff] [blame] | 5 | #ifndef CHROMECAST_BROWSER_CAST_BROWSER_MAIN_PARTS_H_ |
| 6 | #define CHROMECAST_BROWSER_CAST_BROWSER_MAIN_PARTS_H_ |
[email protected] | 844ac63d | 2014-07-11 02:44:29 | [diff] [blame] | 7 | |
dcheng | 3c3c93d5 | 2016-04-08 05:12:31 | [diff] [blame] | 8 | #include <memory> |
| 9 | |
alokp | ff847a10 | 2016-03-23 17:57:31 | [diff] [blame] | 10 | #include "base/memory/ref_counted.h" |
ziyangch | e75f9cd | 2018-08-23 18:21:30 | [diff] [blame] | 11 | #include "build/build_config.h" |
tsunghung | 38c96095 | 2017-03-16 18:23:00 | [diff] [blame] | 12 | #include "build/buildflag.h" |
Shiv Sakhuja | 45c65fd | 2021-04-29 22:32:30 | [diff] [blame] | 13 | #include "chromecast/browser/display_configurator_observer.h" |
Scott Violet | 6200d33 | 2018-02-23 21:29:23 | [diff] [blame] | 14 | #include "chromecast/chromecast_buildflags.h" |
Albert J. Wong | 23183a1 | 2021-08-13 00:23:35 | [diff] [blame] | 15 | #include "components/memory_pressure/multi_source_memory_pressure_monitor.h" |
Albert Chaulk | 3ae73b1 | 2018-01-17 18:34:34 | [diff] [blame] | 16 | #include "content/public/browser/browser_context.h" |
[email protected] | 844ac63d | 2014-07-11 02:44:29 | [diff] [blame] | 17 | #include "content/public/browser/browser_main_parts.h" |
Thoren Paulson | 63e1360 | 2019-07-11 00:38:32 | [diff] [blame] | 18 | #include "content/public/common/main_function_params.h" |
[email protected] | 844ac63d | 2014-07-11 02:44:29 | [diff] [blame] | 19 | |
ziyangch | e75f9cd | 2018-08-23 18:21:30 | [diff] [blame] | 20 | #if defined(OS_ANDROID) |
| 21 | #include "base/timer/timer.h" |
| 22 | #endif |
| 23 | |
Albert Chaulk | 3ae73b1 | 2018-01-17 18:34:34 | [diff] [blame] | 24 | class PrefService; |
| 25 | |
Albert Chaulk | 3ae73b1 | 2018-01-17 18:34:34 | [diff] [blame] | 26 | namespace extensions { |
| 27 | class ExtensionsClient; |
| 28 | class ExtensionsBrowserClient; |
| 29 | } // namespace extensions |
| 30 | |
Daniel Nicoara | 64564f7a | 2019-05-16 19:56:07 | [diff] [blame] | 31 | #if defined(USE_AURA) |
| 32 | namespace views { |
| 33 | class ViewsDelegate; |
| 34 | } // namespace views |
| 35 | #endif // defined(USE_AURA) |
| 36 | |
[email protected] | 844ac63d | 2014-07-11 02:44:29 | [diff] [blame] | 37 | namespace chromecast { |
Guohui Deng | 9e8999b | 2019-09-28 00:53:43 | [diff] [blame] | 38 | class CastSystemMemoryPressureEvaluatorAdjuster; |
Sean Topping | d23e572 | 2021-11-22 20:48:49 | [diff] [blame] | 39 | class CastWebService; |
Junbo Ke | 03a2390 | 2021-12-03 00:55:04 | [diff] [blame^] | 40 | class DisplaySettingsManager; |
Ken Rockot | 4acbabe | 2019-12-09 19:43:31 | [diff] [blame] | 41 | class ServiceConnector; |
Ken Rockot | 0acd14a | 2020-11-23 22:14:11 | [diff] [blame] | 42 | class ServiceManagerContext; |
Shawn Gallea | f12f6eb | 2018-12-04 23:08:08 | [diff] [blame] | 43 | class WaylandServerController; |
Ryan Daum | f29b2e3 | 2018-06-01 16:05:20 | [diff] [blame] | 44 | |
| 45 | #if defined(USE_AURA) |
| 46 | class CastWindowManagerAura; |
Jiaqi Han | a2d0668 | 2019-11-29 20:43:11 | [diff] [blame] | 47 | class CastScreen; |
Shawn Gallea | eb197564 | 2020-07-09 02:13:01 | [diff] [blame] | 48 | class RoundedWindowCornersManager; |
Ryan Daum | ce22b432 | 2020-02-14 19:32:05 | [diff] [blame] | 49 | namespace shell { |
| 50 | class CastUIDevTools; |
| 51 | } // namespace shell |
Ryan Daum | f29b2e3 | 2018-06-01 16:05:20 | [diff] [blame] | 52 | #else |
jlevasseur | bc99b5bd | 2017-01-23 19:01:33 | [diff] [blame] | 53 | class CastWindowManager; |
Ryan Daum | f29b2e3 | 2018-06-01 16:05:20 | [diff] [blame] | 54 | #endif // #if defined(USE_AURA) |
alokp | ff847a10 | 2016-03-23 17:57:31 | [diff] [blame] | 55 | |
Sean Topping | d23e572 | 2021-11-22 20:48:49 | [diff] [blame] | 56 | namespace external_mojo { |
| 57 | class BrokerService; |
| 58 | } // namespace external_mojo |
| 59 | |
| 60 | namespace external_service_support { |
| 61 | class ExternalConnector; |
| 62 | class ExternalService; |
| 63 | } // namespace external_service_support |
| 64 | |
alokp | ff847a10 | 2016-03-23 17:57:31 | [diff] [blame] | 65 | namespace media { |
halliwell | 9f001f2 | 2016-08-08 18:07:56 | [diff] [blame] | 66 | class MediaCapsImpl; |
tianyuwang | c7e35d8 | 2016-04-06 21:24:18 | [diff] [blame] | 67 | class MediaPipelineBackendManager; |
alokp | ff847a10 | 2016-03-23 17:57:31 | [diff] [blame] | 68 | class VideoPlaneController; |
| 69 | } // namespace media |
| 70 | |
Guohui Deng | d95df0e8 | 2021-07-20 23:29:31 | [diff] [blame] | 71 | namespace metrics { |
| 72 | class MetricsHelperImpl; |
| 73 | } // namespace metrics |
| 74 | |
[email protected] | 844ac63d | 2014-07-11 02:44:29 | [diff] [blame] | 75 | namespace shell { |
Junbo Ke | 03a2390 | 2021-12-03 00:55:04 | [diff] [blame^] | 76 | class AccessibilityServiceImpl; |
gunsch | 611228e | 2014-08-30 01:47:04 | [diff] [blame] | 77 | class CastBrowserProcess; |
Xi Han | 362d7c27 | 2018-10-05 19:27:58 | [diff] [blame] | 78 | class CastContentBrowserClient; |
[email protected] | 844ac63d | 2014-07-11 02:44:29 | [diff] [blame] | 79 | |
| 80 | class CastBrowserMainParts : public content::BrowserMainParts { |
| 81 | public: |
Luke Halliwell | c85564a | 2017-12-07 03:00:20 | [diff] [blame] | 82 | // Creates an implementation of CastBrowserMainParts. Platform should |
| 83 | // link in an implementation as needed. |
| 84 | static std::unique_ptr<CastBrowserMainParts> Create( |
Gabriel Charette | fbeeb1c | 2021-11-10 20:50:06 | [diff] [blame] | 85 | content::MainFunctionParams parameters, |
Xi Han | 362d7c27 | 2018-10-05 19:27:58 | [diff] [blame] | 86 | CastContentBrowserClient* cast_content_browser_client); |
Luke Halliwell | c85564a | 2017-12-07 03:00:20 | [diff] [blame] | 87 | |
slan | 830b0c5d | 2015-04-30 18:51:08 | [diff] [blame] | 88 | // This class does not take ownership of |url_request_content_factory|. |
Gabriel Charette | fbeeb1c | 2021-11-10 20:50:06 | [diff] [blame] | 89 | CastBrowserMainParts(content::MainFunctionParams parameters, |
Xi Han | 362d7c27 | 2018-10-05 19:27:58 | [diff] [blame] | 90 | CastContentBrowserClient* cast_content_browser_client); |
Peter Boström | 8b91a25 | 2021-09-23 21:08:59 | [diff] [blame] | 91 | |
| 92 | CastBrowserMainParts(const CastBrowserMainParts&) = delete; |
| 93 | CastBrowserMainParts& operator=(const CastBrowserMainParts&) = delete; |
| 94 | |
gunsch | 3e085e5 | 2014-12-09 18:49:18 | [diff] [blame] | 95 | ~CastBrowserMainParts() override; |
[email protected] | 844ac63d | 2014-07-11 02:44:29 | [diff] [blame] | 96 | |
tianyuwang | c7e35d8 | 2016-04-06 21:24:18 | [diff] [blame] | 97 | media::MediaPipelineBackendManager* media_pipeline_backend_manager(); |
halliwell | 9f001f2 | 2016-08-08 18:07:56 | [diff] [blame] | 98 | media::MediaCapsImpl* media_caps(); |
Guohui Deng | d95df0e8 | 2021-07-20 23:29:31 | [diff] [blame] | 99 | metrics::MetricsHelperImpl* metrics_helper(); |
Albert Chaulk | 3ae73b1 | 2018-01-17 18:34:34 | [diff] [blame] | 100 | content::BrowserContext* browser_context(); |
Sean Topping | d23e572 | 2021-11-22 20:48:49 | [diff] [blame] | 101 | external_mojo::BrokerService* broker_service(); |
| 102 | external_service_support::ExternalConnector* connector(); |
| 103 | external_service_support::ExternalConnector* media_connector(); |
Junbo Ke | 03a2390 | 2021-12-03 00:55:04 | [diff] [blame^] | 104 | AccessibilityServiceImpl* accessibility_service(); |
alokp | ff847a10 | 2016-03-23 17:57:31 | [diff] [blame] | 105 | |
[email protected] | 844ac63d | 2014-07-11 02:44:29 | [diff] [blame] | 106 | // content::BrowserMainParts implementation: |
Gabriel Charette | 09c6a96e | 2021-05-17 14:52:59 | [diff] [blame] | 107 | void PreCreateMainMessageLoop() override; |
| 108 | void PostCreateMainMessageLoop() override; |
esum | 76138f1 | 2015-11-11 23:15:13 | [diff] [blame] | 109 | void ToolkitInitialized() override; |
gunsch | 3e085e5 | 2014-12-09 18:49:18 | [diff] [blame] | 110 | int PreCreateThreads() override; |
Sean Topping | d23e572 | 2021-11-22 20:48:49 | [diff] [blame] | 111 | void PostCreateThreads() override; |
Gabriel Charette | c716bcf3 | 2021-03-16 16:25:35 | [diff] [blame] | 112 | int PreMainMessageLoopRun() override; |
| 113 | void WillRunMainMessageLoop( |
| 114 | std::unique_ptr<base::RunLoop>& run_loop) override; |
gunsch | 3e085e5 | 2014-12-09 18:49:18 | [diff] [blame] | 115 | void PostMainMessageLoopRun() override; |
alokp | ff847a10 | 2016-03-23 17:57:31 | [diff] [blame] | 116 | void PostDestroyThreads() override; |
[email protected] | 844ac63d | 2014-07-11 02:44:29 | [diff] [blame] | 117 | |
[email protected] | 844ac63d | 2014-07-11 02:44:29 | [diff] [blame] | 118 | private: |
dcheng | 3c3c93d5 | 2016-04-08 05:12:31 | [diff] [blame] | 119 | std::unique_ptr<CastBrowserProcess> cast_browser_process_; |
Gabriel Charette | fbeeb1c | 2021-11-10 20:50:06 | [diff] [blame] | 120 | content::MainFunctionParams parameters_; // For running browser tests. |
Xi Han | 362d7c27 | 2018-10-05 19:27:58 | [diff] [blame] | 121 | // Caches a pointer of the CastContentBrowserClient. |
| 122 | CastContentBrowserClient* const cast_content_browser_client_ = nullptr; |
Ken Rockot | 0acd14a | 2020-11-23 22:14:11 | [diff] [blame] | 123 | std::unique_ptr<ServiceManagerContext> service_manager_context_; |
dcheng | 3c3c93d5 | 2016-04-08 05:12:31 | [diff] [blame] | 124 | std::unique_ptr<media::VideoPlaneController> video_plane_controller_; |
halliwell | 9f001f2 | 2016-08-08 18:07:56 | [diff] [blame] | 125 | std::unique_ptr<media::MediaCapsImpl> media_caps_; |
Guohui Deng | d95df0e8 | 2021-07-20 23:29:31 | [diff] [blame] | 126 | std::unique_ptr<metrics::MetricsHelperImpl> metrics_helper_; |
Ken Rockot | 4acbabe | 2019-12-09 19:43:31 | [diff] [blame] | 127 | std::unique_ptr<ServiceConnector> service_connector_; |
Ryan Daum | f29b2e3 | 2018-06-01 16:05:20 | [diff] [blame] | 128 | |
Sean Topping | d23e572 | 2021-11-22 20:48:49 | [diff] [blame] | 129 | // 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 Daum | f29b2e3 | 2018-06-01 16:05:20 | [diff] [blame] | 137 | #if defined(USE_AURA) |
Daniel Nicoara | 64564f7a | 2019-05-16 19:56:07 | [diff] [blame] | 138 | std::unique_ptr<views::ViewsDelegate> views_delegate_; |
Jiaqi Han | a2d0668 | 2019-11-29 20:43:11 | [diff] [blame] | 139 | std::unique_ptr<CastScreen> cast_screen_; |
Ryan Daum | f29b2e3 | 2018-06-01 16:05:20 | [diff] [blame] | 140 | std::unique_ptr<CastWindowManagerAura> window_manager_; |
Shawn Gallea | eb197564 | 2020-07-09 02:13:01 | [diff] [blame] | 141 | std::unique_ptr<RoundedWindowCornersManager> rounded_window_corners_manager_; |
Shiv Sakhuja | 45c65fd | 2021-04-29 22:32:30 | [diff] [blame] | 142 | std::unique_ptr<DisplayConfiguratorObserver> display_change_observer_; |
Ryan Daum | f29b2e3 | 2018-06-01 16:05:20 | [diff] [blame] | 143 | #else |
jlevasseur | bc99b5bd | 2017-01-23 19:01:33 | [diff] [blame] | 144 | std::unique_ptr<CastWindowManager> window_manager_; |
Ryan Daum | f29b2e3 | 2018-06-01 16:05:20 | [diff] [blame] | 145 | #endif // defined(USE_AURA) |
Sean Topping | d23e572 | 2021-11-22 20:48:49 | [diff] [blame] | 146 | std::unique_ptr<CastWebService> web_service_; |
Junbo Ke | 03a2390 | 2021-12-03 00:55:04 | [diff] [blame^] | 147 | std::unique_ptr<DisplaySettingsManager> display_settings_manager_; |
| 148 | std::unique_ptr<AccessibilityServiceImpl> accessibility_service_; |
Ryan Daum | f29b2e3 | 2018-06-01 16:05:20 | [diff] [blame] | 149 | |
ziyangch | e75f9cd | 2018-08-23 18:21:30 | [diff] [blame] | 150 | #if defined(OS_ANDROID) |
| 151 | void StartPeriodicCrashReportUpload(); |
| 152 | void OnStartPeriodicCrashReportUpload(); |
Alex Leung | 6e4445d1d | 2018-09-06 19:24:14 | [diff] [blame] | 153 | scoped_refptr<base::SequencedTaskRunner> crash_reporter_runner_; |
ziyangch | e75f9cd | 2018-08-23 18:21:30 | [diff] [blame] | 154 | std::unique_ptr<base::RepeatingTimer> crash_reporter_timer_; |
| 155 | #endif |
| 156 | |
tianyuwang | c7e35d8 | 2016-04-06 21:24:18 | [diff] [blame] | 157 | // Tracks all media pipeline backends. |
dcheng | 3c3c93d5 | 2016-04-08 05:12:31 | [diff] [blame] | 158 | std::unique_ptr<media::MediaPipelineBackendManager> |
tianyuwang | c7e35d8 | 2016-04-06 21:24:18 | [diff] [blame] | 159 | media_pipeline_backend_manager_; |
Simeon Anfinrud | 08677dd | 2019-06-30 23:30:47 | [diff] [blame] | 160 | #if !defined(OS_ANDROID) && !defined(OS_FUCHSIA) |
Albert J. Wong | 23183a1 | 2021-08-13 00:23:35 | [diff] [blame] | 161 | std::unique_ptr<memory_pressure::MultiSourceMemoryPressureMonitor> |
Ryan Powell | 00e61aea4 | 2019-09-04 18:33:44 | [diff] [blame] | 162 | memory_pressure_monitor_; |
Simeon Anfinrud | 08677dd | 2019-06-30 23:30:47 | [diff] [blame] | 163 | #endif // !defined(OS_ANDROID) && !defined(OS_FUCHSIA) |
Guohui Deng | 9e8999b | 2019-09-28 00:53:43 | [diff] [blame] | 164 | CastSystemMemoryPressureEvaluatorAdjuster* |
| 165 | cast_system_memory_pressure_evaluator_adjuster_; |
halliwell | b862bc4a | 2016-03-24 18:26:58 | [diff] [blame] | 166 | |
Albert Chaulk | 3ae73b1 | 2018-01-17 18:34:34 | [diff] [blame] | 167 | #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 McAllister | 992119a | 2020-08-14 22:55:41 | [diff] [blame] | 175 | #if (defined(OS_LINUX) || defined(OS_CHROMEOS)) && defined(USE_OZONE) |
Shawn Gallea | f12f6eb | 2018-12-04 23:08:08 | [diff] [blame] | 176 | std::unique_ptr<WaylandServerController> wayland_server_controller_; |
| 177 | #endif |
| 178 | |
Ryan Daum | ce22b432 | 2020-02-14 19:32:05 | [diff] [blame] | 179 | #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] | 844ac63d | 2014-07-11 02:44:29 | [diff] [blame] | 183 | }; |
| 184 | |
| 185 | } // namespace shell |
| 186 | } // namespace chromecast |
| 187 | |
gunsch | f44ffcb | 2014-10-13 23:01:45 | [diff] [blame] | 188 | #endif // CHROMECAST_BROWSER_CAST_BROWSER_MAIN_PARTS_H_ |