Index: chrome/browser/chromeos/disks/disk_mount_manager.h |
diff --git a/chrome/browser/chromeos/disks/disk_mount_manager.h b/chrome/browser/chromeos/disks/disk_mount_manager.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..4dbb3eb95b715bb22e9656492ccf9a5a71285a0b |
--- /dev/null |
+++ b/chrome/browser/chromeos/disks/disk_mount_manager.h |
@@ -0,0 +1,250 @@ |
+// Copyright (c) 2011 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. |
+ |
+#ifndef CHROME_BROWSER_CHROMEOS_DISKS_DISK_MOUNT_MANAGER_H_ |
+#define CHROME_BROWSER_CHROMEOS_DISKS_DISK_MOUNT_MANAGER_H_ |
+#pragma once |
+ |
+#include <map> |
+ |
+#include "chrome/browser/chromeos/dbus/cros_disks_client.h" |
+ |
+namespace chromeos { |
+namespace disks { |
+ |
+// Types of events DiskMountManager sends to its observers. |
+enum DiskMountManagerEventType { |
+ MOUNT_DISK_ADDED, |
+ MOUNT_DISK_REMOVED, |
+ MOUNT_DISK_CHANGED, |
+ MOUNT_DISK_MOUNTED, |
+ MOUNT_DISK_UNMOUNTED, |
+ MOUNT_DEVICE_ADDED, |
+ MOUNT_DEVICE_REMOVED, |
+ MOUNT_DEVICE_SCANNED, |
+ MOUNT_FORMATTING_STARTED, |
+ MOUNT_FORMATTING_FINISHED, |
+}; |
+ |
+// Condition of mounted filesystem. |
+enum MountCondition { |
+ MOUNT_CONDITION_NONE, |
+ MOUNT_CONDITION_UNKNOWN_FILESYSTEM, |
+ MOUNT_CONDITION_UNSUPPORTED_FILESYSTEM, |
+}; |
+ |
+// This class handles the interaction with cros-disks. |
+// Other classes can add themselves as observers. |
+class DiskMountManager { |
+ public: |
+ // Event type given to observers' MountCompleted method. |
+ enum MountEvent { |
+ MOUNTING, |
+ UNMOUNTING, |
+ }; |
+ |
+ // Used to house an instance of each found mount device. |
+ class Disk { |
+ public: |
+ Disk(const std::string& device_path, |
+ const std::string& mount_path, |
+ const std::string& system_path, |
+ const std::string& file_path, |
+ const std::string& device_label, |
+ const std::string& drive_label, |
+ const std::string& system_path_prefix, |
+ DeviceType device_type, |
+ uint64 total_size_in_bytes, |
+ bool is_parent, |
+ bool is_read_only, |
+ bool has_media, |
+ bool on_boot_device, |
+ bool is_hidden); |
+ ~Disk(); |
+ |
+ // The path of the device, used by devicekit-disks. |
+ // (e.g. /sys/devices/pci0000:00/.../8:0:0:0/block/sdb/sdb1) |
+ const std::string& device_path() const { return device_path_; } |
+ |
+ // The path to the mount point of this device. Will be empty if not mounted. |
+ // (e.g. /media/removable/VOLUME) |
+ const std::string& mount_path() const { return mount_path_; } |
+ |
+ // The path of the device according to the udev system. |
+ // (e.g. /sys/devices/pci0000:00/.../8:0:0:0/block/sdb/sdb1) |
+ const std::string& system_path() const { return system_path_; } |
+ |
+ // The path of the device according to filesystem. |
+ // (e.g. /dev/sdb) |
+ const std::string& file_path() const { return file_path_; } |
+ |
+ // Device's label. |
+ const std::string& device_label() const { return device_label_; } |
+ |
+ // If disk is a parent, then its label, else parents label. |
+ // (e.g. "TransMemory") |
+ const std::string& drive_label() const { return drive_label_; } |
+ |
+ // Path of the system device this device's block is a part of. |
+ // (e.g. /sys/devices/pci0000:00/.../8:0:0:0/) |
+ const std::string& system_path_prefix() const { |
+ return system_path_prefix_; |
+ } |
+ |
+ // Device type. |
+ DeviceType device_type() const { return device_type_; } |
+ |
+ // Total size of the device in bytes. |
+ uint64 total_size_in_bytes() const { return total_size_in_bytes_; } |
+ |
+ // Is the device is a parent device (i.e. sdb rather than sdb1). |
+ bool is_parent() const { return is_parent_; } |
+ |
+ // Is the device read only. |
+ bool is_read_only() const { return is_read_only_; } |
+ |
+ // Does the device contains media. |
+ bool has_media() const { return has_media_; } |
+ |
+ // Is the device on the boot device. |
+ bool on_boot_device() const { return on_boot_device_; } |
+ |
+ // Shoud the device be shown in the UI, or automounted. |
+ bool is_hidden() const { return is_hidden_; } |
+ |
+ void set_mount_path(const std::string& mount_path) { |
+ mount_path_ = mount_path; |
+ } |
+ |
+ void clear_mount_path() { mount_path_.clear(); } |
+ |
+ private: |
+ std::string device_path_; |
+ std::string mount_path_; |
+ std::string system_path_; |
+ std::string file_path_; |
+ std::string device_label_; |
+ std::string drive_label_; |
+ std::string system_path_prefix_; |
+ DeviceType device_type_; |
+ uint64 total_size_in_bytes_; |
+ bool is_parent_; |
+ bool is_read_only_; |
+ bool has_media_; |
+ bool on_boot_device_; |
+ bool is_hidden_; |
+ }; |
+ typedef std::map<std::string, Disk*> DiskMap; |
+ |
+ // A struct to store information about mount point. |
+ struct MountPointInfo { |
+ // Device's path. |
+ std::string source_path; |
+ // Mounted path. |
+ std::string mount_path; |
+ // Type of mount. |
+ MountType mount_type; |
+ // Condition of mount. |
+ MountCondition mount_condition; |
+ |
+ MountPointInfo(const std::string& source, |
+ const std::string& mount, |
+ const MountType type, |
+ MountCondition condition) |
+ : source_path(source), |
+ mount_path(mount), |
+ mount_type(type), |
+ mount_condition(condition) { |
+ } |
+ }; |
+ |
+ // MountPointMap key is mount_path. |
+ typedef std::map<std::string, MountPointInfo> MountPointMap; |
+ |
+ // A callback function type which is called after UnmountDeviceRecursive |
+ // finishes. |
+ typedef void(*UnmountDeviceRecursiveCallbackType)(void*, bool); |
+ |
+ // Implement this interface to be notified about disk/mount related events. |
+ class Observer { |
+ public: |
+ virtual ~Observer() {} |
+ |
+ // A function called when disk mount status is changed. |
+ virtual void DiskChanged(DiskMountManagerEventType event, |
+ const Disk* disk) = 0; |
+ // A function called when device status is changed. |
+ virtual void DeviceChanged(DiskMountManagerEventType event, |
+ const std::string& device_path) = 0; |
+ // A function called after mount is completed. |
+ virtual void MountCompleted(MountEvent event_type, |
+ MountError error_code, |
+ const MountPointInfo& mount_info) = 0; |
+ }; |
+ |
+ virtual ~DiskMountManager() {} |
+ |
+ // Adds an observer. |
+ virtual void AddObserver(Observer* observer) = 0; |
+ |
+ // Removes an observer. |
+ virtual void RemoveObserver(Observer* observer) = 0; |
+ |
+ // Gets the list of disks found. |
+ virtual const DiskMap& disks() const = 0; |
+ |
+ // Gets the list of mount points. |
+ virtual const MountPointMap& mount_points() const = 0; |
+ |
+ // Requests refreshing all the information about mounted disks. |
+ virtual void RequestMountInfoRefresh() = 0; |
+ |
+ // Mounts a device. |
+ virtual void MountPath(const std::string& source_path, MountType type) = 0; |
+ |
+ // Unmounts a mounted disk. |
+ virtual void UnmountPath(const std::string& mount_path) = 0; |
+ |
+ // Retrieves total and remaining available size on |mount_path|. |
+ virtual void GetSizeStatsOnFileThread(const std::string& mount_path, |
+ size_t* total_size_kb, |
+ size_t* remaining_size_kb) = 0; |
+ // Formats device given its file path. |
+ // Example: file_path: /dev/sdb1 |
+ virtual void FormatUnmountedDevice(const std::string& file_path) = 0; |
+ |
+ // Formats Device given its mount path. Unmounts the device. |
+ // Example: mount_path: /media/VOLUME_LABEL |
+ virtual void FormatMountedDevice(const std::string& mount_path) = 0; |
+ |
+ // Unmounts device_path and all of its known children. |
+ virtual void UnmountDeviceRecursive( |
+ const std::string& device_path, |
+ UnmountDeviceRecursiveCallbackType callback, |
+ void* user_data) = 0; |
+ |
+ // Returns corresponding string to |type| like "device" or "file". |
+ static std::string MountTypeToString(MountType type); |
+ |
+ // The inverse function of MountTypeToString. |
+ static MountType MountTypeFromString(const std::string& type_str); |
+ |
+ // Returns corresponding string to |type| like "unknown_filesystem". |
+ static std::string MountConditionToString(MountCondition type); |
+ |
+ // Creates the global DiskMountManager instance. |
+ static void Initialize(); |
+ |
+ // Destroys the global DiskMountManager instance if it exists. |
+ static void Shutdown(); |
+ |
+ // Returns a pointer to the global DiskMountManager instance. |
+ // Initialize() should already have been called. |
+ static DiskMountManager* GetInstance(); |
+}; |
+ |
+} // namespace disks |
+} // namespace chromeos |
+ |
+#endif // CHROME_BROWSER_CHROMEOS_DISKS_DISK_MOUNT_MANAGER_H_ |