| Index: chrome/browser/chromeos/extensions/file_browser_private_api.cc
|
| diff --git a/chrome/browser/chromeos/extensions/file_browser_private_api.cc b/chrome/browser/chromeos/extensions/file_browser_private_api.cc
|
| index 907488eb12f95368737211373f03538452c4e558..d91c40bccb96e9e04f0c63803e6127db79b0b6ed 100644
|
| --- a/chrome/browser/chromeos/extensions/file_browser_private_api.cc
|
| +++ b/chrome/browser/chromeos/extensions/file_browser_private_api.cc
|
| @@ -1015,14 +1015,42 @@ void AddMountFunction::GetLocalPathsResponseOnUIThread(
|
| }
|
|
|
| #if defined(OS_CHROMEOS)
|
| - FilePath source_file = files[0].path;
|
| - DiskMountManager* disk_mount_manager = DiskMountManager::GetInstance();
|
| - // MountPath() takes a std::string.
|
| - disk_mount_manager->MountPath(source_file.AsUTF8Unsafe(),
|
| - DiskMountManager::MountTypeFromString(mount_type_str));
|
| + const FilePath& source_path = files[0].path;
|
| + const FilePath::StringType& display_name = files[0].display_name;
|
| + // Check if the source path is under GData cache directory.
|
| + gdata::GDataSystemService* system_service =
|
| + gdata::GDataSystemServiceFactory::GetForProfile(profile_);
|
| + gdata::GDataFileSystem* file_system =
|
| + system_service ? system_service->file_system() : NULL;
|
| + if (file_system && file_system->IsUnderGDataCacheDirectory(source_path)) {
|
| + file_system->SetMountedState(
|
| + source_path,
|
| + true,
|
| + base::Bind(&AddMountFunction::OnMountedStateSet, this, mount_type_str,
|
| + display_name));
|
| + } else {
|
| + OnMountedStateSet(mount_type_str, display_name,
|
| + base::PLATFORM_FILE_OK, source_path);
|
| + }
|
| +#else
|
| + SendResponse(true);
|
| #endif // defined(OS_CHROMEOS)
|
| +}
|
|
|
| +void AddMountFunction::OnMountedStateSet(const std::string& mount_type,
|
| + const FilePath::StringType& file_name,
|
| + base::PlatformFileError error,
|
| + const FilePath& file_path) {
|
| +#if defined(OS_CHROMEOS)
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| + DiskMountManager* disk_mount_manager = DiskMountManager::GetInstance();
|
| + // MountPath() takes a std::string.
|
| + disk_mount_manager->MountPath(file_path.AsUTF8Unsafe(),
|
| + FilePath(file_name).Extension(),
|
| + DiskMountManager::MountTypeFromString(
|
| + mount_type));
|
| SendResponse(true);
|
| +#endif // defined(OS_CHROMEOS)
|
| }
|
|
|
| RemoveMountFunction::RemoveMountFunction() {
|
| @@ -1058,10 +1086,49 @@ void RemoveMountFunction::GetLocalPathsResponseOnUIThread(
|
| return;
|
| }
|
| #if defined(OS_CHROMEOS)
|
| - DiskMountManager::GetInstance()->UnmountPath(files[0].path.value());
|
| -#endif
|
| + DiskMountManager* disk_mount_manager = DiskMountManager::GetInstance();
|
| + if (!disk_mount_manager) {
|
| + SendResponse(false);
|
| + return;
|
| + }
|
|
|
| + const std::string& mount_path = files[0].path.value();
|
| + const DiskMountManager::MountPointMap& mount_points =
|
| + disk_mount_manager->mount_points();
|
| + // Look up source_path from mount_path first, because the mount_path will
|
| + // be deleted from the MountPointMap once it is unmounted.
|
| + DiskMountManager::MountPointMap::const_iterator it =
|
| + mount_points.find(mount_path);
|
| + if (it == mount_points.end()) {
|
| + SendResponse(false);
|
| + return;
|
| + }
|
| + FilePath source_path = FilePath(it->second.source_path);
|
| + // Unmount archive at mount_path.
|
| + disk_mount_manager->UnmountPath(mount_path);
|
| + // Check if the source path is under GData cache directory.
|
| + gdata::GDataSystemService* system_service =
|
| + gdata::GDataSystemServiceFactory::GetForProfile(profile_);
|
| + gdata::GDataFileSystem* file_system =
|
| + system_service ? system_service->file_system() : NULL;
|
| + if (file_system && file_system->IsUnderGDataCacheDirectory(source_path)) {
|
| + file_system->SetMountedState(
|
| + source_path,
|
| + false,
|
| + base::Bind(&RemoveMountFunction::OnMountedStateSet, this));
|
| + } else {
|
| + OnMountedStateSet(base::PLATFORM_FILE_OK, source_path);
|
| + }
|
| +#else
|
| + SendResponse(true);
|
| +#endif // defined(OS_CHROMEOS)
|
| +}
|
| +
|
| +void RemoveMountFunction::OnMountedStateSet(base::PlatformFileError error,
|
| + const FilePath& /* file_path */) {
|
| +#if defined(OS_CHROMEOS)
|
| SendResponse(true);
|
| +#endif // defined(OS_CHROMEOS)
|
| }
|
|
|
| GetMountPointsFunction::GetMountPointsFunction() {
|
|
|