summaryrefslogtreecommitdiff
path: root/chromium/services/device/device_service.h
blob: cd38c23600321e04beb869169ec5dd46547dca17 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef SERVICES_DEVICE_DEVICE_SERVICE_H_
#define SERVICES_DEVICE_DEVICE_SERVICE_H_

#include "base/memory/ref_counted.h"
#include "device/battery/battery_monitor.mojom.h"
#include "device/generic_sensor/public/interfaces/sensor_provider.mojom.h"
#include "device/screen_orientation/public/interfaces/screen_orientation.mojom.h"
#include "device/sensors/public/interfaces/light.mojom.h"
#include "device/sensors/public/interfaces/motion.mojom.h"
#include "device/sensors/public/interfaces/orientation.mojom.h"
#include "device/vibration/vibration_manager.mojom.h"
#include "device/wake_lock/public/interfaces/wake_lock_context_provider.mojom.h"
#include "device/wake_lock/wake_lock_service_context.h"
#include "mojo/public/cpp/bindings/binding_set.h"
#include "services/device/public/interfaces/fingerprint.mojom.h"
#include "services/device/public/interfaces/power_monitor.mojom.h"
#include "services/device/public/interfaces/time_zone_monitor.mojom.h"
#include "services/service_manager/public/cpp/binder_registry.h"
#include "services/service_manager/public/cpp/interface_factory.h"
#include "services/service_manager/public/cpp/interface_provider.h"
#include "services/service_manager/public/cpp/service.h"

namespace base {
class SingleThreadTaskRunner;
}

namespace device {

class PowerMonitorMessageBroadcaster;
class TimeZoneMonitor;

#if defined(OS_ANDROID)
std::unique_ptr<service_manager::Service> CreateDeviceService(
    scoped_refptr<base::SingleThreadTaskRunner> file_task_runner,
    scoped_refptr<base::SingleThreadTaskRunner> io_task_runner,
    const WakeLockContextCallback& wake_lock_context_callback);
#else
std::unique_ptr<service_manager::Service> CreateDeviceService(
    scoped_refptr<base::SingleThreadTaskRunner> file_task_runner,
    scoped_refptr<base::SingleThreadTaskRunner> io_task_runner);
#endif

class DeviceService
    : public service_manager::Service,
      public service_manager::InterfaceFactory<mojom::Fingerprint>,
      public service_manager::InterfaceFactory<mojom::LightSensor>,
      public service_manager::InterfaceFactory<mojom::MotionSensor>,
      public service_manager::InterfaceFactory<mojom::OrientationSensor>,
      public service_manager::InterfaceFactory<
          mojom::OrientationAbsoluteSensor>,
#if !defined(OS_ANDROID)
      // On Android the Device Service provides BatteryMonitor via Java.
      public service_manager::InterfaceFactory<mojom::BatteryMonitor>,
      // On Android the Device Service provides VibrationManager via Java.
      public service_manager::InterfaceFactory<mojom::VibrationManager>,
#endif
      public service_manager::InterfaceFactory<mojom::PowerMonitor>,
      public service_manager::InterfaceFactory<
          mojom::ScreenOrientationListener>,
      public service_manager::InterfaceFactory<mojom::SensorProvider>,
      public service_manager::InterfaceFactory<mojom::TimeZoneMonitor>,
      public service_manager::InterfaceFactory<mojom::WakeLockContextProvider> {
 public:
#if defined(OS_ANDROID)
  DeviceService(scoped_refptr<base::SingleThreadTaskRunner> file_task_runner,
                scoped_refptr<base::SingleThreadTaskRunner> io_task_runner,
                const WakeLockContextCallback& wake_lock_context_callback);
#else
  DeviceService(scoped_refptr<base::SingleThreadTaskRunner> file_task_runner,
                scoped_refptr<base::SingleThreadTaskRunner> io_task_runner);
#endif
  ~DeviceService() override;

 private:
  // service_manager::Service:
  void OnStart() override;
  void OnBindInterface(const service_manager::ServiceInfo& source_info,
                       const std::string& interface_name,
                       mojo::ScopedMessagePipeHandle interface_pipe) override;

  // InterfaceFactory<mojom::Fingerprint>:
  void Create(const service_manager::Identity& remote_identity,
              mojom::FingerprintRequest request) override;

  // InterfaceFactory<mojom::LightSensor>:
  void Create(const service_manager::Identity& remote_identity,
              mojom::LightSensorRequest request) override;

  // InterfaceFactory<mojom::MotionSensor>:
  void Create(const service_manager::Identity& remote_identity,
              mojom::MotionSensorRequest request) override;

  // InterfaceFactory<mojom::OrientationSensor>:
  void Create(const service_manager::Identity& remote_identity,
              mojom::OrientationSensorRequest request) override;

  // InterfaceFactory<mojom::OrientationAbsolueSensor>:
  void Create(const service_manager::Identity& remote_identity,
              mojom::OrientationAbsoluteSensorRequest request) override;

#if !defined(OS_ANDROID)
  // InterfaceFactory<mojom::BatteryMonitor>:
  void Create(const service_manager::Identity& remote_identity,
              mojom::BatteryMonitorRequest request) override;
  // InterfaceFactory<mojom::VibrationManager>:
  void Create(const service_manager::Identity& remote_identity,
              mojom::VibrationManagerRequest request) override;
#endif

  // InterfaceFactory<mojom::PowerMonitor>:
  void Create(const service_manager::Identity& remote_identity,
              mojom::PowerMonitorRequest request) override;

  // InterfaceFactory<mojom::ScreenOrientationListener>:
  void Create(const service_manager::Identity& remote_identity,
              mojom::ScreenOrientationListenerRequest request) override;

  // InterfaceFactory<mojom::SensorProvider>:
  void Create(const service_manager::Identity& remote_identity,
              mojom::SensorProviderRequest request) override;

  // InterfaceFactory<mojom::TimeZoneMonitor>:
  void Create(const service_manager::Identity& remote_identity,
              mojom::TimeZoneMonitorRequest request) override;

  // InterfaceFactory<mojom::WakeLockContextProvider>:
  void Create(const service_manager::Identity& remote_identity,
              mojom::WakeLockContextProviderRequest request) override;

  std::unique_ptr<PowerMonitorMessageBroadcaster>
      power_monitor_message_broadcaster_;
  std::unique_ptr<TimeZoneMonitor> time_zone_monitor_;
#if defined(OS_ANDROID)
  // Binds |java_interface_provider_| to an interface registry that exposes
  // factories for the interfaces that are provided via Java on Android.
  service_manager::InterfaceProvider* GetJavaInterfaceProvider();

  // InterfaceProvider that is bound to the Java-side interface registry.
  service_manager::InterfaceProvider java_interface_provider_;

  bool java_interface_provider_initialized_;
#endif

  scoped_refptr<base::SingleThreadTaskRunner> file_task_runner_;
  scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_;

  WakeLockContextCallback wake_lock_context_callback_;

  service_manager::BinderRegistry registry_;

  DISALLOW_COPY_AND_ASSIGN(DeviceService);
};

}  // namespace device

#endif  // SERVICES_DEVICE_DEVICE_SERVICE_H_