Chromium Code Reviews| Index: chrome/browser/system_monitor/removable_device_notifications_chromeos.cc |
| diff --git a/chrome/browser/system_monitor/removable_device_notifications_chromeos.cc b/chrome/browser/system_monitor/removable_device_notifications_chromeos.cc |
| index 1b17b925cd5ac927a22b4c38c31401bcfae19d69..483dd85b4fcf62b4bbeebf86638c075df6976457 100644 |
| --- a/chrome/browser/system_monitor/removable_device_notifications_chromeos.cc |
| +++ b/chrome/browser/system_monitor/removable_device_notifications_chromeos.cc |
| @@ -11,15 +11,55 @@ |
| #include "base/metrics/histogram.h" |
| #include "base/stl_util.h" |
| #include "base/string_number_conversions.h" |
| +#include "base/stringprintf.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 "chrome/browser/system_monitor/removable_device_constants.h" |
| #include "content/public/browser/browser_thread.h" |
| namespace chromeos { |
| namespace { |
| +// Construct a device name using label or manufacturer (vendor and product) name |
| +// details. |
| +string16 GetDeviceName(const disks::DiskMountManager::Disk& disk) { |
| + std::string device_label = disk.device_label(); |
|
vandebo (ex-Chrome)
2012/09/16 19:38:45
nit: device_label -> device_name or name
kmadhusu
2012/09/16 20:08:59
device_label -> device_name. Done
|
| + if (device_label.empty()) { |
| + device_label = disk.vendor_name(); |
| + const std::string& product_name = disk.product_name(); |
| + if (!product_name.empty()) { |
| + if (!device_label.empty()) |
| + device_label += chrome::kSpaceDelim; |
| + device_label += product_name; |
| + } |
| + } |
| + return UTF8ToUTF16(device_label); |
| +} |
| + |
| +// Construct a device id using uuid or manufacturer (vendor and product) id |
| +// details. |
| +std::string MakeDeviceUniqueId(const disks::DiskMountManager::Disk& disk) { |
| + std::string uuid = disk.fs_uuid(); |
| + if (!uuid.empty()) |
| + return chrome::kFSUniqueIdPrefix + uuid; |
| + |
| + // If one of the vendor or product information is missing, its value in the |
| + // string is empty. |
| + // Format: VendorModelSerial:VendorInfo:ModelInfo:SerialInfo |
| + // TODO(kmadhusu) Extract serial information for the disks and append it to |
| + // the device unique id. |
| + const std::string& vendor = disk.vendor_id(); |
| + const std::string& product = disk.product_id(); |
| + if (vendor.empty() && product.empty()) |
| + return std::string(); |
| + return base::StringPrintf("%s%s%s%s%s", |
| + chrome::kVendorModelSerialPrefix, |
| + vendor.c_str(), chrome::kNonSpaceDelim, |
| + product.c_str(), chrome::kNonSpaceDelim); |
| +} |
| + |
| // Returns true if the requested device is valid, else false. On success, fills |
| // in |unique_id| and |device_label| |
| bool GetDeviceInfo(const std::string& source_path, std::string* unique_id, |
| @@ -30,13 +70,11 @@ bool GetDeviceInfo(const std::string& source_path, std::string* unique_id, |
| if (!disk || disk->device_type() == DEVICE_TYPE_UNKNOWN) |
| return false; |
| - *unique_id = disk->fs_uuid(); |
| + if (unique_id) |
| + *unique_id = MakeDeviceUniqueId(*disk); |
| - // TODO(kmadhusu): If device label is empty, extract vendor and model details |
| - // and use them as device_label. |
| - *device_label = UTF8ToUTF16(disk->device_label().empty() ? |
| - FilePath(source_path).BaseName().value() : |
| - disk->device_label()); |
| + if (device_label) |
| + *device_label = GetDeviceName(*disk); |
| return true; |
| } |
| @@ -151,7 +189,9 @@ void RemovableDeviceNotificationsCros::AddMountedPathOnUIThread( |
| // Keep track of device uuid, to see how often we receive empty uuid values. |
| UMA_HISTOGRAM_BOOLEAN("MediaDeviceNotification.DeviceUUIDAvailable", |
| !unique_id.empty()); |
| - if (unique_id.empty()) |
| + UMA_HISTOGRAM_BOOLEAN("MediaDeviceNotification.DeviceNameAvailable", |
| + !device_label.empty()); |
| + if (unique_id.empty() || device_label.empty()) |
| return; |
| chrome::MediaStorageUtil::Type type = has_dcim ? |