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