Index: chromeos/components/tether/ble_advertiser.cc |
diff --git a/chromeos/components/tether/ble_advertiser.cc b/chromeos/components/tether/ble_advertiser.cc |
index df092605765c9f217d3bac401b369e4575dcf281..7a93af8b33cb51af02427f93c505de2bae34d384 100644 |
--- a/chromeos/components/tether/ble_advertiser.cc |
+++ b/chromeos/components/tether/ble_advertiser.cc |
@@ -20,13 +20,25 @@ namespace { |
uint8_t kInvertedConnectionFlag = 0x01; |
} // namespace |
+void BleAdvertiser::BleAdvertisementUnregisterHandlerImpl:: |
+ OnAdvertisementUnregisterSuccess() {} |
+ |
+void BleAdvertiser::BleAdvertisementUnregisterHandlerImpl:: |
+ OnAdvertisementUnregisterFailure( |
+ device::BluetoothAdvertisement::ErrorCode error_code) { |
+ PA_LOG(ERROR) << "Error while unregistering advertisement. Error code: " |
+ << error_code; |
+} |
+ |
BleAdvertiser::IndividualAdvertisement::IndividualAdvertisement( |
scoped_refptr<device::BluetoothAdapter> adapter, |
std::unique_ptr<cryptauth::EidGenerator::DataWithTimestamp> |
- advertisement_data) |
+ advertisement_data, |
+ std::shared_ptr<BleAdvertisementUnregisterHandler> unregister_handler) |
: adapter_(adapter), |
is_initializing_advertising_(false), |
advertisement_data_(std::move(advertisement_data)), |
+ unregister_handler_(unregister_handler), |
advertisement_(nullptr), |
weak_ptr_factory_(this) { |
adapter_->AddObserver(this); |
@@ -34,6 +46,16 @@ BleAdvertiser::IndividualAdvertisement::IndividualAdvertisement( |
} |
BleAdvertiser::IndividualAdvertisement::~IndividualAdvertisement() { |
+ if (advertisement_) { |
+ advertisement_->Unregister( |
+ base::Bind(&BleAdvertisementUnregisterHandler:: |
+ OnAdvertisementUnregisterSuccess, |
+ base::Unretained(unregister_handler_.get())), |
+ base::Bind(&BleAdvertisementUnregisterHandler:: |
+ OnAdvertisementUnregisterFailure, |
+ base::Unretained(unregister_handler_.get()))); |
+ } |
+ |
adapter_->RemoveObserver(this); |
} |
@@ -135,19 +157,23 @@ BleAdvertiser::BleAdvertiser( |
scoped_refptr<device::BluetoothAdapter> adapter, |
const LocalDeviceDataProvider* local_device_data_provider, |
const cryptauth::RemoteBeaconSeedFetcher* remote_beacon_seed_fetcher) |
- : BleAdvertiser(adapter, |
- cryptauth::EidGenerator::GetInstance(), |
- remote_beacon_seed_fetcher, |
- local_device_data_provider) {} |
+ : BleAdvertiser( |
+ adapter, |
+ base::WrapUnique(new BleAdvertisementUnregisterHandlerImpl()), |
+ cryptauth::EidGenerator::GetInstance(), |
+ remote_beacon_seed_fetcher, |
+ local_device_data_provider) {} |
BleAdvertiser::~BleAdvertiser() {} |
BleAdvertiser::BleAdvertiser( |
scoped_refptr<device::BluetoothAdapter> adapter, |
+ std::unique_ptr<BleAdvertisementUnregisterHandler> unregister_handler, |
const cryptauth::EidGenerator* eid_generator, |
const cryptauth::RemoteBeaconSeedFetcher* remote_beacon_seed_fetcher, |
const LocalDeviceDataProvider* local_device_data_provider) |
: adapter_(adapter), |
+ unregister_handler_(std::move(unregister_handler)), |
eid_generator_(eid_generator), |
remote_beacon_seed_fetcher_(remote_beacon_seed_fetcher), |
local_device_data_provider_(local_device_data_provider) {} |
@@ -197,8 +223,8 @@ bool BleAdvertiser::StartAdvertisingToDevice( |
} |
device_id_to_advertisement_map_[remote_device.GetDeviceId()] = |
- make_scoped_refptr( |
- new IndividualAdvertisement(adapter_, std::move(advertisement))); |
+ make_scoped_refptr(new IndividualAdvertisement( |
+ adapter_, std::move(advertisement), unregister_handler_)); |
return true; |
} |