| // Copyright (c) 2011 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CROS_DISKS_UDEV_DEVICE_H_ |
| #define CROS_DISKS_UDEV_DEVICE_H_ |
| |
| #include <blkid/blkid.h> |
| #include <stdint.h> |
| |
| #include <string> |
| #include <vector> |
| |
| #include <base/macros.h> |
| #include <chromeos/dbus/service_constants.h> |
| #include <gtest/gtest_prod.h> |
| |
| #include "cros-disks/disk.h" |
| |
| struct udev_device; |
| |
| namespace cros_disks { |
| |
| // A utility class that helps query information about a udev device. |
| class UdevDevice { |
| public: |
| explicit UdevDevice(udev_device *dev); |
| ~UdevDevice(); |
| |
| // Gets the string value of a device attribute. |
| std::string GetAttribute(const char *key) const; |
| |
| // Checks if the value of a device attribute represents a Boolean true. |
| bool IsAttributeTrue(const char *key) const; |
| |
| // Checks if a device attribute exists. |
| bool HasAttribute(const char *key) const; |
| |
| // Gets the string value of a device property. |
| std::string GetProperty(const char *key) const; |
| |
| // Checks if the value of a device property represents a Boolean true. |
| bool IsPropertyTrue(const char *key) const; |
| |
| // Checks if a device property exists. |
| bool HasProperty(const char *key) const; |
| |
| // Gets the string value of a device property from blkid. |
| std::string GetPropertyFromBlkId(const char *key); |
| |
| // Gets the total and remaining capacity of the device. |
| void GetSizeInfo(uint64_t *total_size, uint64_t *remaining_size) const; |
| |
| // Gets the number of partitions on the device. |
| size_t GetPartitionCount() const; |
| |
| // Gets the device media type used on the device. |
| DeviceMediaType GetDeviceMediaType() const; |
| |
| // Gets the USB vendor and product ID of the device. Returns true if the |
| // IDs are found. |
| bool GetVendorAndProductId(std::string* vendor_id, |
| std::string* product_id) const; |
| |
| // Checks if a device should be auto-mounted. Currently, all external |
| // disk devices, which are neither on the boot device nor virtual, |
| // are considered auto-mountable. |
| bool IsAutoMountable() const; |
| |
| // Checks if a device should be hidden from the file browser. |
| bool IsHidden(); |
| |
| // Checks if the device is completely ignored by cros-disks. Unlike |
| // IsAutoMountable() or IsHidden(), IsIgnored() prevents a device from being |
| // reported by cros-disks during device enumeration and udev events, such that |
| // the system does not even gather properties of the device. Currently, all |
| // virtual devices, except loop devices, are ignored. Loop devices are used |
| // by automated tests to simulate removable devices and thus not ignored. |
| bool IsIgnored() const; |
| |
| // Checks if any media is available in the device. |
| bool IsMediaAvailable() const; |
| |
| // Checks if the device is a mobile broadband device. |
| bool IsMobileBroadbandDevice() const; |
| |
| // Checks if the device is on the boot device. |
| bool IsOnBootDevice() const; |
| |
| // Checks if the device is on the removable device. |
| bool IsOnRemovableDevice() const; |
| |
| // Checks if the device is a virtual device. |
| bool IsVirtual() const; |
| |
| // Checks if the device is a loop device. |
| bool IsLoopDevice() const; |
| |
| // Gets the native sysfs path of the device. |
| std::string NativePath() const; |
| |
| // Gets the mount paths for the device. |
| std::vector<std::string> GetMountPaths() const; |
| |
| // Gets the mount paths for a given device path. |
| static std::vector<std::string> GetMountPaths( |
| const std::string& device_path); |
| |
| // Returns a Disk object based on the device information. |
| Disk ToDisk(); |
| |
| private: |
| // Returns |str| if |str| is a valid UTF8 string (determined by |
| // base::IsStringUTF8) or an empty string otherwise. |
| static std::string EnsureUTF8String(const std::string& str); |
| |
| // Checks if the device is on a MMC/SD card device. |
| bool IsOnMMCDevice() const; |
| |
| // Checks if a string contains a "1" (as Boolean true). |
| static bool IsValueBooleanTrue(const char *value); |
| |
| mutable udev_device *dev_; |
| |
| blkid_cache blkid_cache_; |
| |
| FRIEND_TEST(UdevDeviceTest, EnsureUTF8String); |
| FRIEND_TEST(UdevDeviceTest, IsValueBooleanTrue); |
| |
| DISALLOW_COPY_AND_ASSIGN(UdevDevice); |
| }; |
| |
| } // namespace cros_disks |
| |
| #endif // CROS_DISKS_UDEV_DEVICE_H_ |