| OLD | NEW |
| (Empty) |
| 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 | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #ifndef CONTENT_RENDERER_BLUETOOTH_WEB_BLUETOOTH_IMPL_H_ | |
| 6 #define CONTENT_RENDERER_BLUETOOTH_WEB_BLUETOOTH_IMPL_H_ | |
| 7 | |
| 8 #include <stdint.h> | |
| 9 | |
| 10 #include <memory> | |
| 11 #include <string> | |
| 12 #include <unordered_map> | |
| 13 #include <vector> | |
| 14 | |
| 15 #include "base/compiler_specific.h" | |
| 16 #include "base/macros.h" | |
| 17 #include "base/memory/ref_counted.h" | |
| 18 #include "base/threading/thread_task_runner_handle.h" | |
| 19 #include "content/common/bluetooth/web_bluetooth_device_id.h" | |
| 20 #include "content/common/content_export.h" | |
| 21 #include "mojo/public/cpp/bindings/associated_binding.h" | |
| 22 #include "third_party/WebKit/public/platform/modules/bluetooth/WebBluetooth.h" | |
| 23 #include "third_party/WebKit/public/platform/modules/bluetooth/web_bluetooth.moj
om.h" | |
| 24 | |
| 25 namespace blink { | |
| 26 class WebBluetoothRemoteGATTCharacteristic; | |
| 27 } | |
| 28 | |
| 29 namespace service_manager { | |
| 30 class InterfaceProvider; | |
| 31 } | |
| 32 | |
| 33 namespace content { | |
| 34 | |
| 35 class BluetoothDispatcher; | |
| 36 | |
| 37 // Implementation of blink::WebBluetooth. Passes calls through to the thread | |
| 38 // specific BluetoothDispatcher. | |
| 39 class CONTENT_EXPORT WebBluetoothImpl | |
| 40 : NON_EXPORTED_BASE(public blink::mojom::WebBluetoothServiceClient), | |
| 41 NON_EXPORTED_BASE(public blink::WebBluetooth) { | |
| 42 public: | |
| 43 WebBluetoothImpl(service_manager::InterfaceProvider* remote_interfaces); | |
| 44 ~WebBluetoothImpl() override; | |
| 45 | |
| 46 // blink::WebBluetooth interface: | |
| 47 void requestDevice( | |
| 48 const blink::WebRequestDeviceOptions& options, | |
| 49 blink::WebBluetoothRequestDeviceCallbacks* callbacks) override; | |
| 50 void connect( | |
| 51 const blink::WebString& device_id, | |
| 52 blink::WebBluetoothDevice* device, | |
| 53 blink::WebBluetoothRemoteGATTServerConnectCallbacks* callbacks) override; | |
| 54 void disconnect(const blink::WebString& device_id) override; | |
| 55 void getPrimaryServices( | |
| 56 const blink::WebString& device_id, | |
| 57 int32_t quantity /* Corresponds to WebBluetoothGATTQueryQuantity in | |
| 58 web_bluetooth.mojom */, | |
| 59 const blink::WebString& services_uuid, | |
| 60 blink::WebBluetoothGetPrimaryServicesCallbacks* callbacks) override; | |
| 61 void getCharacteristics( | |
| 62 const blink::WebString& service_instance_id, | |
| 63 int32_t quantity /* Corresponds to WebBluetoothGATTQueryQuantity in | |
| 64 web_bluetooth.mojom */, | |
| 65 const blink::WebString& characteristics_uuid, | |
| 66 blink::WebBluetoothGetCharacteristicsCallbacks* callbacks) override; | |
| 67 void readValue(const blink::WebString& characteristic_instance_id, | |
| 68 blink::WebBluetoothReadValueCallbacks* callbacks) override; | |
| 69 void writeValue(const blink::WebString& characteristic_instance_id, | |
| 70 const blink::WebVector<uint8_t>& value, | |
| 71 blink::WebBluetoothWriteValueCallbacks*) override; | |
| 72 void startNotifications( | |
| 73 const blink::WebString& characteristic_instance_id, | |
| 74 blink::WebBluetoothNotificationsCallbacks*) override; | |
| 75 void stopNotifications( | |
| 76 const blink::WebString& characteristic_instance_id, | |
| 77 blink::WebBluetoothNotificationsCallbacks*) override; | |
| 78 void characteristicObjectRemoved( | |
| 79 const blink::WebString& characteristic_instance_id, | |
| 80 blink::WebBluetoothRemoteGATTCharacteristic* characteristic) override; | |
| 81 void registerCharacteristicObject( | |
| 82 const blink::WebString& characteristic_instance_id, | |
| 83 blink::WebBluetoothRemoteGATTCharacteristic* characteristic) override; | |
| 84 | |
| 85 private: | |
| 86 struct GetCharacteristicsCallback; | |
| 87 // WebBluetoothServiceClient methods: | |
| 88 void RemoteCharacteristicValueChanged( | |
| 89 const std::string& characteristic_instance_id, | |
| 90 const std::vector<uint8_t>& value) override; | |
| 91 void GattServerDisconnected(const WebBluetoothDeviceId& device_id) override; | |
| 92 | |
| 93 // Callbacks for WebBluetoothService calls: | |
| 94 void OnRequestDeviceComplete( | |
| 95 std::unique_ptr<blink::WebBluetoothRequestDeviceCallbacks> callbacks, | |
| 96 const blink::mojom::WebBluetoothResult result, | |
| 97 blink::mojom::WebBluetoothDevicePtr device); | |
| 98 void OnConnectComplete( | |
| 99 std::unique_ptr<blink::WebBluetoothRemoteGATTServerConnectCallbacks> | |
| 100 callbacks, | |
| 101 blink::mojom::WebBluetoothResult result); | |
| 102 void OnGetPrimaryServicesComplete( | |
| 103 const blink::WebString& device_id, | |
| 104 std::unique_ptr<blink::WebBluetoothGetPrimaryServicesCallbacks> callbacks, | |
| 105 blink::mojom::WebBluetoothResult result, | |
| 106 base::Optional< | |
| 107 std::vector<blink::mojom::WebBluetoothRemoteGATTServicePtr>> | |
| 108 services); | |
| 109 void OnGetCharacteristicsComplete( | |
| 110 const blink::WebString& service_instance_id, | |
| 111 std::unique_ptr<blink::WebBluetoothGetCharacteristicsCallbacks> callbacks, | |
| 112 blink::mojom::WebBluetoothResult result, | |
| 113 base::Optional< | |
| 114 std::vector<blink::mojom::WebBluetoothRemoteGATTCharacteristicPtr>> | |
| 115 characteristics); | |
| 116 void OnReadValueComplete( | |
| 117 std::unique_ptr<blink::WebBluetoothReadValueCallbacks> callbacks, | |
| 118 blink::mojom::WebBluetoothResult result, | |
| 119 const base::Optional<std::vector<uint8_t>>& value); | |
| 120 void OnWriteValueComplete( | |
| 121 const blink::WebVector<uint8_t>& value, | |
| 122 std::unique_ptr<blink::WebBluetoothWriteValueCallbacks> callbacks, | |
| 123 blink::mojom::WebBluetoothResult result); | |
| 124 void OnStartNotificationsComplete( | |
| 125 std::unique_ptr<blink::WebBluetoothNotificationsCallbacks> callbacks, | |
| 126 blink::mojom::WebBluetoothResult result); | |
| 127 void OnStopNotificationsComplete( | |
| 128 std::unique_ptr<blink::WebBluetoothNotificationsCallbacks> callbacks); | |
| 129 | |
| 130 void DispatchCharacteristicValueChanged( | |
| 131 const std::string& characteristic_instance_id, | |
| 132 const std::vector<uint8_t>& value); | |
| 133 | |
| 134 blink::mojom::WebBluetoothService& GetWebBluetoothService(); | |
| 135 service_manager::InterfaceProvider* const remote_interfaces_; | |
| 136 blink::mojom::WebBluetoothServicePtr web_bluetooth_service_; | |
| 137 | |
| 138 // Map of characteristic_instance_ids to | |
| 139 // WebBluetoothRemoteGATTCharacteristics. When characteristicObjectRemoved is | |
| 140 // called the characteristic should be removed from the map. | |
| 141 // Keeps track of what characteristics have listeners. | |
| 142 std::unordered_map<std::string, blink::WebBluetoothRemoteGATTCharacteristic*> | |
| 143 active_characteristics_; | |
| 144 | |
| 145 // Map of device_ids to WebBluetoothDevices. Added in connect() and removed in | |
| 146 // disconnect(). This means a device may not actually be connected while in | |
| 147 // this map, but that it will definitely be removed when the page navigates. | |
| 148 std::unordered_map<WebBluetoothDeviceId, | |
| 149 blink::WebBluetoothDevice*, | |
| 150 WebBluetoothDeviceIdHash> | |
| 151 connected_devices_; | |
| 152 | |
| 153 // Binding associated with |web_bluetooth_service_|. | |
| 154 mojo::AssociatedBinding<blink::mojom::WebBluetoothServiceClient> binding_; | |
| 155 | |
| 156 DISALLOW_COPY_AND_ASSIGN(WebBluetoothImpl); | |
| 157 }; | |
| 158 | |
| 159 } // namespace content | |
| 160 | |
| 161 #endif // CONTENT_RENDERER_BLUETOOTH_WEB_BLUETOOTH_IMPL_H_ | |
| OLD | NEW |