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(BluetoothAdapterProfileChromeOS* profile)> |
| 31 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 |