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 // MediaStorageUtil provides information about storage devices attached
8 #ifndef COMPONENTS_STORAGE_MONITOR_MEDIA_STORAGE_UTIL_H_
9 #define COMPONENTS_STORAGE_MONITOR_MEDIA_STORAGE_UTIL_H_
14 #include "base/basictypes.h"
15 #include "base/callback_forward.h"
16 #include "base/files/file_path.h"
18 namespace storage_monitor
{
22 class MediaStorageUtil
{
24 typedef std::set
<std::string
/*device id*/> DeviceIdSet
;
26 // Check if the file system at the passed mount point looks like a media
27 // device using the existence of DCIM directory.
28 // Returns true if it looks like a media device, otherwise returns false.
29 // Mac OS X behaves similarly, but this is not the only heuristic it uses.
30 // TODO(vandebo) Try to figure out how Mac OS X decides this, and rename
31 // if additional OS X heuristic is implemented.
32 static bool HasDcim(const base::FilePath
& mount_point
);
34 // Returns true if we will be able to create a filesystem for this device.
35 static bool CanCreateFileSystem(const std::string
& device_id
,
36 const base::FilePath
& path
);
38 // Removes disconnected devices from |devices| and then calls |done|.
39 static void FilterAttachedDevices(DeviceIdSet
* devices
,
40 const base::Closure
& done
);
42 // Given |path|, fill in |device_info|, and |relative_path|
43 // (from the root of the device).
44 static bool GetDeviceInfoFromPath(const base::FilePath
& path
,
45 StorageInfo
* device_info
,
46 base::FilePath
* relative_path
);
48 // Get a base::FilePath for the given |device_id|. If the device isn't a mass
49 // storage type, the base::FilePath will be empty. This does not check that
50 // the device is connected.
51 static base::FilePath
FindDevicePathById(const std::string
& device_id
);
53 // Record device information histogram for the given |device_uuid| and
54 // |device_label|. |mass_storage| indicates whether the current device is a
55 // mass storage device, as defined by IsMassStorageDevice().
56 static void RecordDeviceInfoHistogram(bool mass_storage
,
57 const std::string
& device_uuid
,
58 const base::string16
& device_label
);
60 // Returns true if the |id| is both a removable device and also
61 // currently attached.
62 static bool IsRemovableStorageAttached(const std::string
& id
);
65 DISALLOW_IMPLICIT_CONSTRUCTORS(MediaStorageUtil
);
68 } // namespace storage_monitor
70 #endif // COMPONENTS_STORAGE_MONITOR_MEDIA_STORAGE_UTIL_H_