| Index: device/hid/hid_connection.cc | 
| diff --git a/device/hid/hid_connection.cc b/device/hid/hid_connection.cc | 
| index 5ff39f3f95e81ac1f99d67e8ec0dffd0a95233dd..6ce2d7fd0024b20fbab5ad50647613f54500188e 100644 | 
| --- a/device/hid/hid_connection.cc | 
| +++ b/device/hid/hid_connection.cc | 
| @@ -38,14 +38,12 @@ struct CollectionIsProtected { | 
| } | 
| }; | 
|  | 
| -bool FindCollectionByReportId(const HidDeviceInfo& device_info, | 
| +bool FindCollectionByReportId(const std::vector<HidCollectionInfo>& collections, | 
| uint8_t report_id, | 
| HidCollectionInfo* collection_info) { | 
| -  std::vector<HidCollectionInfo>::const_iterator collection_iter = | 
| -      std::find_if(device_info.collections.begin(), | 
| -                   device_info.collections.end(), | 
| -                   CollectionHasReportId(report_id)); | 
| -  if (collection_iter != device_info.collections.end()) { | 
| +  std::vector<HidCollectionInfo>::const_iterator collection_iter = std::find_if( | 
| +      collections.begin(), collections.end(), CollectionHasReportId(report_id)); | 
| +  if (collection_iter != collections.end()) { | 
| if (collection_info) { | 
| *collection_info = *collection_iter; | 
| } | 
| @@ -55,17 +53,17 @@ bool FindCollectionByReportId(const HidDeviceInfo& device_info, | 
| return false; | 
| } | 
|  | 
| -bool HasProtectedCollection(const HidDeviceInfo& device_info) { | 
| -  return std::find_if(device_info.collections.begin(), | 
| -                      device_info.collections.end(), | 
| -                      CollectionIsProtected()) != device_info.collections.end(); | 
| +bool HasProtectedCollection(const std::vector<HidCollectionInfo>& collections) { | 
| +  return std::find_if(collections.begin(), collections.end(), | 
| +                      CollectionIsProtected()) != collections.end(); | 
| } | 
|  | 
| }  // namespace | 
|  | 
| -HidConnection::HidConnection(const HidDeviceInfo& device_info) | 
| +HidConnection::HidConnection(scoped_refptr<HidDeviceInfo> device_info) | 
| : device_info_(device_info), closed_(false) { | 
| -  has_protected_collection_ = HasProtectedCollection(device_info); | 
| +  has_protected_collection_ = | 
| +      HasProtectedCollection(device_info->collections()); | 
| } | 
|  | 
| HidConnection::~HidConnection() { | 
| @@ -83,7 +81,7 @@ void HidConnection::Close() { | 
|  | 
| void HidConnection::Read(const ReadCallback& callback) { | 
| DCHECK(thread_checker_.CalledOnValidThread()); | 
| -  if (device_info_.max_input_report_size == 0) { | 
| +  if (device_info_->max_input_report_size() == 0) { | 
| VLOG(1) << "This device does not support input reports."; | 
| callback.Run(false, NULL, 0); | 
| return; | 
| @@ -96,14 +94,14 @@ void HidConnection::Write(scoped_refptr<net::IOBuffer> buffer, | 
| size_t size, | 
| const WriteCallback& callback) { | 
| DCHECK(thread_checker_.CalledOnValidThread()); | 
| -  if (device_info_.max_output_report_size == 0) { | 
| +  if (device_info_->max_output_report_size() == 0) { | 
| VLOG(1) << "This device does not support output reports."; | 
| callback.Run(false); | 
| return; | 
| } | 
| DCHECK_GE(size, 1u); | 
| uint8_t report_id = buffer->data()[0]; | 
| -  if (device_info().has_report_id != (report_id != 0)) { | 
| +  if (device_info_->has_report_id() != (report_id != 0)) { | 
| VLOG(1) << "Invalid output report ID."; | 
| callback.Run(false); | 
| return; | 
| @@ -120,12 +118,12 @@ void HidConnection::Write(scoped_refptr<net::IOBuffer> buffer, | 
| void HidConnection::GetFeatureReport(uint8_t report_id, | 
| const ReadCallback& callback) { | 
| DCHECK(thread_checker_.CalledOnValidThread()); | 
| -  if (device_info_.max_feature_report_size == 0) { | 
| +  if (device_info_->max_feature_report_size() == 0) { | 
| VLOG(1) << "This device does not support feature reports."; | 
| callback.Run(false, NULL, 0); | 
| return; | 
| } | 
| -  if (device_info().has_report_id != (report_id != 0)) { | 
| +  if (device_info_->has_report_id() != (report_id != 0)) { | 
| VLOG(1) << "Invalid feature report ID."; | 
| callback.Run(false, NULL, 0); | 
| return; | 
| @@ -143,14 +141,14 @@ void HidConnection::SendFeatureReport(scoped_refptr<net::IOBuffer> buffer, | 
| size_t size, | 
| const WriteCallback& callback) { | 
| DCHECK(thread_checker_.CalledOnValidThread()); | 
| -  if (device_info_.max_feature_report_size == 0) { | 
| +  if (device_info_->max_feature_report_size() == 0) { | 
| VLOG(1) << "This device does not support feature reports."; | 
| callback.Run(false); | 
| return; | 
| } | 
| DCHECK_GE(size, 1u); | 
| uint8_t report_id = buffer->data()[0]; | 
| -  if (device_info().has_report_id != (report_id != 0)) { | 
| +  if (device_info_->has_report_id() != (report_id != 0)) { | 
| VLOG(1) << "Invalid feature report ID."; | 
| callback.Run(false); | 
| return; | 
| @@ -180,7 +178,8 @@ bool HidConnection::CompleteRead(scoped_refptr<net::IOBuffer> buffer, | 
|  | 
| bool HidConnection::IsReportIdProtected(uint8_t report_id) { | 
| HidCollectionInfo collection_info; | 
| -  if (FindCollectionByReportId(device_info_, report_id, &collection_info)) { | 
| +  if (FindCollectionByReportId(device_info_->collections(), report_id, | 
| +                               &collection_info)) { | 
| return collection_info.usage.IsProtected(); | 
| } | 
|  | 
|  |