Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(324)

Unified Diff: chrome/browser/chromeos/cros/mount_library.cc

Issue 7457001: Adding support for mount point different from removable devices to MountLibrary (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/cros/mount_library.cc
===================================================================
--- chrome/browser/chromeos/cros/mount_library.cc (revision 93425)
+++ chrome/browser/chromeos/cros/mount_library.cc (working copy)
@@ -90,31 +90,58 @@
observers_.RemoveObserver(observer);
}
- virtual void MountPath(const char* device_path) OVERRIDE {
+ virtual std::string MountTypeToString(MountType type) const OVERRIDE {
+ switch (type) {
+ case MOUNT_TYPE_DEVICE:
+ return "device";
+ case MOUNT_TYPE_ARCHIVE:
+ return "file";
+ case MOUNT_TYPE_NETWORK_STORAGE:
+ return "network";
+ case MOUNT_TYPE_INVALID:
+ return "invalid";
+ default:
+ NOTREACHED();
+ }
+ return "";
+ }
+
+ virtual MountType MountTypeFromString(const std::string& type_str) const
+ OVERRIDE {
+ if (type_str == "device") {
+ return MOUNT_TYPE_DEVICE;
+ } else if (type_str == "network") {
+ return MOUNT_TYPE_NETWORK_STORAGE;
+ } else if (type_str == "file") {
+ return MOUNT_TYPE_ARCHIVE;
+ } else {
+ return MOUNT_TYPE_INVALID;
+ }
+ }
+
+ virtual void MountPath(const char* source_path,
+ MountType type,
+ const MountPathOptions& options) OVERRIDE {
CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
if (!CrosLibrary::Get()->EnsureLoaded()) {
- OnMountRemovableDevice(device_path,
- NULL,
- MOUNT_METHOD_ERROR_LOCAL,
- kLibraryNotLoaded);
+ OnMountCompleted(MOUNT_ERROR_LIBRARY_NOT_LOADED,
+ source_path,
+ type,
+ NULL);
return;
}
- MountRemovableDevice(device_path,
- &MountLibraryImpl::MountRemovableDeviceCallback,
- this);
+ MountSourcePath(source_path, type, options, &MountCompletedHandler, this);
}
- virtual void UnmountPath(const char* device_path) OVERRIDE {
+ virtual void UnmountPath(const char* path) OVERRIDE {
CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
if (!CrosLibrary::Get()->EnsureLoaded()) {
- OnUnmountRemovableDevice(device_path,
- MOUNT_METHOD_ERROR_LOCAL,
- kLibraryNotLoaded);
+ OnUnmountPath(path,
+ MOUNT_METHOD_ERROR_LOCAL,
+ kLibraryNotLoaded);
return;
}
- UnmountRemovableDevice(device_path,
- &MountLibraryImpl::UnmountRemovableDeviceCallback,
- this);
+ UnmountMountPoint(path, &MountLibraryImpl::UnmountMountPointCallback, this);
}
virtual void UnmountDeviceRecursive(const char* device_path,
@@ -151,9 +178,10 @@
cb_data = new UnmountDeviceRecursiveCallbackData(this, user_data,
callback, devices_to_unmount.size());
for (std::vector<const char*>::iterator it = devices_to_unmount.begin();
- it != devices_to_unmount.end();
- ++it) {
- UnmountRemovableDevice(*it,
+ it != devices_to_unmount.end();
+ ++it) {
+ UnmountMountPoint(
+ *it,
&MountLibraryImpl::UnmountDeviceRecursiveCallback,
cb_data);
}
@@ -178,39 +206,36 @@
}
const DiskMap& disks() const OVERRIDE { return disks_; }
+ const MountPointMap& mount_points() const OVERRIDE { return mount_points_; }
private:
- // Callback for MountRemovableDevice method.
- static void MountRemovableDeviceCallback(void* object,
- const char* device_path,
- const char* mount_path,
- MountMethodErrorType error,
- const char* error_message) {
+ // Callback for MountComplete signal and MountSourcePath method.
+ static void MountCompletedHandler(void* object,
+ MountError error_code,
+ const char* source_path,
+ MountType type,
+ const char* mount_path) {
DCHECK(object);
MountLibraryImpl* self = static_cast<MountLibraryImpl*>(object);
- self->OnMountRemovableDevice(device_path,
- mount_path,
- error,
- error_message);
+ self->OnMountCompleted(static_cast<MountError>(error_code),
+ source_path,
+ static_cast<MountType>(type),
+ mount_path);
}
// Callback for UnmountRemovableDevice method.
- static void UnmountRemovableDeviceCallback(void* object,
- const char* device_path,
- const char* mount_path,
- MountMethodErrorType error,
- const char* error_message) {
+ static void UnmountMountPointCallback(void* object,
+ const char* device_path,
+ MountMethodErrorType error,
+ const char* error_message) {
DCHECK(object);
MountLibraryImpl* self = static_cast<MountLibraryImpl*>(object);
- self->OnUnmountRemovableDevice(device_path,
- error,
- error_message);
+ self->OnUnmountPath(device_path, error, error_message);
}
// Callback for UnmountDeviceRecursive.
static void UnmountDeviceRecursiveCallback(void* object,
const char* device_path,
- const char* mount_path,
MountMethodErrorType error,
const char* error_message) {
DCHECK(object);
@@ -218,9 +243,9 @@
static_cast<UnmountDeviceRecursiveCallbackData*>(object);
// Do standard processing for Unmount event.
- cb_data->object->OnUnmountRemovableDevice(device_path,
- error,
- error_message);
+ cb_data->object->OnUnmountPath(device_path,
+ error,
+ error_message);
if (error == MOUNT_METHOD_ERROR_LOCAL) {
cb_data->success = false;
} else if (error == MOUNT_METHOD_ERROR_NONE) {
@@ -275,14 +300,23 @@
}
- void OnMountRemovableDevice(const char* device_path,
- const char* mount_path,
- MountMethodErrorType error,
- const char* error_message) {
- DCHECK(device_path);
+ void OnMountCompleted(MountError error_code,
+ const char* source_path,
+ MountType type,
+ const char* mount_path) {
+ DCHECK(source_path);
- if (error == MOUNT_METHOD_ERROR_NONE && device_path && mount_path) {
- std::string path(device_path);
+ FireMountCompleted(MOUNTING, error_code, source_path, type, mount_path);
+
+ if (error_code == MOUNT_ERROR_NONE &&
+ mount_points_.find(source_path) == mount_points_.end()) {
+ mount_points_.insert(MountPointMap::value_type(source_path,
+ MountPointInfo(source_path, mount_path, type)));
+ }
+
+ if (error_code == MOUNT_ERROR_NONE && type == MOUNT_TYPE_DEVICE &&
+ source_path && mount_path) {
+ std::string path(source_path);
DiskMap::iterator iter = disks_.find(path);
if (iter == disks_.end()) {
// disk might have been removed by now?
@@ -292,19 +326,27 @@
DCHECK(disk);
disk->set_mount_path(mount_path);
FireDiskStatusUpdate(MOUNT_DISK_MOUNTED, disk);
- } else {
- LOG(WARNING) << "Mount request failed for device "
- << device_path << ", with error: "
- << (error_message ? error_message : "Unknown");
}
}
- void OnUnmountRemovableDevice(const char* device_path,
- MountMethodErrorType error,
- const char* error_message) {
- DCHECK(device_path);
- if (error == MOUNT_METHOD_ERROR_NONE && device_path) {
- std::string path(device_path);
+ void OnUnmountPath(const char* source_path,
+ MountMethodErrorType error,
+ const char* error_message) {
+ DCHECK(source_path);
+
+ if (error == MOUNT_METHOD_ERROR_NONE && source_path) {
+ MountPointMap::iterator mount_points_it = mount_points_.find(source_path);
+ if (mount_points_it == mount_points_.end())
+ return;
+ // TODO(tbarzic): Add separate, PathUnmounted event to Observer.
+ FireMountCompleted(UNMOUNTING,
+ MOUNT_ERROR_NONE,
+ mount_points_it->second.source_path.c_str(),
+ mount_points_it->second.mount_type,
+ mount_points_it->second.mount_path.c_str());
+ mount_points_.erase(mount_points_it);
+
+ std::string path(source_path);
DiskMap::iterator iter = disks_.find(path);
if (iter == disks_.end()) {
// disk might have been removed by now?
@@ -316,7 +358,7 @@
FireDiskStatusUpdate(MOUNT_DISK_UNMOUNTED, disk);
} else {
LOG(WARNING) << "Unmount request failed for device "
- << device_path << ", with error: "
+ << source_path << ", with error: "
<< (error_message ? error_message : "Unknown");
}
}
@@ -476,14 +518,17 @@
type = MOUNT_DEVICE_SCANNED;
break;
}
+ default: {
+ return;
+ }
}
FireDeviceStatusUpdate(type, std::string(device_path));
}
void Init() {
// Getting the monitor status so that the daemon starts up.
- mount_status_connection_ = MonitorMountEvents(
- &MonitorMountEventsHandler, this);
+ mount_status_connection_ = MonitorAllMountEvents(
+ &MonitorMountEventsHandler, &MountCompletedHandler, this);
}
void FireDiskStatusUpdate(MountLibraryEventType evt,
@@ -502,6 +547,21 @@
Observer, observers_, DeviceChanged(evt, device_path));
}
+ void FireMountCompleted(MountEvent event_type,
+ MountError error_code,
+ const char* source_path,
+ MountType mount_type,
+ const char* mount_path) {
+ // Make sure we run on UI thread.
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ FOR_EACH_OBSERVER(
+ Observer, observers_, MountCompleted(event_type,
+ error_code,
+ source_path,
+ mount_type,
+ mount_path));
+ }
+
// Mount event change observers.
ObserverList<Observer> observers_;
@@ -512,6 +572,8 @@
// The list of disks found.
MountLibrary::DiskMap disks_;
+ MountLibrary::MountPointMap mount_points_;
+
DISALLOW_COPY_AND_ASSIGN(MountLibraryImpl);
};
@@ -524,9 +586,20 @@
virtual void AddObserver(Observer* observer) OVERRIDE {}
virtual void RemoveObserver(Observer* observer) OVERRIDE {}
virtual const DiskMap& disks() const OVERRIDE { return disks_; }
+ virtual const MountPointMap& mount_points() const OVERRIDE {
+ return mount_points_;
+ }
+ virtual std::string MountTypeToString(MountType type) const OVERRIDE {
+ return "";
+ }
+ virtual MountType MountTypeFromString(const std::string& type_str) const
+ OVERRIDE {
+ return MOUNT_TYPE_INVALID;
+ }
virtual void RequestMountInfoRefresh() OVERRIDE {}
- virtual void MountPath(const char* device_path) OVERRIDE {}
- virtual void UnmountPath(const char* device_path) OVERRIDE {}
+ virtual void MountPath(const char* source_path, MountType type,
+ const MountPathOptions& options) OVERRIDE {}
+ virtual void UnmountPath(const char* path) OVERRIDE {}
virtual void UnmountDeviceRecursive(const char* device_path,
UnmountDeviceRecursiveCallbackType callback, void* user_data)
OVERRIDE {}
@@ -534,6 +607,7 @@
private:
// The list of disks found.
DiskMap disks_;
+ MountPointMap mount_points_;
DISALLOW_COPY_AND_ASSIGN(MountLibraryStubImpl);
};

Powered by Google App Engine
This is Rietveld 408576698