| Index: device/bluetooth/bluetooth_adapter.cc
|
| diff --git a/device/bluetooth/bluetooth_adapter.cc b/device/bluetooth/bluetooth_adapter.cc
|
| index 19b70d9184e24cf308106a31c4373dfbc90366a0..6d997515ac3162344e91d835b5d74c4a4fc052a5 100644
|
| --- a/device/bluetooth/bluetooth_adapter.cc
|
| +++ b/device/bluetooth/bluetooth_adapter.cc
|
| @@ -365,6 +365,38 @@ BluetoothAdapter::GetMergedDiscoveryFilterHelper(
|
| return result;
|
| }
|
|
|
| +void BluetoothAdapter::RemoveTimedOutDevices() {
|
| + for (DevicesMap::iterator it = devices_.begin(); it != devices_.end();) {
|
| + BluetoothDevice* device = it->second;
|
| + if (device->IsPaired() || device->IsConnected() ||
|
| + device->IsGattConnected()) {
|
| + ++it;
|
| + 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) {
|
| + ++it;
|
| + continue;
|
| + }
|
| + DevicesMap::iterator next = it;
|
| + next++;
|
| + std::unique_ptr<BluetoothDevice> removed_device =
|
| + devices_.take_and_erase(it);
|
| + it = next;
|
| +
|
| + FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_,
|
| + DeviceRemoved(this, removed_device.get()));
|
| + }
|
| +}
|
| +
|
| // 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
|
|
|