OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "chrome/browser/extensions/api/bluetooth/bluetooth_api.h" | 5 #include "chrome/browser/extensions/api/bluetooth/bluetooth_api.h" |
6 | 6 |
7 #include "base/utf_string_conversions.h" | 7 #include "base/utf_string_conversions.h" |
8 #include "chrome/browser/extensions/extension_service.h" | 8 #include "chrome/browser/extensions/extension_service.h" |
9 #include "chrome/browser/profiles/profile.h" | 9 #include "chrome/browser/profiles/profile.h" |
10 #include "chrome/common/extensions/api/experimental_bluetooth.h" | 10 #include "chrome/common/extensions/api/experimental_bluetooth.h" |
11 #include "content/public/browser/browser_thread.h" | 11 #include "content/public/browser/browser_thread.h" |
12 | 12 |
13 #if defined(OS_CHROMEOS) | 13 #if defined(OS_CHROMEOS) |
| 14 #include "base/memory/ref_counted.h" |
14 #include "base/synchronization/lock.h" | 15 #include "base/synchronization/lock.h" |
15 #include "chrome/browser/chromeos/bluetooth/bluetooth_adapter.h" | 16 #include "chrome/browser/chromeos/bluetooth/bluetooth_adapter.h" |
16 #include "chrome/browser/chromeos/bluetooth/bluetooth_device.h" | 17 #include "chrome/browser/chromeos/bluetooth/bluetooth_device.h" |
| 18 #include "chrome/browser/chromeos/bluetooth/bluetooth_socket.h" |
17 #include "chrome/browser/chromeos/extensions/bluetooth_event_router.h" | 19 #include "chrome/browser/chromeos/extensions/bluetooth_event_router.h" |
18 | 20 |
19 using chromeos::BluetoothAdapter; | 21 using chromeos::BluetoothAdapter; |
20 using chromeos::BluetoothDevice; | 22 using chromeos::BluetoothDevice; |
21 | 23 |
22 #endif | 24 #endif |
23 | 25 |
24 namespace GetDevicesWithServiceUUID = | 26 namespace GetDevicesWithServiceUUID = |
25 extensions::api::experimental_bluetooth::GetDevicesWithServiceUUID; | 27 extensions::api::experimental_bluetooth::GetDevicesWithServiceUUID; |
26 namespace GetDevicesWithServiceName = | 28 namespace GetDevicesWithServiceName = |
27 extensions::api::experimental_bluetooth::GetDevicesWithServiceName; | 29 extensions::api::experimental_bluetooth::GetDevicesWithServiceName; |
| 30 namespace Connect = extensions::api::experimental_bluetooth::Connect; |
| 31 namespace Disconnect = extensions::api::experimental_bluetooth::Disconnect; |
28 | 32 |
29 namespace extensions { | 33 namespace extensions { |
30 namespace api { | 34 namespace api { |
31 | 35 |
32 #if defined(OS_CHROMEOS) | 36 #if defined(OS_CHROMEOS) |
33 | 37 |
| 38 chromeos::ExtensionBluetoothEventRouter* |
| 39 BluetoothExtensionFunction::event_router() { |
| 40 return profile()->GetExtensionService()->bluetooth_event_router(); |
| 41 } |
| 42 |
34 const chromeos::BluetoothAdapter* BluetoothExtensionFunction::adapter() const { | 43 const chromeos::BluetoothAdapter* BluetoothExtensionFunction::adapter() const { |
35 return profile()->GetExtensionService()->bluetooth_event_router()->adapter(); | 44 const chromeos::ExtensionBluetoothEventRouter* bluetooth_event_router = |
| 45 profile()->GetExtensionService()->bluetooth_event_router(); |
| 46 return bluetooth_event_router->adapter(); |
36 } | 47 } |
37 | 48 |
38 chromeos::BluetoothAdapter* BluetoothExtensionFunction::GetMutableAdapter() { | 49 chromeos::BluetoothAdapter* BluetoothExtensionFunction::GetMutableAdapter() { |
39 return profile()->GetExtensionService()->bluetooth_event_router()-> | 50 return event_router()->GetMutableAdapter(); |
40 GetMutableAdapter(); | 51 } |
| 52 |
| 53 chromeos::ExtensionBluetoothEventRouter* |
| 54 AsyncBluetoothExtensionFunction::event_router() { |
| 55 return profile()->GetExtensionService()->bluetooth_event_router(); |
41 } | 56 } |
42 | 57 |
43 const chromeos::BluetoothAdapter* | 58 const chromeos::BluetoothAdapter* |
44 AsyncBluetoothExtensionFunction::adapter() const { | 59 AsyncBluetoothExtensionFunction::adapter() const { |
45 return profile()->GetExtensionService()->bluetooth_event_router()->adapter(); | 60 const chromeos::ExtensionBluetoothEventRouter* bluetooth_event_router = |
| 61 profile()->GetExtensionService()->bluetooth_event_router(); |
| 62 return bluetooth_event_router->adapter(); |
46 } | 63 } |
47 | 64 |
48 chromeos::BluetoothAdapter* | 65 chromeos::BluetoothAdapter* |
49 AsyncBluetoothExtensionFunction::GetMutableAdapter() { | 66 AsyncBluetoothExtensionFunction::GetMutableAdapter() { |
50 return profile()->GetExtensionService()->bluetooth_event_router()-> | 67 return event_router()->GetMutableAdapter(); |
51 GetMutableAdapter(); | |
52 } | 68 } |
53 | 69 |
54 bool BluetoothIsAvailableFunction::RunImpl() { | 70 bool BluetoothIsAvailableFunction::RunImpl() { |
55 result_.reset(Value::CreateBooleanValue(adapter()->IsPresent())); | 71 result_.reset(Value::CreateBooleanValue(adapter()->IsPresent())); |
56 return true; | 72 return true; |
57 } | 73 } |
58 | 74 |
59 bool BluetoothIsPoweredFunction::RunImpl() { | 75 bool BluetoothIsPoweredFunction::RunImpl() { |
60 result_.reset(Value::CreateBooleanValue(adapter()->IsPowered())); | 76 result_.reset(Value::CreateBooleanValue(adapter()->IsPowered())); |
61 return true; | 77 return true; |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
129 } | 145 } |
130 | 146 |
131 if (callbacks_pending_) | 147 if (callbacks_pending_) |
132 AddRef(); // Released in AddDeviceIfTrue when callbacks_pending_ == 0 | 148 AddRef(); // Released in AddDeviceIfTrue when callbacks_pending_ == 0 |
133 else | 149 else |
134 SendResponse(true); | 150 SendResponse(true); |
135 | 151 |
136 return true; | 152 return true; |
137 } | 153 } |
138 | 154 |
| 155 void BluetoothConnectFunction::ConnectToServiceCallback( |
| 156 const chromeos::BluetoothDevice* device, |
| 157 const std::string& service_uuid, |
| 158 scoped_refptr<chromeos::BluetoothSocket> socket) { |
| 159 if (socket.get()) { |
| 160 int socket_id = event_router()->RegisterSocket(socket); |
| 161 |
| 162 experimental_bluetooth::Socket result_socket; |
| 163 result_socket.device.address = device->address(); |
| 164 result_socket.device.name = UTF16ToUTF8(device->GetName()); |
| 165 result_socket.service_uuid = service_uuid; |
| 166 result_socket.id = socket_id; |
| 167 result_.reset(result_socket.ToValue().release()); |
| 168 SendResponse(true); |
| 169 } else { |
| 170 SendResponse(false); |
| 171 } |
| 172 |
| 173 Release(); // Added in RunImpl |
| 174 } |
| 175 |
| 176 bool BluetoothConnectFunction::RunImpl() { |
| 177 scoped_ptr<Connect::Params> params(Connect::Params::Create(*args_)); |
| 178 |
| 179 chromeos::BluetoothDevice* device = |
| 180 GetMutableAdapter()->GetDevice(params->device.address); |
| 181 if (!device) { |
| 182 SendResponse(false); |
| 183 return false; |
| 184 } |
| 185 |
| 186 AddRef(); |
| 187 device->ConnectToService(params->service, |
| 188 base::Bind(&BluetoothConnectFunction::ConnectToServiceCallback, |
| 189 this, |
| 190 device, |
| 191 params->service)); |
| 192 return true; |
| 193 } |
| 194 |
| 195 bool BluetoothDisconnectFunction::RunImpl() { |
| 196 scoped_ptr<Disconnect::Params> params(Disconnect::Params::Create(*args_)); |
| 197 return event_router()->ReleaseSocket(params->socket.id); |
| 198 } |
| 199 |
139 #else | 200 #else |
140 | 201 |
141 // ----------------------------------------------------------------------------- | 202 // ----------------------------------------------------------------------------- |
142 // NIY stubs | 203 // NIY stubs |
143 // ----------------------------------------------------------------------------- | 204 // ----------------------------------------------------------------------------- |
144 bool BluetoothIsAvailableFunction::RunImpl() { | 205 bool BluetoothIsAvailableFunction::RunImpl() { |
145 NOTREACHED() << "Not implemented yet"; | 206 NOTREACHED() << "Not implemented yet"; |
146 return false; | 207 return false; |
147 } | 208 } |
148 | 209 |
(...skipping 10 matching lines...) Expand all Loading... |
159 bool BluetoothGetDevicesWithServiceUUIDFunction::RunImpl() { | 220 bool BluetoothGetDevicesWithServiceUUIDFunction::RunImpl() { |
160 NOTREACHED() << "Not implemented yet"; | 221 NOTREACHED() << "Not implemented yet"; |
161 return false; | 222 return false; |
162 } | 223 } |
163 | 224 |
164 bool BluetoothGetDevicesWithServiceNameFunction::RunImpl() { | 225 bool BluetoothGetDevicesWithServiceNameFunction::RunImpl() { |
165 NOTREACHED() << "Not implemented yet"; | 226 NOTREACHED() << "Not implemented yet"; |
166 return false; | 227 return false; |
167 } | 228 } |
168 | 229 |
169 #endif | 230 bool BluetoothConnectFunction::RunImpl() { |
| 231 NOTREACHED() << "Not implemented yet"; |
| 232 return false; |
| 233 } |
170 | 234 |
171 bool BluetoothDisconnectFunction::RunImpl() { | 235 bool BluetoothDisconnectFunction::RunImpl() { |
172 NOTREACHED() << "Not implemented yet"; | 236 NOTREACHED() << "Not implemented yet"; |
173 return false; | 237 return false; |
174 } | 238 } |
175 | 239 |
| 240 #endif |
| 241 |
176 bool BluetoothReadFunction::RunImpl() { | 242 bool BluetoothReadFunction::RunImpl() { |
177 NOTREACHED() << "Not implemented yet"; | 243 NOTREACHED() << "Not implemented yet"; |
178 return false; | 244 return false; |
179 } | 245 } |
180 | 246 |
181 bool BluetoothSetOutOfBandPairingDataFunction::RunImpl() { | 247 bool BluetoothSetOutOfBandPairingDataFunction::RunImpl() { |
182 NOTREACHED() << "Not implemented yet"; | 248 NOTREACHED() << "Not implemented yet"; |
183 return false; | 249 return false; |
184 } | 250 } |
185 | 251 |
186 bool BluetoothGetOutOfBandPairingDataFunction::RunImpl() { | 252 bool BluetoothGetOutOfBandPairingDataFunction::RunImpl() { |
187 NOTREACHED() << "Not implemented yet"; | 253 NOTREACHED() << "Not implemented yet"; |
188 return false; | 254 return false; |
189 } | 255 } |
190 | 256 |
191 bool BluetoothWriteFunction::RunImpl() { | 257 bool BluetoothWriteFunction::RunImpl() { |
192 NOTREACHED() << "Not implemented yet"; | 258 NOTREACHED() << "Not implemented yet"; |
193 return false; | 259 return false; |
194 } | 260 } |
195 | 261 |
196 bool BluetoothConnectFunction::RunImpl() { | |
197 NOTREACHED() << "Not implemented yet"; | |
198 return false; | |
199 } | |
200 | |
201 } // namespace api | 262 } // namespace api |
202 } // namespace extensions | 263 } // namespace extensions |
OLD | NEW |