1 // Copyright 2015 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 #ifndef COMPONENTS_ARC_SESSION_ARC_BRIDGE_SERVICE_H_ 6 #define COMPONENTS_ARC_SESSION_ARC_BRIDGE_SERVICE_H_ 7 8 #include "base/macros.h" 9 #include "base/observer_list.h" 10 #include "components/arc/session/connection_holder.h" 11 12 namespace arc { 13 14 namespace mojom { 15 16 // Instead of including components/arc/mojom/arc_bridge.mojom.h, list all 17 // the instance classes here for faster build. 18 class AccessibilityHelperHost; 19 class AccessibilityHelperInstance; 20 class AppHost; 21 class AppInstance; 22 class AppPermissionsInstance; 23 class AppfuseHost; 24 class AppfuseInstance; 25 class AudioHost; 26 class AudioInstance; 27 class AuthHost; 28 class AuthInstance; 29 class BackupSettingsInstance; 30 class BluetoothHost; 31 class BluetoothInstance; 32 class BootPhaseMonitorHost; 33 class BootPhaseMonitorInstance; 34 class CameraHost; 35 class CameraInstance; 36 class CastReceiverInstance; 37 class CertStoreHost; 38 class CertStoreInstance; 39 class ClipboardHost; 40 class ClipboardInstance; 41 class CrashCollectorHost; 42 class CrashCollectorInstance; 43 class DigitalGoodsInstance; 44 class DiskQuotaHost; 45 class DiskQuotaInstance; 46 class EnterpriseReportingHost; 47 class EnterpriseReportingInstance; 48 class FileSystemHost; 49 class FileSystemInstance; 50 class ImeHost; 51 class ImeInstance; 52 class InputMethodManagerHost; 53 class InputMethodManagerInstance; 54 class IntentHelperHost; 55 class IntentHelperInstance; 56 class KeymasterHost; 57 class KeymasterInstance; 58 class KioskHost; 59 class KioskInstance; 60 class LockScreenInstance; 61 class MediaSessionInstance; 62 class MetricsHost; 63 class MetricsInstance; 64 class MidisHost; 65 class MidisInstance; 66 class NetHost; 67 class NetInstance; 68 class ObbMounterHost; 69 class ObbMounterInstance; 70 class OemCryptoHost; 71 class OemCryptoInstance; 72 class PaymentAppInstance; 73 class PipHost; 74 class PipInstance; 75 class PolicyHost; 76 class PolicyInstance; 77 class PowerHost; 78 class PowerInstance; 79 class PrintSpoolerHost; 80 class PrintSpoolerInstance; 81 class ProcessInstance; 82 class PropertyInstance; 83 class RotationLockInstance; 84 class ScreenCaptureHost; 85 class ScreenCaptureInstance; 86 class SensorHost; 87 class SensorInstance; 88 class SharesheetHost; 89 class SharesheetInstance; 90 class SmartCardManagerHost; 91 class SmartCardManagerInstance; 92 class StorageManagerInstance; 93 class TimerHost; 94 class TimerInstance; 95 class TracingInstance; 96 class TtsHost; 97 class TtsInstance; 98 class UsbHostHost; 99 class UsbHostInstance; 100 class VideoHost; 101 class VideoInstance; 102 class VolumeMounterHost; 103 class VolumeMounterInstance; 104 class WakeLockHost; 105 class WakeLockInstance; 106 class WallpaperHost; 107 class WallpaperInstance; 108 109 } // namespace mojom 110 111 // Holds Mojo channels which proxy to ARC side implementation. The actual 112 // instances are set/removed via ArcBridgeHostImpl. 113 class ArcBridgeService { 114 public: 115 // Observer for those services outside of ArcBridgeService which want to know 116 // ArcBridgeService events. 117 class Observer : public base::CheckedObserver { 118 public: 119 // Called immediately before the ArcBridgeHost is closed. BeforeArcBridgeClosed()120 virtual void BeforeArcBridgeClosed() {} 121 // Called immediately after the ArcBridgeHost is closed. AfterArcBridgeClosed()122 virtual void AfterArcBridgeClosed() {} 123 124 protected: 125 ~Observer() override = default; 126 }; 127 128 ArcBridgeService(); 129 ~ArcBridgeService(); 130 131 // Adds or removes observers. 132 void AddObserver(Observer* observer); 133 void RemoveObserver(Observer* observer); 134 135 // Call these methods to invoke the corresponding methods on the observers. 136 void ObserveBeforeArcBridgeClosed(); 137 void ObserveAfterArcBridgeClosed(); 138 139 ConnectionHolder<mojom::AccessibilityHelperInstance, 140 mojom::AccessibilityHelperHost>* accessibility_helper()141 accessibility_helper() { 142 return &accessibility_helper_; 143 } app()144 ConnectionHolder<mojom::AppInstance, mojom::AppHost>* app() { return &app_; } app_permissions()145 ConnectionHolder<mojom::AppPermissionsInstance>* app_permissions() { 146 return &app_permissions_; 147 } appfuse()148 ConnectionHolder<mojom::AppfuseInstance, mojom::AppfuseHost>* appfuse() { 149 return &appfuse_; 150 } audio()151 ConnectionHolder<mojom::AudioInstance, mojom::AudioHost>* audio() { 152 return &audio_; 153 } auth()154 ConnectionHolder<mojom::AuthInstance, mojom::AuthHost>* auth() { 155 return &auth_; 156 } backup_settings()157 ConnectionHolder<mojom::BackupSettingsInstance>* backup_settings() { 158 return &backup_settings_; 159 } 160 ConnectionHolder<mojom::BluetoothInstance, mojom::BluetoothHost>* bluetooth()161 bluetooth() { 162 return &bluetooth_; 163 } 164 ConnectionHolder<mojom::BootPhaseMonitorInstance, 165 mojom::BootPhaseMonitorHost>* boot_phase_monitor()166 boot_phase_monitor() { 167 return &boot_phase_monitor_; 168 } camera()169 ConnectionHolder<mojom::CameraInstance, mojom::CameraHost>* camera() { 170 return &camera_; 171 } cast_receiver()172 ConnectionHolder<mojom::CastReceiverInstance>* cast_receiver() { 173 return &cast_receiver_; 174 } 175 ConnectionHolder<mojom::CertStoreInstance, mojom::CertStoreHost>* cert_store()176 cert_store() { 177 return &cert_store_; 178 } 179 ConnectionHolder<mojom::ClipboardInstance, mojom::ClipboardHost>* clipboard()180 clipboard() { 181 return &clipboard_; 182 } 183 ConnectionHolder<mojom::CrashCollectorInstance, mojom::CrashCollectorHost>* crash_collector()184 crash_collector() { 185 return &crash_collector_; 186 } digital_goods()187 ConnectionHolder<mojom::DigitalGoodsInstance>* digital_goods() { 188 return &digital_goods_; 189 } 190 ConnectionHolder<mojom::DiskQuotaInstance, mojom::DiskQuotaHost>* disk_quota()191 disk_quota() { 192 return &disk_quota_; 193 } 194 ConnectionHolder<mojom::EnterpriseReportingInstance, 195 mojom::EnterpriseReportingHost>* enterprise_reporting()196 enterprise_reporting() { 197 return &enterprise_reporting_; 198 } 199 ConnectionHolder<mojom::FileSystemInstance, mojom::FileSystemHost>* file_system()200 file_system() { 201 return &file_system_; 202 } ime()203 ConnectionHolder<mojom::ImeInstance, mojom::ImeHost>* ime() { return &ime_; } 204 ConnectionHolder<mojom::InputMethodManagerInstance, 205 mojom::InputMethodManagerHost>* input_method_manager()206 input_method_manager() { 207 return &input_method_manager_; 208 } 209 ConnectionHolder<mojom::IntentHelperInstance, mojom::IntentHelperHost>* intent_helper()210 intent_helper() { 211 return &intent_helper_; 212 } 213 ConnectionHolder<mojom::KeymasterInstance, mojom::KeymasterHost>* keymaster()214 keymaster() { 215 return &keymaster_; 216 } kiosk()217 ConnectionHolder<mojom::KioskInstance, mojom::KioskHost>* kiosk() { 218 return &kiosk_; 219 } lock_screen()220 ConnectionHolder<mojom::LockScreenInstance>* lock_screen() { 221 return &lock_screen_; 222 } media_session()223 ConnectionHolder<mojom::MediaSessionInstance>* media_session() { 224 return &media_session_; 225 } metrics()226 ConnectionHolder<mojom::MetricsInstance, mojom::MetricsHost>* metrics() { 227 return &metrics_; 228 } midis()229 ConnectionHolder<mojom::MidisInstance, mojom::MidisHost>* midis() { 230 return &midis_; 231 } net()232 ConnectionHolder<mojom::NetInstance, mojom::NetHost>* net() { return &net_; } 233 ConnectionHolder<mojom::ObbMounterInstance, mojom::ObbMounterHost>* obb_mounter()234 obb_mounter() { 235 return &obb_mounter_; 236 } 237 ConnectionHolder<mojom::OemCryptoInstance, mojom::OemCryptoHost>* oemcrypto()238 oemcrypto() { 239 return &oemcrypto_; 240 } payment_app()241 ConnectionHolder<mojom::PaymentAppInstance>* payment_app() { 242 return &payment_app_; 243 } pip()244 ConnectionHolder<mojom::PipInstance, mojom::PipHost>* pip() { return &pip_; } policy()245 ConnectionHolder<mojom::PolicyInstance, mojom::PolicyHost>* policy() { 246 return &policy_; 247 } power()248 ConnectionHolder<mojom::PowerInstance, mojom::PowerHost>* power() { 249 return &power_; 250 } 251 ConnectionHolder<mojom::PrintSpoolerInstance, mojom::PrintSpoolerHost>* print_spooler()252 print_spooler() { 253 return &print_spooler_; 254 } process()255 ConnectionHolder<mojom::ProcessInstance>* process() { return &process_; } property()256 ConnectionHolder<mojom::PropertyInstance>* property() { return &property_; } rotation_lock()257 ConnectionHolder<mojom::RotationLockInstance>* rotation_lock() { 258 return &rotation_lock_; 259 } 260 ConnectionHolder<mojom::ScreenCaptureInstance, mojom::ScreenCaptureHost>* screen_capture()261 screen_capture() { 262 return &screen_capture_; 263 } sensor()264 ConnectionHolder<mojom::SensorInstance, mojom::SensorHost>* sensor() { 265 return &sensor_; 266 } 267 ConnectionHolder<mojom::SharesheetInstance, mojom::SharesheetHost>* sharesheet()268 sharesheet() { 269 return &sharesheet_; 270 } 271 ConnectionHolder<mojom::SmartCardManagerInstance, 272 mojom::SmartCardManagerHost>* smart_card_manager()273 smart_card_manager() { 274 return &smart_card_manager_; 275 } 276 storage_manager()277 ConnectionHolder<mojom::StorageManagerInstance>* storage_manager() { 278 return &storage_manager_; 279 } timer()280 ConnectionHolder<mojom::TimerInstance, mojom::TimerHost>* timer() { 281 return &timer_; 282 } tracing()283 ConnectionHolder<mojom::TracingInstance>* tracing() { return &tracing_; } tts()284 ConnectionHolder<mojom::TtsInstance, mojom::TtsHost>* tts() { return &tts_; } usb_host()285 ConnectionHolder<mojom::UsbHostInstance, mojom::UsbHostHost>* usb_host() { 286 return &usb_host_; 287 } video()288 ConnectionHolder<mojom::VideoInstance, mojom::VideoHost>* video() { 289 return &video_; 290 } 291 ConnectionHolder<mojom::VolumeMounterInstance, mojom::VolumeMounterHost>* volume_mounter()292 volume_mounter() { 293 return &volume_mounter_; 294 } wake_lock()295 ConnectionHolder<mojom::WakeLockInstance, mojom::WakeLockHost>* wake_lock() { 296 return &wake_lock_; 297 } 298 ConnectionHolder<mojom::WallpaperInstance, mojom::WallpaperHost>* wallpaper()299 wallpaper() { 300 return &wallpaper_; 301 } 302 303 private: 304 base::ObserverList<Observer> observer_list_; 305 306 ConnectionHolder<mojom::AccessibilityHelperInstance, 307 mojom::AccessibilityHelperHost> 308 accessibility_helper_; 309 ConnectionHolder<mojom::AppInstance, mojom::AppHost> app_; 310 ConnectionHolder<mojom::AppPermissionsInstance> app_permissions_; 311 ConnectionHolder<mojom::AppfuseInstance, mojom::AppfuseHost> appfuse_; 312 ConnectionHolder<mojom::AudioInstance, mojom::AudioHost> audio_; 313 ConnectionHolder<mojom::AuthInstance, mojom::AuthHost> auth_; 314 ConnectionHolder<mojom::BackupSettingsInstance> backup_settings_; 315 ConnectionHolder<mojom::BluetoothInstance, mojom::BluetoothHost> bluetooth_; 316 ConnectionHolder<mojom::BootPhaseMonitorInstance, mojom::BootPhaseMonitorHost> 317 boot_phase_monitor_; 318 ConnectionHolder<mojom::CameraInstance, mojom::CameraHost> camera_; 319 ConnectionHolder<mojom::CastReceiverInstance> cast_receiver_; 320 ConnectionHolder<mojom::CertStoreInstance, mojom::CertStoreHost> cert_store_; 321 ConnectionHolder<mojom::ClipboardInstance, mojom::ClipboardHost> clipboard_; 322 ConnectionHolder<mojom::CrashCollectorInstance, mojom::CrashCollectorHost> 323 crash_collector_; 324 ConnectionHolder<mojom::DigitalGoodsInstance> digital_goods_; 325 ConnectionHolder<mojom::DiskQuotaInstance, mojom::DiskQuotaHost> disk_quota_; 326 ConnectionHolder<mojom::EnterpriseReportingInstance, 327 mojom::EnterpriseReportingHost> 328 enterprise_reporting_; 329 ConnectionHolder<mojom::FileSystemInstance, mojom::FileSystemHost> 330 file_system_; 331 ConnectionHolder<mojom::ImeInstance, mojom::ImeHost> ime_; 332 ConnectionHolder<mojom::InputMethodManagerInstance, 333 mojom::InputMethodManagerHost> 334 input_method_manager_; 335 ConnectionHolder<mojom::IntentHelperInstance, mojom::IntentHelperHost> 336 intent_helper_; 337 ConnectionHolder<mojom::KeymasterInstance, mojom::KeymasterHost> keymaster_; 338 ConnectionHolder<mojom::KioskInstance, mojom::KioskHost> kiosk_; 339 ConnectionHolder<mojom::LockScreenInstance> lock_screen_; 340 ConnectionHolder<mojom::MediaSessionInstance> media_session_; 341 ConnectionHolder<mojom::MetricsInstance, mojom::MetricsHost> metrics_; 342 ConnectionHolder<mojom::MidisInstance, mojom::MidisHost> midis_; 343 ConnectionHolder<mojom::NetInstance, mojom::NetHost> net_; 344 ConnectionHolder<mojom::ObbMounterInstance, mojom::ObbMounterHost> 345 obb_mounter_; 346 ConnectionHolder<mojom::OemCryptoInstance, mojom::OemCryptoHost> oemcrypto_; 347 ConnectionHolder<mojom::PaymentAppInstance> payment_app_; 348 ConnectionHolder<mojom::PipInstance, mojom::PipHost> pip_; 349 ConnectionHolder<mojom::PolicyInstance, mojom::PolicyHost> policy_; 350 ConnectionHolder<mojom::PowerInstance, mojom::PowerHost> power_; 351 ConnectionHolder<mojom::PrintSpoolerInstance, mojom::PrintSpoolerHost> 352 print_spooler_; 353 ConnectionHolder<mojom::ProcessInstance> process_; 354 ConnectionHolder<mojom::PropertyInstance> property_; 355 ConnectionHolder<mojom::RotationLockInstance> rotation_lock_; 356 ConnectionHolder<mojom::ScreenCaptureInstance, mojom::ScreenCaptureHost> 357 screen_capture_; 358 ConnectionHolder<mojom::SensorInstance, mojom::SensorHost> sensor_; 359 ConnectionHolder<mojom::SharesheetInstance, mojom::SharesheetHost> 360 sharesheet_; 361 ConnectionHolder<mojom::SmartCardManagerInstance, mojom::SmartCardManagerHost> 362 smart_card_manager_; 363 ConnectionHolder<mojom::StorageManagerInstance> storage_manager_; 364 ConnectionHolder<mojom::TimerInstance, mojom::TimerHost> timer_; 365 ConnectionHolder<mojom::TracingInstance> tracing_; 366 ConnectionHolder<mojom::TtsInstance, mojom::TtsHost> tts_; 367 ConnectionHolder<mojom::UsbHostInstance, mojom::UsbHostHost> usb_host_; 368 ConnectionHolder<mojom::VideoInstance, mojom::VideoHost> video_; 369 ConnectionHolder<mojom::VolumeMounterInstance, mojom::VolumeMounterHost> 370 volume_mounter_; 371 ConnectionHolder<mojom::WakeLockInstance, mojom::WakeLockHost> wake_lock_; 372 ConnectionHolder<mojom::WallpaperInstance, mojom::WallpaperHost> wallpaper_; 373 374 DISALLOW_COPY_AND_ASSIGN(ArcBridgeService); 375 }; 376 377 } // namespace arc 378 379 #endif // COMPONENTS_ARC_SESSION_ARC_BRIDGE_SERVICE_H_ 380