diff options
author | hashimoto@chromium.org <hashimoto@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-07 06:39:32 +0000 |
---|---|---|
committer | hashimoto@chromium.org <hashimoto@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-07 06:39:32 +0000 |
commit | be0ed64414d297230cb8c5ea4052fc1736122e88 (patch) | |
tree | 7f981188604b63d0c1bd3f3a6c6100173113afa7 /chromeos | |
parent | 1e73bb01af4255521f957d3f2a603d179001226b (diff) | |
download | chromium_src-be0ed64414d297230cb8c5ea4052fc1736122e88.zip chromium_src-be0ed64414d297230cb8c5ea4052fc1736122e88.tar.gz chromium_src-be0ed64414d297230cb8c5ea4052fc1736122e88.tar.bz2 |
chromeos: Fix malfunctioning CrosDisksClientStubImpl::Unmount
Unmount receives the mounted path, not the source path.
BUG=178987
TEST=Mount/Unmount a zip file in Files.app
Review URL: https://chromiumcodereview.appspot.com/12527007
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@186644 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chromeos')
-rw-r--r-- | chromeos/dbus/cros_disks_client.cc | 33 |
1 files changed, 15 insertions, 18 deletions
diff --git a/chromeos/dbus/cros_disks_client.cc b/chromeos/dbus/cros_disks_client.cc index c8ac903..4c302c2 100644 --- a/chromeos/dbus/cros_disks_client.cc +++ b/chromeos/dbus/cros_disks_client.cc @@ -415,13 +415,6 @@ class CrosDisksClientStubImpl : public CrosDisksClient { MountType type, const MountCallback& callback, const ErrorCallback& error_callback) OVERRIDE { - // Already mounted path. - if (mounted_paths_.count(source_path) != 0) { - FinishMount(MOUNT_ERROR_PATH_ALREADY_MOUNTED, source_path, type, - std::string(), callback); - return; - } - // This stub implementation only accepts archive mount requests. if (type != MOUNT_TYPE_ARCHIVE) { FinishMount(MOUNT_ERROR_INTERNAL, source_path, type, std::string(), @@ -432,6 +425,13 @@ class CrosDisksClientStubImpl : public CrosDisksClient { const base::FilePath mounted_path = GetArchiveMountPoint().Append( base::FilePath::FromUTF8Unsafe(mount_label)); + // Already mounted path. + if (mounted_to_source_path_map_.count(mounted_path.value()) != 0) { + FinishMount(MOUNT_ERROR_PATH_ALREADY_MOUNTED, source_path, type, + std::string(), callback); + return; + } + // Perform fake mount. base::PostTaskAndReplyWithResult( base::WorkerPool::GetTaskRunner(true /* task_is_slow */), @@ -452,25 +452,22 @@ class CrosDisksClientStubImpl : public CrosDisksClient { const UnmountCallback& callback, const UnmountCallback& error_callback) OVERRIDE { // Not mounted. - if (mounted_paths_.count(device_path) == 0) { + if (mounted_to_source_path_map_.count(device_path) == 0) { base::MessageLoopProxy::current()->PostTask( FROM_HERE, base::Bind(error_callback, device_path)); return; } - const base::FilePath mounted_path = mounted_paths_[device_path]; - mounted_paths_.erase(device_path); + mounted_to_source_path_map_.erase(device_path); // Remove the directory created in Mount(). - base::WorkerPool::PostTask( + base::WorkerPool::PostTaskAndReply( FROM_HERE, base::Bind(base::IgnoreResult(&file_util::Delete), - mounted_path, + base::FilePath::FromUTF8Unsafe(device_path), true /* recursive */), + base::Bind(callback, device_path), true /* task_is_slow */); - - base::MessageLoopProxy::current()->PostTask( - FROM_HERE, base::Bind(callback, device_path)); } virtual void EnumerateAutoMountableDevices( @@ -543,7 +540,7 @@ class CrosDisksClientStubImpl : public CrosDisksClient { FinishMount(mount_error, source_path, type, std::string(), callback); return; } - mounted_paths_[source_path] = mounted_path; + mounted_to_source_path_map_[mounted_path.value()] = source_path; FinishMount(MOUNT_ERROR_NONE, source_path, type, mounted_path.AsUTF8Unsafe(), callback); } @@ -564,8 +561,8 @@ class CrosDisksClientStubImpl : public CrosDisksClient { } } - // Source path to mounted path map. - std::map<std::string, base::FilePath> mounted_paths_; + // Mounted path to source path map. + std::map<std::string, std::string> mounted_to_source_path_map_; MountEventHandler mount_event_handler_; MountCompletedHandler mount_completed_handler_; |