Chromium Code Reviews| 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,29 @@ |
| observers_.RemoveObserver(observer); |
| } |
| - virtual void MountPath(const char* device_path) OVERRIDE { |
| + 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, |
| + OnUnmountRemovableDevice(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 +149,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) { |
| + UnmountRemovableDevice( |
| + *it, |
| &MountLibraryImpl::UnmountDeviceRecursiveCallback, |
| cb_data); |
| } |
| @@ -178,28 +177,29 @@ |
| } |
| const DiskMap& disks() const OVERRIDE { return disks_; } |
| + const MountPointSet& 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) { |
| +LOG(WARNING) <<"MountCompleted" <<error_code<<source_path<<mount_path; |
|
tbarzic
2011/07/22 03:13:24
to be removed before landing
|
| 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, |
| @@ -275,14 +275,21 @@ |
| } |
| - 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); |
| +LOG(WARNING) <<"MountCompleted fired" <<error_code<<source_path<<mount_path; |
|
tbarzic
2011/07/22 03:13:24
to be removed before landing
|
| + FireMountCompleted(error_code, source_path, type, mount_path); |
| + |
| + if (error_code == MOUNT_ERROR_NONE) |
| + mount_points_.insert(mount_path); |
|
zel
2011/07/22 04:47:17
see my comments about this data not being enough,
tbarzic
2011/07/22 06:21:51
Done.
|
| + |
| + 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,10 +299,6 @@ |
| 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"); |
| } |
| } |
| @@ -476,14 +479,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 +508,19 @@ |
| Observer, observers_, DeviceChanged(evt, device_path)); |
| } |
| + void FireMountCompleted(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(error_code, |
| + source_path, |
| + mount_type, |
| + mount_path)); |
| + } |
| + |
| // Mount event change observers. |
| ObserverList<Observer> observers_; |
| @@ -512,6 +531,8 @@ |
| // The list of disks found. |
| MountLibrary::DiskMap disks_; |
| + MountLibrary::MountPointSet mount_points_; |
| + |
| DISALLOW_COPY_AND_ASSIGN(MountLibraryImpl); |
| }; |
| @@ -524,9 +545,13 @@ |
| virtual void AddObserver(Observer* observer) OVERRIDE {} |
| virtual void RemoveObserver(Observer* observer) OVERRIDE {} |
| virtual const DiskMap& disks() const OVERRIDE { return disks_; } |
| + virtual const MountPointSet& mount_points() const OVERRIDE { |
| + return mount_points_; |
| + } |
| 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 +559,7 @@ |
| private: |
| // The list of disks found. |
| DiskMap disks_; |
| + MountPointSet mount_points_; |
| DISALLOW_COPY_AND_ASSIGN(MountLibraryStubImpl); |
| }; |