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 |