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 #include "components/storage_monitor/storage_monitor_mac.h" | 5 #include "components/storage_monitor/storage_monitor_mac.h" |
6 | 6 |
7 #include "base/mac/foundation_util.h" | 7 #include "base/mac/foundation_util.h" |
8 #include "base/mac/mac_util.h" | 8 #include "base/mac/mac_util.h" |
9 #include "base/strings/sys_string_conversions.h" | 9 #include "base/strings/sys_string_conversions.h" |
10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
(...skipping 29 matching lines...) Expand all Loading... |
40 StorageInfo::Type GetDeviceType(bool is_removable, bool has_dcim) { | 40 StorageInfo::Type GetDeviceType(bool is_removable, bool has_dcim) { |
41 if (!is_removable) | 41 if (!is_removable) |
42 return StorageInfo::FIXED_MASS_STORAGE; | 42 return StorageInfo::FIXED_MASS_STORAGE; |
43 if (has_dcim) | 43 if (has_dcim) |
44 return StorageInfo::REMOVABLE_MASS_STORAGE_WITH_DCIM; | 44 return StorageInfo::REMOVABLE_MASS_STORAGE_WITH_DCIM; |
45 return StorageInfo::REMOVABLE_MASS_STORAGE_NO_DCIM; | 45 return StorageInfo::REMOVABLE_MASS_STORAGE_NO_DCIM; |
46 } | 46 } |
47 | 47 |
48 StorageInfo BuildStorageInfo( | 48 StorageInfo BuildStorageInfo( |
49 CFDictionaryRef dict, std::string* bsd_name) { | 49 CFDictionaryRef dict, std::string* bsd_name) { |
50 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::FILE)); | 50 DCHECK_CURRENTLY_ON(content::BrowserThread::FILE); |
51 | 51 |
52 CFStringRef device_bsd_name = base::mac::GetValueFromDictionary<CFStringRef>( | 52 CFStringRef device_bsd_name = base::mac::GetValueFromDictionary<CFStringRef>( |
53 dict, kDADiskDescriptionMediaBSDNameKey); | 53 dict, kDADiskDescriptionMediaBSDNameKey); |
54 if (device_bsd_name && bsd_name) | 54 if (device_bsd_name && bsd_name) |
55 *bsd_name = base::SysCFStringRefToUTF8(device_bsd_name); | 55 *bsd_name = base::SysCFStringRefToUTF8(device_bsd_name); |
56 | 56 |
57 CFURLRef url = base::mac::GetValueFromDictionary<CFURLRef>( | 57 CFURLRef url = base::mac::GetValueFromDictionary<CFURLRef>( |
58 dict, kDADiskDescriptionVolumePathKey); | 58 dict, kDADiskDescriptionVolumePathKey); |
59 NSURL* nsurl = base::mac::CFToNSCast(url); | 59 NSURL* nsurl = base::mac::CFToNSCast(url); |
60 base::FilePath location = base::mac::NSStringToFilePath([nsurl path]); | 60 base::FilePath location = base::mac::NSStringToFilePath([nsurl path]); |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
102 device_id = StorageInfo::MakeDeviceId(device_type, unique_id); | 102 device_id = StorageInfo::MakeDeviceId(device_type, unique_id); |
103 | 103 |
104 return StorageInfo(device_id, location.value(), label, vendor, model, | 104 return StorageInfo(device_id, location.value(), label, vendor, model, |
105 size_in_bytes); | 105 size_in_bytes); |
106 } | 106 } |
107 | 107 |
108 void GetDiskInfoAndUpdateOnFileThread( | 108 void GetDiskInfoAndUpdateOnFileThread( |
109 const base::WeakPtr<StorageMonitorMac>& monitor, | 109 const base::WeakPtr<StorageMonitorMac>& monitor, |
110 base::ScopedCFTypeRef<CFDictionaryRef> dict, | 110 base::ScopedCFTypeRef<CFDictionaryRef> dict, |
111 StorageMonitorMac::UpdateType update_type) { | 111 StorageMonitorMac::UpdateType update_type) { |
112 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::FILE)); | 112 DCHECK_CURRENTLY_ON(content::BrowserThread::FILE); |
113 | 113 |
114 std::string bsd_name; | 114 std::string bsd_name; |
115 StorageInfo info = BuildStorageInfo(dict, &bsd_name); | 115 StorageInfo info = BuildStorageInfo(dict, &bsd_name); |
116 | 116 |
117 content::BrowserThread::PostTask( | 117 content::BrowserThread::PostTask( |
118 content::BrowserThread::UI, | 118 content::BrowserThread::UI, |
119 FROM_HERE, | 119 FROM_HERE, |
120 base::Bind(&StorageMonitorMac::UpdateDisk, | 120 base::Bind(&StorageMonitorMac::UpdateDisk, |
121 monitor, | 121 monitor, |
122 bsd_name, | 122 bsd_name, |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
202 if (base::mac::IsOSLionOrLater()) { | 202 if (base::mac::IsOSLionOrLater()) { |
203 image_capture_device_manager_.reset(new ImageCaptureDeviceManager); | 203 image_capture_device_manager_.reset(new ImageCaptureDeviceManager); |
204 image_capture_device_manager_->SetNotifications(receiver()); | 204 image_capture_device_manager_->SetNotifications(receiver()); |
205 } | 205 } |
206 } | 206 } |
207 | 207 |
208 void StorageMonitorMac::UpdateDisk( | 208 void StorageMonitorMac::UpdateDisk( |
209 const std::string& bsd_name, | 209 const std::string& bsd_name, |
210 const StorageInfo& info, | 210 const StorageInfo& info, |
211 UpdateType update_type) { | 211 UpdateType update_type) { |
212 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 212 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
213 | 213 |
214 pending_disk_updates_--; | 214 pending_disk_updates_--; |
215 bool initialization_complete = false; | 215 bool initialization_complete = false; |
216 if (!IsInitialized() && pending_disk_updates_ == 0) | 216 if (!IsInitialized() && pending_disk_updates_ == 0) |
217 initialization_complete = true; | 217 initialization_complete = true; |
218 | 218 |
219 if (info.device_id().empty() || bsd_name.empty()) { | 219 if (info.device_id().empty() || bsd_name.empty()) { |
220 if (initialization_complete) | 220 if (initialization_complete) |
221 MarkInitialized(); | 221 MarkInitialized(); |
222 return; | 222 return; |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
341 void StorageMonitorMac::DiskDescriptionChangedCallback(DADiskRef disk, | 341 void StorageMonitorMac::DiskDescriptionChangedCallback(DADiskRef disk, |
342 CFArrayRef keys, | 342 CFArrayRef keys, |
343 void *context) { | 343 void *context) { |
344 StorageMonitorMac* monitor = static_cast<StorageMonitorMac*>(context); | 344 StorageMonitorMac* monitor = static_cast<StorageMonitorMac*>(context); |
345 monitor->GetDiskInfoAndUpdate(disk, UPDATE_DEVICE_CHANGED); | 345 monitor->GetDiskInfoAndUpdate(disk, UPDATE_DEVICE_CHANGED); |
346 } | 346 } |
347 | 347 |
348 void StorageMonitorMac::GetDiskInfoAndUpdate( | 348 void StorageMonitorMac::GetDiskInfoAndUpdate( |
349 DADiskRef disk, | 349 DADiskRef disk, |
350 StorageMonitorMac::UpdateType update_type) { | 350 StorageMonitorMac::UpdateType update_type) { |
351 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 351 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
352 | 352 |
353 pending_disk_updates_++; | 353 pending_disk_updates_++; |
354 | 354 |
355 base::ScopedCFTypeRef<CFDictionaryRef> dict(DADiskCopyDescription(disk)); | 355 base::ScopedCFTypeRef<CFDictionaryRef> dict(DADiskCopyDescription(disk)); |
356 content::BrowserThread::PostTask( | 356 content::BrowserThread::PostTask( |
357 content::BrowserThread::FILE, | 357 content::BrowserThread::FILE, |
358 FROM_HERE, | 358 FROM_HERE, |
359 base::Bind(GetDiskInfoAndUpdateOnFileThread, | 359 base::Bind(GetDiskInfoAndUpdateOnFileThread, |
360 AsWeakPtr(), dict, update_type)); | 360 AsWeakPtr(), dict, update_type)); |
361 } | 361 } |
(...skipping 20 matching lines...) Expand all Loading... |
382 } | 382 } |
383 } | 383 } |
384 return false; | 384 return false; |
385 } | 385 } |
386 | 386 |
387 StorageMonitor* StorageMonitor::CreateInternal() { | 387 StorageMonitor* StorageMonitor::CreateInternal() { |
388 return new StorageMonitorMac(); | 388 return new StorageMonitorMac(); |
389 } | 389 } |
390 | 390 |
391 } // namespace storage_monitor | 391 } // namespace storage_monitor |
OLD | NEW |