| Index: device/hid/hid_service.cc | 
| diff --git a/device/hid/hid_service.cc b/device/hid/hid_service.cc | 
| index 4953f256c87eafc1f0f482f1516a617f46d57537..c0b176ea0f719d84beb525abff071b8e21e2bcb0 100644 | 
| --- a/device/hid/hid_service.cc | 
| +++ b/device/hid/hid_service.cc | 
| @@ -25,6 +25,14 @@ namespace { | 
| HidService* g_service; | 
| } | 
|  | 
| +void HidService::Observer::OnDeviceAdded( | 
| +    scoped_refptr<HidDeviceInfo> device_info) { | 
| +} | 
| + | 
| +void HidService::Observer::OnDeviceRemoved( | 
| +    scoped_refptr<HidDeviceInfo> device_info) { | 
| +} | 
| + | 
| HidService* HidService::GetInstance( | 
| scoped_refptr<base::SingleThreadTaskRunner> file_task_runner) { | 
| if (g_service == NULL) { | 
| @@ -53,7 +61,7 @@ void HidService::SetInstanceForTest(HidService* instance) { | 
| void HidService::GetDevices(const GetDevicesCallback& callback) { | 
| DCHECK(thread_checker_.CalledOnValidThread()); | 
| if (enumeration_ready_) { | 
| -    std::vector<HidDeviceInfo> devices; | 
| +    std::vector<scoped_refptr<HidDeviceInfo>> devices; | 
| for (const auto& map_entry : devices_) { | 
| devices.push_back(map_entry.second); | 
| } | 
| @@ -73,14 +81,14 @@ void HidService::RemoveObserver(HidService::Observer* observer) { | 
| } | 
|  | 
| // Fills in the device info struct of the given device_id. | 
| -bool HidService::GetDeviceInfo(const HidDeviceId& device_id, | 
| -                               HidDeviceInfo* info) const { | 
| +scoped_refptr<HidDeviceInfo> HidService::GetDeviceInfo( | 
| +    const HidDeviceId& device_id) const { | 
| DCHECK(thread_checker_.CalledOnValidThread()); | 
| DeviceMap::const_iterator it = devices_.find(device_id); | 
| -  if (it == devices_.end()) | 
| -    return false; | 
| -  *info = it->second; | 
| -  return true; | 
| +  if (it == devices_.end()) { | 
| +    return nullptr; | 
| +  } | 
| +  return it->second; | 
| } | 
|  | 
| HidService::HidService() : enumeration_ready_(false) { | 
| @@ -90,13 +98,13 @@ HidService::~HidService() { | 
| DCHECK(thread_checker_.CalledOnValidThread()); | 
| } | 
|  | 
| -void HidService::AddDevice(const HidDeviceInfo& info) { | 
| +void HidService::AddDevice(scoped_refptr<HidDeviceInfo> device_info) { | 
| DCHECK(thread_checker_.CalledOnValidThread()); | 
| -  if (!ContainsKey(devices_, info.device_id)) { | 
| -    devices_[info.device_id] = info; | 
| +  if (!ContainsKey(devices_, device_info->device_id())) { | 
| +    devices_[device_info->device_id()] = device_info; | 
|  | 
| if (enumeration_ready_) { | 
| -      FOR_EACH_OBSERVER(Observer, observer_list_, OnDeviceAdded(info)); | 
| +      FOR_EACH_OBSERVER(Observer, observer_list_, OnDeviceAdded(device_info)); | 
| } | 
| } | 
| } | 
| @@ -116,7 +124,7 @@ void HidService::FirstEnumerationComplete() { | 
| enumeration_ready_ = true; | 
|  | 
| if (!pending_enumerations_.empty()) { | 
| -    std::vector<HidDeviceInfo> devices; | 
| +    std::vector<scoped_refptr<HidDeviceInfo>> devices; | 
| for (const auto& map_entry : devices_) { | 
| devices.push_back(map_entry.second); | 
| } | 
|  |