Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(272)

Unified Diff: chrome/browser/system_monitor/disk_info_mac.mm

Issue 10919185: Implement RemovableDeviceNotifications for Mac (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix device id Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/system_monitor/disk_info_mac.mm
diff --git a/chrome/browser/system_monitor/disk_info_mac.mm b/chrome/browser/system_monitor/disk_info_mac.mm
new file mode 100644
index 0000000000000000000000000000000000000000..10d5a3261626319e5179190471e2ba31287a6144
--- /dev/null
+++ b/chrome/browser/system_monitor/disk_info_mac.mm
@@ -0,0 +1,106 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/system_monitor/disk_info_mac.h"
+
+#include "base/mac/foundation_util.h"
+#include "base/string_number_conversions.h"
+#include "base/sys_string_conversions.h"
+#include "base/utf_string_conversions.h"
+#include "chrome/browser/system_monitor/media_device_notifications_utils.h"
+#include "chrome/browser/system_monitor/media_storage_util.h"
+#include "content/public/browser/browser_thread.h"
+
+namespace chrome {
+namespace {
+
+string16 GetUTF16FromDictionary(CFDictionaryRef dictionary, CFStringRef key) {
+ CFStringRef value =
+ base::mac::GetValueFromDictionary<CFStringRef>(dictionary, key);
+ return base::SysCFStringRefToUTF16(value);
+}
+
+string16 JoinName(const string16& name, const string16& addition) {
+ if (addition.empty())
+ return name;
+ if (name.empty())
+ return addition;
+ return name + ASCIIToUTF16(" ") + addition;
+}
+
+MediaStorageUtil::Type GetDeviceType(bool is_removable, bool has_dcim) {
+ if (!is_removable)
+ return MediaStorageUtil::FIXED_MASS_STORAGE;
+ if (has_dcim)
+ return MediaStorageUtil::REMOVABLE_MASS_STORAGE_WITH_DCIM;
+ return MediaStorageUtil::REMOVABLE_MASS_STORAGE_NO_DCIM;
+}
+
+} // namespace
+
+DiskInfoMac::DiskInfoMac() {
+}
+
+DiskInfoMac::~DiskInfoMac() {
+}
+
+// static
+DiskInfoMac DiskInfoMac::BuildDiskInfoOnFileThread(CFDictionaryRef dict) {
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::FILE));
+ DiskInfoMac info;
+
+ CFStringRef bsd_name = base::mac::GetValueFromDictionary<CFStringRef>(
+ dict, kDADiskDescriptionMediaBSDNameKey);
+ info.bsd_name_ = base::SysCFStringRefToUTF8(bsd_name);
+
+ CFURLRef url = base::mac::GetValueFromDictionary<CFURLRef>(
+ dict, kDADiskDescriptionVolumePathKey);
+ NSURL* nsurl = base::mac::CFToNSCast(url);
+ info.mount_point_ = base::mac::NSStringToFilePath([nsurl path]);
+
+ string16 vendor_name = GetUTF16FromDictionary(
+ dict, kDADiskDescriptionDeviceVendorKey);
+ string16 model_name = GetUTF16FromDictionary(
+ dict, kDADiskDescriptionDeviceModelKey);
+ string16 volume_name = GetUTF16FromDictionary(
+ dict, kDADiskDescriptionVolumeNameKey);
+ info.display_name_ = vendor_name;
+ info.display_name_ = JoinName(info.display_name_, model_name);
+ info.display_name_ = JoinName(info.display_name_, volume_name);
+
+ CFUUIDRef uuid = base::mac::GetValueFromDictionary<CFUUIDRef>(
+ dict, kDADiskDescriptionVolumeUUIDKey);
+ std::string unique_id;
+ if (uuid) {
+ base::mac::ScopedCFTypeRef<CFStringRef> uuid_string(
+ CFUUIDCreateString(NULL, uuid));
+ unique_id = base::SysCFStringRefToUTF8(uuid_string);
+ }
+ if (unique_id.empty()) {
+ string16 revision = GetUTF16FromDictionary(
+ dict, kDADiskDescriptionDeviceRevisionKey);
+ CFNumberRef unit_number = base::mac::GetValueFromDictionary<CFNumberRef>(
+ dict, kDADiskDescriptionDeviceUnitKey);
+ string16 unique_id2 = vendor_name;
+ unique_id2 = JoinName(unique_id2, model_name);
+ unique_id2 = JoinName(unique_id2, revision);
+ if (unit_number) {
vandebo (ex-Chrome) 2012/09/11 00:45:50 Did you figure out what this is? I'm not sure. I
sail 2012/09/11 03:02:00 Oops, you're right. This changes when you plugin t
+ int unit = [base::mac::CFToNSCast(unit_number) intValue];
+ unique_id2 = JoinName(unique_id2, base::IntToString16(unit));
+ }
+ unique_id = UTF16ToUTF8(unique_id2);
+ }
+
+ CFBooleanRef is_removable_ref =
+ base::mac::GetValueFromDictionary<CFBooleanRef>(
+ dict, kDADiskDescriptionMediaRemovableKey);
+ bool is_removable = is_removable_ref && CFBooleanGetValue(is_removable_ref);
+ bool has_dcim = IsMediaDevice(info.mount_point_.value());
+ info.type_ = GetDeviceType(is_removable, has_dcim);
+ info.device_id_ = MediaStorageUtil::MakeDeviceId(info.type_, unique_id);
+
+ return info;
+}
+
+} // chrome

Powered by Google App Engine
This is Rietveld 408576698