Index: chrome/browser/chromeos/dbus/cros_disks_client.cc |
diff --git a/chrome/browser/chromeos/dbus/cros_disks_client.cc b/chrome/browser/chromeos/dbus/cros_disks_client.cc |
index 96e5ddebd45ec60c57fcf04897925c878b56aefe..63e63df806baeeff39b5e987ad5197c8e93626d6 100644 |
--- a/chrome/browser/chromeos/dbus/cros_disks_client.cc |
+++ b/chrome/browser/chromeos/dbus/cros_disks_client.cc |
@@ -1,4 +1,4 @@ |
-// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
+// 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. |
@@ -27,13 +27,36 @@ const char* kDefaultUnmountOptions[] = { |
"force", |
}; |
-// Returns the device type from the given arguments. |
-DeviceType GetDeviceType(bool is_optical, bool is_rotational) { |
- if (is_optical) |
- return OPTICAL; |
- if (is_rotational) |
- return HDD; |
- return FLASH; |
+// Checks if retrieved media type is in boundaries of DeviceMediaType. |
+bool IsValidMediaType(uint32 type) { |
+ return type < static_cast<uint32>(cros_disks::DEVICE_MEDIA_NUM_VALUES); |
+} |
+ |
+ |
+// Translates enum used in cros-disks to enum used in Chrome. |
+// Note that we could just do static_cast, but this is less sensitive to |
+// changes in cros-disks. |
+DeviceType DeviceMediaTypeToDeviceType(uint32 media_type_uint32) { |
+ if (!IsValidMediaType(media_type_uint32)) |
+ return DEVICE_TYPE_UNKNOWN; |
+ |
+ cros_disks::DeviceMediaType media_type = |
+ cros_disks::DeviceMediaType(media_type_uint32); |
+ |
+ switch (media_type) { |
+ case(cros_disks::DEVICE_MEDIA_UNKNOWN): |
+ return DEVICE_TYPE_UNKNOWN; |
+ case(cros_disks::DEVICE_MEDIA_USB): |
+ return DEVICE_TYPE_USB; |
+ case(cros_disks::DEVICE_MEDIA_SD): |
+ return DEVICE_TYPE_SD; |
+ case(cros_disks::DEVICE_MEDIA_OPTICAL_DISC): |
+ return DEVICE_TYPE_OPTICAL_DISC; |
+ case(cros_disks::DEVICE_MEDIA_MOBILE): |
+ return DEVICE_TYPE_MOBILE; |
+ default: |
+ return DEVICE_TYPE_UNKNOWN; |
+ } |
} |
// Pops a bool value when |reader| is not NULL. |
@@ -52,6 +75,15 @@ bool MaybePopString(dbus::MessageReader* reader, std::string* value) { |
return reader->PopString(value); |
} |
+// Pops a uint32 value when |reader| is not NULL. |
+// Returns true when a value is popped, false otherwise. |
+bool MaybePopUint32(dbus::MessageReader* reader, uint32* value) { |
+ if (!reader) |
+ return false; |
+ |
+ return reader->PopUint32(value); |
+} |
+ |
// Pops a uint64 value when |reader| is not NULL. |
// Returns true when a value is popped, false otherwise. |
bool MaybePopUint64(dbus::MessageReader* reader, uint64* value) { |
@@ -375,7 +407,7 @@ DiskInfo::DiskInfo(const std::string& device_path, dbus::Response* response) |
is_drive_(false), |
has_media_(false), |
on_boot_device_(false), |
- device_type_(UNDEFINED), |
+ device_type_(DEVICE_TYPE_UNKNOWN), |
total_size_in_bytes_(0), |
is_read_only_(false), |
is_hidden_(true) { |
@@ -502,18 +534,16 @@ void DiskInfo::InitializeFromResponse(dbus::Response* response) { |
MaybePopString(properties[cros_disks::kIdLabel], &label_); |
MaybePopUint64(properties[cros_disks::kDeviceSize], &total_size_in_bytes_); |
+ uint32 media_type_uint32 = 0; |
+ if (MaybePopUint32(properties[cros_disks::kDeviceMediaType], |
+ &media_type_uint32)) { |
+ device_type_ = DeviceMediaTypeToDeviceType(media_type_uint32); |
+ } |
+ |
std::vector<std::string> mount_paths; |
if (MaybePopArrayOfStrings(properties[cros_disks::kDeviceMountPaths], |
&mount_paths) && !mount_paths.empty()) |
mount_path_ = mount_paths[0]; |
- |
- bool is_rotational = false; |
- bool is_optical = false; |
- if (MaybePopBool(properties[cros_disks::kDriveIsRotational], |
- &is_rotational) && |
- MaybePopBool(properties[cros_disks::kDeviceIsOpticalDisc], |
- &is_optical)) |
- device_type_ = GetDeviceType(is_optical, is_rotational); |
} |
//////////////////////////////////////////////////////////////////////////////// |