summaryrefslogtreecommitdiff
path: root/chromium/services/device/device_service.h
blob: 3b8e0293998b032134aeaadab5f82fc028756f01 (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
// 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/generic_sensor/public/interfaces/sensor_provider.mojom.h"
#include "device/screen_orientation/public/interfaces/screen_orientation.mojom.h"
#include "device/sensors/public/interfaces/motion.mojom.h"
#include "device/sensors/public/interfaces/orientation.mojom.h"
#include "device/wake_lock/public/interfaces/wake_lock_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/battery_monitor.mojom.h"
#include "services/device/public/interfaces/fingerprint.mojom.h"
#include "services/device/public/interfaces/nfc_provider.mojom.h"
#include "services/device/public/interfaces/power_monitor.mojom.h"
#include "services/device/public/interfaces/time_zone_monitor.mojom.h"
#include "services/device/public/interfaces/vibration_manager.mojom.h"
#include "services/service_manager/public/cpp/binder_registry.h"
#include "services/service_manager/public/cpp/interface_provider.h"
#include "services/service_manager/public/cpp/service.h"

#if defined(OS_ANDROID)
#include "base/android/scoped_java_ref.h"
#endif

namespace base {
class SingleThreadTaskRunner;
}

namespace device {

class PowerMonitorMessageBroadcaster;
class TimeZoneMonitor;

#if defined(OS_ANDROID)
// NOTE: See the comments on the definitions of |WakeLockContextCallback|
// and NFCDelegate.java to understand the semantics and usage of these
// parameters.
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,
    const base::android::JavaRef<jobject>& java_nfc_delegate);
#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:
#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,
                const base::android::JavaRef<jobject>& java_nfc_delegate);
#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::BindSourceInfo& source_info,
                       const std::string& interface_name,
                       mojo::ScopedMessagePipeHandle interface_pipe) override;

  void BindFingerprintRequest(
      const service_manager::BindSourceInfo& source_info,
      mojom::FingerprintRequest request);

  void BindMotionSensorRequest(
      const service_manager::BindSourceInfo& source_info,
      mojom::MotionSensorRequest request);

  void BindOrientationSensorRequest(
      const service_manager::BindSourceInfo& source_info,
      mojom::OrientationSensorRequest request);

  void BindOrientationAbsoluteSensorRequest(
      const service_manager::BindSourceInfo& source_info,
      mojom::OrientationAbsoluteSensorRequest request);

#if !defined(OS_ANDROID)
  void BindBatteryMonitorRequest(
      const service_manager::BindSourceInfo& source_info,
      mojom::BatteryMonitorRequest request);
  void BindNFCProviderRequest(
      const service_manager::BindSourceInfo& source_info,
      mojom::NFCProviderRequest request);
  void BindVibrationManagerRequest(
      const service_manager::BindSourceInfo& source_info,
      mojom::VibrationManagerRequest request);
#endif

  void BindPowerMonitorRequest(
      const service_manager::BindSourceInfo& source_info,
      mojom::PowerMonitorRequest request);

  void BindScreenOrientationListenerRequest(
      const service_manager::BindSourceInfo& source_info,
      mojom::ScreenOrientationListenerRequest request);

  void BindSensorProviderRequest(
      const service_manager::BindSourceInfo& source_info,
      mojom::SensorProviderRequest request);

  void BindTimeZoneMonitorRequest(
      const service_manager::BindSourceInfo& source_info,
      mojom::TimeZoneMonitorRequest request);

  void BindWakeLockProviderRequest(
      const service_manager::BindSourceInfo& source_info,
      mojom::WakeLockProviderRequest request);

  std::unique_ptr<PowerMonitorMessageBroadcaster>
      power_monitor_message_broadcaster_;
  std::unique_ptr<TimeZoneMonitor> time_zone_monitor_;
  scoped_refptr<base::SingleThreadTaskRunner> file_task_runner_;
  scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_;

  WakeLockContextCallback wake_lock_context_callback_;

#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_;

  base::android::ScopedJavaGlobalRef<jobject> java_nfc_delegate_;
#endif

  service_manager::BinderRegistry registry_;

  DISALLOW_COPY_AND_ASSIGN(DeviceService);
};

}  // namespace device

#endif  // SERVICES_DEVICE_DEVICE_SERVICE_H_