OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 // | 4 // |
5 // Any tasks that communicates with the portable device may take >100ms to | 5 // Any tasks that communicates with the portable device may take >100ms to |
6 // complete. Those tasks should be run on an blocking thread instead of the | 6 // complete. Those tasks should be run on an blocking thread instead of the |
7 // UI thread. | 7 // UI thread. |
8 | 8 |
9 #include "components/storage_monitor/portable_device_watcher_win.h" | 9 #include "components/storage_monitor/portable_device_watcher_win.h" |
10 | 10 |
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
204 } | 204 } |
205 | 205 |
206 // Constructs a unique identifier for the object specified by the |object_id|. | 206 // Constructs a unique identifier for the object specified by the |object_id|. |
207 // On success, returns true and fills in |unique_id|. | 207 // On success, returns true and fills in |unique_id|. |
208 bool GetObjectUniqueId(IPortableDevice* device, | 208 bool GetObjectUniqueId(IPortableDevice* device, |
209 const base::string16& object_id, | 209 const base::string16& object_id, |
210 base::string16* unique_id) { | 210 base::string16* unique_id) { |
211 DCHECK(device); | 211 DCHECK(device); |
212 DCHECK(unique_id); | 212 DCHECK(unique_id); |
213 base::win::ScopedComPtr<IPortableDeviceContent> content; | 213 base::win::ScopedComPtr<IPortableDeviceContent> content; |
214 HRESULT hr = device->Content(content.Receive()); | 214 HRESULT hr = device->Content(content.GetAddressOf()); |
215 if (FAILED(hr)) { | 215 if (FAILED(hr)) { |
216 DPLOG(ERROR) << "Failed to get IPortableDeviceContent interface"; | 216 DPLOG(ERROR) << "Failed to get IPortableDeviceContent interface"; |
217 return false; | 217 return false; |
218 } | 218 } |
219 | 219 |
220 base::win::ScopedComPtr<IPortableDeviceProperties> properties; | 220 base::win::ScopedComPtr<IPortableDeviceProperties> properties; |
221 hr = content->Properties(properties.Receive()); | 221 hr = content->Properties(properties.GetAddressOf()); |
222 if (FAILED(hr)) { | 222 if (FAILED(hr)) { |
223 DPLOG(ERROR) << "Failed to get IPortableDeviceProperties interface"; | 223 DPLOG(ERROR) << "Failed to get IPortableDeviceProperties interface"; |
224 return false; | 224 return false; |
225 } | 225 } |
226 | 226 |
227 base::win::ScopedComPtr<IPortableDeviceKeyCollection> properties_to_read; | 227 base::win::ScopedComPtr<IPortableDeviceKeyCollection> properties_to_read; |
228 if (!PopulatePropertyKeyCollection(object_id, &properties_to_read)) | 228 if (!PopulatePropertyKeyCollection(object_id, &properties_to_read)) |
229 return false; | 229 return false; |
230 | 230 |
231 base::win::ScopedComPtr<IPortableDeviceValues> properties_values; | 231 base::win::ScopedComPtr<IPortableDeviceValues> properties_values; |
232 if (FAILED(properties->GetValues(object_id.c_str(), | 232 if (FAILED(properties->GetValues(object_id.c_str(), properties_to_read.Get(), |
233 properties_to_read.Get(), | 233 properties_values.GetAddressOf()))) { |
234 properties_values.Receive()))) { | |
235 return false; | 234 return false; |
236 } | 235 } |
237 | 236 |
238 REFPROPERTYKEY key = GetUniqueIdPropertyKey(object_id); | 237 REFPROPERTYKEY key = GetUniqueIdPropertyKey(object_id); |
239 return GetStringPropertyValue(properties_values.Get(), key, unique_id); | 238 return GetStringPropertyValue(properties_values.Get(), key, unique_id); |
240 } | 239 } |
241 | 240 |
242 // Constructs the device storage unique identifier using |device_serial_num| and | 241 // Constructs the device storage unique identifier using |device_serial_num| and |
243 // |storage_id|. On success, returns true and fills in |device_storage_id|. | 242 // |storage_id|. On success, returns true and fills in |device_storage_id|. |
244 bool ConstructDeviceStorageUniqueId(const base::string16& device_serial_num, | 243 bool ConstructDeviceStorageUniqueId(const base::string16& device_serial_num, |
(...skipping 10 matching lines...) Expand all Loading... |
255 } | 254 } |
256 | 255 |
257 // Gets a list of removable storage object identifiers present in |device|. | 256 // Gets a list of removable storage object identifiers present in |device|. |
258 // On success, returns true and fills in |storage_object_ids|. | 257 // On success, returns true and fills in |storage_object_ids|. |
259 bool GetRemovableStorageObjectIds( | 258 bool GetRemovableStorageObjectIds( |
260 IPortableDevice* device, | 259 IPortableDevice* device, |
261 PortableDeviceWatcherWin::StorageObjectIDs* storage_object_ids) { | 260 PortableDeviceWatcherWin::StorageObjectIDs* storage_object_ids) { |
262 DCHECK(device); | 261 DCHECK(device); |
263 DCHECK(storage_object_ids); | 262 DCHECK(storage_object_ids); |
264 base::win::ScopedComPtr<IPortableDeviceCapabilities> capabilities; | 263 base::win::ScopedComPtr<IPortableDeviceCapabilities> capabilities; |
265 HRESULT hr = device->Capabilities(capabilities.Receive()); | 264 HRESULT hr = device->Capabilities(capabilities.GetAddressOf()); |
266 if (FAILED(hr)) { | 265 if (FAILED(hr)) { |
267 DPLOG(ERROR) << "Failed to get IPortableDeviceCapabilities interface"; | 266 DPLOG(ERROR) << "Failed to get IPortableDeviceCapabilities interface"; |
268 return false; | 267 return false; |
269 } | 268 } |
270 | 269 |
271 base::win::ScopedComPtr<IPortableDevicePropVariantCollection> storage_ids; | 270 base::win::ScopedComPtr<IPortableDevicePropVariantCollection> storage_ids; |
272 hr = capabilities->GetFunctionalObjects(WPD_FUNCTIONAL_CATEGORY_STORAGE, | 271 hr = capabilities->GetFunctionalObjects(WPD_FUNCTIONAL_CATEGORY_STORAGE, |
273 storage_ids.Receive()); | 272 storage_ids.GetAddressOf()); |
274 if (FAILED(hr)) { | 273 if (FAILED(hr)) { |
275 DPLOG(ERROR) << "Failed to get IPortableDevicePropVariantCollection"; | 274 DPLOG(ERROR) << "Failed to get IPortableDevicePropVariantCollection"; |
276 return false; | 275 return false; |
277 } | 276 } |
278 | 277 |
279 DWORD num_storage_obj_ids = 0; | 278 DWORD num_storage_obj_ids = 0; |
280 hr = storage_ids->GetCount(&num_storage_obj_ids); | 279 hr = storage_ids->GetCount(&num_storage_obj_ids); |
281 if (FAILED(hr)) | 280 if (FAILED(hr)) |
282 return false; | 281 return false; |
283 | 282 |
(...skipping 382 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
666 if (storage_notifications_) { | 665 if (storage_notifications_) { |
667 storage_notifications_->ProcessDetach( | 666 storage_notifications_->ProcessDetach( |
668 storage_map_iter->second.device_id()); | 667 storage_map_iter->second.device_id()); |
669 } | 668 } |
670 storage_map_.erase(storage_map_iter); | 669 storage_map_.erase(storage_map_iter); |
671 } | 670 } |
672 device_map_.erase(device_iter); | 671 device_map_.erase(device_iter); |
673 } | 672 } |
674 | 673 |
675 } // namespace storage_monitor | 674 } // namespace storage_monitor |
OLD | NEW |