| Index: extensions/browser/api/hid/hid_device_manager.cc | 
| diff --git a/extensions/browser/api/hid/hid_device_manager.cc b/extensions/browser/api/hid/hid_device_manager.cc | 
| index 5c84f8a904bd4eeb11128b997a2e24c791037cb9..c95d20fcf124ee7480f7a1fb40e4072d6c779a8b 100644 | 
| --- a/extensions/browser/api/hid/hid_device_manager.cc | 
| +++ b/extensions/browser/api/hid/hid_device_manager.cc | 
| @@ -26,14 +26,14 @@ namespace extensions { | 
| namespace { | 
|  | 
| void PopulateHidDeviceInfo(hid::HidDeviceInfo* output, | 
| -                           const HidDeviceInfo& input) { | 
| -  output->vendor_id = input.vendor_id; | 
| -  output->product_id = input.product_id; | 
| -  output->max_input_report_size = input.max_input_report_size; | 
| -  output->max_output_report_size = input.max_output_report_size; | 
| -  output->max_feature_report_size = input.max_feature_report_size; | 
| - | 
| -  for (const device::HidCollectionInfo& collection : input.collections) { | 
| +                           scoped_refptr<HidDeviceInfo> input) { | 
| +  output->vendor_id = input->vendor_id(); | 
| +  output->product_id = input->product_id(); | 
| +  output->max_input_report_size = input->max_input_report_size(); | 
| +  output->max_output_report_size = input->max_output_report_size(); | 
| +  output->max_feature_report_size = input->max_feature_report_size(); | 
| + | 
| +  for (const device::HidCollectionInfo& collection : input->collections()) { | 
| // Don't expose sensitive data. | 
| if (collection.usage.IsProtected()) { | 
| continue; | 
| @@ -51,7 +51,7 @@ void PopulateHidDeviceInfo(hid::HidDeviceInfo* output, | 
| } | 
| } | 
|  | 
| -bool WillDispatchDeviceEvent(const HidDeviceInfo& device_info, | 
| +bool WillDispatchDeviceEvent(scoped_refptr<HidDeviceInfo> device_info, | 
| content::BrowserContext* context, | 
| const Extension* extension, | 
| base::ListValue* event_args) { | 
| @@ -119,8 +119,7 @@ void HidDeviceManager::GetApiDevices( | 
| } | 
| } | 
|  | 
| -bool HidDeviceManager::GetDeviceInfo(int resource_id, | 
| -                                     HidDeviceInfo* device_info) { | 
| +scoped_refptr<HidDeviceInfo> HidDeviceManager::GetDeviceInfo(int resource_id) { | 
| DCHECK(thread_checker_.CalledOnValidThread()); | 
| HidService* hid_service = device::DeviceClient::Get()->GetHidService(); | 
| DCHECK(hid_service); | 
| @@ -128,18 +127,17 @@ bool HidDeviceManager::GetDeviceInfo(int resource_id, | 
| ResourceIdToDeviceIdMap::const_iterator device_iter = | 
| device_ids_.find(resource_id); | 
| if (device_iter == device_ids_.end()) { | 
| -    return false; | 
| +    return nullptr; | 
| } | 
|  | 
| -  return hid_service->GetDeviceInfo(device_iter->second, device_info); | 
| +  return hid_service->GetDeviceInfo(device_iter->second); | 
| } | 
|  | 
| // static | 
| bool HidDeviceManager::HasPermission(const Extension* extension, | 
| -                                     const HidDeviceInfo& device_info) { | 
| +                                     scoped_refptr<HidDeviceInfo> device_info) { | 
| UsbDevicePermission::CheckParam usbParam( | 
| -      device_info.vendor_id, | 
| -      device_info.product_id, | 
| +      device_info->vendor_id(), device_info->product_id(), | 
| UsbDevicePermissionData::UNSPECIFIED_INTERFACE); | 
| if (extension->permissions_data()->CheckAPIPermissionWithParam( | 
| APIPermission::kUsbDevice, &usbParam)) { | 
| @@ -168,13 +166,13 @@ void HidDeviceManager::OnListenerAdded(const EventListenerInfo& details) { | 
| LazyInitialize(); | 
| } | 
|  | 
| -void HidDeviceManager::OnDeviceAdded(const HidDeviceInfo& device_info) { | 
| +void HidDeviceManager::OnDeviceAdded(scoped_refptr<HidDeviceInfo> device_info) { | 
| DCHECK(thread_checker_.CalledOnValidThread()); | 
| DCHECK_LT(next_resource_id_, std::numeric_limits<int>::max()); | 
| int new_id = next_resource_id_++; | 
| -  DCHECK(!ContainsKey(resource_ids_, device_info.device_id)); | 
| -  resource_ids_[device_info.device_id] = new_id; | 
| -  device_ids_[new_id] = device_info.device_id; | 
| +  DCHECK(!ContainsKey(resource_ids_, device_info->device_id())); | 
| +  resource_ids_[device_info->device_id()] = new_id; | 
| +  device_ids_[new_id] = device_info->device_id(); | 
|  | 
| // Don't generate events during the initial enumeration. | 
| if (enumeration_ready_ && event_router_) { | 
| @@ -190,9 +188,10 @@ void HidDeviceManager::OnDeviceAdded(const HidDeviceInfo& device_info) { | 
| } | 
| } | 
|  | 
| -void HidDeviceManager::OnDeviceRemoved(const HidDeviceInfo& device_info) { | 
| +void HidDeviceManager::OnDeviceRemoved( | 
| +    scoped_refptr<HidDeviceInfo> device_info) { | 
| DCHECK(thread_checker_.CalledOnValidThread()); | 
| -  const auto& resource_entry = resource_ids_.find(device_info.device_id); | 
| +  const auto& resource_entry = resource_ids_.find(device_info->device_id()); | 
| DCHECK(resource_entry != resource_ids_.end()); | 
| int resource_id = resource_entry->second; | 
| const auto& device_entry = device_ids_.find(resource_id); | 
| @@ -234,8 +233,9 @@ scoped_ptr<base::ListValue> HidDeviceManager::CreateApiDeviceList( | 
| int resource_id = map_entry.first; | 
| const HidDeviceId& device_id = map_entry.second; | 
|  | 
| -    HidDeviceInfo device_info; | 
| -    if (!hid_service->GetDeviceInfo(device_id, &device_info)) { | 
| +    scoped_refptr<HidDeviceInfo> device_info = | 
| +        hid_service->GetDeviceInfo(device_id); | 
| +    if (!device_info) { | 
| continue; | 
| } | 
|  | 
| @@ -262,10 +262,10 @@ scoped_ptr<base::ListValue> HidDeviceManager::CreateApiDeviceList( | 
| } | 
|  | 
| void HidDeviceManager::OnEnumerationComplete( | 
| -    const std::vector<HidDeviceInfo>& devices) { | 
| +    const std::vector<scoped_refptr<HidDeviceInfo>>& devices) { | 
| DCHECK(resource_ids_.empty()); | 
| DCHECK(device_ids_.empty()); | 
| -  for (const device::HidDeviceInfo& device_info : devices) { | 
| +  for (const scoped_refptr<HidDeviceInfo>& device_info : devices) { | 
| OnDeviceAdded(device_info); | 
| } | 
| enumeration_ready_ = true; | 
| @@ -280,7 +280,7 @@ void HidDeviceManager::OnEnumerationComplete( | 
|  | 
| void HidDeviceManager::DispatchEvent(const std::string& event_name, | 
| scoped_ptr<base::ListValue> event_args, | 
| -                                     const HidDeviceInfo& device_info) { | 
| +                                     scoped_refptr<HidDeviceInfo> device_info) { | 
| scoped_ptr<Event> event(new Event(event_name, event_args.Pass())); | 
| event->will_dispatch_callback = | 
| base::Bind(&WillDispatchDeviceEvent, device_info); | 
|  |