| 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 <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <memory> |
| 10 #include <utility> |
| 11 |
| 9 #include "base/lazy_instance.h" | 12 #include "base/lazy_instance.h" |
| 13 #include "base/memory/ptr_util.h" |
| 10 #include "base/memory/scoped_ptr.h" | 14 #include "base/memory/scoped_ptr.h" |
| 11 #include "base/message_loop/message_loop.h" | 15 #include "base/message_loop/message_loop.h" |
| 12 #include "base/thread_task_runner_handle.h" | 16 #include "base/thread_task_runner_handle.h" |
| 13 #include "content/child/thread_safe_sender.h" | 17 #include "content/child/thread_safe_sender.h" |
| 14 #include "content/common/bluetooth/bluetooth_messages.h" | 18 #include "content/common/bluetooth/bluetooth_messages.h" |
| 15 #include "device/bluetooth/bluetooth_uuid.h" | 19 #include "device/bluetooth/bluetooth_uuid.h" |
| 16 #include "third_party/WebKit/public/platform/WebPassOwnPtr.h" | |
| 17 #include "third_party/WebKit/public/platform/modules/bluetooth/WebBluetoothDevic
e.h" | 20 #include "third_party/WebKit/public/platform/modules/bluetooth/WebBluetoothDevic
e.h" |
| 18 #include "third_party/WebKit/public/platform/modules/bluetooth/WebBluetoothError
.h" | 21 #include "third_party/WebKit/public/platform/modules/bluetooth/WebBluetoothError
.h" |
| 19 #include "third_party/WebKit/public/platform/modules/bluetooth/WebBluetoothRemot
eGATTCharacteristic.h" | 22 #include "third_party/WebKit/public/platform/modules/bluetooth/WebBluetoothRemot
eGATTCharacteristic.h" |
| 20 #include "third_party/WebKit/public/platform/modules/bluetooth/WebBluetoothRemot
eGATTCharacteristicInit.h" | 23 #include "third_party/WebKit/public/platform/modules/bluetooth/WebBluetoothRemot
eGATTCharacteristicInit.h" |
| 21 #include "third_party/WebKit/public/platform/modules/bluetooth/WebBluetoothRemot
eGATTService.h" | 24 #include "third_party/WebKit/public/platform/modules/bluetooth/WebBluetoothRemot
eGATTService.h" |
| 22 #include "third_party/WebKit/public/platform/modules/bluetooth/WebRequestDeviceO
ptions.h" | 25 #include "third_party/WebKit/public/platform/modules/bluetooth/WebRequestDeviceO
ptions.h" |
| 23 | 26 |
| 24 using blink::WebBluetoothDevice; | 27 using blink::WebBluetoothDevice; |
| 25 using blink::WebBluetoothError; | 28 using blink::WebBluetoothError; |
| 26 using blink::WebBluetoothRemoteGATTCharacteristicInit; | 29 using blink::WebBluetoothRemoteGATTCharacteristicInit; |
| (...skipping 557 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 584 int thread_id, | 587 int thread_id, |
| 585 int request_id, | 588 int request_id, |
| 586 const BluetoothDevice& device) { | 589 const BluetoothDevice& device) { |
| 587 DCHECK(pending_requests_.Lookup(request_id)) << request_id; | 590 DCHECK(pending_requests_.Lookup(request_id)) << request_id; |
| 588 | 591 |
| 589 WebVector<WebString> uuids(device.uuids.size()); | 592 WebVector<WebString> uuids(device.uuids.size()); |
| 590 for (size_t i = 0; i < device.uuids.size(); ++i) | 593 for (size_t i = 0; i < device.uuids.size(); ++i) |
| 591 uuids[i] = WebString::fromUTF8(device.uuids[i].c_str()); | 594 uuids[i] = WebString::fromUTF8(device.uuids[i].c_str()); |
| 592 | 595 |
| 593 pending_requests_.Lookup(request_id) | 596 pending_requests_.Lookup(request_id) |
| 594 ->onSuccess(blink::adoptWebPtr(new WebBluetoothDevice( | 597 ->onSuccess(base::WrapUnique(new WebBluetoothDevice( |
| 595 WebString::fromUTF8(device.id), WebString(device.name), | 598 WebString::fromUTF8(device.id), WebString(device.name), |
| 596 device.tx_power, device.rssi, device.device_class, | 599 device.tx_power, device.rssi, device.device_class, |
| 597 GetWebVendorIdSource(device.vendor_id_source), device.vendor_id, | 600 GetWebVendorIdSource(device.vendor_id_source), device.vendor_id, |
| 598 device.product_id, device.product_version, uuids))); | 601 device.product_id, device.product_version, uuids))); |
| 599 pending_requests_.Remove(request_id); | 602 pending_requests_.Remove(request_id); |
| 600 } | 603 } |
| 601 | 604 |
| 602 void BluetoothDispatcher::OnRequestDeviceError(int thread_id, | 605 void BluetoothDispatcher::OnRequestDeviceError(int thread_id, |
| 603 int request_id, | 606 int request_id, |
| 604 WebBluetoothError error) { | 607 WebBluetoothError error) { |
| (...skipping 19 matching lines...) Expand all Loading... |
| 624 } | 627 } |
| 625 | 628 |
| 626 void BluetoothDispatcher::OnGetPrimaryServiceSuccess( | 629 void BluetoothDispatcher::OnGetPrimaryServiceSuccess( |
| 627 int thread_id, | 630 int thread_id, |
| 628 int request_id, | 631 int request_id, |
| 629 const std::string& service_instance_id) { | 632 const std::string& service_instance_id) { |
| 630 DCHECK(pending_primary_service_requests_.Lookup(request_id)) << request_id; | 633 DCHECK(pending_primary_service_requests_.Lookup(request_id)) << request_id; |
| 631 BluetoothPrimaryServiceRequest* request = | 634 BluetoothPrimaryServiceRequest* request = |
| 632 pending_primary_service_requests_.Lookup(request_id); | 635 pending_primary_service_requests_.Lookup(request_id); |
| 633 request->callbacks->onSuccess( | 636 request->callbacks->onSuccess( |
| 634 blink::adoptWebPtr(new WebBluetoothRemoteGATTService( | 637 base::WrapUnique(new WebBluetoothRemoteGATTService( |
| 635 WebString::fromUTF8(service_instance_id), request->service_uuid, | 638 WebString::fromUTF8(service_instance_id), request->service_uuid, |
| 636 true /* isPrimary */, request->device_id))); | 639 true /* isPrimary */, request->device_id))); |
| 637 pending_primary_service_requests_.Remove(request_id); | 640 pending_primary_service_requests_.Remove(request_id); |
| 638 } | 641 } |
| 639 | 642 |
| 640 void BluetoothDispatcher::OnGetPrimaryServiceError(int thread_id, | 643 void BluetoothDispatcher::OnGetPrimaryServiceError(int thread_id, |
| 641 int request_id, | 644 int request_id, |
| 642 WebBluetoothError error) { | 645 WebBluetoothError error) { |
| 643 DCHECK(pending_primary_service_requests_.Lookup(request_id)) << request_id; | 646 DCHECK(pending_primary_service_requests_.Lookup(request_id)) << request_id; |
| 644 | 647 |
| 645 pending_primary_service_requests_.Lookup(request_id) | 648 pending_primary_service_requests_.Lookup(request_id) |
| 646 ->callbacks->onError(WebBluetoothError(error)); | 649 ->callbacks->onError(WebBluetoothError(error)); |
| 647 pending_primary_service_requests_.Remove(request_id); | 650 pending_primary_service_requests_.Remove(request_id); |
| 648 } | 651 } |
| 649 | 652 |
| 650 void BluetoothDispatcher::OnGetCharacteristicSuccess( | 653 void BluetoothDispatcher::OnGetCharacteristicSuccess( |
| 651 int thread_id, | 654 int thread_id, |
| 652 int request_id, | 655 int request_id, |
| 653 const std::string& characteristic_instance_id, | 656 const std::string& characteristic_instance_id, |
| 654 uint32_t characteristic_properties) { | 657 uint32_t characteristic_properties) { |
| 655 DCHECK(pending_characteristic_requests_.Lookup(request_id)) << request_id; | 658 DCHECK(pending_characteristic_requests_.Lookup(request_id)) << request_id; |
| 656 | 659 |
| 657 BluetoothCharacteristicRequest* request = | 660 BluetoothCharacteristicRequest* request = |
| 658 pending_characteristic_requests_.Lookup(request_id); | 661 pending_characteristic_requests_.Lookup(request_id); |
| 659 request->callbacks->onSuccess( | 662 request->callbacks->onSuccess( |
| 660 blink::adoptWebPtr(new WebBluetoothRemoteGATTCharacteristicInit( | 663 base::WrapUnique(new WebBluetoothRemoteGATTCharacteristicInit( |
| 661 request->service_instance_id, | 664 request->service_instance_id, |
| 662 WebString::fromUTF8(characteristic_instance_id), | 665 WebString::fromUTF8(characteristic_instance_id), |
| 663 request->characteristic_uuid, characteristic_properties))); | 666 request->characteristic_uuid, characteristic_properties))); |
| 664 | 667 |
| 665 pending_characteristic_requests_.Remove(request_id); | 668 pending_characteristic_requests_.Remove(request_id); |
| 666 } | 669 } |
| 667 | 670 |
| 668 void BluetoothDispatcher::OnGetCharacteristicError(int thread_id, | 671 void BluetoothDispatcher::OnGetCharacteristicError(int thread_id, |
| 669 int request_id, | 672 int request_id, |
| 670 WebBluetoothError error) { | 673 WebBluetoothError error) { |
| 671 DCHECK(pending_characteristic_requests_.Lookup(request_id)) << request_id; | 674 DCHECK(pending_characteristic_requests_.Lookup(request_id)) << request_id; |
| 672 | 675 |
| 673 pending_characteristic_requests_.Lookup(request_id) | 676 pending_characteristic_requests_.Lookup(request_id) |
| 674 ->callbacks->onError(WebBluetoothError(error)); | 677 ->callbacks->onError(WebBluetoothError(error)); |
| 675 | 678 |
| 676 pending_characteristic_requests_.Remove(request_id); | 679 pending_characteristic_requests_.Remove(request_id); |
| 677 } | 680 } |
| 678 | 681 |
| 679 void BluetoothDispatcher::OnGetCharacteristicsSuccess( | 682 void BluetoothDispatcher::OnGetCharacteristicsSuccess( |
| 680 int thread_id, | 683 int thread_id, |
| 681 int request_id, | 684 int request_id, |
| 682 const std::vector<std::string>& characteristics_instance_ids, | 685 const std::vector<std::string>& characteristics_instance_ids, |
| 683 const std::vector<std::string>& characteristics_uuids, | 686 const std::vector<std::string>& characteristics_uuids, |
| 684 const std::vector<uint32_t>& characteristics_properties) { | 687 const std::vector<uint32_t>& characteristics_properties) { |
| 685 DCHECK(pending_characteristics_requests_.Lookup(request_id)) << request_id; | 688 DCHECK(pending_characteristics_requests_.Lookup(request_id)) << request_id; |
| 686 | 689 |
| 687 BluetoothCharacteristicsRequest* request = | 690 BluetoothCharacteristicsRequest* request = |
| 688 pending_characteristics_requests_.Lookup(request_id); | 691 pending_characteristics_requests_.Lookup(request_id); |
| 689 | 692 |
| 690 WebVector<blink::WebBluetoothRemoteGATTCharacteristicInit*>* characteristics = | 693 // TODO(dcheng): This WebVector should use smart pointers. |
| 691 new WebVector<WebBluetoothRemoteGATTCharacteristicInit*>( | 694 std::unique_ptr<WebVector<blink::WebBluetoothRemoteGATTCharacteristicInit*>> |
| 692 characteristics_instance_ids.size()); | 695 characteristics(new WebVector<WebBluetoothRemoteGATTCharacteristicInit*>( |
| 696 characteristics_instance_ids.size())); |
| 693 | 697 |
| 694 for (size_t i = 0; i < characteristics_instance_ids.size(); i++) { | 698 for (size_t i = 0; i < characteristics_instance_ids.size(); i++) { |
| 695 (*characteristics)[i] = new WebBluetoothRemoteGATTCharacteristicInit( | 699 (*characteristics)[i] = new WebBluetoothRemoteGATTCharacteristicInit( |
| 696 request->service_instance_id, | 700 request->service_instance_id, |
| 697 WebString::fromUTF8(characteristics_instance_ids[i]), | 701 WebString::fromUTF8(characteristics_instance_ids[i]), |
| 698 WebString::fromUTF8(characteristics_uuids[i]), | 702 WebString::fromUTF8(characteristics_uuids[i]), |
| 699 characteristics_properties[i]); | 703 characteristics_properties[i]); |
| 700 } | 704 } |
| 701 | 705 |
| 702 request->callbacks->onSuccess(blink::adoptWebPtr(characteristics)); | 706 request->callbacks->onSuccess(std::move(characteristics)); |
| 703 | 707 |
| 704 pending_characteristics_requests_.Remove(request_id); | 708 pending_characteristics_requests_.Remove(request_id); |
| 705 } | 709 } |
| 706 | 710 |
| 707 void BluetoothDispatcher::OnGetCharacteristicsError(int thread_id, | 711 void BluetoothDispatcher::OnGetCharacteristicsError(int thread_id, |
| 708 int request_id, | 712 int request_id, |
| 709 WebBluetoothError error) { | 713 WebBluetoothError error) { |
| 710 DCHECK(pending_characteristics_requests_.Lookup(request_id)) << request_id; | 714 DCHECK(pending_characteristics_requests_.Lookup(request_id)) << request_id; |
| 711 | 715 |
| 712 pending_characteristics_requests_.Lookup(request_id) | 716 pending_characteristics_requests_.Lookup(request_id) |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 820 int thread_id, | 824 int thread_id, |
| 821 const std::string& characteristic_instance_id, | 825 const std::string& characteristic_instance_id, |
| 822 const std::vector<uint8_t> new_value) { | 826 const std::vector<uint8_t> new_value) { |
| 823 auto active_iter = active_characteristics_.find(characteristic_instance_id); | 827 auto active_iter = active_characteristics_.find(characteristic_instance_id); |
| 824 if (active_iter != active_characteristics_.end()) { | 828 if (active_iter != active_characteristics_.end()) { |
| 825 active_iter->second->dispatchCharacteristicValueChanged(new_value); | 829 active_iter->second->dispatchCharacteristicValueChanged(new_value); |
| 826 } | 830 } |
| 827 } | 831 } |
| 828 | 832 |
| 829 } // namespace content | 833 } // namespace content |
| OLD | NEW |