Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(185)

Unified Diff: device/bluetooth/bluetooth_adapter_chromeos.h

Issue 851123002: Manage profiles in BluetoothAdapter on ChromeOS (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix profile memory leaks when adapter is gone Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « device/bluetooth/bluetooth.gyp ('k') | device/bluetooth/bluetooth_adapter_chromeos.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: device/bluetooth/bluetooth_adapter_chromeos.h
diff --git a/device/bluetooth/bluetooth_adapter_chromeos.h b/device/bluetooth/bluetooth_adapter_chromeos.h
index 5ee633f53601ce9d06fd760b4e52a3d6b1582962..dc9dd449964bdda32bd91a7d86212ea9b1105e26 100644
--- a/device/bluetooth/bluetooth_adapter_chromeos.h
+++ b/device/bluetooth/bluetooth_adapter_chromeos.h
@@ -5,6 +5,7 @@
#ifndef DEVICE_BLUETOOTH_BLUETOOTH_ADAPTER_CHROMEOS_H_
#define DEVICE_BLUETOOTH_BLUETOOTH_ADAPTER_CHROMEOS_H_
+#include <map>
#include <queue>
#include <string>
#include <utility>
@@ -16,6 +17,8 @@
#include "chromeos/dbus/bluetooth_agent_service_provider.h"
#include "chromeos/dbus/bluetooth_device_client.h"
#include "chromeos/dbus/bluetooth_input_client.h"
+#include "chromeos/dbus/bluetooth_profile_manager_client.h"
+#include "chromeos/dbus/bluetooth_profile_service_provider.h"
#include "dbus/object_path.h"
#include "device/bluetooth/bluetooth_adapter.h"
#include "device/bluetooth/bluetooth_audio_sink.h"
@@ -29,6 +32,7 @@ class BluetoothSocketThread;
namespace chromeos {
class BluetoothChromeOSTest;
+class BluetoothAdapterProfileChromeOS;
class BluetoothDeviceChromeOS;
class BluetoothPairingChromeOS;
class BluetoothRemoteGattCharacteristicChromeOS;
@@ -44,6 +48,11 @@ class DEVICE_BLUETOOTH_EXPORT BluetoothAdapterChromeOS
public chromeos::BluetoothInputClient::Observer,
public chromeos::BluetoothAgentServiceProvider::Delegate {
public:
+ typedef base::Callback<void(const std::string& error_message)>
+ ErrorCompletionCallback;
+ typedef base::Callback<void(BluetoothAdapterProfileChromeOS* profile)>
+ ProfileRegisteredCallback;
+
static base::WeakPtr<BluetoothAdapter> CreateAdapter();
// BluetoothAdapter:
@@ -115,6 +124,23 @@ class DEVICE_BLUETOOTH_EXPORT BluetoothAdapterChromeOS
// Returns the object path of the adapter.
const dbus::ObjectPath& object_path() const { return object_path_; }
+ // Request a profile on the adapter for a custom service with a
+ // specific UUID for the device at |device_path| to be sent to |delegate|.
+ // If |device_path| is the empty string, incoming connections will be
+ // assigned to |delegate|. When the profile is
+ // successfully registered, |success_callback| will be called with a pointer
+ // to the profile which is managed by BluetoothAdapterChromeOS. On failure,
+ // |error_callback| will be called.
+ void UseProfile(const device::BluetoothUUID& uuid,
+ const dbus::ObjectPath& device_path,
+ const BluetoothProfileManagerClient::Options& options,
+ BluetoothProfileServiceProvider::Delegate* delegate,
+ const ProfileRegisteredCallback& success_callback,
+ const ErrorCompletionCallback& error_callback);
+
+ // Releases the profile associated with |uuid|
+ void ReleaseProfile(const device::BluetoothUUID& uuid);
+
protected:
// BluetoothAdapter:
void RemovePairingDelegateInternal(
@@ -235,6 +261,22 @@ class DEVICE_BLUETOOTH_EXPORT BluetoothAdapterChromeOS
const std::string& error_name,
const std::string& error_message);
+ // Called by dbus:: on completion of the D-Bus method to register a profile.
+ void OnRegisterProfile(const device::BluetoothUUID& uuid,
+ const dbus::ObjectPath& device_path,
+ BluetoothProfileServiceProvider::Delegate* delegate,
+ const ProfileRegisteredCallback& success_callback,
+ const ErrorCompletionCallback& error_callback);
+ bool SetProfileDelegate(const device::BluetoothUUID& uuid,
+ const dbus::ObjectPath& device_path,
+ BluetoothProfileServiceProvider::Delegate* delegate,
+ const ProfileRegisteredCallback& success_callback,
+ const ErrorCompletionCallback& error_callback);
+ void OnRegisterProfileError(const device::BluetoothUUID& uuid,
+ const ErrorCompletionCallback& error_callback,
+ const std::string& error_name,
+ const std::string& error_message);
+
// Processes the queued discovery requests. For each DiscoveryCallbackPair in
// the queue, this method will try to add a new discovery session. This method
// is called whenever a pending D-Bus call to start or stop discovery has
@@ -275,6 +317,9 @@ class DEVICE_BLUETOOTH_EXPORT BluetoothAdapterChromeOS
scoped_refptr<base::SequencedTaskRunner> ui_task_runner_;
scoped_refptr<device::BluetoothSocketThread> socket_thread_;
+ // The profiles we have registered with the bluetooth daemon.
+ std::map<device::BluetoothUUID, BluetoothAdapterProfileChromeOS*> profiles_;
+
// Note: This should remain the last member so it'll be destroyed and
// invalidate its weak pointers before any other members are destroyed.
base::WeakPtrFactory<BluetoothAdapterChromeOS> weak_ptr_factory_;
« no previous file with comments | « device/bluetooth/bluetooth.gyp ('k') | device/bluetooth/bluetooth_adapter_chromeos.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698