Chromium Code Reviews| Index: chrome/browser/chromeos/disk_mount_manager.h |
| diff --git a/chrome/browser/chromeos/disk_mount_manager.h b/chrome/browser/chromeos/disk_mount_manager.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..d5d82855f171b3435e67f73f1fec314e672911bf |
| --- /dev/null |
| +++ b/chrome/browser/chromeos/disk_mount_manager.h |
| @@ -0,0 +1,236 @@ |
| +// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
|
satorux1
2011/11/11 00:43:55
chrome/browser/chromeos directly contains many fil
hashimoto
2011/11/11 08:00:53
Done.
|
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#ifndef CHROME_BROWSER_CHROMEOS_DISK_MOUNT_MANAGER_H_ |
| +#define CHROME_BROWSER_CHROMEOS_DISK_MOUNT_MANAGER_H_ |
| +#pragma once |
| + |
| +#include <map> |
| + |
| +#include "chrome/browser/chromeos/dbus/cros_disks_client.h" |
| + |
| +namespace chromeos { |
| + |
| +// 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 |
|
satorux1
2011/11/11 00:43:55
period is missing.
hashimoto
2011/11/11 08:00:53
Done.
|
| +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: |
| + enum MountEvent { |
|
satorux1
2011/11/11 00:43:55
Add a one-line comment?
hashimoto
2011/11/11 08:00:53
Done.
|
| + MOUNTING, |
| + UNMOUNTING, |
| + }; |
|
satorux1
2011/11/11 00:43:55
Add a blank line here.
hashimoto
2011/11/11 08:00:53
Done.
|
| + // 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& parent_path, |
| + const std::string& system_path_prefix, |
| + DeviceType device_type, |
| + uint64 total_size, |
| + 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. |
| + const std::string& device_path() const { return device_path_; } |
| + |
| + // The path to the mount point of this device. Will be empty if not mounted. |
| + const std::string& mount_path() const { return mount_path_; } |
| + |
| + // The path of the device according to the udev system. |
| + const std::string& system_path() const { return system_path_; } |
| + |
| + // The path of the device according to filesystem. |
| + 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. |
| + const std::string& drive_label() const { return drive_label_; } |
| + |
| + // Parents device path. If device has no parent, then empty string. |
| + const std::string& parent_path() const { return parent_path_; } |
| + |
| + // Path of the system device this device's block is a part of. |
| + 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. |
|
satorux1
2011/11/11 00:43:55
in bytes? in mega bytes? let's make it clear.
hashimoto
2011/11/11 08:00:53
Done.
|
| + uint64 total_size() const { return total_size_; } |
|
satorux1
2011/11/11 00:43:55
something like total_size_in_bytes() will be clear
hashimoto
2011/11/11 08:00:53
Done.
|
| + |
| + // 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 parent_path_; |
| + std::string system_path_prefix_; |
| + DeviceType device_type_; |
| + uint64 total_size_; |
| + bool is_parent_; |
| + bool is_read_only_; |
| + bool has_media_; |
| + bool on_boot_device_; |
| + bool is_hidden_; |
| + }; |
| + typedef std::map<std::string, Disk*> DiskMap; |
| + typedef std::map<std::string, std::string> PathMap; |
| + |
| + struct MountPointInfo { |
|
satorux1
2011/11/11 00:43:55
Could you add a comment?
hashimoto
2011/11/11 08:00:53
Done.
|
| + std::string source_path; |
| + std::string mount_path; |
| + MountType mount_type; |
| + MountCondition mount_condition; |
| + |
| + MountPointInfo(const std::string& source, const std::string& mount, |
| + const MountType type, MountCondition condition) |
|
satorux1
2011/11/11 00:43:55
You might want to list parameters vertically
hashimoto
2011/11/11 08:00:53
Done.
|
| + : source_path(source), |
| + mount_path(mount), |
| + mount_type(type), |
| + mount_condition(condition) { |
| + } |
| + }; |
| + |
| + // MountPointMap key is mount_path. |
| + typedef std::map<std::string, MountPointInfo> MountPointMap; |
| + |
| + typedef void(*UnmountDeviceRecursiveCallbackType)(void*, bool); |
| + |
| + class Observer { |
|
satorux1
2011/11/11 00:43:55
A brief class comment would be nice.
hashimoto
2011/11/11 08:00:53
Done.
|
| + 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 |
|
satorux1
2011/11/11 00:43:55
period is missing. please check other places. sorr
hashimoto
2011/11/11 08:00:53
Done.
|
| + 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; |
| + |
| + // Mount a device |
| + virtual void MountPath(const std::string& source_path, MountType type) = 0; |
| + |
| + // Unmount 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. Unmount's 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 chromeos |
| + |
| +#endif // CHROME_BROWSER_CHROMEOS_DISK_MOUNT_MANAGER_H_ |