| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 DEVICE_BLUETOOTH_BLUETOOTH_ADAPTER_CHROMEOS_H_ | 5 #ifndef DEVICE_BLUETOOTH_BLUETOOTH_ADAPTER_CHROMEOS_H_ |
| 6 #define DEVICE_BLUETOOTH_BLUETOOTH_ADAPTER_CHROMEOS_H_ | 6 #define DEVICE_BLUETOOTH_BLUETOOTH_ADAPTER_CHROMEOS_H_ |
| 7 | 7 |
| 8 #include <map> | 8 #include <map> |
| 9 #include <queue> | 9 #include <queue> |
| 10 #include <string> | 10 #include <string> |
| 11 #include <utility> | 11 #include <utility> |
| 12 #include <vector> | 12 #include <vector> |
| 13 | 13 |
| 14 #include "base/memory/weak_ptr.h" | 14 #include "base/memory/weak_ptr.h" |
| 15 #include "chromeos/dbus/bluetooth_adapter_client.h" | |
| 16 #include "chromeos/dbus/bluetooth_agent_service_provider.h" | |
| 17 #include "chromeos/dbus/bluetooth_device_client.h" | |
| 18 #include "chromeos/dbus/bluetooth_input_client.h" | |
| 19 #include "chromeos/dbus/bluetooth_profile_manager_client.h" | |
| 20 #include "chromeos/dbus/bluetooth_profile_service_provider.h" | |
| 21 #include "dbus/object_path.h" | 15 #include "dbus/object_path.h" |
| 22 #include "device/bluetooth/bluetooth_adapter.h" | 16 #include "device/bluetooth/bluetooth_adapter.h" |
| 23 #include "device/bluetooth/bluetooth_audio_sink.h" | 17 #include "device/bluetooth/bluetooth_audio_sink.h" |
| 24 #include "device/bluetooth/bluetooth_device.h" | 18 #include "device/bluetooth/bluetooth_device.h" |
| 25 #include "device/bluetooth/bluetooth_discovery_session.h" | 19 #include "device/bluetooth/bluetooth_discovery_session.h" |
| 26 #include "device/bluetooth/bluetooth_export.h" | 20 #include "device/bluetooth/bluetooth_export.h" |
| 21 #include "device/bluetooth/dbus/bluetooth_adapter_client.h" |
| 22 #include "device/bluetooth/dbus/bluetooth_agent_service_provider.h" |
| 23 #include "device/bluetooth/dbus/bluetooth_device_client.h" |
| 24 #include "device/bluetooth/dbus/bluetooth_input_client.h" |
| 25 #include "device/bluetooth/dbus/bluetooth_profile_manager_client.h" |
| 26 #include "device/bluetooth/dbus/bluetooth_profile_service_provider.h" |
| 27 | 27 |
| 28 namespace base { | 28 namespace base { |
| 29 class SequencedTaskRunner; | 29 class SequencedTaskRunner; |
| 30 } // namespace base | 30 } // namespace base |
| 31 | 31 |
| 32 namespace device { | 32 namespace device { |
| 33 class BluetoothSocketThread; | 33 class BluetoothSocketThread; |
| 34 } // namespace device | 34 } // namespace device |
| 35 | 35 |
| 36 namespace chromeos { | 36 namespace chromeos { |
| (...skipping 16 matching lines...) Expand all Loading... |
| 53 // single-threaded calls, and posts tasks to the UI thread. | 53 // single-threaded calls, and posts tasks to the UI thread. |
| 54 // | 54 // |
| 55 // Methods tolerate a shutdown scenario where BluetoothAdapterChromeOS::Shutdown | 55 // Methods tolerate a shutdown scenario where BluetoothAdapterChromeOS::Shutdown |
| 56 // causes IsPresent to return false just before the dbus system is shutdown but | 56 // causes IsPresent to return false just before the dbus system is shutdown but |
| 57 // while references to the BluetoothAdapterChromeOS object still exists. | 57 // while references to the BluetoothAdapterChromeOS object still exists. |
| 58 // | 58 // |
| 59 // When adding methods to this class verify shutdown behavior in | 59 // When adding methods to this class verify shutdown behavior in |
| 60 // BluetoothChromeOSTest, Shutdown. | 60 // BluetoothChromeOSTest, Shutdown. |
| 61 class DEVICE_BLUETOOTH_EXPORT BluetoothAdapterChromeOS | 61 class DEVICE_BLUETOOTH_EXPORT BluetoothAdapterChromeOS |
| 62 : public device::BluetoothAdapter, | 62 : public device::BluetoothAdapter, |
| 63 public chromeos::BluetoothAdapterClient::Observer, | 63 public bluez::BluetoothAdapterClient::Observer, |
| 64 public chromeos::BluetoothDeviceClient::Observer, | 64 public bluez::BluetoothDeviceClient::Observer, |
| 65 public chromeos::BluetoothInputClient::Observer, | 65 public bluez::BluetoothInputClient::Observer, |
| 66 public chromeos::BluetoothAgentServiceProvider::Delegate { | 66 public bluez::BluetoothAgentServiceProvider::Delegate { |
| 67 public: | 67 public: |
| 68 typedef base::Callback<void(const std::string& error_message)> | 68 typedef base::Callback<void(const std::string& error_message)> |
| 69 ErrorCompletionCallback; | 69 ErrorCompletionCallback; |
| 70 typedef base::Callback<void(BluetoothAdapterProfileChromeOS* profile)> | 70 typedef base::Callback<void(BluetoothAdapterProfileChromeOS* profile)> |
| 71 ProfileRegisteredCallback; | 71 ProfileRegisteredCallback; |
| 72 | 72 |
| 73 static base::WeakPtr<BluetoothAdapter> CreateAdapter(); | 73 static base::WeakPtr<BluetoothAdapter> CreateAdapter(); |
| 74 | 74 |
| 75 // BluetoothAdapter: | 75 // BluetoothAdapter: |
| 76 void Shutdown() override; | 76 void Shutdown() override; |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 149 | 149 |
| 150 // Request a profile on the adapter for a custom service with a | 150 // Request a profile on the adapter for a custom service with a |
| 151 // specific UUID for the device at |device_path| to be sent to |delegate|. | 151 // specific UUID for the device at |device_path| to be sent to |delegate|. |
| 152 // If |device_path| is the empty string, incoming connections will be | 152 // If |device_path| is the empty string, incoming connections will be |
| 153 // assigned to |delegate|. When the profile is | 153 // assigned to |delegate|. When the profile is |
| 154 // successfully registered, |success_callback| will be called with a pointer | 154 // successfully registered, |success_callback| will be called with a pointer |
| 155 // to the profile which is managed by BluetoothAdapterChromeOS. On failure, | 155 // to the profile which is managed by BluetoothAdapterChromeOS. On failure, |
| 156 // |error_callback| will be called. | 156 // |error_callback| will be called. |
| 157 void UseProfile(const device::BluetoothUUID& uuid, | 157 void UseProfile(const device::BluetoothUUID& uuid, |
| 158 const dbus::ObjectPath& device_path, | 158 const dbus::ObjectPath& device_path, |
| 159 const BluetoothProfileManagerClient::Options& options, | 159 const bluez::BluetoothProfileManagerClient::Options& options, |
| 160 BluetoothProfileServiceProvider::Delegate* delegate, | 160 bluez::BluetoothProfileServiceProvider::Delegate* delegate, |
| 161 const ProfileRegisteredCallback& success_callback, | 161 const ProfileRegisteredCallback& success_callback, |
| 162 const ErrorCompletionCallback& error_callback); | 162 const ErrorCompletionCallback& error_callback); |
| 163 | 163 |
| 164 // Release use of a profile by a device. | 164 // Release use of a profile by a device. |
| 165 void ReleaseProfile(const dbus::ObjectPath& device_path, | 165 void ReleaseProfile(const dbus::ObjectPath& device_path, |
| 166 BluetoothAdapterProfileChromeOS* profile); | 166 BluetoothAdapterProfileChromeOS* profile); |
| 167 | 167 |
| 168 protected: | 168 protected: |
| 169 // BluetoothAdapter: | 169 // BluetoothAdapter: |
| 170 void RemovePairingDelegateInternal( | 170 void RemovePairingDelegateInternal( |
| (...skipping 15 matching lines...) Expand all Loading... |
| 186 DiscoverySessionErrorCallback> DiscoveryParamTuple; | 186 DiscoverySessionErrorCallback> DiscoveryParamTuple; |
| 187 typedef std::queue<DiscoveryParamTuple> DiscoveryCallbackQueue; | 187 typedef std::queue<DiscoveryParamTuple> DiscoveryCallbackQueue; |
| 188 | 188 |
| 189 // Callback pair for the profile registration queue. | 189 // Callback pair for the profile registration queue. |
| 190 typedef std::pair<base::Closure, ErrorCompletionCallback> | 190 typedef std::pair<base::Closure, ErrorCompletionCallback> |
| 191 RegisterProfileCompletionPair; | 191 RegisterProfileCompletionPair; |
| 192 | 192 |
| 193 BluetoothAdapterChromeOS(); | 193 BluetoothAdapterChromeOS(); |
| 194 ~BluetoothAdapterChromeOS() override; | 194 ~BluetoothAdapterChromeOS() override; |
| 195 | 195 |
| 196 // BluetoothAdapterClient::Observer override. | 196 // bluez::BluetoothAdapterClient::Observer override. |
| 197 void AdapterAdded(const dbus::ObjectPath& object_path) override; | 197 void AdapterAdded(const dbus::ObjectPath& object_path) override; |
| 198 void AdapterRemoved(const dbus::ObjectPath& object_path) override; | 198 void AdapterRemoved(const dbus::ObjectPath& object_path) override; |
| 199 void AdapterPropertyChanged(const dbus::ObjectPath& object_path, | 199 void AdapterPropertyChanged(const dbus::ObjectPath& object_path, |
| 200 const std::string& property_name) override; | 200 const std::string& property_name) override; |
| 201 | 201 |
| 202 // BluetoothDeviceClient::Observer override. | 202 // bluez::BluetoothDeviceClient::Observer override. |
| 203 void DeviceAdded(const dbus::ObjectPath& object_path) override; | 203 void DeviceAdded(const dbus::ObjectPath& object_path) override; |
| 204 void DeviceRemoved(const dbus::ObjectPath& object_path) override; | 204 void DeviceRemoved(const dbus::ObjectPath& object_path) override; |
| 205 void DevicePropertyChanged(const dbus::ObjectPath& object_path, | 205 void DevicePropertyChanged(const dbus::ObjectPath& object_path, |
| 206 const std::string& property_name) override; | 206 const std::string& property_name) override; |
| 207 | 207 |
| 208 // BluetoothInputClient::Observer override. | 208 // bluez::BluetoothInputClient::Observer override. |
| 209 void InputPropertyChanged(const dbus::ObjectPath& object_path, | 209 void InputPropertyChanged(const dbus::ObjectPath& object_path, |
| 210 const std::string& property_name) override; | 210 const std::string& property_name) override; |
| 211 | 211 |
| 212 // BluetoothAgentServiceProvider::Delegate override. | 212 // bluez::BluetoothAgentServiceProvider::Delegate override. |
| 213 void Released() override; | 213 void Released() override; |
| 214 void RequestPinCode(const dbus::ObjectPath& device_path, | 214 void RequestPinCode(const dbus::ObjectPath& device_path, |
| 215 const PinCodeCallback& callback) override; | 215 const PinCodeCallback& callback) override; |
| 216 void DisplayPinCode(const dbus::ObjectPath& device_path, | 216 void DisplayPinCode(const dbus::ObjectPath& device_path, |
| 217 const std::string& pincode) override; | 217 const std::string& pincode) override; |
| 218 void RequestPasskey(const dbus::ObjectPath& device_path, | 218 void RequestPasskey(const dbus::ObjectPath& device_path, |
| 219 const PasskeyCallback& callback) override; | 219 const PasskeyCallback& callback) override; |
| 220 void DisplayPasskey(const dbus::ObjectPath& device_path, | 220 void DisplayPasskey(const dbus::ObjectPath& device_path, |
| 221 uint32 passkey, | 221 uint32 passkey, |
| 222 uint16 entered) override; | 222 uint16 entered) override; |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 325 void OnSetDiscoveryFilterError( | 325 void OnSetDiscoveryFilterError( |
| 326 const base::Closure& callback, | 326 const base::Closure& callback, |
| 327 const DiscoverySessionErrorCallback& error_callback, | 327 const DiscoverySessionErrorCallback& error_callback, |
| 328 const std::string& error_name, | 328 const std::string& error_name, |
| 329 const std::string& error_message); | 329 const std::string& error_message); |
| 330 | 330 |
| 331 // Called by dbus:: on completion of the D-Bus method to register a profile. | 331 // Called by dbus:: on completion of the D-Bus method to register a profile. |
| 332 void OnRegisterProfile(const device::BluetoothUUID& uuid, | 332 void OnRegisterProfile(const device::BluetoothUUID& uuid, |
| 333 scoped_ptr<BluetoothAdapterProfileChromeOS> profile); | 333 scoped_ptr<BluetoothAdapterProfileChromeOS> profile); |
| 334 | 334 |
| 335 void SetProfileDelegate(const device::BluetoothUUID& uuid, | 335 void SetProfileDelegate( |
| 336 const dbus::ObjectPath& device_path, | 336 const device::BluetoothUUID& uuid, |
| 337 BluetoothProfileServiceProvider::Delegate* delegate, | 337 const dbus::ObjectPath& device_path, |
| 338 const ProfileRegisteredCallback& success_callback, | 338 bluez::BluetoothProfileServiceProvider::Delegate* delegate, |
| 339 const ErrorCompletionCallback& error_callback); | 339 const ProfileRegisteredCallback& success_callback, |
| 340 const ErrorCompletionCallback& error_callback); |
| 340 void OnRegisterProfileError(const device::BluetoothUUID& uuid, | 341 void OnRegisterProfileError(const device::BluetoothUUID& uuid, |
| 341 const std::string& error_name, | 342 const std::string& error_name, |
| 342 const std::string& error_message); | 343 const std::string& error_message); |
| 343 | 344 |
| 344 // Called by BluetoothAdapterProfileChromeOS when no users of a profile | 345 // Called by BluetoothAdapterProfileChromeOS when no users of a profile |
| 345 // remain. | 346 // remain. |
| 346 void RemoveProfile(const device::BluetoothUUID& uuid); | 347 void RemoveProfile(const device::BluetoothUUID& uuid); |
| 347 | 348 |
| 348 // Processes the queued discovery requests. For each DiscoveryParamTuple in | 349 // Processes the queued discovery requests. For each DiscoveryParamTuple in |
| 349 // the queue, this method will try to add a new discovery session. This method | 350 // the queue, this method will try to add a new discovery session. This method |
| (...skipping 19 matching lines...) Expand all Loading... |
| 369 // requested discovery, dropping our count to 0 won't necessarily result in | 370 // requested discovery, dropping our count to 0 won't necessarily result in |
| 370 // the controller actually stopping discovery if, for example, an application | 371 // the controller actually stopping discovery if, for example, an application |
| 371 // other than Chrome, such as bt_console, was also used to start discovery. | 372 // other than Chrome, such as bt_console, was also used to start discovery. |
| 372 DiscoveryCallbackQueue discovery_request_queue_; | 373 DiscoveryCallbackQueue discovery_request_queue_; |
| 373 | 374 |
| 374 // Object path of the adapter we track. | 375 // Object path of the adapter we track. |
| 375 dbus::ObjectPath object_path_; | 376 dbus::ObjectPath object_path_; |
| 376 | 377 |
| 377 // Instance of the D-Bus agent object used for pairing, initialized with | 378 // Instance of the D-Bus agent object used for pairing, initialized with |
| 378 // our own class as its delegate. | 379 // our own class as its delegate. |
| 379 scoped_ptr<BluetoothAgentServiceProvider> agent_; | 380 scoped_ptr<bluez::BluetoothAgentServiceProvider> agent_; |
| 380 | 381 |
| 381 // UI thread task runner and socket thread object used to create sockets. | 382 // UI thread task runner and socket thread object used to create sockets. |
| 382 scoped_refptr<base::SequencedTaskRunner> ui_task_runner_; | 383 scoped_refptr<base::SequencedTaskRunner> ui_task_runner_; |
| 383 scoped_refptr<device::BluetoothSocketThread> socket_thread_; | 384 scoped_refptr<device::BluetoothSocketThread> socket_thread_; |
| 384 | 385 |
| 385 // The profiles we have registered with the bluetooth daemon. | 386 // The profiles we have registered with the bluetooth daemon. |
| 386 std::map<device::BluetoothUUID, BluetoothAdapterProfileChromeOS*> profiles_; | 387 std::map<device::BluetoothUUID, BluetoothAdapterProfileChromeOS*> profiles_; |
| 387 | 388 |
| 388 // Queue of delegates waiting for a profile to register. | 389 // Queue of delegates waiting for a profile to register. |
| 389 std::map<device::BluetoothUUID, std::vector<RegisterProfileCompletionPair>*> | 390 std::map<device::BluetoothUUID, std::vector<RegisterProfileCompletionPair>*> |
| 390 profile_queues_; | 391 profile_queues_; |
| 391 | 392 |
| 392 scoped_ptr<device::BluetoothDiscoveryFilter> current_filter_; | 393 scoped_ptr<device::BluetoothDiscoveryFilter> current_filter_; |
| 393 | 394 |
| 394 // Note: This should remain the last member so it'll be destroyed and | 395 // Note: This should remain the last member so it'll be destroyed and |
| 395 // invalidate its weak pointers before any other members are destroyed. | 396 // invalidate its weak pointers before any other members are destroyed. |
| 396 base::WeakPtrFactory<BluetoothAdapterChromeOS> weak_ptr_factory_; | 397 base::WeakPtrFactory<BluetoothAdapterChromeOS> weak_ptr_factory_; |
| 397 | 398 |
| 398 DISALLOW_COPY_AND_ASSIGN(BluetoothAdapterChromeOS); | 399 DISALLOW_COPY_AND_ASSIGN(BluetoothAdapterChromeOS); |
| 399 }; | 400 }; |
| 400 | 401 |
| 401 } // namespace chromeos | 402 } // namespace chromeos |
| 402 | 403 |
| 403 #endif // DEVICE_BLUETOOTH_BLUETOOTH_ADAPTER_CHROMEOS_H_ | 404 #endif // DEVICE_BLUETOOTH_BLUETOOTH_ADAPTER_CHROMEOS_H_ |
| OLD | NEW |