Index: device/bluetooth/bluetooth_adapter_win.cc |
diff --git a/device/bluetooth/bluetooth_adapter_win.cc b/device/bluetooth/bluetooth_adapter_win.cc |
index 1bacaacf9b369bc692758ba72d4a1a483fdca2f0..5f52d5f6c8084ae28fbee89b1114eee6fea275b1 100644 |
--- a/device/bluetooth/bluetooth_adapter_win.cc |
+++ b/device/bluetooth/bluetooth_adapter_win.cc |
@@ -227,14 +227,15 @@ void BluetoothAdapterWin::AdapterStateChanged( |
} |
void BluetoothAdapterWin::DevicesPolled( |
- const ScopedVector<BluetoothTaskManagerWin::DeviceState>& devices) { |
+ const std::vector<std::unique_ptr<BluetoothTaskManagerWin::DeviceState>>& |
+ devices) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
// We are receiving a new list of all devices known to the system. Merge this |
// new list with the list we know of (|devices_|) and raise corresponding |
// DeviceAdded, DeviceRemoved and DeviceChanged events. |
- typedef std::set<std::string> DeviceAddressSet; |
+ using DeviceAddressSet = std::set<std::string>; |
DeviceAddressSet known_devices; |
for (DevicesMap::const_iterator iter = devices_.begin(); |
iter != devices_.end(); |
@@ -243,11 +244,8 @@ void BluetoothAdapterWin::DevicesPolled( |
} |
DeviceAddressSet new_devices; |
- for (ScopedVector<BluetoothTaskManagerWin::DeviceState>::const_iterator iter = |
- devices.begin(); |
- iter != devices.end(); |
- ++iter) { |
- new_devices.insert((*iter)->address); |
+ for (auto& device : devices) { |
+ new_devices.insert(device->address); |
} |
// Process device removal first |
@@ -256,8 +254,11 @@ void BluetoothAdapterWin::DevicesPolled( |
for (DeviceAddressSet::const_iterator iter = removed_devices.begin(); |
iter != removed_devices.end(); |
++iter) { |
- std::unique_ptr<BluetoothDevice> device_win = |
- devices_.take_and_erase(*iter); |
+ auto found = devices_.find(*iter); |
+ if (found == devices_.end()) |
+ continue; |
+ auto device_win = std::move(found->second); |
+ devices_.erase(*iter); |
for (auto& observer : observers_) |
observer.DeviceRemoved(this, device_win.get()); |
} |
@@ -267,25 +268,23 @@ void BluetoothAdapterWin::DevicesPolled( |
base::STLSetDifference<DeviceAddressSet>(new_devices, known_devices); |
DeviceAddressSet changed_devices = |
base::STLSetIntersection<DeviceAddressSet>(known_devices, new_devices); |
- for (ScopedVector<BluetoothTaskManagerWin::DeviceState>::const_iterator iter = |
- devices.begin(); |
- iter != devices.end(); |
- ++iter) { |
- BluetoothTaskManagerWin::DeviceState* device_state = (*iter); |
+ for (auto& device_state : devices) { |
if (added_devices.find(device_state->address) != added_devices.end()) { |
- BluetoothDeviceWin* device_win = |
+ auto* device_win = |
new BluetoothDeviceWin(this, *device_state, ui_task_runner_, |
socket_thread_, NULL, net::NetLogSource()); |
- devices_.set(device_state->address, |
- std::unique_ptr<BluetoothDevice>(device_win)); |
+ auto insertion = devices_.insert( |
+ std::make_pair(device_state->address, std::move(device_win))); |
+ if (!insertion.second) |
+ continue; |
for (auto& observer : observers_) |
- observer.DeviceAdded(this, device_win); |
+ observer.DeviceAdded(this, insertion.first->second.get()); |
} else if (changed_devices.find(device_state->address) != |
changed_devices.end()) { |
DevicesMap::const_iterator iter = devices_.find(device_state->address); |
DCHECK(iter != devices_.end()); |
BluetoothDeviceWin* device_win = |
- static_cast<BluetoothDeviceWin*>(iter->second); |
+ static_cast<BluetoothDeviceWin*>(iter->second.get()); |
if (!device_win->IsEqual(*device_state)) { |
device_win->Update(*device_state); |
for (auto& observer : observers_) |