cast_browser_main_parts.h 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  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. #ifndef CHROMECAST_BROWSER_CAST_BROWSER_MAIN_PARTS_H_
  5. #define CHROMECAST_BROWSER_CAST_BROWSER_MAIN_PARTS_H_
  6. #include <memory>
  7. #include "base/memory/ref_counted.h"
  8. #include "base/memory/weak_ptr.h"
  9. #include "build/build_config.h"
  10. #include "build/buildflag.h"
  11. #include "chromecast/browser/display_configurator_observer.h"
  12. #include "chromecast/chromecast_buildflags.h"
  13. #include "content/public/browser/browser_context.h"
  14. #include "content/public/browser/browser_main_parts.h"
  15. #if BUILDFLAG(IS_ANDROID)
  16. #include "base/timer/timer.h"
  17. #endif
  18. class PrefService;
  19. #if BUILDFLAG(IS_ANDROID)
  20. namespace crash_reporter {
  21. class ChildExitObserver;
  22. } // namespace crash_reporter
  23. #endif // BUILDFLAG(IS_ANDROID)
  24. #if defined(USE_AURA)
  25. namespace views {
  26. class ViewsDelegate;
  27. } // namespace views
  28. #endif // defined(USE_AURA)
  29. namespace chromecast {
  30. class CastFeatureUpdateObserver;
  31. class CastWebService;
  32. class DisplaySettingsManager;
  33. class ServiceConnector;
  34. class ServiceManagerContext;
  35. #if defined(USE_AURA)
  36. class CastWindowManagerAura;
  37. class CastScreen;
  38. namespace shell {
  39. class CastUIDevTools;
  40. } // namespace shell
  41. #else
  42. class CastWindowManager;
  43. #endif // #if defined(USE_AURA)
  44. namespace external_mojo {
  45. class BrokerService;
  46. } // namespace external_mojo
  47. namespace external_service_support {
  48. class ExternalConnector;
  49. class ExternalService;
  50. } // namespace external_service_support
  51. namespace media {
  52. class MediaCapsImpl;
  53. class MediaPipelineBackendManager;
  54. class VideoPlaneController;
  55. } // namespace media
  56. namespace metrics {
  57. class MetricsHelperImpl;
  58. } // namespace metrics
  59. namespace shell {
  60. class CastBrowserProcess;
  61. class CastContentBrowserClient;
  62. class CastBrowserMainParts : public content::BrowserMainParts {
  63. public:
  64. // Creates an implementation of CastBrowserMainParts. Platform should
  65. // link in an implementation as needed.
  66. static std::unique_ptr<CastBrowserMainParts> Create(
  67. CastContentBrowserClient* cast_content_browser_client);
  68. // This class does not take ownership of |url_request_content_factory|.
  69. explicit CastBrowserMainParts(
  70. CastContentBrowserClient* cast_content_browser_client);
  71. CastBrowserMainParts(const CastBrowserMainParts&) = delete;
  72. CastBrowserMainParts& operator=(const CastBrowserMainParts&) = delete;
  73. ~CastBrowserMainParts() override;
  74. media::MediaPipelineBackendManager* media_pipeline_backend_manager();
  75. media::MediaCapsImpl* media_caps();
  76. metrics::MetricsHelperImpl* metrics_helper();
  77. content::BrowserContext* browser_context();
  78. external_mojo::BrokerService* broker_service();
  79. external_service_support::ExternalConnector* connector();
  80. external_service_support::ExternalConnector* media_connector();
  81. CastWebService* web_service();
  82. // content::BrowserMainParts implementation:
  83. void PreCreateMainMessageLoop() override;
  84. void PostCreateMainMessageLoop() override;
  85. void ToolkitInitialized() override;
  86. int PreCreateThreads() override;
  87. void PostCreateThreads() override;
  88. int PreMainMessageLoopRun() override;
  89. void WillRunMainMessageLoop(
  90. std::unique_ptr<base::RunLoop>& run_loop) override;
  91. void PostMainMessageLoopRun() override;
  92. void PostDestroyThreads() override;
  93. private:
  94. std::unique_ptr<CastBrowserProcess> cast_browser_process_;
  95. // Caches a pointer of the CastContentBrowserClient.
  96. CastContentBrowserClient* const cast_content_browser_client_ = nullptr;
  97. std::unique_ptr<ServiceManagerContext> service_manager_context_;
  98. std::unique_ptr<media::VideoPlaneController> video_plane_controller_;
  99. std::unique_ptr<media::MediaCapsImpl> media_caps_;
  100. std::unique_ptr<metrics::MetricsHelperImpl> metrics_helper_;
  101. std::unique_ptr<ServiceConnector> service_connector_;
  102. // Created in CastBrowserMainParts::PostCreateThreads():
  103. std::unique_ptr<external_mojo::BrokerService> broker_service_;
  104. std::unique_ptr<external_service_support::ExternalService> browser_service_;
  105. // ExternalConnectors should be destroyed before registered services.
  106. std::unique_ptr<external_service_support::ExternalConnector> connector_;
  107. // ExternalConnector for running on the media task runner.
  108. std::unique_ptr<external_service_support::ExternalConnector> media_connector_;
  109. #if defined(USE_AURA)
  110. std::unique_ptr<views::ViewsDelegate> views_delegate_;
  111. std::unique_ptr<CastScreen> cast_screen_;
  112. std::unique_ptr<CastWindowManagerAura> window_manager_;
  113. std::unique_ptr<DisplayConfiguratorObserver> display_change_observer_;
  114. #else
  115. std::unique_ptr<CastWindowManager> window_manager_;
  116. #endif // defined(USE_AURA)
  117. std::unique_ptr<CastWebService> web_service_;
  118. std::unique_ptr<DisplaySettingsManager> display_settings_manager_;
  119. #if BUILDFLAG(IS_ANDROID)
  120. void StartPeriodicCrashReportUpload();
  121. void OnStartPeriodicCrashReportUpload();
  122. void UploadCrashReport(bool opt_in_stats);
  123. scoped_refptr<base::SequencedTaskRunner> crash_reporter_runner_;
  124. std::unique_ptr<base::RepeatingTimer> crash_reporter_timer_;
  125. std::unique_ptr<crash_reporter::ChildExitObserver> child_exit_observer_;
  126. #endif
  127. // Tracks all media pipeline backends.
  128. std::unique_ptr<media::MediaPipelineBackendManager>
  129. media_pipeline_backend_manager_;
  130. std::unique_ptr<CastFeatureUpdateObserver> feature_update_observer_;
  131. #if defined(USE_AURA) && !BUILDFLAG(IS_FUCHSIA)
  132. // Only used when running with --enable-ui-devtools.
  133. std::unique_ptr<CastUIDevTools> ui_devtools_;
  134. #endif // defined(USE_AURA) && !BUILDFLAG(IS_FUCHSIA)
  135. base::WeakPtrFactory<CastBrowserMainParts> weak_factory_{this};
  136. };
  137. } // namespace shell
  138. } // namespace chromecast
  139. #endif // CHROMECAST_BROWSER_CAST_BROWSER_MAIN_PARTS_H_