Index: device/bluetooth/bluetooth_adapter.cc |
diff --git a/device/bluetooth/bluetooth_adapter.cc b/device/bluetooth/bluetooth_adapter.cc |
index 09127f981cb48ec266570c74a803285da6f33141..073dd81c7aca8503e12ecd9bce33a35e3768263f 100644 |
--- a/device/bluetooth/bluetooth_adapter.cc |
+++ b/device/bluetooth/bluetooth_adapter.cc |
@@ -365,6 +365,38 @@ BluetoothAdapter::GetMergedDiscoveryFilterHelper( |
return result; |
} |
+void BluetoothAdapter::RemoveTimedOutDevices() { |
+ std::set<std::string> removed_devices; |
+ for (DevicesMap::const_iterator it = devices_.begin(); it != devices_.end(); |
+ ++it) { |
+ BluetoothDevice* device = it->second; |
+ |
+ if (device->IsPaired() || device->IsConnected() || |
+ device->IsGattConnected()) |
+ continue; |
+ |
+ base::Time last_update_time = device->GetLastUpdateTime(); |
+ |
+ bool device_expired = |
+ (base::Time::NowFromSystemTime() - last_update_time) > timeoutSec; |
+ VLOG(1) << "device: " << device->GetAddress() |
+ << ", last_update: " << last_update_time |
+ << ", exp: " << device_expired; |
+ |
+ if (!device_expired) |
+ continue; |
+ removed_devices.insert(it->first); |
ortuno
2016/06/22 17:23:11
nit: I would change removed_devices to be a std::v
perja
2016/06/23 14:31:25
I used a slightly different approach. Please take
|
+ |
+ FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, |
+ DeviceRemoved(this, device)); |
+ } |
+ |
+ for (const std::string& device_address : removed_devices) { |
+ size_t num_removed = devices_.erase(device_address); |
+ DCHECK_EQ(num_removed, 1U); |
+ } |
+} |
+ |
// static |
void BluetoothAdapter::RecordBluetoothDiscoverySessionStartOutcome( |
UMABluetoothDiscoverySessionOutcome outcome) { |
@@ -381,4 +413,8 @@ void BluetoothAdapter::RecordBluetoothDiscoverySessionStopOutcome( |
static_cast<int>(UMABluetoothDiscoverySessionOutcome::COUNT)); |
} |
+// static |
+const base::TimeDelta BluetoothAdapter::timeoutSec = |
+ base::TimeDelta::FromSeconds(180); |
+ |
} // namespace device |