| 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 #ifndef CONTENT_CHILD_BLUETOOTH_BLUETOOTH_DISPATCHER_H_ | 5 #ifndef CONTENT_CHILD_BLUETOOTH_BLUETOOTH_DISPATCHER_H_ |
| 6 #define CONTENT_CHILD_BLUETOOTH_BLUETOOTH_DISPATCHER_H_ | 6 #define CONTENT_CHILD_BLUETOOTH_BLUETOOTH_DISPATCHER_H_ |
| 7 | 7 |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <map> | 10 #include <map> |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 57 ThreadSafeSender* thread_safe_sender); | 57 ThreadSafeSender* thread_safe_sender); |
| 58 | 58 |
| 59 // IPC Send and Receiving interface, see IPC::Sender and IPC::Listener. | 59 // IPC Send and Receiving interface, see IPC::Sender and IPC::Listener. |
| 60 bool Send(IPC::Message* msg); | 60 bool Send(IPC::Message* msg); |
| 61 void OnMessageReceived(const IPC::Message& msg); | 61 void OnMessageReceived(const IPC::Message& msg); |
| 62 | 62 |
| 63 // Corresponding to WebBluetoothImpl methods. | 63 // Corresponding to WebBluetoothImpl methods. |
| 64 void requestDevice(int frame_routing_id, | 64 void requestDevice(int frame_routing_id, |
| 65 const blink::WebRequestDeviceOptions& options, | 65 const blink::WebRequestDeviceOptions& options, |
| 66 blink::WebBluetoothRequestDeviceCallbacks* callbacks); | 66 blink::WebBluetoothRequestDeviceCallbacks* callbacks); |
| 67 void connectGATT(const blink::WebString& device_id, | 67 void connectGATT(int frame_routing_id, |
| 68 const blink::WebString& device_id, |
| 68 blink::WebBluetoothConnectGATTCallbacks* callbacks); | 69 blink::WebBluetoothConnectGATTCallbacks* callbacks); |
| 69 void getPrimaryService( | 70 void getPrimaryService( |
| 71 int frame_routing_id, |
| 70 const blink::WebString& device_id, | 72 const blink::WebString& device_id, |
| 71 const blink::WebString& service_uuid, | 73 const blink::WebString& service_uuid, |
| 72 blink::WebBluetoothGetPrimaryServiceCallbacks* callbacks); | 74 blink::WebBluetoothGetPrimaryServiceCallbacks* callbacks); |
| 73 | 75 |
| 74 void getCharacteristic( | 76 void getCharacteristic( |
| 77 int frame_routing_id, |
| 75 const blink::WebString& service_instance_id, | 78 const blink::WebString& service_instance_id, |
| 76 const blink::WebString& characteristic_uuid, | 79 const blink::WebString& characteristic_uuid, |
| 77 blink::WebBluetoothGetCharacteristicCallbacks* callbacks); | 80 blink::WebBluetoothGetCharacteristicCallbacks* callbacks); |
| 78 void readValue(const blink::WebString& characteristic_instance_id, | 81 void readValue(int frame_routing_id, |
| 82 const blink::WebString& characteristic_instance_id, |
| 79 blink::WebBluetoothReadValueCallbacks* callbacks); | 83 blink::WebBluetoothReadValueCallbacks* callbacks); |
| 80 void writeValue(const blink::WebString& characteristic_instance_id, | 84 void writeValue(int frame_routing_id, |
| 85 const blink::WebString& characteristic_instance_id, |
| 81 const blink::WebVector<uint8_t>& value, | 86 const blink::WebVector<uint8_t>& value, |
| 82 blink::WebBluetoothWriteValueCallbacks*); | 87 blink::WebBluetoothWriteValueCallbacks*); |
| 83 void startNotifications(const blink::WebString& characteristic_instance_id, | 88 void startNotifications(int frame_routing_id, |
| 89 const blink::WebString& characteristic_instance_id, |
| 84 blink::WebBluetoothGATTCharacteristic* delegate, | 90 blink::WebBluetoothGATTCharacteristic* delegate, |
| 85 blink::WebBluetoothNotificationsCallbacks*); | 91 blink::WebBluetoothNotificationsCallbacks*); |
| 86 void stopNotifications(const blink::WebString& characteristic_instance_id, | 92 void stopNotifications(int frame_routing_id, |
| 93 const blink::WebString& characteristic_instance_id, |
| 87 blink::WebBluetoothGATTCharacteristic* delegate, | 94 blink::WebBluetoothGATTCharacteristic* delegate, |
| 88 blink::WebBluetoothNotificationsCallbacks*); | 95 blink::WebBluetoothNotificationsCallbacks*); |
| 89 void characteristicObjectRemoved( | 96 void characteristicObjectRemoved( |
| 97 int frame_routing_id, |
| 90 const blink::WebString& characteristic_instance_id, | 98 const blink::WebString& characteristic_instance_id, |
| 91 blink::WebBluetoothGATTCharacteristic* delegate); | 99 blink::WebBluetoothGATTCharacteristic* delegate); |
| 92 void registerCharacteristicObject( | 100 void registerCharacteristicObject( |
| 101 int frame_routing_id, |
| 93 const blink::WebString& characteristic_instance_id, | 102 const blink::WebString& characteristic_instance_id, |
| 94 blink::WebBluetoothGATTCharacteristic* characteristic); | 103 blink::WebBluetoothGATTCharacteristic* characteristic); |
| 95 | 104 |
| 96 // WorkerThread::Observer implementation. | 105 // WorkerThread::Observer implementation. |
| 97 void WillStopCurrentWorkerThread() override; | 106 void WillStopCurrentWorkerThread() override; |
| 98 | 107 |
| 99 enum class NotificationsRequestType { START = 0, STOP = 1 }; | 108 enum class NotificationsRequestType { START = 0, STOP = 1 }; |
| 100 | 109 |
| 101 private: | 110 private: |
| 102 // Notifications Queueing Notes: | 111 // Notifications Queueing Notes: |
| 103 // To avoid races and sending unnecessary IPC messages we implement | 112 // To avoid races and sending unnecessary IPC messages we implement |
| 104 // a queueing system for notification requests. When receiving | 113 // a queueing system for notification requests. When receiving |
| 105 // a notification request, the request is immediately queued. If | 114 // a notification request, the request is immediately queued. If |
| 106 // there are no other pending requests then the request is processed. | 115 // there are no other pending requests then the request is processed. |
| 107 // When a characteristic object gets destroyed BluetoothDispatcher | 116 // When a characteristic object gets destroyed BluetoothDispatcher |
| 108 // gets notified by characteristicObjectRemoved. When this happens | 117 // gets notified by characteristicObjectRemoved. When this happens |
| 109 // a stop request should be queued if the characteristic was subscribed | 118 // a stop request should be queued if the characteristic was subscribed |
| 110 // to notifications. | 119 // to notifications. |
| 111 | 120 |
| 112 // Helper functions for notification requests queue: | 121 // Helper functions for notification requests queue: |
| 113 | 122 |
| 114 // Creates a notification request and queues it. | 123 // Creates a notification request and queues it. |
| 115 int QueueNotificationRequest( | 124 int QueueNotificationRequest( |
| 125 int frame_routing_id, |
| 116 const std::string& characteristic_instance_id, | 126 const std::string& characteristic_instance_id, |
| 117 blink::WebBluetoothGATTCharacteristic* characteristic, | 127 blink::WebBluetoothGATTCharacteristic* characteristic, |
| 118 blink::WebBluetoothNotificationsCallbacks* callbacks, | 128 blink::WebBluetoothNotificationsCallbacks* callbacks, |
| 119 NotificationsRequestType type); | 129 NotificationsRequestType type); |
| 120 // Pops the last requests and runs the next request in the queue. | 130 // Pops the last requests and runs the next request in the queue. |
| 121 void PopNotificationRequestQueueAndProcessNext(int request_id); | 131 void PopNotificationRequestQueueAndProcessNext(int request_id); |
| 122 // Checks if there is more than one request in the queue i.e. if there | 132 // Checks if there is more than one request in the queue i.e. if there |
| 123 // are other requests besides the one being processed. | 133 // are other requests besides the one being processed. |
| 124 bool HasNotificationRequestResponsePending( | 134 bool HasNotificationRequestResponsePending( |
| 125 const std::string& characteristic_instance_id); | 135 const std::string& characteristic_instance_id); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 150 // events for the characteristic. | 160 // events for the characteristic. |
| 151 // | 161 // |
| 152 // TODO(ortuno): We should unregister a characteristic once there are no | 162 // TODO(ortuno): We should unregister a characteristic once there are no |
| 153 // characteristic objects that have listeners attached. | 163 // characteristic objects that have listeners attached. |
| 154 // For now, we call this function when an object gets destroyed. So if there | 164 // For now, we call this function when an object gets destroyed. So if there |
| 155 // are two frames registered for notifications from the same characteristic | 165 // are two frames registered for notifications from the same characteristic |
| 156 // and one of the characteristic objects gets destroyed both will stop | 166 // and one of the characteristic objects gets destroyed both will stop |
| 157 // receiving notifications. | 167 // receiving notifications. |
| 158 // https://crbug.com/541388 | 168 // https://crbug.com/541388 |
| 159 void UnregisterCharacteristicObject( | 169 void UnregisterCharacteristicObject( |
| 170 int frame_routing_id, |
| 160 const blink::WebString& characteristic_instance_id); | 171 const blink::WebString& characteristic_instance_id); |
| 161 | 172 |
| 162 // IPC Handlers, see definitions in bluetooth_messages.h. | 173 // IPC Handlers, see definitions in bluetooth_messages.h. |
| 163 void OnRequestDeviceSuccess(int thread_id, | 174 void OnRequestDeviceSuccess(int thread_id, |
| 164 int request_id, | 175 int request_id, |
| 165 const BluetoothDevice& device); | 176 const BluetoothDevice& device); |
| 166 void OnRequestDeviceError(int thread_id, | 177 void OnRequestDeviceError(int thread_id, |
| 167 int request_id, | 178 int request_id, |
| 168 blink::WebBluetoothError error); | 179 blink::WebBluetoothError error); |
| 169 void OnConnectGATTSuccess(int thread_id, | 180 void OnConnectGATTSuccess(int thread_id, |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 249 // http://crbug.com/541388 | 260 // http://crbug.com/541388 |
| 250 std::map<std::string, blink::WebBluetoothGATTCharacteristic*> | 261 std::map<std::string, blink::WebBluetoothGATTCharacteristic*> |
| 251 active_characteristics_; | 262 active_characteristics_; |
| 252 | 263 |
| 253 DISALLOW_COPY_AND_ASSIGN(BluetoothDispatcher); | 264 DISALLOW_COPY_AND_ASSIGN(BluetoothDispatcher); |
| 254 }; | 265 }; |
| 255 | 266 |
| 256 } // namespace content | 267 } // namespace content |
| 257 | 268 |
| 258 #endif // CONTENT_CHILD_BLUETOOTH_BLUETOOTH_DISPATCHER_H_ | 269 #endif // CONTENT_CHILD_BLUETOOTH_BLUETOOTH_DISPATCHER_H_ |
| OLD | NEW |