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