| 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_)
 | 
| 
 |