Roll src/third_party/WebKit f36d5e0:68b67cd (svn 193299:193303)
[chromium-blink-merge.git] / components / storage_monitor / storage_info.h
blobcaebe1cd5ec98d73951c1b996b76f53fd51e47fc
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
3 // found in the LICENSE file.
5 #ifndef COMPONENTS_STORAGE_MONITOR_STORAGE_INFO_H_
6 #define COMPONENTS_STORAGE_MONITOR_STORAGE_INFO_H_
8 #include "base/files/file_path.h"
9 #include "base/strings/string16.h"
11 namespace storage_monitor {
13 class StorageInfo {
14 public:
15 enum Type {
16 // A removable mass storage device with a DCIM directory.
17 REMOVABLE_MASS_STORAGE_WITH_DCIM,
18 // A removable mass storage device without a DCIM directory.
19 REMOVABLE_MASS_STORAGE_NO_DCIM,
20 // A fixed mass storage device.
21 FIXED_MASS_STORAGE,
22 // A MTP or PTP device.
23 MTP_OR_PTP,
24 // A Mac ImageCapture device.
25 MAC_IMAGE_CAPTURE,
26 // An iTunes library.
27 ITUNES,
28 // A Picasa database.
29 PICASA,
30 // An iPhoto library.
31 IPHOTO,
34 StorageInfo();
35 // Note: |device_id_in| should be constructed with MakeDeviceId.
36 StorageInfo(const std::string& device_id_in,
37 const base::FilePath::StringType& device_location,
38 const base::string16& label,
39 const base::string16& vendor,
40 const base::string16& model,
41 uint64 size_in_bytes);
42 ~StorageInfo();
44 // Returns a device id given properties of the device. A prefix dependent on
45 // |type| is added so |unique_id| need only be unique within the given type.
46 // Returns an empty string if an invalid type is passed in.
47 static std::string MakeDeviceId(Type type, const std::string& unique_id);
49 // Extracts the device |type| and |unique_id| from |device_id|. Returns false
50 // if the device_id isn't properly formatted.
51 static bool CrackDeviceId(const std::string& device_id,
52 Type* type, std::string* unique_id);
54 // Looks inside |device_id| to determine if it is a media device
55 // (type is REMOVABLE_MASS_STORAGE_WITH_DCIM or MTP_OR_PTP).
56 static bool IsMediaDevice(const std::string& device_id);
58 // Looks inside |device_id| to determine if it is a media device
59 // (type isn't FIXED_MASS_STORAGE).
60 static bool IsRemovableDevice(const std::string& device_id);
62 // Looks inside |device_id| to determine if it is a mass storage device
63 // (type isn't MTP_OR_PTP).
64 static bool IsMassStorageDevice(const std::string& device_id);
66 static bool IsITunesDevice(const std::string& device_id);
68 static bool IsPicasaDevice(const std::string& device_id);
70 static bool IsIPhotoDevice(const std::string& device_id);
72 static bool IsMTPDevice(const std::string& device_id);
74 // Get the display name for the removable device represented by this
75 // StorageInfo. Include the size for removable devices if |with_size| is true.
76 base::string16 GetDisplayName(bool with_size) const;
78 // Same as GetDisplayName(), but may be overridden by |override_display_name|.
79 base::string16 GetDisplayNameWithOverride(
80 const base::string16& override_display_name, bool with_size) const;
82 const std::string& device_id() const { return device_id_; }
83 const base::FilePath::StringType& location() const { return location_; }
84 const base::string16& storage_label() const { return storage_label_; }
85 const base::string16& vendor_name() const { return vendor_name_; }
86 const base::string16& model_name() const { return model_name_; }
87 uint64 total_size_in_bytes() const { return total_size_in_bytes_; }
89 void set_device_id(const std::string& device_id) { device_id_ = device_id; }
90 void set_location(const base::FilePath::StringType& location) {
91 location_ = location;
94 private:
95 // Unique device id - persists between device attachments.
96 // This is the string that should be used as the label for a particular
97 // storage device when interacting with the API. Clients should treat
98 // this as an opaque string.
99 std::string device_id_;
101 // Current attached removable storage device location.
102 base::FilePath::StringType location_;
104 // Label given to this storage device by the user.
105 // May be empty if not found or the device is unlabeled.
106 base::string16 storage_label_;
108 // Vendor name for the removable device. (Human readable)
109 // May be empty if not collected.
110 base::string16 vendor_name_;
112 // Model name for the removable device. (Human readable)
113 // May be empty if not collected.
114 base::string16 model_name_;
116 // Size of the removable device in bytes.
117 // Zero if not collected or unknown.
118 uint64 total_size_in_bytes_;
121 } // namespace storage_monitor
123 #endif // COMPONENTS_STORAGE_MONITOR_STORAGE_INFO_H_