| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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_PROFILE_CHROMEOS_H_ | 5 #ifndef DEVICE_BLUETOOTH_BLUETOOTH_ADAPTER_PROFILE_CHROMEOS_H_ |
| 6 #define DEVICE_BLUETOOTH_BLUETOOTH_ADAPTER_PROFILE_CHROMEOS_H_ | 6 #define DEVICE_BLUETOOTH_BLUETOOTH_ADAPTER_PROFILE_CHROMEOS_H_ |
| 7 | 7 |
| 8 #include "base/memory/weak_ptr.h" | 8 #include "base/memory/weak_ptr.h" |
| 9 #include "chromeos/dbus/bluetooth_profile_manager_client.h" | 9 #include "chromeos/dbus/bluetooth_profile_manager_client.h" |
| 10 #include "chromeos/dbus/bluetooth_profile_service_provider.h" | 10 #include "chromeos/dbus/bluetooth_profile_service_provider.h" |
| 11 #include "device/bluetooth/bluetooth_adapter_chromeos.h" | 11 #include "device/bluetooth/bluetooth_adapter_chromeos.h" |
| 12 #include "device/bluetooth/bluetooth_export.h" | 12 #include "device/bluetooth/bluetooth_export.h" |
| 13 | 13 |
| 14 namespace device { | 14 namespace device { |
| 15 class BluetoothUUID; | 15 class BluetoothUUID; |
| 16 } // namespace device | 16 } // namespace device |
| 17 | 17 |
| 18 namespace chromeos { | 18 namespace chromeos { |
| 19 | 19 |
| 20 // The BluetoothAdapterProfileChromeOS class implements a multiplexing | 20 // The BluetoothAdapterProfileChromeOS class implements a multiplexing |
| 21 // profile for custom Bluetooth services managed by a BluetoothAdapter. | 21 // profile for custom Bluetooth services managed by a BluetoothAdapter. |
| 22 // Maintains a list of delegates which may serve the profile. | 22 // Maintains a list of delegates which may serve the profile. |
| 23 // One delegate is allowed for each device. | 23 // One delegate is allowed for each device. |
| 24 // |
| 25 // BluetoothAdapterProfileChromeOS objects are owned by the |
| 26 // BluetoothAdapterChromeOS and allocated through Register() |
| 24 class DEVICE_BLUETOOTH_EXPORT BluetoothAdapterProfileChromeOS | 27 class DEVICE_BLUETOOTH_EXPORT BluetoothAdapterProfileChromeOS |
| 25 : public chromeos::BluetoothProfileServiceProvider::Delegate { | 28 : public chromeos::BluetoothProfileServiceProvider::Delegate { |
| 26 public: | 29 public: |
| 30 typedef base::Callback<void(scoped_ptr<BluetoothAdapterProfileChromeOS> |
| 31 profile)> ProfileRegisteredCallback; |
| 32 |
| 27 // Registers a profile with the BlueZ server for |uuid| with the | 33 // Registers a profile with the BlueZ server for |uuid| with the |
| 28 // options |options|. Returns a newly allocated pointer, or nullptr | 34 // options |options|. |success_callback| is provided with a newly |
| 29 // if there was a problem. | 35 // allocated profile if registration is successful, otherwise |error_callback| |
| 30 static BluetoothAdapterProfileChromeOS* Register( | 36 // will be called. |
| 31 BluetoothAdapterChromeOS* adapter, | 37 static void Register( |
| 32 const device::BluetoothUUID& uuid, | 38 const device::BluetoothUUID& uuid, |
| 33 const BluetoothProfileManagerClient::Options& options, | 39 const BluetoothProfileManagerClient::Options& options, |
| 34 const base::Closure& success_callback, | 40 const ProfileRegisteredCallback& success_callback, |
| 35 const BluetoothProfileManagerClient::ErrorCallback& error_callback); | 41 const BluetoothProfileManagerClient::ErrorCallback& error_callback); |
| 36 | 42 |
| 37 ~BluetoothAdapterProfileChromeOS() override; | 43 ~BluetoothAdapterProfileChromeOS() override; |
| 38 | 44 |
| 39 // The object path of the profile. | 45 // The object path of the profile. |
| 40 const dbus::ObjectPath& object_path() const { return object_path_; } | 46 const dbus::ObjectPath& object_path() const { return object_path_; } |
| 41 | 47 |
| 48 // Returns the UUID of the profile |
| 49 const device::BluetoothUUID& uuid() const { return uuid_; } |
| 50 |
| 42 // Add a delegate for a device associated with this profile. | 51 // Add a delegate for a device associated with this profile. |
| 43 // An empty |device_path| indicates a local listening service. | 52 // An empty |device_path| indicates a local listening service. |
| 44 // Returns true if the delegate was set, and false if the |device_path| | 53 // Returns true if the delegate was set, and false if the |device_path| |
| 45 // already had a delegate set. | 54 // already had a delegate set. |
| 46 bool SetDelegate(const dbus::ObjectPath& device_path, | 55 bool SetDelegate(const dbus::ObjectPath& device_path, |
| 47 BluetoothProfileServiceProvider::Delegate* delegate); | 56 BluetoothProfileServiceProvider::Delegate* delegate); |
| 48 | 57 |
| 49 // Remove the delegate for a device. |unregistered_callback| will be called | 58 // Remove the delegate for a device. |unregistered_callback| will be called |
| 50 // if this unregisters the profile. | 59 // if this unregisters the profile. |
| 51 void RemoveDelegate(const dbus::ObjectPath& device_path, | 60 void RemoveDelegate(const dbus::ObjectPath& device_path, |
| 52 const base::Closure& unregistered_callback); | 61 const base::Closure& unregistered_callback); |
| 53 | 62 |
| 54 // Returns the number of delegates for this profile. | 63 // Returns the number of delegates for this profile. |
| 55 size_t DelegateCount() const { return delegates_.size(); } | 64 size_t DelegateCount() const { return delegates_.size(); } |
| 56 | 65 |
| 57 private: | 66 private: |
| 58 BluetoothAdapterProfileChromeOS(BluetoothAdapterChromeOS* adapter, | 67 BluetoothAdapterProfileChromeOS(const device::BluetoothUUID& uuid); |
| 59 const device::BluetoothUUID& uuid); | |
| 60 | 68 |
| 61 // BluetoothProfileServiceProvider::Delegate: | 69 // BluetoothProfileServiceProvider::Delegate: |
| 62 void Released() override; | 70 void Released() override; |
| 63 void NewConnection( | 71 void NewConnection( |
| 64 const dbus::ObjectPath& device_path, | 72 const dbus::ObjectPath& device_path, |
| 65 scoped_ptr<dbus::FileDescriptor> fd, | 73 scoped_ptr<dbus::FileDescriptor> fd, |
| 66 const BluetoothProfileServiceProvider::Delegate::Options& options, | 74 const BluetoothProfileServiceProvider::Delegate::Options& options, |
| 67 const ConfirmationCallback& callback) override; | 75 const ConfirmationCallback& callback) override; |
| 68 void RequestDisconnection(const dbus::ObjectPath& device_path, | 76 void RequestDisconnection(const dbus::ObjectPath& device_path, |
| 69 const ConfirmationCallback& callback) override; | 77 const ConfirmationCallback& callback) override; |
| 70 void Cancel() override; | 78 void Cancel() override; |
| 71 | 79 |
| 72 // Called by dbus:: on completion of the D-Bus method to unregister a profile. | 80 // Called by dbus:: on completion of the D-Bus method to unregister a profile. |
| 73 void OnUnregisterProfileError(const base::Closure& unregistered_callback, | 81 void OnUnregisterProfileError(const base::Closure& unregistered_callback, |
| 74 const std::string& error_name, | 82 const std::string& error_name, |
| 75 const std::string& error_message); | 83 const std::string& error_message); |
| 76 | 84 |
| 77 // List of delegates which this profile is multiplexing to. | 85 // List of delegates which this profile is multiplexing to. |
| 78 std::map<std::string, BluetoothProfileServiceProvider::Delegate*> delegates_; | 86 std::map<std::string, BluetoothProfileServiceProvider::Delegate*> delegates_; |
| 79 | 87 |
| 80 // The UUID that this profile represents. | 88 // The UUID that this profile represents. |
| 81 const device::BluetoothUUID& uuid_; | 89 const device::BluetoothUUID& uuid_; |
| 82 | 90 |
| 83 // Registered dbus object path for this profile. | 91 // Registered dbus object path for this profile. |
| 84 dbus::ObjectPath object_path_; | 92 dbus::ObjectPath object_path_; |
| 85 | 93 |
| 86 // Profile dbus object for receiving profile method calls from BlueZ | 94 // Profile dbus object for receiving profile method calls from BlueZ |
| 87 scoped_ptr<BluetoothProfileServiceProvider> profile_; | 95 scoped_ptr<BluetoothProfileServiceProvider> profile_; |
| 88 | 96 |
| 89 // Adapter that owns this profile. | |
| 90 BluetoothAdapterChromeOS* adapter_; | |
| 91 | |
| 92 // Note: This should remain the last member so it'll be destroyed and | 97 // Note: This should remain the last member so it'll be destroyed and |
| 93 // invalidate its weak pointers before any other members are destroyed. | 98 // invalidate its weak pointers before any other members are destroyed. |
| 94 base::WeakPtrFactory<BluetoothAdapterProfileChromeOS> weak_ptr_factory_; | 99 base::WeakPtrFactory<BluetoothAdapterProfileChromeOS> weak_ptr_factory_; |
| 95 | 100 |
| 96 DISALLOW_COPY_AND_ASSIGN(BluetoothAdapterProfileChromeOS); | 101 DISALLOW_COPY_AND_ASSIGN(BluetoothAdapterProfileChromeOS); |
| 97 }; | 102 }; |
| 98 | 103 |
| 99 } // namespace chromeos | 104 } // namespace chromeos |
| 100 | 105 |
| 101 #endif | 106 #endif |
| OLD | NEW |