| Index: device/bluetooth/bluetooth_low_energy_device_mac.mm
|
| diff --git a/device/bluetooth/bluetooth_low_energy_device_mac.mm b/device/bluetooth/bluetooth_low_energy_device_mac.mm
|
| index b8c47f4552fecb6d30312d02bb47c422c36274ea..04c400a781bc86a8df6c9076b44e533b36c1cd95 100644
|
| --- a/device/bluetooth/bluetooth_low_energy_device_mac.mm
|
| +++ b/device/bluetooth/bluetooth_low_energy_device_mac.mm
|
| @@ -239,7 +239,7 @@ void BluetoothLowEnergyDeviceMac::DisconnectGatt() {
|
| void BluetoothLowEnergyDeviceMac::DidDiscoverPrimaryServices(NSError* error) {
|
| if (error) {
|
| // TODO(http://crbug.com/609320): Need to pass the error.
|
| - // TODO(http://crbug.com/609844): Decide what to do if we fail to discover
|
| + // TODO(http://crbug.com/609844): Decide what to do if discover failed
|
| // a device services.
|
| VLOG(1) << "Can't discover primary services: "
|
| << error.localizedDescription.UTF8String << " (" << error.domain
|
| @@ -258,10 +258,44 @@ void BluetoothLowEnergyDeviceMac::DidDiscoverPrimaryServices(NSError* error) {
|
| adapter_->NotifyGattServiceAdded(gatt_service);
|
| }
|
| }
|
| - // TODO(http://crbug.com/609064): Services are fully discovered once all
|
| - // characteristics have been found.
|
| - SetGattServicesDiscoveryComplete(true);
|
| - adapter_->NotifyGattServicesDiscovered(this);
|
| + for (GattServiceMap::const_iterator it = gatt_services_.begin();
|
| + it != gatt_services_.end(); ++it) {
|
| + device::BluetoothRemoteGattService* gatt_service = it->second;
|
| + device::BluetoothRemoteGattServiceMac* gatt_service_mac =
|
| + static_cast<BluetoothRemoteGattServiceMac*>(gatt_service);
|
| + gatt_service_mac->DiscoverCharacteristics();
|
| + }
|
| +}
|
| +
|
| +void BluetoothLowEnergyDeviceMac::DidDiscoverCharacteristics(
|
| + CBService* cb_service,
|
| + NSError* error) {
|
| + if (error) {
|
| + // TODO(http://crbug.com/609320): Need to pass the error.
|
| + // TODO(http://crbug.com/609844): Decide what to do if discover failed
|
| + VLOG(1) << "Can't discover characteristics: "
|
| + << error.localizedDescription.UTF8String << " (" << error.domain
|
| + << ": " << error.code << ")";
|
| + return;
|
| + }
|
| + BluetoothRemoteGattServiceMac* gatt_service =
|
| + GetBluetoothRemoteGattService(cb_service);
|
| + DCHECK(gatt_service);
|
| + gatt_service->DidDiscoverCharacteristics();
|
| +
|
| + // Notify when all services have been discovered.
|
| + bool discovery_complete =
|
| + std::find_if_not(
|
| + gatt_services_.begin(), gatt_services_.end(),
|
| + [](std::pair<std::string, BluetoothRemoteGattService*> pair) {
|
| + BluetoothRemoteGattService* gatt_service = pair.second;
|
| + return static_cast<BluetoothRemoteGattServiceMac*>(gatt_service)
|
| + ->IsDiscoveryComplete();
|
| + }) == gatt_services_.end();
|
| + if (discovery_complete) {
|
| + SetGattServicesDiscoveryComplete(true);
|
| + adapter_->NotifyGattServicesDiscovered(this);
|
| + }
|
| }
|
|
|
| void BluetoothLowEnergyDeviceMac::DidModifyServices(
|
|
|