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

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

Issue 2865653002: [Device Service] Decouple NFC implementation from //content (Closed)
Patch Set: Rebase 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
« no previous file with comments | « services/device/device_service.h ('k') | services/device/device_service_test_base.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_provider.h" 17 #include "device/wake_lock/wake_lock_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 23 matching lines...) Expand all
106 registry_.AddInterface<mojom::TimeZoneMonitor>(base::Bind( 111 registry_.AddInterface<mojom::TimeZoneMonitor>(base::Bind(
107 &DeviceService::BindTimeZoneMonitorRequest, base::Unretained(this))); 112 &DeviceService::BindTimeZoneMonitorRequest, base::Unretained(this)));
108 registry_.AddInterface<mojom::WakeLockProvider>(base::Bind( 113 registry_.AddInterface<mojom::WakeLockProvider>(base::Bind(
109 &DeviceService::BindWakeLockProviderRequest, base::Unretained(this))); 114 &DeviceService::BindWakeLockProviderRequest, base::Unretained(this)));
110 115
111 #if defined(OS_ANDROID) 116 #if defined(OS_ANDROID)
112 registry_.AddInterface(GetJavaInterfaceProvider() 117 registry_.AddInterface(GetJavaInterfaceProvider()
113 ->CreateInterfaceFactory<mojom::BatteryMonitor>()); 118 ->CreateInterfaceFactory<mojom::BatteryMonitor>());
114 registry_.AddInterface( 119 registry_.AddInterface(
115 GetJavaInterfaceProvider() 120 GetJavaInterfaceProvider()
121 ->CreateInterfaceFactory<nfc::mojom::NFCProvider>());
122 registry_.AddInterface(
123 GetJavaInterfaceProvider()
116 ->CreateInterfaceFactory<mojom::VibrationManager>()); 124 ->CreateInterfaceFactory<mojom::VibrationManager>());
117 #else 125 #else
118 registry_.AddInterface<mojom::BatteryMonitor>(base::Bind( 126 registry_.AddInterface<mojom::BatteryMonitor>(base::Bind(
119 &DeviceService::BindBatteryMonitorRequest, base::Unretained(this))); 127 &DeviceService::BindBatteryMonitorRequest, base::Unretained(this)));
128 registry_.AddInterface<nfc::mojom::NFCProvider>(base::Bind(
129 &DeviceService::BindNFCProviderRequest, base::Unretained(this)));
120 registry_.AddInterface<mojom::VibrationManager>(base::Bind( 130 registry_.AddInterface<mojom::VibrationManager>(base::Bind(
121 &DeviceService::BindVibrationManagerRequest, base::Unretained(this))); 131 &DeviceService::BindVibrationManagerRequest, base::Unretained(this)));
122 #endif 132 #endif
123 } 133 }
124 134
125 void DeviceService::OnBindInterface( 135 void DeviceService::OnBindInterface(
126 const service_manager::BindSourceInfo& source_info, 136 const service_manager::BindSourceInfo& source_info,
127 const std::string& interface_name, 137 const std::string& interface_name,
128 mojo::ScopedMessagePipeHandle interface_pipe) { 138 mojo::ScopedMessagePipeHandle interface_pipe) {
129 registry_.BindInterface(source_info, interface_name, 139 registry_.BindInterface(source_info, interface_name,
130 std::move(interface_pipe)); 140 std::move(interface_pipe));
131 } 141 }
132 142
133 #if !defined(OS_ANDROID) 143 #if !defined(OS_ANDROID)
134 void DeviceService::BindBatteryMonitorRequest( 144 void DeviceService::BindBatteryMonitorRequest(
135 const service_manager::BindSourceInfo& source_info, 145 const service_manager::BindSourceInfo& source_info,
136 mojom::BatteryMonitorRequest request) { 146 mojom::BatteryMonitorRequest request) {
137 BatteryMonitorImpl::Create(std::move(request)); 147 BatteryMonitorImpl::Create(std::move(request));
138 } 148 }
139 149
150 void DeviceService::BindNFCProviderRequest(
151 const service_manager::BindSourceInfo& source_info,
152 nfc::mojom::NFCProviderRequest request) {
153 LOG(ERROR) << "NFC is only supported on Android";
154 NOTREACHED();
155 }
156
140 void DeviceService::BindVibrationManagerRequest( 157 void DeviceService::BindVibrationManagerRequest(
141 const service_manager::BindSourceInfo& source_info, 158 const service_manager::BindSourceInfo& source_info,
142 mojom::VibrationManagerRequest request) { 159 mojom::VibrationManagerRequest request) {
143 VibrationManagerImpl::Create(std::move(request)); 160 VibrationManagerImpl::Create(std::move(request));
144 } 161 }
145 #endif 162 #endif
146 163
147 void DeviceService::BindFingerprintRequest( 164 void DeviceService::BindFingerprintRequest(
148 const service_manager::BindSourceInfo& source_info, 165 const service_manager::BindSourceInfo& source_info,
149 mojom::FingerprintRequest request) { 166 mojom::FingerprintRequest request) {
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
250 wake_lock_context_callback_); 267 wake_lock_context_callback_);
251 } 268 }
252 269
253 #if defined(OS_ANDROID) 270 #if defined(OS_ANDROID)
254 service_manager::InterfaceProvider* DeviceService::GetJavaInterfaceProvider() { 271 service_manager::InterfaceProvider* DeviceService::GetJavaInterfaceProvider() {
255 if (!java_interface_provider_initialized_) { 272 if (!java_interface_provider_initialized_) {
256 service_manager::mojom::InterfaceProviderPtr provider; 273 service_manager::mojom::InterfaceProviderPtr provider;
257 JNIEnv* env = base::android::AttachCurrentThread(); 274 JNIEnv* env = base::android::AttachCurrentThread();
258 Java_InterfaceRegistrar_createInterfaceRegistryForContext( 275 Java_InterfaceRegistrar_createInterfaceRegistryForContext(
259 env, mojo::MakeRequest(&provider).PassMessagePipe().release().value(), 276 env, mojo::MakeRequest(&provider).PassMessagePipe().release().value(),
260 base::android::GetApplicationContext()); 277 base::android::GetApplicationContext(), java_nfc_delegate_);
261 java_interface_provider_.Bind(std::move(provider)); 278 java_interface_provider_.Bind(std::move(provider));
262 279
263 java_interface_provider_initialized_ = true; 280 java_interface_provider_initialized_ = true;
264 } 281 }
265 282
266 return &java_interface_provider_; 283 return &java_interface_provider_;
267 } 284 }
268 #endif 285 #endif
269 286
270 } // namespace device 287 } // namespace device
OLDNEW
« no previous file with comments | « services/device/device_service.h ('k') | services/device/device_service_test_base.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698