| Index: device/bluetooth/bluetooth_adapter_chromeos.cc
|
| diff --git a/device/bluetooth/bluetooth_adapter_chromeos.cc b/device/bluetooth/bluetooth_adapter_chromeos.cc
|
| index db9cb9089f3c3bf67b7e4334632cb1bfced00070..7703002675c6d1683007057505f81b57733988b2 100644
|
| --- a/device/bluetooth/bluetooth_adapter_chromeos.cc
|
| +++ b/device/bluetooth/bluetooth_adapter_chromeos.cc
|
| @@ -85,13 +85,6 @@
|
| if (IsPresent())
|
| RemoveAdapter(); // Also deletes devices_.
|
| DCHECK(devices_.empty());
|
| - // profiles_ should be empty because all BluetoothSockets have been signaled
|
| - // that this adapter is disappearing.
|
| - DCHECK(profiles_.empty());
|
| -
|
| - for (auto& it : profile_queues_)
|
| - delete it.second;
|
| - profile_queues_.clear();
|
|
|
| DBusThreadManager::Get()->GetBluetoothAdapterClient()->RemoveObserver(this);
|
| DBusThreadManager::Get()->GetBluetoothDeviceClient()->RemoveObserver(this);
|
| @@ -964,12 +957,6 @@
|
| const ErrorCompletionCallback& error_callback) {
|
| DCHECK(delegate);
|
|
|
| - if (!IsPresent()) {
|
| - VLOG(2) << "Adapter not present, erroring out";
|
| - error_callback.Run("Adapter not present");
|
| - return;
|
| - }
|
| -
|
| if (profiles_.find(uuid) != profiles_.end()) {
|
| // TODO(jamuraa) check that the options are the same and error when they are
|
| // not.
|
| @@ -978,35 +965,15 @@
|
| return;
|
| }
|
|
|
| - if (profile_queues_.find(uuid) == profile_queues_.end()) {
|
| - BluetoothAdapterProfileChromeOS::Register(
|
| - uuid, options,
|
| - base::Bind(&BluetoothAdapterChromeOS::OnRegisterProfile, this, uuid),
|
| - base::Bind(&BluetoothAdapterChromeOS::OnRegisterProfileError, this,
|
| - uuid));
|
| -
|
| - profile_queues_[uuid] = new std::vector<RegisterProfileCompletionPair>();
|
| - }
|
| -
|
| - profile_queues_[uuid]->push_back(std::make_pair(
|
| - base::Bind(&BluetoothAdapterChromeOS::SetProfileDelegate, this, uuid,
|
| + profiles_[uuid] = BluetoothAdapterProfileChromeOS::Register(
|
| + this, uuid, options,
|
| + base::Bind(&BluetoothAdapterChromeOS::OnRegisterProfile, this, uuid,
|
| device_path, delegate, success_callback, error_callback),
|
| - error_callback));
|
| -}
|
| -
|
| -void BluetoothAdapterChromeOS::ReleaseProfile(
|
| - const dbus::ObjectPath& device_path,
|
| - BluetoothAdapterProfileChromeOS* profile) {
|
| - VLOG(2) << "Releasing Profile: " << profile->uuid().canonical_value()
|
| - << " from " << device_path.value();
|
| - profile->RemoveDelegate(
|
| - device_path, base::Bind(&BluetoothAdapterChromeOS::RemoveProfile,
|
| - weak_ptr_factory_.GetWeakPtr(), profile->uuid()));
|
| -}
|
| -
|
| -void BluetoothAdapterChromeOS::RemoveProfile(const BluetoothUUID& uuid) {
|
| - VLOG(2) << "Remove Profile: " << uuid.canonical_value();
|
| -
|
| + 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);
|
| @@ -1014,53 +981,40 @@
|
| }
|
|
|
| void BluetoothAdapterChromeOS::OnRegisterProfile(
|
| - const BluetoothUUID& uuid,
|
| - BluetoothAdapterProfileChromeOS* profile) {
|
| - profiles_[uuid] = profile;
|
| -
|
| - if (profile_queues_.find(uuid) == profile_queues_.end())
|
| - return;
|
| -
|
| - for (auto& it : *profile_queues_[uuid])
|
| - it.first.Run();
|
| - delete profile_queues_[uuid];
|
| - profile_queues_.erase(uuid);
|
| -}
|
| -
|
| -void BluetoothAdapterChromeOS::SetProfileDelegate(
|
| const BluetoothUUID& uuid,
|
| const dbus::ObjectPath& device_path,
|
| BluetoothProfileServiceProvider::Delegate* delegate,
|
| const ProfileRegisteredCallback& success_callback,
|
| const ErrorCompletionCallback& error_callback) {
|
| -
|
| - if (profiles_.find(uuid) == profiles_.end()) {
|
| - error_callback.Run("Cannot find profile!");
|
| - return;
|
| - }
|
| -
|
| + 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;
|
| + 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) {
|
| - VLOG(2) << object_path_.value() << ": Failed to register profile: "
|
| - << error_name << ": " << error_message;
|
| - if (profile_queues_.find(uuid) == profile_queues_.end())
|
| - return;
|
| -
|
| - for (auto& it : *profile_queues_[uuid])
|
| - it.second.Run(error_message);
|
| -
|
| - delete profile_queues_[uuid];
|
| - profile_queues_.erase(uuid);
|
| + LOG(WARNING) << object_path_.value()
|
| + << ": Failed to register profile: " << error_name << ": "
|
| + << error_message;
|
| + error_callback.Run(error_message);
|
| + ReleaseProfile(uuid);
|
| }
|
|
|
| void BluetoothAdapterChromeOS::OnSetDiscoverable(
|
|
|