| Index: device/bluetooth/bluetooth_socket_chromeos.cc
|
| diff --git a/device/bluetooth/bluetooth_socket_chromeos.cc b/device/bluetooth/bluetooth_socket_chromeos.cc
|
| index c193c1f1d906f83972d880403205d6d823015969..3026113a5cb9a1de191b98e29b04759b29129b4e 100644
|
| --- a/device/bluetooth/bluetooth_socket_chromeos.cc
|
| +++ b/device/bluetooth/bluetooth_socket_chromeos.cc
|
| @@ -110,8 +110,6 @@
|
| if (security_level == SECURITY_LEVEL_LOW)
|
| options_->require_authentication.reset(new bool(false));
|
|
|
| - adapter_ = device->adapter();
|
| -
|
| RegisterProfile(device->adapter(), success_callback, error_callback);
|
| }
|
|
|
| @@ -130,8 +128,7 @@
|
| return;
|
| }
|
|
|
| - adapter_ = adapter;
|
| - adapter_->AddObserver(this);
|
| + adapter->AddObserver(this);
|
|
|
| uuid_ = uuid;
|
| options_.reset(new BluetoothProfileManagerClient::Options());
|
| @@ -224,10 +221,12 @@
|
| DCHECK(!profile_);
|
| DCHECK(adapter);
|
|
|
| + adapter_ = adapter;
|
| +
|
| // If the adapter is not present, this is a listening socket and the
|
| // adapter isn't running yet. Report success and carry on;
|
| // the profile will be registered when the daemon becomes available.
|
| - if (!adapter->IsPresent()) {
|
| + if (!adapter_->IsPresent()) {
|
| VLOG(1) << uuid_.canonical_value() << " on " << device_path_.value()
|
| << ": Delaying profile registration.";
|
| base::MessageLoop::current()->PostTask(FROM_HERE, success_callback);
|
| @@ -310,7 +309,7 @@
|
| DCHECK(ui_task_runner()->RunsTasksOnCurrentThread());
|
|
|
| if (!present) {
|
| - // Adapter removed, we can't use the profile anymore.
|
| + // Adapter removed, the profile is now invalid.
|
| UnregisterProfile();
|
| return;
|
| }
|
| @@ -550,9 +549,20 @@
|
|
|
| VLOG(1) << profile_->object_path().value() << ": Release profile";
|
|
|
| - static_cast<BluetoothAdapterChromeOS*>(adapter_.get())
|
| - ->ReleaseProfile(device_path_, profile_);
|
| + profile_->RemoveDelegate(
|
| + device_path_,
|
| + base::Bind(&BluetoothSocketChromeOS::ReleaseProfile, this, profile_));
|
| +
|
| profile_ = nullptr;
|
| }
|
|
|
| +void BluetoothSocketChromeOS::ReleaseProfile(
|
| + BluetoothAdapterProfileChromeOS* profile) {
|
| + if (adapter_)
|
| + static_cast<BluetoothAdapterChromeOS*>(adapter_.get())
|
| + ->ReleaseProfile(uuid_);
|
| + else
|
| + delete profile;
|
| +}
|
| +
|
| } // namespace chromeos
|
|
|