| Index: device/hid/hid_service_linux.cc | 
| diff --git a/device/hid/hid_service_linux.cc b/device/hid/hid_service_linux.cc | 
| index 76ba3afbc0f05f8b101975359f7625a25a683689..556f3bb639cfaefada665a49dd3b0ff2cabf6fde 100644 | 
| --- a/device/hid/hid_service_linux.cc | 
| +++ b/device/hid/hid_service_linux.cc | 
| @@ -43,7 +43,7 @@ const char kSysfsReportDescriptorKey[] = "report_descriptor"; | 
| }  // namespace | 
|  | 
| struct HidServiceLinux::ConnectParams { | 
| -  ConnectParams(const HidDeviceInfo& device_info, | 
| +  ConnectParams(scoped_refptr<HidDeviceInfo> device_info, | 
| const ConnectCallback& callback, | 
| scoped_refptr<base::SingleThreadTaskRunner> task_runner, | 
| scoped_refptr<base::SingleThreadTaskRunner> file_task_runner) | 
| @@ -53,7 +53,7 @@ struct HidServiceLinux::ConnectParams { | 
| file_task_runner(file_task_runner) {} | 
| ~ConnectParams() {} | 
|  | 
| -  HidDeviceInfo device_info; | 
| +  scoped_refptr<HidDeviceInfo> device_info; | 
| ConnectCallback callback; | 
| scoped_refptr<base::SingleThreadTaskRunner> task_runner; | 
| scoped_refptr<base::SingleThreadTaskRunner> file_task_runner; | 
| @@ -90,14 +90,14 @@ class HidServiceLinux::Helper : public DeviceMonitorLinux::Observer, | 
| return; | 
| } | 
|  | 
| -    HidDeviceInfo device_info; | 
| -    device_info.device_id = device_path; | 
| +    scoped_refptr<HidDeviceInfo> device_info(new HidDeviceInfo()); | 
| +    device_info->device_id_ = device_path; | 
|  | 
| const char* str_property = udev_device_get_devnode(device); | 
| if (!str_property) { | 
| return; | 
| } | 
| -    device_info.device_node = str_property; | 
| +    device_info->device_node_ = str_property; | 
|  | 
| udev_device* parent = udev_device_get_parent(device); | 
| if (!parent) { | 
| @@ -117,21 +117,21 @@ class HidServiceLinux::Helper : public DeviceMonitorLinux::Observer, | 
|  | 
| uint32_t int_property = 0; | 
| if (HexStringToUInt(base::StringPiece(parts[1]), &int_property)) { | 
| -      device_info.vendor_id = int_property; | 
| +      device_info->vendor_id_ = int_property; | 
| } | 
|  | 
| if (HexStringToUInt(base::StringPiece(parts[2]), &int_property)) { | 
| -      device_info.product_id = int_property; | 
| +      device_info->product_id_ = int_property; | 
| } | 
|  | 
| str_property = udev_device_get_property_value(parent, kHIDUnique); | 
| if (str_property != NULL) { | 
| -      device_info.serial_number = str_property; | 
| +      device_info->serial_number_ = str_property; | 
| } | 
|  | 
| str_property = udev_device_get_property_value(parent, kHIDName); | 
| if (str_property != NULL) { | 
| -      device_info.product_name = str_property; | 
| +      device_info->product_name_ = str_property; | 
| } | 
|  | 
| const char* parent_sysfs_path = udev_device_get_syspath(parent); | 
| @@ -149,10 +149,11 @@ class HidServiceLinux::Helper : public DeviceMonitorLinux::Observer, | 
| HidReportDescriptor report_descriptor( | 
| reinterpret_cast<uint8_t*>(&report_descriptor_str[0]), | 
| report_descriptor_str.length()); | 
| -    report_descriptor.GetDetails( | 
| -        &device_info.collections, &device_info.has_report_id, | 
| -        &device_info.max_input_report_size, &device_info.max_output_report_size, | 
| -        &device_info.max_feature_report_size); | 
| +    report_descriptor.GetDetails(&device_info->collections_, | 
| +                                 &device_info->has_report_id_, | 
| +                                 &device_info->max_input_report_size_, | 
| +                                 &device_info->max_output_report_size_, | 
| +                                 &device_info->max_feature_report_size_); | 
|  | 
| task_runner_->PostTask(FROM_HERE, base::Bind(&HidServiceLinux::AddDevice, | 
| service_, device_info)); | 
| @@ -213,7 +214,7 @@ void HidServiceLinux::Connect(const HidDeviceId& device_id, | 
| task_runner_->PostTask(FROM_HERE, base::Bind(callback, nullptr)); | 
| return; | 
| } | 
| -  const HidDeviceInfo& device_info = map_entry->second; | 
| +  scoped_refptr<HidDeviceInfo> device_info = map_entry->second; | 
|  | 
| scoped_ptr<ConnectParams> params(new ConnectParams( | 
| device_info, callback, task_runner_, file_task_runner_)); | 
| @@ -225,7 +226,7 @@ void HidServiceLinux::Connect(const HidDeviceId& device_id, | 
| DCHECK(client) << "Could not get permission broker client."; | 
| if (client) { | 
| client->RequestPathAccess( | 
| -          device_info.device_node, -1, | 
| +          device_info->device_node(), -1, | 
| base::Bind(&HidServiceLinux::OnRequestPathAccessComplete, | 
| base::Passed(¶ms))); | 
| } else { | 
| @@ -265,7 +266,7 @@ void HidServiceLinux::OnRequestPathAccessComplete( | 
| void HidServiceLinux::OpenDevice(scoped_ptr<ConnectParams> params) { | 
| base::ThreadRestrictions::AssertIOAllowed(); | 
| scoped_refptr<base::SingleThreadTaskRunner> task_runner = params->task_runner; | 
| -  base::FilePath device_path(params->device_info.device_node); | 
| +  base::FilePath device_path(params->device_info->device_node()); | 
| base::File& device_file = params->device_file; | 
| int flags = | 
| base::File::FLAG_OPEN | base::File::FLAG_READ | base::File::FLAG_WRITE; | 
| @@ -280,7 +281,8 @@ void HidServiceLinux::OpenDevice(scoped_ptr<ConnectParams> params) { | 
| } | 
| } | 
| if (!device_file.IsValid()) { | 
| -    LOG(ERROR) << "Failed to open '" << params->device_info.device_node << "': " | 
| +    LOG(ERROR) << "Failed to open '" << params->device_info->device_node() | 
| +               << "': " | 
| << base::File::ErrorToString(device_file.error_details()); | 
| task_runner->PostTask(FROM_HERE, base::Bind(params->callback, nullptr)); | 
| return; | 
|  |