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_BROWSER_BLUETOOTH_BLUETOOTH_DISPATCHER_HOST_H_ | 5 #ifndef CONTENT_BROWSER_BLUETOOTH_BLUETOOTH_DISPATCHER_HOST_H_ |
6 #define CONTENT_BROWSER_BLUETOOTH_BLUETOOTH_DISPATCHER_HOST_H_ | 6 #define CONTENT_BROWSER_BLUETOOTH_BLUETOOTH_DISPATCHER_HOST_H_ |
7 | 7 |
8 #include <map> | 8 #include <map> |
9 | 9 |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
11 #include "base/id_map.h" | 11 #include "base/id_map.h" |
12 #include "base/memory/scoped_vector.h" | 12 #include "base/memory/scoped_vector.h" |
13 #include "base/memory/weak_ptr.h" | 13 #include "base/memory/weak_ptr.h" |
14 #include "content/browser/bluetooth/bluetooth_allowed_devices_map.h" | |
14 #include "content/public/browser/bluetooth_chooser.h" | 15 #include "content/public/browser/bluetooth_chooser.h" |
15 #include "content/public/browser/browser_message_filter.h" | 16 #include "content/public/browser/browser_message_filter.h" |
16 #include "device/bluetooth/bluetooth_adapter.h" | 17 #include "device/bluetooth/bluetooth_adapter.h" |
17 #include "device/bluetooth/bluetooth_gatt_connection.h" | 18 #include "device/bluetooth/bluetooth_gatt_connection.h" |
18 #include "device/bluetooth/bluetooth_gatt_notify_session.h" | 19 #include "device/bluetooth/bluetooth_gatt_notify_session.h" |
19 #include "device/bluetooth/bluetooth_gatt_service.h" | 20 #include "device/bluetooth/bluetooth_gatt_service.h" |
20 | 21 |
21 namespace device { | 22 namespace device { |
22 class BluetoothUUID; | 23 class BluetoothUUID; |
23 } | 24 } |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
95 | 96 |
96 // IPC Handlers, see definitions in bluetooth_messages.h. | 97 // IPC Handlers, see definitions in bluetooth_messages.h. |
97 void OnRequestDevice( | 98 void OnRequestDevice( |
98 int thread_id, | 99 int thread_id, |
99 int request_id, | 100 int request_id, |
100 int frame_routing_id, | 101 int frame_routing_id, |
101 const std::vector<content::BluetoothScanFilter>& filters, | 102 const std::vector<content::BluetoothScanFilter>& filters, |
102 const std::vector<device::BluetoothUUID>& optional_services); | 103 const std::vector<device::BluetoothUUID>& optional_services); |
103 void OnConnectGATT(int thread_id, | 104 void OnConnectGATT(int thread_id, |
104 int request_id, | 105 int request_id, |
106 int frame_routing_id, | |
105 const std::string& device_id); | 107 const std::string& device_id); |
106 void OnGetPrimaryService(int thread_id, | 108 void OnGetPrimaryService(int thread_id, |
107 int request_id, | 109 int request_id, |
110 int frame_routing_id, | |
108 const std::string& device_id, | 111 const std::string& device_id, |
109 const std::string& service_uuid); | 112 const std::string& service_uuid); |
110 void OnGetCharacteristic(int thread_id, | 113 void OnGetCharacteristic(int thread_id, |
111 int request_id, | 114 int request_id, |
115 int frame_routing_id, | |
112 const std::string& service_instance_id, | 116 const std::string& service_instance_id, |
113 const std::string& characteristic_uuid); | 117 const std::string& characteristic_uuid); |
114 void OnReadValue(int thread_id, | 118 void OnReadValue(int thread_id, |
115 int request_id, | 119 int request_id, |
120 int frame_routing_id, | |
116 const std::string& characteristic_instance_id); | 121 const std::string& characteristic_instance_id); |
117 void OnWriteValue(int thread_id, | 122 void OnWriteValue(int thread_id, |
118 int request_id, | 123 int request_id, |
124 int frame_routing_id, | |
119 const std::string& characteristic_instance_id, | 125 const std::string& characteristic_instance_id, |
120 const std::vector<uint8_t>& value); | 126 const std::vector<uint8_t>& value); |
121 void OnStartNotifications(int thread_id, | 127 void OnStartNotifications(int thread_id, |
122 int request_id, | 128 int request_id, |
129 int frame_routing_id, | |
123 const std::string& characteristic_instance_id); | 130 const std::string& characteristic_instance_id); |
124 void OnStopNotifications(int thread_id, | 131 void OnStopNotifications(int thread_id, |
125 int request_id, | 132 int request_id, |
133 int frame_routing_id, | |
126 const std::string& characteristic_instance_id); | 134 const std::string& characteristic_instance_id); |
127 void OnRegisterCharacteristicObject( | 135 void OnRegisterCharacteristicObject( |
128 int thread_id, | 136 int thread_id, |
137 int frame_routing_id, | |
129 const std::string& characteristic_instance_id); | 138 const std::string& characteristic_instance_id); |
130 void OnUnregisterCharacteristicObject( | 139 void OnUnregisterCharacteristicObject( |
131 int thread_id, | 140 int thread_id, |
141 int frame_routing_id, | |
132 const std::string& characteristic_instance_id); | 142 const std::string& characteristic_instance_id); |
133 | 143 |
134 // Callbacks for BluetoothAdapter::StartDiscoverySession. | 144 // Callbacks for BluetoothAdapter::StartDiscoverySession. |
135 void OnDiscoverySessionStarted( | 145 void OnDiscoverySessionStarted( |
136 int chooser_id, | 146 int chooser_id, |
137 scoped_ptr<device::BluetoothDiscoverySession> discovery_session); | 147 scoped_ptr<device::BluetoothDiscoverySession> discovery_session); |
138 void OnDiscoverySessionStartedError(int chooser_id); | 148 void OnDiscoverySessionStartedError(int chooser_id); |
139 | 149 |
140 // BluetoothChooser::EventHandler: | 150 // BluetoothChooser::EventHandler: |
141 void OnBluetoothChooserEvent(int chooser_id, | 151 void OnBluetoothChooserEvent(int chooser_id, |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
201 const std::string& characteristic_instance_id); | 211 const std::string& characteristic_instance_id); |
202 | 212 |
203 // Functions to query the platform cache for the bluetooth object. | 213 // Functions to query the platform cache for the bluetooth object. |
204 // result.outcome == CacheQueryOutcome::SUCCESS if the object was found in the | 214 // result.outcome == CacheQueryOutcome::SUCCESS if the object was found in the |
205 // cache. Otherwise result.outcome that can used to record the outcome and | 215 // cache. Otherwise result.outcome that can used to record the outcome and |
206 // result.error will contain the error that should be send to the renderer. | 216 // result.error will contain the error that should be send to the renderer. |
207 // One of the possible outcomes is BAD_RENDERER. In this case the outcome | 217 // One of the possible outcomes is BAD_RENDERER. In this case the outcome |
208 // was already recorded and since there renderer crashed there is no need to | 218 // was already recorded and since there renderer crashed there is no need to |
209 // send a response. | 219 // send a response. |
210 | 220 |
211 // Queries the platform cache for a Device with |device_id|. Fills in the | 221 // Queries the platform cache for a Device with |device_id| for |origin|. |
212 // |outcome| field and the |device| field if successful. | 222 // Fills in the |outcome| field and the |device| field if successful. |
213 CacheQueryResult QueryCacheForDevice(const std::string& device_id); | 223 CacheQueryResult QueryCacheForDevice(const std::string& origin, |
224 const std::string& device_id); | |
214 // Queries the platform cache for a Service with |service_instance_id|. Fills | 225 // Queries the platform cache for a Service with |service_instance_id|. Fills |
215 // in the |outcome| field, and |device| and |service| fields if successful. | 226 // in the |outcome| field, and |device| and |service| fields if successful. |
216 CacheQueryResult QueryCacheForService(const std::string& service_instance_id); | 227 CacheQueryResult QueryCacheForService(const std::string& origin, |
228 const std::string& service_instance_id); | |
217 // Queries the platform cache for a characteristic with | 229 // Queries the platform cache for a characteristic with |
218 // |characteristic_instance_id|. Fills in the |outcome| field, and |device|, | 230 // |characteristic_instance_id|. Fills in the |outcome| field, and |device|, |
219 // |service| and |characteristic| fields if successful. | 231 // |service| and |characteristic| fields if successful. |
220 CacheQueryResult QueryCacheForCharacteristic( | 232 CacheQueryResult QueryCacheForCharacteristic( |
233 const std::string& origin, | |
221 const std::string& characteristic_instance_id); | 234 const std::string& characteristic_instance_id); |
222 | 235 |
223 // Returns true if all services have been discovered for the device. | 236 // Returns true if all services have been discovered for the device. |
224 // When the host gets a ServiceChanged indication, it automatically | 237 // When the host gets a ServiceChanged indication, it automatically |
225 // re-discovers services, and only forwards the ServiceChanged event to this | 238 // re-discovers services, and only forwards the ServiceChanged event to this |
226 // class when it's done re-discovering. | 239 // class when it's done re-discovering. |
227 bool IsServicesDiscoveryCompleteForDevice(const std::string& device_id); | 240 bool IsServicesDiscoveryCompleteForDevice(const std::string& device_address); |
228 | 241 |
229 // Adds the PrimaryServicesRequest to the vector of pending services requests | 242 // Adds the PrimaryServicesRequest to the vector of pending services requests |
230 // for that device. | 243 // for that device. |
231 void AddToPendingPrimaryServicesRequest( | 244 void AddToPendingPrimaryServicesRequest( |
232 const std::string& device_id, | 245 const std::string& device_address, |
233 const PrimaryServicesRequest& request); | 246 const PrimaryServicesRequest& request); |
234 | 247 |
248 // Returns the origin for the frame with "frame_rounting_id" in this process. | |
Jeffrey Yasskin
2016/01/06 00:47:57
sp: rounting
Jeffrey Yasskin
2016/01/06 00:47:57
s/this process/render_process_id_/
ortuno
2016/01/13 01:41:44
Done.
On 2016/01/06 at 00:47:57, Jeffrey Yasskin
| |
249 std::string GetOrigin(int frame_routing_id); | |
250 | |
235 // Show help pages from the chooser dialog. | 251 // Show help pages from the chooser dialog. |
236 void ShowBluetoothOverviewLink(); | 252 void ShowBluetoothOverviewLink(); |
237 void ShowBluetoothPairingLink(); | 253 void ShowBluetoothPairingLink(); |
238 void ShowBluetoothAdapterOffLink(); | 254 void ShowBluetoothAdapterOffLink(); |
239 void ShowNeedLocationLink(); | 255 void ShowNeedLocationLink(); |
240 | 256 |
241 int render_process_id_; | 257 int render_process_id_; |
242 | 258 |
243 // Maps a (thread_id,request_id) to information about its requestDevice call, | 259 // Maps a (thread_id,request_id) to information about its requestDevice call, |
244 // including the chooser dialog. | 260 // including the chooser dialog. |
245 // An entry is added to this map in OnRequestDevice, and should be removed | 261 // An entry is added to this map in OnRequestDevice, and should be removed |
246 // again everywhere a requestDevice() reply is sent. | 262 // again everywhere a requestDevice() reply is sent. |
247 IDMap<RequestDeviceSession, IDMapOwnPointer> request_device_sessions_; | 263 IDMap<RequestDeviceSession, IDMapOwnPointer> request_device_sessions_; |
248 | 264 |
265 BluetoothAllowedDevicesMap allowed_devices_map_; | |
266 | |
249 // Maps to get the object's parent based on it's instanceID | 267 // Maps to get the object's parent based on it's instanceID |
250 // Map of service_instance_id to device_id. | 268 // Map of service_instance_id to device_address. |
251 std::map<std::string, std::string> service_to_device_; | 269 std::map<std::string, std::string> service_to_device_; |
252 // Map of characteristic_instance_id to service_instance_id. | 270 // Map of characteristic_instance_id to service_instance_id. |
253 std::map<std::string, std::string> characteristic_to_service_; | 271 std::map<std::string, std::string> characteristic_to_service_; |
254 | 272 |
255 // Map that matches characteristic_instance_id to notify session. | 273 // Map that matches characteristic_instance_id to notify session. |
256 // TODO(ortuno): Also key by thread_id once support for web workers, | 274 // TODO(ortuno): Also key by thread_id once support for web workers, |
257 // is added: http://crbug.com/537372 | 275 // is added: http://crbug.com/537372 |
258 std::map<std::string, scoped_ptr<device::BluetoothGattNotifySession>> | 276 std::map<std::string, scoped_ptr<device::BluetoothGattNotifySession>> |
259 characteristic_id_to_notify_session_; | 277 characteristic_id_to_notify_session_; |
260 | 278 |
(...skipping 15 matching lines...) Expand all Loading... | |
276 // sessions when other sessions are active. | 294 // sessions when other sessions are active. |
277 base::Timer discovery_session_timer_; | 295 base::Timer discovery_session_timer_; |
278 | 296 |
279 // Retain BluetoothGattConnection objects to keep connections open. | 297 // Retain BluetoothGattConnection objects to keep connections open. |
280 // TODO(scheib): Destroy as connections are closed. http://crbug.com/539643 | 298 // TODO(scheib): Destroy as connections are closed. http://crbug.com/539643 |
281 ScopedVector<device::BluetoothGattConnection> connections_; | 299 ScopedVector<device::BluetoothGattConnection> connections_; |
282 | 300 |
283 // Keeps track of which devices have had their services discovered. | 301 // Keeps track of which devices have had their services discovered. |
284 std::set<std::string> devices_with_discovered_services_; | 302 std::set<std::string> devices_with_discovered_services_; |
285 | 303 |
286 // Map of device_id's to primary-services requests that need responses when | 304 // Map of device_address's to primary-services requests that need responses |
287 // that device's service discovery completes. | 305 // when that device's service discovery completes. |
288 std::map<std::string, std::vector<PrimaryServicesRequest>> | 306 std::map<std::string, std::vector<PrimaryServicesRequest>> |
289 pending_primary_services_requests_; | 307 pending_primary_services_requests_; |
290 | 308 |
291 // |weak_ptr_on_ui_thread_| provides weak pointers, e.g. for callbacks, and | 309 // |weak_ptr_on_ui_thread_| provides weak pointers, e.g. for callbacks, and |
292 // because it exists and has been bound to the UI thread enforces that all | 310 // because it exists and has been bound to the UI thread enforces that all |
293 // copies verify they are also used on the UI thread. | 311 // copies verify they are also used on the UI thread. |
294 base::WeakPtr<BluetoothDispatcherHost> weak_ptr_on_ui_thread_; | 312 base::WeakPtr<BluetoothDispatcherHost> weak_ptr_on_ui_thread_; |
295 base::WeakPtrFactory<BluetoothDispatcherHost> weak_ptr_factory_; | 313 base::WeakPtrFactory<BluetoothDispatcherHost> weak_ptr_factory_; |
296 | 314 |
297 DISALLOW_COPY_AND_ASSIGN(BluetoothDispatcherHost); | 315 DISALLOW_COPY_AND_ASSIGN(BluetoothDispatcherHost); |
298 }; | 316 }; |
299 | 317 |
300 } // namespace content | 318 } // namespace content |
301 | 319 |
302 #endif // CONTENT_BROWSER_BLUETOOTH_BLUETOOTH_DISPATCHER_HOST_H_ | 320 #endif // CONTENT_BROWSER_BLUETOOTH_BLUETOOTH_DISPATCHER_HOST_H_ |
OLD | NEW |