OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "content/renderer/bluetooth/bluetooth_dispatcher.h" | 5 #include "content/renderer/bluetooth/bluetooth_dispatcher.h" |
6 | 6 |
7 #include "base/lazy_instance.h" | 7 #include "base/lazy_instance.h" |
8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
10 #include "base/thread_task_runner_handle.h" | 10 #include "base/thread_task_runner_handle.h" |
11 #include "content/child/thread_safe_sender.h" | 11 #include "content/child/thread_safe_sender.h" |
12 #include "content/common/bluetooth/bluetooth_messages.h" | 12 #include "content/common/bluetooth/bluetooth_messages.h" |
13 #include "device/bluetooth/bluetooth_uuid.h" | 13 #include "device/bluetooth/bluetooth_uuid.h" |
| 14 #include "third_party/WebKit/public/platform/WebPassOwnPtr.h" |
14 #include "third_party/WebKit/public/platform/modules/bluetooth/WebBluetoothDevic
e.h" | 15 #include "third_party/WebKit/public/platform/modules/bluetooth/WebBluetoothDevic
e.h" |
15 #include "third_party/WebKit/public/platform/modules/bluetooth/WebBluetoothError
.h" | 16 #include "third_party/WebKit/public/platform/modules/bluetooth/WebBluetoothError
.h" |
16 #include "third_party/WebKit/public/platform/modules/bluetooth/WebBluetoothGATTC
haracteristic.h" | 17 #include "third_party/WebKit/public/platform/modules/bluetooth/WebBluetoothGATTC
haracteristic.h" |
17 #include "third_party/WebKit/public/platform/modules/bluetooth/WebBluetoothGATTR
emoteServer.h" | 18 #include "third_party/WebKit/public/platform/modules/bluetooth/WebBluetoothGATTR
emoteServer.h" |
18 #include "third_party/WebKit/public/platform/modules/bluetooth/WebBluetoothGATTS
ervice.h" | 19 #include "third_party/WebKit/public/platform/modules/bluetooth/WebBluetoothGATTS
ervice.h" |
19 #include "third_party/WebKit/public/platform/modules/bluetooth/WebRequestDeviceO
ptions.h" | 20 #include "third_party/WebKit/public/platform/modules/bluetooth/WebRequestDeviceO
ptions.h" |
20 | 21 |
21 using blink::WebBluetoothConnectGATTCallbacks; | 22 using blink::WebBluetoothConnectGATTCallbacks; |
22 using blink::WebBluetoothDevice; | 23 using blink::WebBluetoothDevice; |
23 using blink::WebBluetoothError; | 24 using blink::WebBluetoothError; |
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
233 int thread_id, | 234 int thread_id, |
234 int request_id, | 235 int request_id, |
235 const BluetoothDevice& device) { | 236 const BluetoothDevice& device) { |
236 DCHECK(pending_requests_.Lookup(request_id)) << request_id; | 237 DCHECK(pending_requests_.Lookup(request_id)) << request_id; |
237 | 238 |
238 WebVector<WebString> uuids(device.uuids.size()); | 239 WebVector<WebString> uuids(device.uuids.size()); |
239 for (size_t i = 0; i < device.uuids.size(); ++i) | 240 for (size_t i = 0; i < device.uuids.size(); ++i) |
240 uuids[i] = WebString::fromUTF8(device.uuids[i].c_str()); | 241 uuids[i] = WebString::fromUTF8(device.uuids[i].c_str()); |
241 | 242 |
242 pending_requests_.Lookup(request_id) | 243 pending_requests_.Lookup(request_id) |
243 ->onSuccess(new WebBluetoothDevice( | 244 ->onSuccess(blink::adoptWebPtr(new WebBluetoothDevice( |
244 WebString::fromUTF8(device.instance_id), WebString(device.name), | 245 WebString::fromUTF8(device.instance_id), WebString(device.name), |
245 device.device_class, GetWebVendorIdSource(device.vendor_id_source), | 246 device.device_class, GetWebVendorIdSource(device.vendor_id_source), |
246 device.vendor_id, device.product_id, device.product_version, | 247 device.vendor_id, device.product_id, device.product_version, |
247 device.paired, uuids)); | 248 device.paired, uuids))); |
248 pending_requests_.Remove(request_id); | 249 pending_requests_.Remove(request_id); |
249 } | 250 } |
250 | 251 |
251 void BluetoothDispatcher::OnRequestDeviceError(int thread_id, | 252 void BluetoothDispatcher::OnRequestDeviceError(int thread_id, |
252 int request_id, | 253 int request_id, |
253 WebBluetoothError error) { | 254 WebBluetoothError error) { |
254 DCHECK(pending_requests_.Lookup(request_id)) << request_id; | 255 DCHECK(pending_requests_.Lookup(request_id)) << request_id; |
255 pending_requests_.Lookup(request_id)->onError(new WebBluetoothError(error)); | 256 pending_requests_.Lookup(request_id)->onError(WebBluetoothError(error)); |
256 pending_requests_.Remove(request_id); | 257 pending_requests_.Remove(request_id); |
257 } | 258 } |
258 | 259 |
259 void BluetoothDispatcher::OnConnectGATTSuccess( | 260 void BluetoothDispatcher::OnConnectGATTSuccess( |
260 int thread_id, | 261 int thread_id, |
261 int request_id, | 262 int request_id, |
262 const std::string& device_instance_id) { | 263 const std::string& device_instance_id) { |
263 DCHECK(pending_connect_requests_.Lookup(request_id)) << request_id; | 264 DCHECK(pending_connect_requests_.Lookup(request_id)) << request_id; |
264 pending_connect_requests_.Lookup(request_id) | 265 pending_connect_requests_.Lookup(request_id) |
265 ->onSuccess(new WebBluetoothGATTRemoteServer( | 266 ->onSuccess(blink::adoptWebPtr(new WebBluetoothGATTRemoteServer( |
266 WebString::fromUTF8(device_instance_id), true /* connected */)); | 267 WebString::fromUTF8(device_instance_id), true /* connected */))); |
267 pending_connect_requests_.Remove(request_id); | 268 pending_connect_requests_.Remove(request_id); |
268 } | 269 } |
269 | 270 |
270 void BluetoothDispatcher::OnConnectGATTError(int thread_id, | 271 void BluetoothDispatcher::OnConnectGATTError(int thread_id, |
271 int request_id, | 272 int request_id, |
272 WebBluetoothError error) { | 273 WebBluetoothError error) { |
273 DCHECK(pending_connect_requests_.Lookup(request_id)) << request_id; | 274 DCHECK(pending_connect_requests_.Lookup(request_id)) << request_id; |
274 pending_connect_requests_.Lookup(request_id) | 275 pending_connect_requests_.Lookup(request_id) |
275 ->onError(new WebBluetoothError(error)); | 276 ->onError(WebBluetoothError(error)); |
276 pending_connect_requests_.Remove(request_id); | 277 pending_connect_requests_.Remove(request_id); |
277 } | 278 } |
278 | 279 |
279 void BluetoothDispatcher::OnGetPrimaryServiceSuccess( | 280 void BluetoothDispatcher::OnGetPrimaryServiceSuccess( |
280 int thread_id, | 281 int thread_id, |
281 int request_id, | 282 int request_id, |
282 const std::string& service_instance_id) { | 283 const std::string& service_instance_id) { |
283 DCHECK(pending_primary_service_requests_.Lookup(request_id)) << request_id; | 284 DCHECK(pending_primary_service_requests_.Lookup(request_id)) << request_id; |
284 BluetoothPrimaryServiceRequest* request = | 285 BluetoothPrimaryServiceRequest* request = |
285 pending_primary_service_requests_.Lookup(request_id); | 286 pending_primary_service_requests_.Lookup(request_id); |
286 request->callbacks->onSuccess(new WebBluetoothGATTService( | 287 request->callbacks->onSuccess(blink::adoptWebPtr(new WebBluetoothGATTService( |
287 WebString::fromUTF8(service_instance_id), request->service_uuid, | 288 WebString::fromUTF8(service_instance_id), request->service_uuid, |
288 true /* isPrimary */, request->device_instance_id)); | 289 true /* isPrimary */, request->device_instance_id))); |
289 pending_primary_service_requests_.Remove(request_id); | 290 pending_primary_service_requests_.Remove(request_id); |
290 } | 291 } |
291 | 292 |
292 void BluetoothDispatcher::OnGetPrimaryServiceError(int thread_id, | 293 void BluetoothDispatcher::OnGetPrimaryServiceError(int thread_id, |
293 int request_id, | 294 int request_id, |
294 WebBluetoothError error) { | 295 WebBluetoothError error) { |
295 DCHECK(pending_primary_service_requests_.Lookup(request_id)) << request_id; | 296 DCHECK(pending_primary_service_requests_.Lookup(request_id)) << request_id; |
296 | 297 |
297 // Since we couldn't find the service return null. See Step 3 of | 298 // Since we couldn't find the service return null. See Step 3 of |
298 // getPrimaryService algorithm: | 299 // getPrimaryService algorithm: |
299 // https://webbluetoothchrome.github.io/web-bluetooth/#dom-bluetoothgattremote
server-getprimaryservice | 300 // https://webbluetoothchrome.github.io/web-bluetooth/#dom-bluetoothgattremote
server-getprimaryservice |
300 if (error == WebBluetoothError::ServiceNotFound) { | 301 if (error == WebBluetoothError::ServiceNotFound) { |
301 pending_primary_service_requests_.Lookup(request_id) | 302 pending_primary_service_requests_.Lookup(request_id) |
302 ->callbacks->onSuccess(nullptr); | 303 ->callbacks->onSuccess(nullptr); |
303 pending_primary_service_requests_.Remove(request_id); | 304 pending_primary_service_requests_.Remove(request_id); |
304 return; | 305 return; |
305 } | 306 } |
306 | 307 |
307 pending_primary_service_requests_.Lookup(request_id) | 308 pending_primary_service_requests_.Lookup(request_id) |
308 ->callbacks->onError(new WebBluetoothError(error)); | 309 ->callbacks->onError(WebBluetoothError(error)); |
309 pending_primary_service_requests_.Remove(request_id); | 310 pending_primary_service_requests_.Remove(request_id); |
310 } | 311 } |
311 | 312 |
312 void BluetoothDispatcher::OnGetCharacteristicSuccess( | 313 void BluetoothDispatcher::OnGetCharacteristicSuccess( |
313 int thread_id, | 314 int thread_id, |
314 int request_id, | 315 int request_id, |
315 const std::string& characteristic_instance_id) { | 316 const std::string& characteristic_instance_id) { |
316 DCHECK(pending_characteristic_requests_.Lookup(request_id)) << request_id; | 317 DCHECK(pending_characteristic_requests_.Lookup(request_id)) << request_id; |
317 | 318 |
318 BluetoothCharacteristicRequest* request = | 319 BluetoothCharacteristicRequest* request = |
319 pending_characteristic_requests_.Lookup(request_id); | 320 pending_characteristic_requests_.Lookup(request_id); |
320 request->callbacks->onSuccess(new WebBluetoothGATTCharacteristic( | 321 request->callbacks->onSuccess( |
321 WebString::fromUTF8(characteristic_instance_id), | 322 blink::adoptWebPtr(new WebBluetoothGATTCharacteristic( |
322 request->service_instance_id, request->characteristic_uuid)); | 323 WebString::fromUTF8(characteristic_instance_id), |
| 324 request->service_instance_id, request->characteristic_uuid))); |
323 | 325 |
324 pending_characteristic_requests_.Remove(request_id); | 326 pending_characteristic_requests_.Remove(request_id); |
325 } | 327 } |
326 | 328 |
327 void BluetoothDispatcher::OnGetCharacteristicError(int thread_id, | 329 void BluetoothDispatcher::OnGetCharacteristicError(int thread_id, |
328 int request_id, | 330 int request_id, |
329 WebBluetoothError error) { | 331 WebBluetoothError error) { |
330 DCHECK(pending_characteristic_requests_.Lookup(request_id)) << request_id; | 332 DCHECK(pending_characteristic_requests_.Lookup(request_id)) << request_id; |
331 | 333 |
332 // Since we couldn't find the characteristic return null. See Step 3 of | 334 // Since we couldn't find the characteristic return null. See Step 3 of |
333 // getCharacteristic algorithm: | 335 // getCharacteristic algorithm: |
334 // https://webbluetoothchrome.github.io/web-bluetooth/#dom-bluetoothgattservic
e-getcharacteristic | 336 // https://webbluetoothchrome.github.io/web-bluetooth/#dom-bluetoothgattservic
e-getcharacteristic |
335 if (error == WebBluetoothError::CharacteristicNotFound) { | 337 if (error == WebBluetoothError::CharacteristicNotFound) { |
336 pending_characteristic_requests_.Lookup(request_id) | 338 pending_characteristic_requests_.Lookup(request_id) |
337 ->callbacks->onSuccess(nullptr); | 339 ->callbacks->onSuccess(nullptr); |
338 } else { | 340 } else { |
339 pending_characteristic_requests_.Lookup(request_id) | 341 pending_characteristic_requests_.Lookup(request_id) |
340 ->callbacks->onError(new WebBluetoothError(error)); | 342 ->callbacks->onError(WebBluetoothError(error)); |
341 } | 343 } |
342 pending_characteristic_requests_.Remove(request_id); | 344 pending_characteristic_requests_.Remove(request_id); |
343 } | 345 } |
344 | 346 |
345 void BluetoothDispatcher::OnReadValueSuccess( | 347 void BluetoothDispatcher::OnReadValueSuccess( |
346 int thread_id, | 348 int thread_id, |
347 int request_id, | 349 int request_id, |
348 const std::vector<uint8_t>& value) { | 350 const std::vector<uint8_t>& value) { |
349 DCHECK(pending_read_value_requests_.Lookup(request_id)) << request_id; | 351 DCHECK(pending_read_value_requests_.Lookup(request_id)) << request_id; |
350 | 352 |
351 // WebArrayBuffer is not accessible from Source/modules so we pass a | 353 // WebArrayBuffer is not accessible from Source/modules so we pass a |
352 // WebVector instead. | 354 // WebVector instead. |
353 pending_read_value_requests_.Lookup(request_id) | 355 pending_read_value_requests_.Lookup(request_id)->onSuccess(value); |
354 ->onSuccess(new WebVector<uint8_t>(value)); | |
355 | 356 |
356 pending_read_value_requests_.Remove(request_id); | 357 pending_read_value_requests_.Remove(request_id); |
357 } | 358 } |
358 | 359 |
359 void BluetoothDispatcher::OnReadValueError(int thread_id, | 360 void BluetoothDispatcher::OnReadValueError(int thread_id, |
360 int request_id, | 361 int request_id, |
361 WebBluetoothError error) { | 362 WebBluetoothError error) { |
362 DCHECK(pending_read_value_requests_.Lookup(request_id)) << request_id; | 363 DCHECK(pending_read_value_requests_.Lookup(request_id)) << request_id; |
363 | 364 |
364 pending_read_value_requests_.Lookup(request_id) | 365 pending_read_value_requests_.Lookup(request_id) |
365 ->onError(new WebBluetoothError(error)); | 366 ->onError(WebBluetoothError(error)); |
366 | 367 |
367 pending_read_value_requests_.Remove(request_id); | 368 pending_read_value_requests_.Remove(request_id); |
368 } | 369 } |
369 | 370 |
370 void BluetoothDispatcher::OnWriteValueSuccess(int thread_id, int request_id) { | 371 void BluetoothDispatcher::OnWriteValueSuccess(int thread_id, int request_id) { |
371 DCHECK(pending_write_value_requests_.Lookup(request_id)) << request_id; | 372 DCHECK(pending_write_value_requests_.Lookup(request_id)) << request_id; |
372 | 373 |
373 pending_write_value_requests_.Lookup(request_id)->onSuccess(); | 374 pending_write_value_requests_.Lookup(request_id)->onSuccess(); |
374 | 375 |
375 pending_write_value_requests_.Remove(request_id); | 376 pending_write_value_requests_.Remove(request_id); |
376 } | 377 } |
377 | 378 |
378 void BluetoothDispatcher::OnWriteValueError(int thread_id, | 379 void BluetoothDispatcher::OnWriteValueError(int thread_id, |
379 int request_id, | 380 int request_id, |
380 WebBluetoothError error) { | 381 WebBluetoothError error) { |
381 DCHECK(pending_write_value_requests_.Lookup(request_id)) << request_id; | 382 DCHECK(pending_write_value_requests_.Lookup(request_id)) << request_id; |
382 | 383 |
383 pending_write_value_requests_.Lookup(request_id) | 384 pending_write_value_requests_.Lookup(request_id) |
384 ->onError(new WebBluetoothError(error)); | 385 ->onError(WebBluetoothError(error)); |
385 | 386 |
386 pending_write_value_requests_.Remove(request_id); | 387 pending_write_value_requests_.Remove(request_id); |
387 } | 388 } |
388 | 389 |
389 } // namespace content | 390 } // namespace content |
OLD | NEW |