Chromium Code Reviews| Index: device/bluetooth/bluetooth_low_energy_discovery_manager_mac.mm |
| diff --git a/device/bluetooth/bluetooth_low_energy_discovery_manager_mac.mm b/device/bluetooth/bluetooth_low_energy_discovery_manager_mac.mm |
| index 11d40caa6261d6a8db61b30986e5b5ab3fcfbe9e..5ba19fcac624570274fa7ed3e9a9205f29038d27 100644 |
| --- a/device/bluetooth/bluetooth_low_energy_discovery_manager_mac.mm |
| +++ b/device/bluetooth/bluetooth_low_energy_discovery_manager_mac.mm |
| @@ -79,7 +79,13 @@ class BluetoothLowEnergyDiscoveryManagerMacDelegate { |
| BluetoothLowEnergyDiscoveryManagerMac:: |
| ~BluetoothLowEnergyDiscoveryManagerMac() { |
| - ClearDevices(); |
| + // Set the manager's delegate to nil since the object it points to |
| + // (|bridge_|) will be deallocated while |manager_| is leaked. |
| + if (base::mac::IsOSLionOrLater()) { |
| + // CoreBluetooth only available in OSX 10.7 and later. |
| + SEL selector = NSSelectorFromString(@"setDelegate:"); |
| + [manager_ performSelector:selector withObject:nil]; |
| + } |
| } |
| bool BluetoothLowEnergyDiscoveryManagerMac::IsDiscovering() const { |
| @@ -88,7 +94,6 @@ bool BluetoothLowEnergyDiscoveryManagerMac::IsDiscovering() const { |
| void BluetoothLowEnergyDiscoveryManagerMac::StartDiscovery( |
| BluetoothDevice::UUIDList services_uuids) { |
| - ClearDevices(); |
| discovering_ = true; |
| pending_ = true; |
| services_uuids_ = services_uuids; |
| @@ -137,23 +142,16 @@ void BluetoothLowEnergyDiscoveryManagerMac::DiscoveredPeripheral( |
| CBPeripheral* peripheral, |
| NSDictionary* advertisementData, |
| int rssi) { |
| - // Look for existing device. |
| - auto iter = devices_.find( |
| - BluetoothLowEnergyDeviceMac::GetPeripheralIdentifier(peripheral)); |
| - if (iter == devices_.end()) { |
| - // A device has been added. |
| - BluetoothLowEnergyDeviceMac* device = |
| - new BluetoothLowEnergyDeviceMac(peripheral, advertisementData, rssi); |
| - devices_.insert(devices_.begin(), |
| - std::make_pair(device->GetIdentifier(), device)); |
| - observer_->DeviceFound(device); |
| - return; |
| - } |
| + observer_->LowEnergyDeviceUpdated(peripheral, advertisementData, rssi); |
| +} |
| - // A device has an update. |
| - BluetoothLowEnergyDeviceMac* old_device = iter->second; |
| - old_device->Update(peripheral, advertisementData, rssi); |
| - observer_->DeviceUpdated(old_device); |
| +void BluetoothLowEnergyDiscoveryManagerMac::SetManagerForTesting( |
| + CBCentralManager* manager) { |
| + // setDelegate is only available in OSX 10.7 and later. |
| + CHECK(base::mac::IsOSLionOrLater()); |
| + SEL selector = NSSelectorFromString(@"setDelegate:"); |
| + [manager performSelector:selector withObject:bridge_]; |
| + manager_.reset(manager); |
| } |
| BluetoothLowEnergyDiscoveryManagerMac* |
| @@ -173,10 +171,7 @@ BluetoothLowEnergyDiscoveryManagerMac::BluetoothLowEnergyDiscoveryManagerMac( |
| manager_.reset( |
| [[aClass alloc] initWithDelegate:bridge_ |
| queue:dispatch_get_main_queue()]); |
| + [manager_ retain]; |
|
scheib
2015/06/24 23:24:25
Add a comment here referencing the explanation in
krstnmnlsn
2015/06/24 23:42:26
Done.
|
| } |
| discovering_ = false; |
| } |
| - |
| -void BluetoothLowEnergyDiscoveryManagerMac::ClearDevices() { |
| - STLDeleteValues(&devices_); |
| -} |