Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(276)

Side by Side Diff: services/device/device_service.cc

Issue 2865653002: [Device Service] Decouple NFC implementation from //content (Closed)
Patch Set: Response to reviews Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "services/device/device_service.h" 5 #include "services/device/device_service.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/feature_list.h" 10 #include "base/feature_list.h"
11 #include "base/memory/ptr_util.h" 11 #include "base/memory/ptr_util.h"
12 #include "base/memory/weak_ptr.h" 12 #include "base/memory/weak_ptr.h"
13 #include "base/single_thread_task_runner.h" 13 #include "base/single_thread_task_runner.h"
14 #include "base/threading/thread_task_runner_handle.h" 14 #include "base/threading/thread_task_runner_handle.h"
15 #include "device/generic_sensor/sensor_provider_impl.h" 15 #include "device/generic_sensor/sensor_provider_impl.h"
16 #include "device/sensors/device_sensor_host.h" 16 #include "device/sensors/device_sensor_host.h"
17 #include "device/wake_lock/wake_lock_context_provider.h" 17 #include "device/wake_lock/wake_lock_context_provider.h"
18 #include "mojo/public/cpp/system/message_pipe.h" 18 #include "mojo/public/cpp/system/message_pipe.h"
19 #include "services/device/fingerprint/fingerprint.h" 19 #include "services/device/fingerprint/fingerprint.h"
20 #include "services/device/power_monitor/power_monitor_message_broadcaster.h" 20 #include "services/device/power_monitor/power_monitor_message_broadcaster.h"
21 #include "services/device/public/cpp/device_features.h" 21 #include "services/device/public/cpp/device_features.h"
22 #include "services/device/public/interfaces/battery_monitor.mojom.h" 22 #include "services/device/public/interfaces/battery_monitor.mojom.h"
23 #include "services/device/time_zone_monitor/time_zone_monitor.h" 23 #include "services/device/time_zone_monitor/time_zone_monitor.h"
24 #include "services/service_manager/public/cpp/bind_source_info.h" 24 #include "services/service_manager/public/cpp/bind_source_info.h"
25 #include "ui/gfx/native_widget_types.h" 25 #include "ui/gfx/native_widget_types.h"
26 26
27 #if defined(OS_ANDROID) 27 #if defined(OS_ANDROID)
28 #include "base/android/context_utils.h" 28 #include "base/android/context_utils.h"
29 #include "base/android/jni_android.h" 29 #include "base/android/jni_android.h"
30 #include "device/nfc/nfc_provider.mojom.h"
30 #include "jni/InterfaceRegistrar_jni.h" 31 #include "jni/InterfaceRegistrar_jni.h"
31 #include "services/device/android/register_jni.h" 32 #include "services/device/android/register_jni.h"
32 #include "services/device/screen_orientation/screen_orientation_listener_android .h" 33 #include "services/device/screen_orientation/screen_orientation_listener_android .h"
33 #else 34 #else
34 #include "services/device/battery/battery_monitor_impl.h" 35 #include "services/device/battery/battery_monitor_impl.h"
35 #include "services/device/battery/battery_status_service.h" 36 #include "services/device/battery/battery_status_service.h"
36 #include "services/device/vibration/vibration_manager_impl.h" 37 #include "services/device/vibration/vibration_manager_impl.h"
37 #endif 38 #endif
38 39
39 namespace device { 40 namespace device {
40 41
41 #if defined(OS_ANDROID) 42 #if defined(OS_ANDROID)
42 std::unique_ptr<service_manager::Service> CreateDeviceService( 43 std::unique_ptr<service_manager::Service> CreateDeviceService(
43 scoped_refptr<base::SingleThreadTaskRunner> file_task_runner, 44 scoped_refptr<base::SingleThreadTaskRunner> file_task_runner,
44 scoped_refptr<base::SingleThreadTaskRunner> io_task_runner, 45 scoped_refptr<base::SingleThreadTaskRunner> io_task_runner,
45 const WakeLockContextCallback& wake_lock_context_callback) { 46 const WakeLockContextCallback& wake_lock_context_callback,
47 const base::android::JavaRef<jobject>& java_nfc_delegate) {
46 if (!EnsureJniRegistered()) { 48 if (!EnsureJniRegistered()) {
47 DLOG(ERROR) << "Failed to register JNI for Device Service"; 49 DLOG(ERROR) << "Failed to register JNI for Device Service";
48 return nullptr; 50 return nullptr;
49 } 51 }
50 52
51 return base::MakeUnique<DeviceService>(std::move(file_task_runner), 53 return base::MakeUnique<DeviceService>(
52 std::move(io_task_runner), 54 std::move(file_task_runner), std::move(io_task_runner),
53 wake_lock_context_callback); 55 wake_lock_context_callback, java_nfc_delegate);
54 } 56 }
55 #else 57 #else
56 std::unique_ptr<service_manager::Service> CreateDeviceService( 58 std::unique_ptr<service_manager::Service> CreateDeviceService(
57 scoped_refptr<base::SingleThreadTaskRunner> file_task_runner, 59 scoped_refptr<base::SingleThreadTaskRunner> file_task_runner,
58 scoped_refptr<base::SingleThreadTaskRunner> io_task_runner) { 60 scoped_refptr<base::SingleThreadTaskRunner> io_task_runner) {
59 return base::MakeUnique<DeviceService>(std::move(file_task_runner), 61 return base::MakeUnique<DeviceService>(std::move(file_task_runner),
60 std::move(io_task_runner)); 62 std::move(io_task_runner));
61 } 63 }
62 #endif 64 #endif
63 65
64 #if defined(OS_ANDROID) 66 #if defined(OS_ANDROID)
65 DeviceService::DeviceService( 67 DeviceService::DeviceService(
66 scoped_refptr<base::SingleThreadTaskRunner> file_task_runner, 68 scoped_refptr<base::SingleThreadTaskRunner> file_task_runner,
67 scoped_refptr<base::SingleThreadTaskRunner> io_task_runner, 69 scoped_refptr<base::SingleThreadTaskRunner> io_task_runner,
68 const WakeLockContextCallback& wake_lock_context_callback) 70 const WakeLockContextCallback& wake_lock_context_callback,
69 : java_interface_provider_initialized_(false), 71 const base::android::JavaRef<jobject>& java_nfc_delegate)
70 file_task_runner_(std::move(file_task_runner)), 72 : file_task_runner_(std::move(file_task_runner)),
71 io_task_runner_(std::move(io_task_runner)), 73 io_task_runner_(std::move(io_task_runner)),
72 wake_lock_context_callback_(wake_lock_context_callback) {} 74 wake_lock_context_callback_(wake_lock_context_callback),
75 java_interface_provider_initialized_(false) {
76 java_nfc_delegate_.Reset(java_nfc_delegate);
77 }
73 #else 78 #else
74 DeviceService::DeviceService( 79 DeviceService::DeviceService(
75 scoped_refptr<base::SingleThreadTaskRunner> file_task_runner, 80 scoped_refptr<base::SingleThreadTaskRunner> file_task_runner,
76 scoped_refptr<base::SingleThreadTaskRunner> io_task_runner) 81 scoped_refptr<base::SingleThreadTaskRunner> io_task_runner)
77 : file_task_runner_(std::move(file_task_runner)), 82 : file_task_runner_(std::move(file_task_runner)),
78 io_task_runner_(std::move(io_task_runner)) {} 83 io_task_runner_(std::move(io_task_runner)) {}
79 #endif 84 #endif
80 85
81 DeviceService::~DeviceService() { 86 DeviceService::~DeviceService() {
82 #if !defined(OS_ANDROID) 87 #if !defined(OS_ANDROID)
(...skipping 24 matching lines...) Expand all
107 &DeviceService::BindTimeZoneMonitorRequest, base::Unretained(this))); 112 &DeviceService::BindTimeZoneMonitorRequest, base::Unretained(this)));
108 registry_.AddInterface<mojom::WakeLockContextProvider>( 113 registry_.AddInterface<mojom::WakeLockContextProvider>(
109 base::Bind(&DeviceService::BindWakeLockContextProviderRequest, 114 base::Bind(&DeviceService::BindWakeLockContextProviderRequest,
110 base::Unretained(this))); 115 base::Unretained(this)));
111 116
112 #if defined(OS_ANDROID) 117 #if defined(OS_ANDROID)
113 registry_.AddInterface(GetJavaInterfaceProvider() 118 registry_.AddInterface(GetJavaInterfaceProvider()
114 ->CreateInterfaceFactory<mojom::BatteryMonitor>()); 119 ->CreateInterfaceFactory<mojom::BatteryMonitor>());
115 registry_.AddInterface( 120 registry_.AddInterface(
116 GetJavaInterfaceProvider() 121 GetJavaInterfaceProvider()
122 ->CreateInterfaceFactory<nfc::mojom::NFCProvider>());
123 registry_.AddInterface(
124 GetJavaInterfaceProvider()
117 ->CreateInterfaceFactory<mojom::VibrationManager>()); 125 ->CreateInterfaceFactory<mojom::VibrationManager>());
118 #else 126 #else
119 registry_.AddInterface<mojom::BatteryMonitor>(base::Bind( 127 registry_.AddInterface<mojom::BatteryMonitor>(base::Bind(
120 &DeviceService::BindBatteryMonitorRequest, base::Unretained(this))); 128 &DeviceService::BindBatteryMonitorRequest, base::Unretained(this)));
129 registry_.AddInterface<nfc::mojom::NFCProvider>(base::Bind(
130 &DeviceService::BindNFCProviderRequest, base::Unretained(this)));
121 registry_.AddInterface<mojom::VibrationManager>(base::Bind( 131 registry_.AddInterface<mojom::VibrationManager>(base::Bind(
122 &DeviceService::BindVibrationManagerRequest, base::Unretained(this))); 132 &DeviceService::BindVibrationManagerRequest, base::Unretained(this)));
123 #endif 133 #endif
124 } 134 }
125 135
126 void DeviceService::OnBindInterface( 136 void DeviceService::OnBindInterface(
127 const service_manager::BindSourceInfo& source_info, 137 const service_manager::BindSourceInfo& source_info,
128 const std::string& interface_name, 138 const std::string& interface_name,
129 mojo::ScopedMessagePipeHandle interface_pipe) { 139 mojo::ScopedMessagePipeHandle interface_pipe) {
130 registry_.BindInterface(source_info, interface_name, 140 registry_.BindInterface(source_info, interface_name,
131 std::move(interface_pipe)); 141 std::move(interface_pipe));
132 } 142 }
133 143
134 #if !defined(OS_ANDROID) 144 #if !defined(OS_ANDROID)
135 void DeviceService::BindBatteryMonitorRequest( 145 void DeviceService::BindBatteryMonitorRequest(
136 const service_manager::BindSourceInfo& source_info, 146 const service_manager::BindSourceInfo& source_info,
137 mojom::BatteryMonitorRequest request) { 147 mojom::BatteryMonitorRequest request) {
138 BatteryMonitorImpl::Create(std::move(request)); 148 BatteryMonitorImpl::Create(std::move(request));
139 } 149 }
140 150
151 void DeviceService::BindNFCProviderRequest(
152 const service_manager::BindSourceInfo& source_info,
153 nfc::mojom::NFCProviderRequest request) {
154 LOG(ERROR) << "NFC is only supported on Android";
155 NOTREACHED();
156 }
157
141 void DeviceService::BindVibrationManagerRequest( 158 void DeviceService::BindVibrationManagerRequest(
142 const service_manager::BindSourceInfo& source_info, 159 const service_manager::BindSourceInfo& source_info,
143 mojom::VibrationManagerRequest request) { 160 mojom::VibrationManagerRequest request) {
144 VibrationManagerImpl::Create(std::move(request)); 161 VibrationManagerImpl::Create(std::move(request));
145 } 162 }
146 #endif 163 #endif
147 164
148 void DeviceService::BindFingerprintRequest( 165 void DeviceService::BindFingerprintRequest(
149 const service_manager::BindSourceInfo& source_info, 166 const service_manager::BindSourceInfo& source_info,
150 mojom::FingerprintRequest request) { 167 mojom::FingerprintRequest request) {
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
251 wake_lock_context_callback_); 268 wake_lock_context_callback_);
252 } 269 }
253 270
254 #if defined(OS_ANDROID) 271 #if defined(OS_ANDROID)
255 service_manager::InterfaceProvider* DeviceService::GetJavaInterfaceProvider() { 272 service_manager::InterfaceProvider* DeviceService::GetJavaInterfaceProvider() {
256 if (!java_interface_provider_initialized_) { 273 if (!java_interface_provider_initialized_) {
257 service_manager::mojom::InterfaceProviderPtr provider; 274 service_manager::mojom::InterfaceProviderPtr provider;
258 JNIEnv* env = base::android::AttachCurrentThread(); 275 JNIEnv* env = base::android::AttachCurrentThread();
259 Java_InterfaceRegistrar_createInterfaceRegistryForContext( 276 Java_InterfaceRegistrar_createInterfaceRegistryForContext(
260 env, mojo::MakeRequest(&provider).PassMessagePipe().release().value(), 277 env, mojo::MakeRequest(&provider).PassMessagePipe().release().value(),
261 base::android::GetApplicationContext()); 278 base::android::GetApplicationContext(), java_nfc_delegate_);
262 java_interface_provider_.Bind(std::move(provider)); 279 java_interface_provider_.Bind(std::move(provider));
263 280
264 java_interface_provider_initialized_ = true; 281 java_interface_provider_initialized_ = true;
265 } 282 }
266 283
267 return &java_interface_provider_; 284 return &java_interface_provider_;
268 } 285 }
269 #endif 286 #endif
270 287
271 } // namespace device 288 } // namespace device
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698