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/web_bluetooth_impl.h" | 5 #include "content/renderer/bluetooth/web_bluetooth_impl.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 #include <utility> | 8 #include <utility> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
50 base::Unretained(this), | 50 base::Unretained(this), |
51 base::Passed(base::WrapUnique(callbacks)))); | 51 base::Passed(base::WrapUnique(callbacks)))); |
52 } | 52 } |
53 | 53 |
54 void WebBluetoothImpl::connect( | 54 void WebBluetoothImpl::connect( |
55 const blink::WebString& device_id, | 55 const blink::WebString& device_id, |
56 blink::WebBluetoothDevice* device, | 56 blink::WebBluetoothDevice* device, |
57 blink::WebBluetoothRemoteGATTServerConnectCallbacks* callbacks) { | 57 blink::WebBluetoothRemoteGATTServerConnectCallbacks* callbacks) { |
58 // TODO(crbug.com/495270): After the Bluetooth Tree is implemented, there will | 58 // TODO(crbug.com/495270): After the Bluetooth Tree is implemented, there will |
59 // only be one object per device. But for now we replace the previous object. | 59 // only be one object per device. But for now we replace the previous object. |
60 connected_devices_[device_id.utf8()] = device; | 60 WebBluetoothDeviceId device_id_obj = WebBluetoothDeviceId(device_id.utf8()); |
| 61 connected_devices_[device_id_obj] = device; |
61 | 62 |
62 GetWebBluetoothService().RemoteServerConnect( | 63 GetWebBluetoothService().RemoteServerConnect( |
63 mojo::String::From(device_id), | 64 std::move(device_id_obj), |
64 base::Bind(&WebBluetoothImpl::OnConnectComplete, base::Unretained(this), | 65 base::Bind(&WebBluetoothImpl::OnConnectComplete, base::Unretained(this), |
65 base::Passed(base::WrapUnique(callbacks)))); | 66 base::Passed(base::WrapUnique(callbacks)))); |
66 } | 67 } |
67 | 68 |
68 void WebBluetoothImpl::disconnect(const blink::WebString& device_id) { | 69 void WebBluetoothImpl::disconnect(const blink::WebString& device_id) { |
69 connected_devices_.erase(device_id.utf8()); | 70 WebBluetoothDeviceId device_id_obj = WebBluetoothDeviceId(device_id.utf8()); |
| 71 connected_devices_.erase(device_id_obj); |
70 | 72 |
71 GetWebBluetoothService().RemoteServerDisconnect( | 73 GetWebBluetoothService().RemoteServerDisconnect(std::move(device_id_obj)); |
72 mojo::String::From(device_id)); | |
73 } | 74 } |
74 | 75 |
75 void WebBluetoothImpl::getPrimaryServices( | 76 void WebBluetoothImpl::getPrimaryServices( |
76 const blink::WebString& device_id, | 77 const blink::WebString& device_id, |
77 int32_t quantity, | 78 int32_t quantity, |
78 const blink::WebString& services_uuid, | 79 const blink::WebString& services_uuid, |
79 blink::WebBluetoothGetPrimaryServicesCallbacks* callbacks) { | 80 blink::WebBluetoothGetPrimaryServicesCallbacks* callbacks) { |
80 GetWebBluetoothService().RemoteServerGetPrimaryServices( | 81 GetWebBluetoothService().RemoteServerGetPrimaryServices( |
81 mojo::String::From(device_id), | 82 WebBluetoothDeviceId(device_id.utf8()), |
82 static_cast<blink::mojom::WebBluetoothGATTQueryQuantity>(quantity), | 83 static_cast<blink::mojom::WebBluetoothGATTQueryQuantity>(quantity), |
83 services_uuid.isEmpty() | 84 services_uuid.isEmpty() |
84 ? base::nullopt | 85 ? base::nullopt |
85 : base::make_optional(device::BluetoothUUID(services_uuid.utf8())), | 86 : base::make_optional(device::BluetoothUUID(services_uuid.utf8())), |
86 base::Bind(&WebBluetoothImpl::OnGetPrimaryServicesComplete, | 87 base::Bind(&WebBluetoothImpl::OnGetPrimaryServicesComplete, |
87 base::Unretained(this), device_id, | 88 base::Unretained(this), device_id, |
88 base::Passed(base::WrapUnique(callbacks)))); | 89 base::Passed(base::WrapUnique(callbacks)))); |
89 } | 90 } |
90 | 91 |
91 void WebBluetoothImpl::getCharacteristics( | 92 void WebBluetoothImpl::getCharacteristics( |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
177 void WebBluetoothImpl::OnRequestDeviceComplete( | 178 void WebBluetoothImpl::OnRequestDeviceComplete( |
178 std::unique_ptr<blink::WebBluetoothRequestDeviceCallbacks> callbacks, | 179 std::unique_ptr<blink::WebBluetoothRequestDeviceCallbacks> callbacks, |
179 const blink::mojom::WebBluetoothError error, | 180 const blink::mojom::WebBluetoothError error, |
180 blink::mojom::WebBluetoothDevicePtr device) { | 181 blink::mojom::WebBluetoothDevicePtr device) { |
181 if (error == blink::mojom::WebBluetoothError::SUCCESS) { | 182 if (error == blink::mojom::WebBluetoothError::SUCCESS) { |
182 blink::WebVector<blink::WebString> uuids(device->uuids.size()); | 183 blink::WebVector<blink::WebString> uuids(device->uuids.size()); |
183 for (size_t i = 0; i < device->uuids.size(); ++i) | 184 for (size_t i = 0; i < device->uuids.size(); ++i) |
184 uuids[i] = blink::WebString::fromUTF8(device->uuids[i]); | 185 uuids[i] = blink::WebString::fromUTF8(device->uuids[i]); |
185 | 186 |
186 callbacks->onSuccess(base::WrapUnique(new blink::WebBluetoothDeviceInit( | 187 callbacks->onSuccess(base::WrapUnique(new blink::WebBluetoothDeviceInit( |
187 blink::WebString::fromUTF8(device->id), | 188 blink::WebString::fromUTF8(device->id.str()), |
188 blink::WebString::fromUTF8(device->name), uuids))); | 189 blink::WebString::fromUTF8(device->name), uuids))); |
189 } else { | 190 } else { |
190 callbacks->onError(ToInt32(error)); | 191 callbacks->onError(ToInt32(error)); |
191 } | 192 } |
192 } | 193 } |
193 | 194 |
194 void WebBluetoothImpl::GattServerDisconnected(const mojo::String& device_id) { | 195 void WebBluetoothImpl::GattServerDisconnected( |
| 196 const WebBluetoothDeviceId& device_id) { |
195 auto device_iter = connected_devices_.find(device_id); | 197 auto device_iter = connected_devices_.find(device_id); |
196 if (device_iter != connected_devices_.end()) { | 198 if (device_iter != connected_devices_.end()) { |
197 // Remove device from the map before calling dispatchGattServerDisconnected | 199 // Remove device from the map before calling dispatchGattServerDisconnected |
198 // to avoid removing a device the gattserverdisconnected event handler might | 200 // to avoid removing a device the gattserverdisconnected event handler might |
199 // have re-connected. | 201 // have re-connected. |
200 blink::WebBluetoothDevice* device = device_iter->second; | 202 blink::WebBluetoothDevice* device = device_iter->second; |
201 connected_devices_.erase(device_iter); | 203 connected_devices_.erase(device_iter); |
202 device->dispatchGattServerDisconnected(); | 204 device->dispatchGattServerDisconnected(); |
203 } | 205 } |
204 } | 206 } |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
313 // Create an associated interface ptr and pass it to the WebBluetoothService | 315 // Create an associated interface ptr and pass it to the WebBluetoothService |
314 // so that it can send us events without us prompting. | 316 // so that it can send us events without us prompting. |
315 blink::mojom::WebBluetoothServiceClientAssociatedPtrInfo ptr_info; | 317 blink::mojom::WebBluetoothServiceClientAssociatedPtrInfo ptr_info; |
316 binding_.Bind(&ptr_info, web_bluetooth_service_.associated_group()); | 318 binding_.Bind(&ptr_info, web_bluetooth_service_.associated_group()); |
317 web_bluetooth_service_->SetClient(std::move(ptr_info)); | 319 web_bluetooth_service_->SetClient(std::move(ptr_info)); |
318 } | 320 } |
319 return *web_bluetooth_service_; | 321 return *web_bluetooth_service_; |
320 } | 322 } |
321 | 323 |
322 } // namespace content | 324 } // namespace content |
OLD | NEW |