Chromium Code Reviews| 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 "base/lazy_instance.h" | 9 #include "base/lazy_instance.h" |
| 10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
| 11 #include "base/message_loop/message_loop.h" | 11 #include "base/message_loop/message_loop.h" |
| 12 #include "base/thread_task_runner_handle.h" | 12 #include "base/thread_task_runner_handle.h" |
| 13 #include "content/child/mojo/type_converters.h" | |
| 13 #include "content/child/thread_safe_sender.h" | 14 #include "content/child/thread_safe_sender.h" |
| 14 #include "content/common/bluetooth/bluetooth_messages.h" | 15 #include "content/common/bluetooth/bluetooth_messages.h" |
| 16 #include "content/public/common/service_registry.h" | |
| 17 #include "content/renderer/bluetooth/bluetooth_type_converters.h" | |
| 15 #include "device/bluetooth/bluetooth_uuid.h" | 18 #include "device/bluetooth/bluetooth_uuid.h" |
| 19 #include "mojo/public/cpp/bindings/array.h" | |
| 16 #include "third_party/WebKit/public/platform/WebPassOwnPtr.h" | 20 #include "third_party/WebKit/public/platform/WebPassOwnPtr.h" |
| 17 #include "third_party/WebKit/public/platform/modules/bluetooth/WebBluetoothDevic e.h" | 21 #include "third_party/WebKit/public/platform/modules/bluetooth/WebBluetoothDevic e.h" |
| 18 #include "third_party/WebKit/public/platform/modules/bluetooth/WebBluetoothError .h" | 22 #include "third_party/WebKit/public/platform/modules/bluetooth/WebBluetoothError .h" |
| 19 #include "third_party/WebKit/public/platform/modules/bluetooth/WebBluetoothRemot eGATTCharacteristic.h" | 23 #include "third_party/WebKit/public/platform/modules/bluetooth/WebBluetoothRemot eGATTCharacteristic.h" |
| 20 #include "third_party/WebKit/public/platform/modules/bluetooth/WebBluetoothRemot eGATTCharacteristicInit.h" | 24 #include "third_party/WebKit/public/platform/modules/bluetooth/WebBluetoothRemot eGATTCharacteristicInit.h" |
| 21 #include "third_party/WebKit/public/platform/modules/bluetooth/WebBluetoothRemot eGATTService.h" | 25 #include "third_party/WebKit/public/platform/modules/bluetooth/WebBluetoothRemot eGATTService.h" |
| 22 #include "third_party/WebKit/public/platform/modules/bluetooth/WebRequestDeviceO ptions.h" | 26 #include "third_party/WebKit/public/platform/modules/bluetooth/WebRequestDeviceO ptions.h" |
| 23 | 27 |
| 24 using blink::WebBluetoothDevice; | 28 using blink::WebBluetoothDevice; |
| 25 using blink::WebBluetoothError; | |
| 26 using blink::WebBluetoothRemoteGATTCharacteristicInit; | 29 using blink::WebBluetoothRemoteGATTCharacteristicInit; |
| 27 using blink::WebBluetoothRemoteGATTServerConnectCallbacks; | 30 using blink::WebBluetoothRemoteGATTServerConnectCallbacks; |
| 28 using blink::WebBluetoothRemoteGATTService; | 31 using blink::WebBluetoothRemoteGATTService; |
| 29 using blink::WebBluetoothReadValueCallbacks; | 32 using blink::WebBluetoothReadValueCallbacks; |
| 30 using blink::WebBluetoothRequestDeviceCallbacks; | 33 using blink::WebBluetoothRequestDeviceCallbacks; |
| 31 using blink::WebBluetoothScanFilter; | 34 using blink::WebBluetoothScanFilter; |
| 32 using blink::WebRequestDeviceOptions; | 35 using blink::WebRequestDeviceOptions; |
| 33 using blink::WebString; | 36 using blink::WebString; |
| 34 using blink::WebVector; | 37 using blink::WebVector; |
| 35 using NotificationsRequestType = | 38 using NotificationsRequestType = |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 69 BluetoothCharacteristicsRequest( | 72 BluetoothCharacteristicsRequest( |
| 70 blink::WebString service_instance_id, | 73 blink::WebString service_instance_id, |
| 71 blink::WebBluetoothGetCharacteristicsCallbacks* callbacks) | 74 blink::WebBluetoothGetCharacteristicsCallbacks* callbacks) |
| 72 : service_instance_id(service_instance_id), callbacks(callbacks) {} | 75 : service_instance_id(service_instance_id), callbacks(callbacks) {} |
| 73 ~BluetoothCharacteristicsRequest() {} | 76 ~BluetoothCharacteristicsRequest() {} |
| 74 | 77 |
| 75 blink::WebString service_instance_id; | 78 blink::WebString service_instance_id; |
| 76 scoped_ptr<blink::WebBluetoothGetCharacteristicsCallbacks> callbacks; | 79 scoped_ptr<blink::WebBluetoothGetCharacteristicsCallbacks> callbacks; |
| 77 }; | 80 }; |
| 78 | 81 |
| 79 // Struct that holds a pending WriteValue request. | |
| 80 struct BluetoothWriteValueRequest { | |
| 81 BluetoothWriteValueRequest(const blink::WebVector<uint8_t>& value, | |
| 82 blink::WebBluetoothWriteValueCallbacks* callbacks) | |
| 83 : value(value), callbacks(callbacks) {} | |
| 84 ~BluetoothWriteValueRequest() {} | |
| 85 | |
| 86 const blink::WebVector<uint8_t> value; | |
| 87 scoped_ptr<blink::WebBluetoothWriteValueCallbacks> callbacks; | |
| 88 }; | |
| 89 | |
| 90 // Struct that holds a pending Start/StopNotifications request. | 82 // Struct that holds a pending Start/StopNotifications request. |
| 91 struct BluetoothNotificationsRequest { | 83 struct BluetoothNotificationsRequest { |
| 92 BluetoothNotificationsRequest( | 84 BluetoothNotificationsRequest( |
| 93 int frame_routing_id, | 85 int frame_routing_id, |
| 94 const std::string characteristic_instance_id, | 86 const std::string characteristic_instance_id, |
| 95 blink::WebBluetoothRemoteGATTCharacteristic* characteristic, | 87 blink::WebBluetoothRemoteGATTCharacteristic* characteristic, |
| 96 blink::WebBluetoothNotificationsCallbacks* callbacks, | 88 blink::WebBluetoothNotificationsCallbacks* callbacks, |
| 97 NotificationsRequestType type) | 89 NotificationsRequestType type) |
| 98 : frame_routing_id(frame_routing_id), | 90 : frame_routing_id(frame_routing_id), |
| 99 characteristic_instance_id(characteristic_instance_id), | 91 characteristic_instance_id(characteristic_instance_id), |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 137 return WebBluetoothDevice::VendorIDSource::Bluetooth; | 129 return WebBluetoothDevice::VendorIDSource::Bluetooth; |
| 138 case device::BluetoothDevice::VENDOR_ID_USB: | 130 case device::BluetoothDevice::VENDOR_ID_USB: |
| 139 return WebBluetoothDevice::VendorIDSource::USB; | 131 return WebBluetoothDevice::VendorIDSource::USB; |
| 140 } | 132 } |
| 141 NOTREACHED(); | 133 NOTREACHED(); |
| 142 return WebBluetoothDevice::VendorIDSource::Unknown; | 134 return WebBluetoothDevice::VendorIDSource::Unknown; |
| 143 } | 135 } |
| 144 | 136 |
| 145 } // namespace | 137 } // namespace |
| 146 | 138 |
| 147 BluetoothDispatcher::BluetoothDispatcher(ThreadSafeSender* sender) | 139 BluetoothDispatcher::BluetoothDispatcher(ThreadSafeSender* sender, |
| 148 : thread_safe_sender_(sender) { | 140 ServiceRegistry* service_registry) |
| 141 : thread_safe_sender_(sender), service_registry_(service_registry) { | |
| 149 g_dispatcher_tls.Pointer()->Set(static_cast<void*>(this)); | 142 g_dispatcher_tls.Pointer()->Set(static_cast<void*>(this)); |
| 150 } | 143 } |
| 151 | 144 |
| 152 BluetoothDispatcher::~BluetoothDispatcher() { | 145 BluetoothDispatcher::~BluetoothDispatcher() { |
|
ortuno
2016/03/09 01:21:22
FWIW I tried setting a error handler but it never
| |
| 153 g_dispatcher_tls.Pointer()->Set(kHasBeenDeleted); | 146 g_dispatcher_tls.Pointer()->Set(kHasBeenDeleted); |
| 154 } | 147 } |
| 155 | 148 |
| 156 BluetoothDispatcher* BluetoothDispatcher::GetOrCreateThreadSpecificInstance( | 149 BluetoothDispatcher* BluetoothDispatcher::GetOrCreateThreadSpecificInstance( |
| 157 ThreadSafeSender* thread_safe_sender) { | 150 ThreadSafeSender* thread_safe_sender, |
| 151 ServiceRegistry* service_registry) { | |
| 158 if (g_dispatcher_tls.Pointer()->Get() == kHasBeenDeleted) { | 152 if (g_dispatcher_tls.Pointer()->Get() == kHasBeenDeleted) { |
| 159 NOTREACHED() << "Re-instantiating TLS BluetoothDispatcher."; | 153 NOTREACHED() << "Re-instantiating TLS BluetoothDispatcher."; |
| 160 g_dispatcher_tls.Pointer()->Set(NULL); | 154 g_dispatcher_tls.Pointer()->Set(NULL); |
| 161 } | 155 } |
| 162 if (g_dispatcher_tls.Pointer()->Get()) | 156 if (g_dispatcher_tls.Pointer()->Get()) |
| 163 return static_cast<BluetoothDispatcher*>(g_dispatcher_tls.Pointer()->Get()); | 157 return static_cast<BluetoothDispatcher*>(g_dispatcher_tls.Pointer()->Get()); |
| 164 | 158 |
| 165 BluetoothDispatcher* dispatcher = new BluetoothDispatcher(thread_safe_sender); | 159 BluetoothDispatcher* dispatcher = |
| 160 new BluetoothDispatcher(thread_safe_sender, service_registry); | |
| 166 if (CurrentWorkerId()) | 161 if (CurrentWorkerId()) |
| 167 WorkerThread::AddObserver(dispatcher); | 162 WorkerThread::AddObserver(dispatcher); |
| 168 return dispatcher; | 163 return dispatcher; |
| 169 } | 164 } |
| 170 | 165 |
| 171 bool BluetoothDispatcher::Send(IPC::Message* msg) { | 166 bool BluetoothDispatcher::Send(IPC::Message* msg) { |
| 172 return thread_safe_sender_->Send(msg); | 167 return thread_safe_sender_->Send(msg); |
| 173 } | 168 } |
| 174 | 169 |
| 175 void BluetoothDispatcher::OnMessageReceived(const IPC::Message& msg) { | 170 void BluetoothDispatcher::OnMessageReceived(const IPC::Message& msg) { |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 191 IPC_MESSAGE_HANDLER(BluetoothMsg_GetCharacteristicError, | 186 IPC_MESSAGE_HANDLER(BluetoothMsg_GetCharacteristicError, |
| 192 OnGetCharacteristicError); | 187 OnGetCharacteristicError); |
| 193 IPC_MESSAGE_HANDLER(BluetoothMsg_GetCharacteristicsSuccess, | 188 IPC_MESSAGE_HANDLER(BluetoothMsg_GetCharacteristicsSuccess, |
| 194 OnGetCharacteristicsSuccess); | 189 OnGetCharacteristicsSuccess); |
| 195 IPC_MESSAGE_HANDLER(BluetoothMsg_GetCharacteristicsError, | 190 IPC_MESSAGE_HANDLER(BluetoothMsg_GetCharacteristicsError, |
| 196 OnGetCharacteristicsError); | 191 OnGetCharacteristicsError); |
| 197 IPC_MESSAGE_HANDLER(BluetoothMsg_ReadCharacteristicValueSuccess, | 192 IPC_MESSAGE_HANDLER(BluetoothMsg_ReadCharacteristicValueSuccess, |
| 198 OnReadValueSuccess); | 193 OnReadValueSuccess); |
| 199 IPC_MESSAGE_HANDLER(BluetoothMsg_ReadCharacteristicValueError, | 194 IPC_MESSAGE_HANDLER(BluetoothMsg_ReadCharacteristicValueError, |
| 200 OnReadValueError); | 195 OnReadValueError); |
| 201 IPC_MESSAGE_HANDLER(BluetoothMsg_WriteCharacteristicValueSuccess, | |
| 202 OnWriteValueSuccess); | |
| 203 IPC_MESSAGE_HANDLER(BluetoothMsg_WriteCharacteristicValueError, | |
| 204 OnWriteValueError); | |
| 205 IPC_MESSAGE_HANDLER(BluetoothMsg_StartNotificationsSuccess, | 196 IPC_MESSAGE_HANDLER(BluetoothMsg_StartNotificationsSuccess, |
| 206 OnStartNotificationsSuccess) | 197 OnStartNotificationsSuccess) |
| 207 IPC_MESSAGE_HANDLER(BluetoothMsg_StartNotificationsError, | 198 IPC_MESSAGE_HANDLER(BluetoothMsg_StartNotificationsError, |
| 208 OnStartNotificationsError) | 199 OnStartNotificationsError) |
| 209 IPC_MESSAGE_HANDLER(BluetoothMsg_StopNotificationsSuccess, | 200 IPC_MESSAGE_HANDLER(BluetoothMsg_StopNotificationsSuccess, |
| 210 OnStopNotificationsSuccess) | 201 OnStopNotificationsSuccess) |
| 211 IPC_MESSAGE_HANDLER(BluetoothMsg_CharacteristicValueChanged, | 202 IPC_MESSAGE_HANDLER(BluetoothMsg_CharacteristicValueChanged, |
| 212 OnCharacteristicValueChanged) | 203 OnCharacteristicValueChanged) |
| 213 IPC_MESSAGE_UNHANDLED(handled = false) | 204 IPC_MESSAGE_UNHANDLED(handled = false) |
| 214 IPC_END_MESSAGE_MAP() | 205 IPC_END_MESSAGE_MAP() |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 304 Send(new BluetoothHostMsg_ReadValue(CurrentWorkerId(), request_id, | 295 Send(new BluetoothHostMsg_ReadValue(CurrentWorkerId(), request_id, |
| 305 frame_routing_id, | 296 frame_routing_id, |
| 306 characteristic_instance_id.utf8())); | 297 characteristic_instance_id.utf8())); |
| 307 } | 298 } |
| 308 | 299 |
| 309 void BluetoothDispatcher::writeValue( | 300 void BluetoothDispatcher::writeValue( |
| 310 int frame_routing_id, | 301 int frame_routing_id, |
| 311 const blink::WebString& characteristic_instance_id, | 302 const blink::WebString& characteristic_instance_id, |
| 312 const blink::WebVector<uint8_t>& value, | 303 const blink::WebVector<uint8_t>& value, |
| 313 blink::WebBluetoothWriteValueCallbacks* callbacks) { | 304 blink::WebBluetoothWriteValueCallbacks* callbacks) { |
| 314 int request_id = pending_write_value_requests_.Add( | 305 GetBluetoothService()->RemoteCharacteristicWriteValue( |
| 315 new BluetoothWriteValueRequest(value, callbacks)); | 306 frame_routing_id, mojo::String::From(characteristic_instance_id), |
| 316 Send(new BluetoothHostMsg_WriteValue( | 307 mojo::Array<uint8_t>::From(value), |
| 317 CurrentWorkerId(), request_id, frame_routing_id, | 308 base::Bind(&BluetoothDispatcher::OnWriteValue, base::Unretained(this), |
|
ortuno
2016/03/09 01:21:23
This is safe because if the class gets destroyed t
Ken Rockot(use gerrit already)
2016/03/09 19:31:26
Correct, the callback will never be invoked if the
| |
| 318 characteristic_instance_id.utf8(), | 309 value, base::Passed(make_scoped_ptr(callbacks)))); |
| 319 std::vector<uint8_t>(value.begin(), value.end()))); | 310 } |
| 311 | |
| 312 void BluetoothDispatcher::OnWriteValue( | |
| 313 const blink::WebVector<uint8_t>& value, | |
| 314 scoped_ptr<blink::WebBluetoothWriteValueCallbacks> callbacks, | |
| 315 blink::mojom::WebBluetoothError error) { | |
| 316 if (error == blink::mojom::WebBluetoothError::SUCCESS) { | |
|
ortuno
2016/03/09 01:21:23
It would be nice if there was a way we could do th
Ken Rockot(use gerrit already)
2016/03/09 19:31:26
Can you elaborate on what a more ideal situation w
ortuno
2016/03/16 16:29:45
Jeffrey started a thread about it a while ago: htt
| |
| 317 callbacks->onSuccess(value); | |
| 318 } else { | |
| 319 callbacks->onError(error); | |
| 320 } | |
| 320 } | 321 } |
| 321 | 322 |
| 322 void BluetoothDispatcher::startNotifications( | 323 void BluetoothDispatcher::startNotifications( |
| 323 int frame_routing_id, | 324 int frame_routing_id, |
| 324 const blink::WebString& characteristic_instance_id, | 325 const blink::WebString& characteristic_instance_id, |
| 325 blink::WebBluetoothRemoteGATTCharacteristic* characteristic, | 326 blink::WebBluetoothRemoteGATTCharacteristic* characteristic, |
| 326 blink::WebBluetoothNotificationsCallbacks* callbacks) { | 327 blink::WebBluetoothNotificationsCallbacks* callbacks) { |
| 327 int request_id = QueueNotificationRequest( | 328 int request_id = QueueNotificationRequest( |
| 328 frame_routing_id, characteristic_instance_id.utf8(), characteristic, | 329 frame_routing_id, characteristic_instance_id.utf8(), characteristic, |
| 329 callbacks, NotificationsRequestType::START); | 330 callbacks, NotificationsRequestType::START); |
| (...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 622 ->onSuccess(blink::adoptWebPtr(new WebBluetoothDevice( | 623 ->onSuccess(blink::adoptWebPtr(new WebBluetoothDevice( |
| 623 WebString::fromUTF8(device.id), WebString(device.name), | 624 WebString::fromUTF8(device.id), WebString(device.name), |
| 624 device.tx_power, device.rssi, device.device_class, | 625 device.tx_power, device.rssi, device.device_class, |
| 625 GetWebVendorIdSource(device.vendor_id_source), device.vendor_id, | 626 GetWebVendorIdSource(device.vendor_id_source), device.vendor_id, |
| 626 device.product_id, device.product_version, uuids))); | 627 device.product_id, device.product_version, uuids))); |
| 627 pending_requests_.Remove(request_id); | 628 pending_requests_.Remove(request_id); |
| 628 } | 629 } |
| 629 | 630 |
| 630 void BluetoothDispatcher::OnRequestDeviceError(int thread_id, | 631 void BluetoothDispatcher::OnRequestDeviceError(int thread_id, |
| 631 int request_id, | 632 int request_id, |
| 632 WebBluetoothError error) { | 633 blink::WebBluetoothError error) { |
| 633 DCHECK(pending_requests_.Lookup(request_id)) << request_id; | 634 DCHECK(pending_requests_.Lookup(request_id)) << request_id; |
| 634 pending_requests_.Lookup(request_id)->onError(WebBluetoothError(error)); | 635 pending_requests_.Lookup(request_id) |
| 636 ->onError(blink::WebBluetoothError(error)); | |
| 635 pending_requests_.Remove(request_id); | 637 pending_requests_.Remove(request_id); |
| 636 } | 638 } |
| 637 | 639 |
| 638 void BluetoothDispatcher::OnGATTServerConnectSuccess(int thread_id, | 640 void BluetoothDispatcher::OnGATTServerConnectSuccess(int thread_id, |
| 639 int request_id) { | 641 int request_id) { |
| 640 DCHECK(pending_connect_requests_.Lookup(request_id)) << request_id; | 642 DCHECK(pending_connect_requests_.Lookup(request_id)) << request_id; |
| 641 pending_connect_requests_.Lookup(request_id)->onSuccess(); | 643 pending_connect_requests_.Lookup(request_id)->onSuccess(); |
| 642 pending_connect_requests_.Remove(request_id); | 644 pending_connect_requests_.Remove(request_id); |
| 643 } | 645 } |
| 644 | 646 |
| 645 void BluetoothDispatcher::OnGATTServerConnectError(int thread_id, | 647 void BluetoothDispatcher::OnGATTServerConnectError( |
| 646 int request_id, | 648 int thread_id, |
| 647 WebBluetoothError error) { | 649 int request_id, |
| 650 blink::WebBluetoothError error) { | |
| 648 DCHECK(pending_connect_requests_.Lookup(request_id)) << request_id; | 651 DCHECK(pending_connect_requests_.Lookup(request_id)) << request_id; |
| 649 pending_connect_requests_.Lookup(request_id) | 652 pending_connect_requests_.Lookup(request_id) |
| 650 ->onError(WebBluetoothError(error)); | 653 ->onError(blink::WebBluetoothError(error)); |
| 651 pending_connect_requests_.Remove(request_id); | 654 pending_connect_requests_.Remove(request_id); |
| 652 } | 655 } |
| 653 | 656 |
| 654 void BluetoothDispatcher::OnGetPrimaryServiceSuccess( | 657 void BluetoothDispatcher::OnGetPrimaryServiceSuccess( |
| 655 int thread_id, | 658 int thread_id, |
| 656 int request_id, | 659 int request_id, |
| 657 const std::string& service_instance_id) { | 660 const std::string& service_instance_id) { |
| 658 DCHECK(pending_primary_service_requests_.Lookup(request_id)) << request_id; | 661 DCHECK(pending_primary_service_requests_.Lookup(request_id)) << request_id; |
| 659 BluetoothPrimaryServiceRequest* request = | 662 BluetoothPrimaryServiceRequest* request = |
| 660 pending_primary_service_requests_.Lookup(request_id); | 663 pending_primary_service_requests_.Lookup(request_id); |
| 661 request->callbacks->onSuccess( | 664 request->callbacks->onSuccess( |
| 662 blink::adoptWebPtr(new WebBluetoothRemoteGATTService( | 665 blink::adoptWebPtr(new WebBluetoothRemoteGATTService( |
| 663 WebString::fromUTF8(service_instance_id), request->service_uuid, | 666 WebString::fromUTF8(service_instance_id), request->service_uuid, |
| 664 true /* isPrimary */, request->device_id))); | 667 true /* isPrimary */, request->device_id))); |
| 665 pending_primary_service_requests_.Remove(request_id); | 668 pending_primary_service_requests_.Remove(request_id); |
| 666 } | 669 } |
| 667 | 670 |
| 668 void BluetoothDispatcher::OnGetPrimaryServiceError(int thread_id, | 671 void BluetoothDispatcher::OnGetPrimaryServiceError( |
| 669 int request_id, | 672 int thread_id, |
| 670 WebBluetoothError error) { | 673 int request_id, |
| 674 blink::WebBluetoothError error) { | |
| 671 DCHECK(pending_primary_service_requests_.Lookup(request_id)) << request_id; | 675 DCHECK(pending_primary_service_requests_.Lookup(request_id)) << request_id; |
| 672 | 676 |
| 673 pending_primary_service_requests_.Lookup(request_id) | 677 pending_primary_service_requests_.Lookup(request_id) |
| 674 ->callbacks->onError(WebBluetoothError(error)); | 678 ->callbacks->onError(blink::WebBluetoothError(error)); |
| 675 pending_primary_service_requests_.Remove(request_id); | 679 pending_primary_service_requests_.Remove(request_id); |
| 676 } | 680 } |
| 677 | 681 |
| 678 void BluetoothDispatcher::OnGetCharacteristicSuccess( | 682 void BluetoothDispatcher::OnGetCharacteristicSuccess( |
| 679 int thread_id, | 683 int thread_id, |
| 680 int request_id, | 684 int request_id, |
| 681 const std::string& characteristic_instance_id, | 685 const std::string& characteristic_instance_id, |
| 682 uint32_t characteristic_properties) { | 686 uint32_t characteristic_properties) { |
| 683 DCHECK(pending_characteristic_requests_.Lookup(request_id)) << request_id; | 687 DCHECK(pending_characteristic_requests_.Lookup(request_id)) << request_id; |
| 684 | 688 |
| 685 BluetoothCharacteristicRequest* request = | 689 BluetoothCharacteristicRequest* request = |
| 686 pending_characteristic_requests_.Lookup(request_id); | 690 pending_characteristic_requests_.Lookup(request_id); |
| 687 request->callbacks->onSuccess( | 691 request->callbacks->onSuccess( |
| 688 blink::adoptWebPtr(new WebBluetoothRemoteGATTCharacteristicInit( | 692 blink::adoptWebPtr(new WebBluetoothRemoteGATTCharacteristicInit( |
| 689 request->service_instance_id, | 693 request->service_instance_id, |
| 690 WebString::fromUTF8(characteristic_instance_id), | 694 WebString::fromUTF8(characteristic_instance_id), |
| 691 request->characteristic_uuid, characteristic_properties))); | 695 request->characteristic_uuid, characteristic_properties))); |
| 692 | 696 |
| 693 pending_characteristic_requests_.Remove(request_id); | 697 pending_characteristic_requests_.Remove(request_id); |
| 694 } | 698 } |
| 695 | 699 |
| 696 void BluetoothDispatcher::OnGetCharacteristicError(int thread_id, | 700 void BluetoothDispatcher::OnGetCharacteristicError( |
| 697 int request_id, | 701 int thread_id, |
| 698 WebBluetoothError error) { | 702 int request_id, |
| 703 blink::WebBluetoothError error) { | |
| 699 DCHECK(pending_characteristic_requests_.Lookup(request_id)) << request_id; | 704 DCHECK(pending_characteristic_requests_.Lookup(request_id)) << request_id; |
| 700 | 705 |
| 701 pending_characteristic_requests_.Lookup(request_id) | 706 pending_characteristic_requests_.Lookup(request_id) |
| 702 ->callbacks->onError(WebBluetoothError(error)); | 707 ->callbacks->onError(blink::WebBluetoothError(error)); |
| 703 | 708 |
| 704 pending_characteristic_requests_.Remove(request_id); | 709 pending_characteristic_requests_.Remove(request_id); |
| 705 } | 710 } |
| 706 | 711 |
| 707 void BluetoothDispatcher::OnGetCharacteristicsSuccess( | 712 void BluetoothDispatcher::OnGetCharacteristicsSuccess( |
| 708 int thread_id, | 713 int thread_id, |
| 709 int request_id, | 714 int request_id, |
| 710 const std::vector<std::string>& characteristics_instance_ids, | 715 const std::vector<std::string>& characteristics_instance_ids, |
| 711 const std::vector<std::string>& characteristics_uuids, | 716 const std::vector<std::string>& characteristics_uuids, |
| 712 const std::vector<uint32_t>& characteristics_properties) { | 717 const std::vector<uint32_t>& characteristics_properties) { |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 725 WebString::fromUTF8(characteristics_instance_ids[i]), | 730 WebString::fromUTF8(characteristics_instance_ids[i]), |
| 726 WebString::fromUTF8(characteristics_uuids[i]), | 731 WebString::fromUTF8(characteristics_uuids[i]), |
| 727 characteristics_properties[i]); | 732 characteristics_properties[i]); |
| 728 } | 733 } |
| 729 | 734 |
| 730 request->callbacks->onSuccess(blink::adoptWebPtr(characteristics)); | 735 request->callbacks->onSuccess(blink::adoptWebPtr(characteristics)); |
| 731 | 736 |
| 732 pending_characteristics_requests_.Remove(request_id); | 737 pending_characteristics_requests_.Remove(request_id); |
| 733 } | 738 } |
| 734 | 739 |
| 735 void BluetoothDispatcher::OnGetCharacteristicsError(int thread_id, | 740 void BluetoothDispatcher::OnGetCharacteristicsError( |
| 736 int request_id, | 741 int thread_id, |
| 737 WebBluetoothError error) { | 742 int request_id, |
| 743 blink::WebBluetoothError error) { | |
| 738 DCHECK(pending_characteristics_requests_.Lookup(request_id)) << request_id; | 744 DCHECK(pending_characteristics_requests_.Lookup(request_id)) << request_id; |
| 739 | 745 |
| 740 pending_characteristics_requests_.Lookup(request_id) | 746 pending_characteristics_requests_.Lookup(request_id) |
| 741 ->callbacks->onError(WebBluetoothError(error)); | 747 ->callbacks->onError(blink::WebBluetoothError(error)); |
| 742 | 748 |
| 743 pending_characteristics_requests_.Remove(request_id); | 749 pending_characteristics_requests_.Remove(request_id); |
| 744 } | 750 } |
| 745 | 751 |
| 746 void BluetoothDispatcher::OnReadValueSuccess( | 752 void BluetoothDispatcher::OnReadValueSuccess( |
| 747 int thread_id, | 753 int thread_id, |
| 748 int request_id, | 754 int request_id, |
| 749 const std::vector<uint8_t>& value) { | 755 const std::vector<uint8_t>& value) { |
| 750 DCHECK(pending_read_value_requests_.Lookup(request_id)) << request_id; | 756 DCHECK(pending_read_value_requests_.Lookup(request_id)) << request_id; |
| 751 | 757 |
| 752 // WebArrayBuffer is not accessible from Source/modules so we pass a | 758 // WebArrayBuffer is not accessible from Source/modules so we pass a |
| 753 // WebVector instead. | 759 // WebVector instead. |
| 754 pending_read_value_requests_.Lookup(request_id)->onSuccess(value); | 760 pending_read_value_requests_.Lookup(request_id)->onSuccess(value); |
| 755 | 761 |
| 756 pending_read_value_requests_.Remove(request_id); | 762 pending_read_value_requests_.Remove(request_id); |
| 757 } | 763 } |
| 758 | 764 |
| 759 void BluetoothDispatcher::OnReadValueError(int thread_id, | 765 void BluetoothDispatcher::OnReadValueError(int thread_id, |
| 760 int request_id, | 766 int request_id, |
| 761 WebBluetoothError error) { | 767 blink::WebBluetoothError error) { |
| 762 DCHECK(pending_read_value_requests_.Lookup(request_id)) << request_id; | 768 DCHECK(pending_read_value_requests_.Lookup(request_id)) << request_id; |
| 763 | 769 |
| 764 pending_read_value_requests_.Lookup(request_id) | 770 pending_read_value_requests_.Lookup(request_id) |
| 765 ->onError(WebBluetoothError(error)); | 771 ->onError(blink::WebBluetoothError(error)); |
| 766 | 772 |
| 767 pending_read_value_requests_.Remove(request_id); | 773 pending_read_value_requests_.Remove(request_id); |
| 768 } | 774 } |
| 769 | 775 |
| 770 void BluetoothDispatcher::OnWriteValueSuccess(int thread_id, int request_id) { | |
| 771 DCHECK(pending_write_value_requests_.Lookup(request_id)) << request_id; | |
| 772 | |
| 773 BluetoothWriteValueRequest* request = | |
| 774 pending_write_value_requests_.Lookup(request_id); | |
| 775 request->callbacks->onSuccess(request->value); | |
| 776 | |
| 777 pending_write_value_requests_.Remove(request_id); | |
| 778 } | |
| 779 | |
| 780 void BluetoothDispatcher::OnWriteValueError(int thread_id, | |
| 781 int request_id, | |
| 782 WebBluetoothError error) { | |
| 783 DCHECK(pending_write_value_requests_.Lookup(request_id)) << request_id; | |
| 784 | |
| 785 BluetoothWriteValueRequest* request = | |
| 786 pending_write_value_requests_.Lookup(request_id); | |
| 787 request->callbacks->onError(WebBluetoothError(error)); | |
| 788 | |
| 789 pending_write_value_requests_.Remove(request_id); | |
| 790 } | |
| 791 | |
| 792 void BluetoothDispatcher::OnStartNotificationsSuccess(int thread_id, | 776 void BluetoothDispatcher::OnStartNotificationsSuccess(int thread_id, |
| 793 int request_id) { | 777 int request_id) { |
| 794 DCHECK(pending_notifications_requests_.Lookup(request_id)) << request_id; | 778 DCHECK(pending_notifications_requests_.Lookup(request_id)) << request_id; |
| 795 | 779 |
| 796 BluetoothNotificationsRequest* request = | 780 BluetoothNotificationsRequest* request = |
| 797 pending_notifications_requests_.Lookup(request_id); | 781 pending_notifications_requests_.Lookup(request_id); |
| 798 | 782 |
| 799 DCHECK(notification_requests_queues_[request->characteristic_instance_id] | 783 DCHECK(notification_requests_queues_[request->characteristic_instance_id] |
| 800 .front() == request_id); | 784 .front() == request_id); |
| 801 | 785 |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 818 request->frame_routing_id, request->characteristic_instance_id, | 802 request->frame_routing_id, request->characteristic_instance_id, |
| 819 nullptr /* characteristic */, nullptr /* callbacks */, | 803 nullptr /* characteristic */, nullptr /* callbacks */, |
| 820 NotificationsRequestType::STOP); | 804 NotificationsRequestType::STOP); |
| 821 } | 805 } |
| 822 | 806 |
| 823 request->callbacks->onSuccess(); | 807 request->callbacks->onSuccess(); |
| 824 | 808 |
| 825 PopNotificationRequestQueueAndProcessNext(request_id); | 809 PopNotificationRequestQueueAndProcessNext(request_id); |
| 826 } | 810 } |
| 827 | 811 |
| 828 void BluetoothDispatcher::OnStartNotificationsError(int thread_id, | 812 void BluetoothDispatcher::OnStartNotificationsError( |
| 829 int request_id, | 813 int thread_id, |
| 830 WebBluetoothError error) { | 814 int request_id, |
| 815 blink::WebBluetoothError error) { | |
| 831 DCHECK(pending_notifications_requests_.Lookup(request_id)) << request_id; | 816 DCHECK(pending_notifications_requests_.Lookup(request_id)) << request_id; |
| 832 | 817 |
| 833 BluetoothNotificationsRequest* request = | 818 BluetoothNotificationsRequest* request = |
| 834 pending_notifications_requests_.Lookup(request_id); | 819 pending_notifications_requests_.Lookup(request_id); |
| 835 | 820 |
| 836 DCHECK(notification_requests_queues_[request->characteristic_instance_id] | 821 DCHECK(notification_requests_queues_[request->characteristic_instance_id] |
| 837 .front() == request_id); | 822 .front() == request_id); |
| 838 | 823 |
| 839 // We only send an IPC for inactive notifications. | 824 // We only send an IPC for inactive notifications. |
| 840 DCHECK( | 825 DCHECK( |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 869 void BluetoothDispatcher::OnCharacteristicValueChanged( | 854 void BluetoothDispatcher::OnCharacteristicValueChanged( |
| 870 int thread_id, | 855 int thread_id, |
| 871 const std::string& characteristic_instance_id, | 856 const std::string& characteristic_instance_id, |
| 872 const std::vector<uint8_t> new_value) { | 857 const std::vector<uint8_t> new_value) { |
| 873 auto active_iter = active_characteristics_.find(characteristic_instance_id); | 858 auto active_iter = active_characteristics_.find(characteristic_instance_id); |
| 874 if (active_iter != active_characteristics_.end()) { | 859 if (active_iter != active_characteristics_.end()) { |
| 875 active_iter->second->dispatchCharacteristicValueChanged(new_value); | 860 active_iter->second->dispatchCharacteristicValueChanged(new_value); |
| 876 } | 861 } |
| 877 } | 862 } |
| 878 | 863 |
| 864 mojom::BluetoothServicePtr& BluetoothDispatcher::GetBluetoothService() { | |
| 865 if (!bluetooth_service_) { | |
| 866 service_registry_->ConnectToRemoteService( | |
| 867 mojo::GetProxy(&bluetooth_service_)); | |
| 868 } | |
| 869 return bluetooth_service_; | |
| 870 } | |
| 871 | |
| 879 } // namespace content | 872 } // namespace content |
| OLD | NEW |