device_service.h 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  1. // Copyright 2016 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 SERVICES_DEVICE_DEVICE_SERVICE_H_
  5. #define SERVICES_DEVICE_DEVICE_SERVICE_H_
  6. #include <memory>
  7. #include <string>
  8. #include "base/callback.h"
  9. #include "base/memory/raw_ptr.h"
  10. #include "base/memory/ref_counted.h"
  11. #include "build/build_config.h"
  12. #include "build/chromeos_buildflags.h"
  13. #include "mojo/public/cpp/bindings/pending_receiver.h"
  14. #include "mojo/public/cpp/bindings/receiver_set.h"
  15. #include "services/device/geolocation/geolocation_provider.h"
  16. #include "services/device/geolocation/geolocation_provider_impl.h"
  17. #include "services/device/geolocation/public_ip_address_geolocation_provider.h"
  18. #include "services/device/public/mojom/battery_monitor.mojom.h"
  19. #include "services/device/public/mojom/device_posture_provider.mojom.h"
  20. #include "services/device/public/mojom/device_service.mojom.h"
  21. #include "services/device/public/mojom/fingerprint.mojom.h"
  22. #include "services/device/public/mojom/geolocation.mojom.h"
  23. #include "services/device/public/mojom/geolocation_config.mojom.h"
  24. #include "services/device/public/mojom/geolocation_context.mojom.h"
  25. #include "services/device/public/mojom/geolocation_control.mojom.h"
  26. #include "services/device/public/mojom/power_monitor.mojom.h"
  27. #include "services/device/public/mojom/pressure_manager.mojom.h"
  28. #include "services/device/public/mojom/screen_orientation.mojom.h"
  29. #include "services/device/public/mojom/sensor_provider.mojom.h"
  30. #include "services/device/public/mojom/serial.mojom.h"
  31. #include "services/device/public/mojom/time_zone_monitor.mojom.h"
  32. #include "services/device/public/mojom/usb_manager.mojom.h"
  33. #include "services/device/public/mojom/usb_manager_test.mojom.h"
  34. #include "services/device/public/mojom/vibration_manager.mojom.h"
  35. #include "services/device/public/mojom/wake_lock_provider.mojom.h"
  36. #include "services/device/usb/mojo/device_manager_impl.h"
  37. #include "services/device/usb/mojo/device_manager_test.h"
  38. #include "services/device/wake_lock/wake_lock_context.h"
  39. #include "services/device/wake_lock/wake_lock_provider.h"
  40. #include "services/service_manager/public/cpp/interface_provider.h"
  41. #if BUILDFLAG(IS_ANDROID)
  42. #include "base/android/scoped_java_ref.h"
  43. #include "services/device/public/mojom/nfc_provider.mojom.h"
  44. #else
  45. #include "services/device/public/mojom/hid.mojom.h"
  46. #endif
  47. #if BUILDFLAG(IS_CHROMEOS_ASH)
  48. #include "services/device/media_transfer_protocol/mtp_device_manager.h"
  49. #include "services/device/public/mojom/bluetooth_system.mojom.h"
  50. #endif
  51. #if (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)) && defined(USE_UDEV)
  52. #include "services/device/public/mojom/input_service.mojom.h"
  53. #endif
  54. namespace base {
  55. class SingleThreadTaskRunner;
  56. }
  57. namespace network {
  58. class NetworkConnectionTracker;
  59. class SharedURLLoaderFactory;
  60. } // namespace network
  61. namespace device {
  62. #if !BUILDFLAG(IS_ANDROID)
  63. class HidManagerImpl;
  64. class SerialPortManagerImpl;
  65. #endif
  66. #if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_WIN)
  67. class DevicePostureProviderImpl;
  68. #endif
  69. class DeviceService;
  70. class GeolocationManager;
  71. class PlatformSensorProvider;
  72. class PowerMonitorMessageBroadcaster;
  73. class PressureManagerImpl;
  74. class PublicIpAddressLocationNotifier;
  75. class SensorProviderImpl;
  76. class TimeZoneMonitor;
  77. // NOTE: See the comments on the definitions of PublicIpAddressLocationNotifier,
  78. // |WakeLockContextCallback|, |CustomLocationProviderCallback| and
  79. // NFCDelegate.java to understand the semantics and usage of these parameters.
  80. struct DeviceServiceParams {
  81. DeviceServiceParams();
  82. ~DeviceServiceParams();
  83. scoped_refptr<base::SingleThreadTaskRunner> file_task_runner;
  84. scoped_refptr<base::SingleThreadTaskRunner> io_task_runner;
  85. scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory;
  86. raw_ptr<network::NetworkConnectionTracker> network_connection_tracker =
  87. nullptr;
  88. std::string geolocation_api_key;
  89. CustomLocationProviderCallback custom_location_provider_callback;
  90. bool use_gms_core_location_provider = false;
  91. raw_ptr<GeolocationManager> geolocation_manager = nullptr;
  92. WakeLockContextCallback wake_lock_context_callback;
  93. #if BUILDFLAG(IS_ANDROID)
  94. base::android::ScopedJavaGlobalRef<jobject> java_nfc_delegate;
  95. #endif // BUILDFLAG(IS_ANDROID)
  96. };
  97. std::unique_ptr<DeviceService> CreateDeviceService(
  98. std::unique_ptr<DeviceServiceParams> params,
  99. mojo::PendingReceiver<mojom::DeviceService> receiver);
  100. class DeviceService : public mojom::DeviceService {
  101. public:
  102. DeviceService(std::unique_ptr<DeviceServiceParams> params,
  103. mojo::PendingReceiver<mojom::DeviceService> receiver);
  104. DeviceService(const DeviceService&) = delete;
  105. DeviceService& operator=(const DeviceService&) = delete;
  106. ~DeviceService() override;
  107. void AddReceiver(mojo::PendingReceiver<mojom::DeviceService> receiver);
  108. void SetPlatformSensorProviderForTesting(
  109. std::unique_ptr<PlatformSensorProvider> provider);
  110. // Supports global override of GeolocationContext binding within the service.
  111. using GeolocationContextBinder = base::RepeatingCallback<void(
  112. mojo::PendingReceiver<mojom::GeolocationContext>)>;
  113. static void OverrideGeolocationContextBinderForTesting(
  114. GeolocationContextBinder binder);
  115. // Supports global override of PressureManager binding within the service.
  116. using PressureManagerBinder = base::RepeatingCallback<void(
  117. mojo::PendingReceiver<mojom::PressureManager>)>;
  118. static void OverridePressureManagerBinderForTesting(
  119. PressureManagerBinder binder);
  120. #if BUILDFLAG(IS_ANDROID)
  121. // Allows tests to override how frame hosts bind NFCProvider receivers.
  122. using NFCProviderBinder = base::RepeatingCallback<void(
  123. mojo::PendingReceiver<device::mojom::NFCProvider>)>;
  124. static void OverrideNFCProviderBinderForTesting(NFCProviderBinder binder);
  125. #endif
  126. private:
  127. // mojom::DeviceService implementation:
  128. void BindFingerprint(
  129. mojo::PendingReceiver<mojom::Fingerprint> receiver) override;
  130. void BindGeolocationConfig(
  131. mojo::PendingReceiver<mojom::GeolocationConfig> receiver) override;
  132. void BindGeolocationContext(
  133. mojo::PendingReceiver<mojom::GeolocationContext> receiver) override;
  134. void BindGeolocationControl(
  135. mojo::PendingReceiver<mojom::GeolocationControl> receiver) override;
  136. #if (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)) && defined(USE_UDEV)
  137. void BindInputDeviceManager(
  138. mojo::PendingReceiver<mojom::InputDeviceManager> receiver) override;
  139. #endif
  140. void BindBatteryMonitor(
  141. mojo::PendingReceiver<mojom::BatteryMonitor> receiver) override;
  142. void BindPressureManager(
  143. mojo::PendingReceiver<mojom::PressureManager> receiver) override;
  144. #if BUILDFLAG(IS_ANDROID)
  145. void BindNFCProvider(
  146. mojo::PendingReceiver<mojom::NFCProvider> receiver) override;
  147. #endif
  148. void BindVibrationManager(
  149. mojo::PendingReceiver<mojom::VibrationManager> receiver) override;
  150. #if !BUILDFLAG(IS_ANDROID)
  151. void BindHidManager(
  152. mojo::PendingReceiver<mojom::HidManager> receiver) override;
  153. #endif
  154. #if BUILDFLAG(IS_CHROMEOS_ASH)
  155. void BindBluetoothSystemFactory(
  156. mojo::PendingReceiver<mojom::BluetoothSystemFactory> receiver) override;
  157. void BindMtpManager(
  158. mojo::PendingReceiver<mojom::MtpManager> receiver) override;
  159. #endif
  160. void BindPowerMonitor(
  161. mojo::PendingReceiver<mojom::PowerMonitor> receiver) override;
  162. void BindPublicIpAddressGeolocationProvider(
  163. mojo::PendingReceiver<mojom::PublicIpAddressGeolocationProvider> receiver)
  164. override;
  165. void BindScreenOrientationListener(
  166. mojo::PendingReceiver<mojom::ScreenOrientationListener> receiver)
  167. override;
  168. void BindSensorProvider(
  169. mojo::PendingReceiver<mojom::SensorProvider> receiver) override;
  170. #if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_WIN)
  171. void BindDevicePostureProvider(
  172. mojo::PendingReceiver<mojom::DevicePostureProvider> receiver) override;
  173. #endif
  174. void BindSerialPortManager(
  175. mojo::PendingReceiver<mojom::SerialPortManager> receiver) override;
  176. void BindTimeZoneMonitor(
  177. mojo::PendingReceiver<mojom::TimeZoneMonitor> receiver) override;
  178. void BindWakeLockProvider(
  179. mojo::PendingReceiver<mojom::WakeLockProvider> receiver) override;
  180. void BindUsbDeviceManager(
  181. mojo::PendingReceiver<mojom::UsbDeviceManager> receiver) override;
  182. void BindUsbDeviceManagerTest(
  183. mojo::PendingReceiver<mojom::UsbDeviceManagerTest> receiver) override;
  184. mojo::ReceiverSet<mojom::DeviceService> receivers_;
  185. std::unique_ptr<PressureManagerImpl> pressure_manager_;
  186. std::unique_ptr<PowerMonitorMessageBroadcaster>
  187. power_monitor_message_broadcaster_;
  188. std::unique_ptr<PublicIpAddressGeolocationProvider>
  189. public_ip_address_geolocation_provider_;
  190. std::unique_ptr<SensorProviderImpl> sensor_provider_;
  191. std::unique_ptr<TimeZoneMonitor> time_zone_monitor_;
  192. std::unique_ptr<usb::DeviceManagerImpl> usb_device_manager_;
  193. std::unique_ptr<usb::DeviceManagerTest> usb_device_manager_test_;
  194. scoped_refptr<base::SingleThreadTaskRunner> file_task_runner_;
  195. scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_;
  196. scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory_;
  197. raw_ptr<network::NetworkConnectionTracker> network_connection_tracker_;
  198. const std::string geolocation_api_key_;
  199. WakeLockContextCallback wake_lock_context_callback_;
  200. WakeLockProvider wake_lock_provider_;
  201. #if BUILDFLAG(IS_ANDROID)
  202. // Binds |java_interface_provider_| to an interface registry that exposes
  203. // factories for the interfaces that are provided via Java on Android.
  204. service_manager::InterfaceProvider* GetJavaInterfaceProvider();
  205. // InterfaceProvider that is bound to the Java-side interface registry.
  206. service_manager::InterfaceProvider java_interface_provider_{
  207. base::ThreadTaskRunnerHandle::Get()};
  208. bool java_interface_provider_initialized_ = false;
  209. base::android::ScopedJavaGlobalRef<jobject> java_nfc_delegate_;
  210. #else
  211. std::unique_ptr<HidManagerImpl> hid_manager_;
  212. #endif
  213. #if defined(IS_SERIAL_ENABLED_PLATFORM)
  214. // Requests for the SerialPortManager interface must be bound to
  215. // |serial_port_manager_| on |serial_port_manager_task_runner_| and it will
  216. // be destroyed on that sequence.
  217. std::unique_ptr<SerialPortManagerImpl> serial_port_manager_;
  218. scoped_refptr<base::SequencedTaskRunner> serial_port_manager_task_runner_;
  219. #endif // defined(IS_SERIAL_ENABLED_PLATFORM)
  220. #if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_WIN)
  221. std::unique_ptr<DevicePostureProviderImpl> device_posture_provider_;
  222. #endif
  223. #if BUILDFLAG(IS_CHROMEOS_ASH)
  224. std::unique_ptr<MtpDeviceManager> mtp_device_manager_;
  225. #endif
  226. };
  227. } // namespace device
  228. #endif // SERVICES_DEVICE_DEVICE_SERVICE_H_