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

Unified Diff: device/bluetooth/bluetooth_adapter_chromeos.cc

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
Index: device/bluetooth/bluetooth_adapter_chromeos.cc
diff --git a/device/bluetooth/bluetooth_adapter_chromeos.cc b/device/bluetooth/bluetooth_adapter_chromeos.cc
index 9bc4c55f724414b00ec42b39dbcaac279a6dfc64..252fa71b0d0e937b8f4c446b54347665ad525a46 100644
--- a/device/bluetooth/bluetooth_adapter_chromeos.cc
+++ b/device/bluetooth/bluetooth_adapter_chromeos.cc
@@ -20,6 +20,7 @@
#include "chromeos/dbus/bluetooth_device_client.h"
#include "chromeos/dbus/bluetooth_input_client.h"
#include "chromeos/dbus/dbus_thread_manager.h"
+#include "device/bluetooth/bluetooth_adapter_profile_chromeos.h"
#include "device/bluetooth/bluetooth_device.h"
#include "device/bluetooth/bluetooth_device_chromeos.h"
#include "device/bluetooth/bluetooth_pairing_chromeos.h"
@@ -929,6 +930,76 @@ void BluetoothAdapterChromeOS::NotifyGattDescriptorValueChanged(
GattDescriptorValueChanged(this, descriptor, value));
}
+void BluetoothAdapterChromeOS::UseProfile(
+ const BluetoothUUID& uuid,
+ const dbus::ObjectPath& device_path,
+ const BluetoothProfileManagerClient::Options& options,
+ BluetoothProfileServiceProvider::Delegate* delegate,
+ const ProfileRegisteredCallback& success_callback,
+ const ErrorCompletionCallback& error_callback) {
+ DCHECK(delegate);
+
+ if (profiles_.find(uuid) != profiles_.end()) {
+ // TODO(jamuraa) check that the options are the same and error when they are
+ // not.
+ SetProfileDelegate(uuid, device_path, delegate, success_callback,
+ error_callback);
+ return;
+ }
+
+ profiles_[uuid] = BluetoothAdapterProfileChromeOS::Register(
+ this, uuid, options,
+ base::Bind(&BluetoothAdapterChromeOS::OnRegisterProfile, this, uuid,
+ device_path, delegate, success_callback, error_callback),
+ base::Bind(&BluetoothAdapterChromeOS::OnRegisterProfileError, this, uuid,
+ error_callback));
+}
+
+void BluetoothAdapterChromeOS::ReleaseProfile(const BluetoothUUID& uuid) {
+ if (profiles_.find(uuid) != profiles_.end()) {
+ delete profiles_[uuid];
+ profiles_.erase(uuid);
+ }
+}
+
+void BluetoothAdapterChromeOS::OnRegisterProfile(
+ const BluetoothUUID& uuid,
+ const dbus::ObjectPath& device_path,
+ BluetoothProfileServiceProvider::Delegate* delegate,
+ const ProfileRegisteredCallback& success_callback,
+ const ErrorCompletionCallback& error_callback) {
+ SetProfileDelegate(uuid, device_path, delegate, success_callback,
+ error_callback);
+}
+
+bool BluetoothAdapterChromeOS::SetProfileDelegate(
+ const BluetoothUUID& uuid,
+ const dbus::ObjectPath& device_path,
+ BluetoothProfileServiceProvider::Delegate* delegate,
+ const ProfileRegisteredCallback& success_callback,
+ const ErrorCompletionCallback& error_callback) {
+ if (profiles_[uuid]->SetDelegate(device_path, delegate)) {
+ success_callback.Run(profiles_[uuid]);
+ return true;
+ }
+ // Already set
+ error_callback.Run(bluetooth_agent_manager::kErrorAlreadyExists);
+ return false;
+}
+
+void BluetoothAdapterChromeOS::OnRegisterProfileError(
+ const BluetoothUUID& uuid,
+ const ErrorCompletionCallback& error_callback,
+ const std::string& error_name,
+ const std::string& error_message) {
+ LOG(WARNING) << object_path_.value()
+ << ": Failed to register profile: " << error_name << ": "
+ << error_message;
+ error_callback.Run(error_message);
+ delete profiles_[uuid];
+ profiles_.erase(uuid);
+}
+
void BluetoothAdapterChromeOS::OnSetDiscoverable(
const base::Closure& callback,
const ErrorCallback& error_callback,
« no previous file with comments | « device/bluetooth/bluetooth_adapter_chromeos.h ('k') | device/bluetooth/bluetooth_adapter_profile_chromeos.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698