// 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_DBUS_CROS_DISKS_CLIENT_H_ #define CHROME_BROWSER_CHROMEOS_DBUS_CROS_DISKS_CLIENT_H_ #pragma once #include #include #include "base/basictypes.h" #include "base/callback.h" namespace dbus { class Bus; class Response; } namespace chromeos { // Enum describing types of mount used by cros-disks. enum MountType { MOUNT_TYPE_INVALID, MOUNT_TYPE_DEVICE, MOUNT_TYPE_ARCHIVE, MOUNT_TYPE_NETWORK_STORAGE, }; // Type of device. enum DeviceType { FLASH, HDD, OPTICAL, UNDEFINED, }; // Mount error code used by cros-disks. enum MountError { MOUNT_ERROR_NONE = 0, MOUNT_ERROR_UNKNOWN = 1, MOUNT_ERROR_INTERNAL = 2, MOUNT_ERROR_UNKNOWN_FILESYSTEM = 101, MOUNT_ERROR_UNSUPORTED_FILESYSTEM = 102, MOUNT_ERROR_INVALID_ARCHIVE = 201, MOUNT_ERROR_LIBRARY_NOT_LOADED = 501, MOUNT_ERROR_PATH_UNMOUNTED = 901, // TODO(tbarzic): Add more error codes as they get added to cros-disks and // consider doing explicit translation from cros-disks error_types. }; // Event type each corresponding to a signal sent from cros-disks. enum MountEventType { DISK_ADDED, DISK_REMOVED, DISK_CHANGED, DEVICE_ADDED, DEVICE_REMOVED, DEVICE_SCANNED, FORMATTING_FINISHED, }; // A class to represent information about a disk sent from cros-disks. class DiskInfo { public: DiskInfo(const std::string& device_path, dbus::Response* response); ~DiskInfo(); // Device path. (e.g. /sys/devices/pci0000:00/.../8:0:0:0/block/sdb/sdb1) std::string device_path() const { return device_path_; } // Disk mount path. (e.g. /media/removable/VOLUME) std::string mount_path() const { return mount_path_; } // Disk system path given by udev. // (e.g. /sys/devices/pci0000:00/.../8:0:0:0/block/sdb/sdb1) std::string system_path() const { return system_path_; } // Is a drive or not. (i.e. true with /dev/sdb, false with /dev/sdb1) bool is_drive() const { return is_drive_; } // Does the disk have media content. bool has_media() const { return has_media_; } // Is the disk on deveice we booted the machine from. bool on_boot_device() const { return on_boot_device_; } // Disk file path (e.g. /dev/sdb). std::string file_path() const { return file_path_; } // Disk label. std::string label() const { return label_; } // Disk model. (e.g. "TransMemory") std::string drive_label() const { return drive_model_; } // Device type. Not working well, yet. DeviceType device_type() const { return device_type_; } // Total size of the disk in bytes. uint64 total_size_in_bytes() const { return total_size_in_bytes_; } // Is the device read-only. bool is_read_only() const { return is_read_only_; } // Returns true if the device should be hidden from the file browser. bool is_hidden() const { return is_hidden_; } private: void InitializeFromResponse(dbus::Response* response); std::string device_path_; std::string mount_path_; std::string system_path_; bool is_drive_; bool has_media_; bool on_boot_device_; std::string file_path_; std::string label_; std::string drive_model_; DeviceType device_type_; uint64 total_size_in_bytes_; bool is_read_only_; bool is_hidden_; }; // A class to make the actual DBus calls for cros-disks service. // This class only makes calls, result/error handling should be done // by callbacks. class CrosDisksClient { public: // A callback to be called when DBus method call fails. typedef base::Callback ErrorCallback; // A callback to handle the result of Mount. typedef base::Callback MountCallback; // A callback to handle the result of Unmount. // The argument is the device path. typedef base::Callback UnmountCallback; // A callback to handle the result of EnumerateAutoMountableDevices. // The argument is the enumerated device paths. typedef base::Callback&) > EnumerateAutoMountableDevicesCallback; // A callback to handle the result of FormatDevice. // The first argument is the device path. // The second argument is true when formatting succeeded, false otherwise. typedef base::Callback FormatDeviceCallback; // A callback to handle the result of GetDeviceProperties. // The argument is the information about the specified device. typedef base::Callback GetDevicePropertiesCallback; // A callback to handle MountCompleted signal. // The first argument is the error code. // The second argument is the source path. // The third argument is the mount type. // The fourth argument is the mount path. typedef base::Callback MountCompletedHandler; // A callback to handle mount events. // The first argument is the event type. // The second argument is the device path. typedef base::Callback MountEventHandler; virtual ~CrosDisksClient(); // Calls Mount method. |callback| is called after the method call succeeds, // otherwise, |error_callback| is called. virtual void Mount(const std::string& source_path, MountType type, MountCallback callback, ErrorCallback error_callback) = 0; // Calls Unmount method. |callback| is called after the method call succeeds, // otherwise, |error_callback| is called. virtual void Unmount(const std::string& device_path, UnmountCallback callback, ErrorCallback error_callback) = 0; // Calls EnumerateAutoMountableDevices method. |callback| is called after the // method call succeeds, otherwise, |error_callback| is called. virtual void EnumerateAutoMountableDevices( EnumerateAutoMountableDevicesCallback callback, ErrorCallback error_callback) = 0; // Calls FormatDevice method. |callback| is called after the method call // succeeds, otherwise, |error_callback| is called. virtual void FormatDevice(const std::string& device_path, const std::string& filesystem, FormatDeviceCallback callback, ErrorCallback error_callback) = 0; // Calls GetDeviceProperties method. |callback| is called after the method // call succeeds, otherwise, |error_callback| is called. virtual void GetDeviceProperties(const std::string& device_path, GetDevicePropertiesCallback callback, ErrorCallback error_callback) = 0; // Registers given callback for events. // |mount_event_handler| is called when mount event signal is received. // |mount_completed_handler| is called when MountCompleted signal is received. virtual void SetUpConnections( MountEventHandler mount_event_handler, MountCompletedHandler mount_completed_handler) = 0; // Factory function, creates a new instance and returns ownership. // For normal usage, access the singleton via DBusThreadManager::Get(). static CrosDisksClient* Create(dbus::Bus* bus); protected: // Create() should be used instead. CrosDisksClient(); private: DISALLOW_COPY_AND_ASSIGN(CrosDisksClient); }; } // namespace chromeos #endif // CHROME_BROWSER_CHROMEOS_DBUS_CROS_DISKS_CLIENT_H_