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..4aca2cc38c3727bd225050f36bc726c656a8a0de 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, FilePath::StringType(), |
satorux1
2012/04/24 20:46:53
can you add some comment why we are passing FileP
hshi
2012/04/24 21:18:22
I think I should actually pass the display_name he
satorux1
2012/04/24 22:54:15
Nice. i caught something. :)
|
+ 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,48 @@ 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; |
+ } |
+ // Look up source path from mount path. |
+ const std::string& mount_path = files[0].path.value(); |
+ FilePath source_path; |
+ const DiskMountManager::MountPointMap& mount_points = |
+ disk_mount_manager->mount_points(); |
+ DiskMountManager::MountPointMap::const_iterator it = |
+ mount_points.find(mount_path); |
+ if (it != mount_points.end()) { |
satorux1
2012/04/24 20:46:53
nit: remove {} per the chromium style.
|
+ source_path = FilePath(it->second.source_path); |
+ } |
hshi
2012/04/24 19:49:33
Please review this patch set #5. My previous patch
hshi
2012/04/24 21:18:22
Toni told me that it is necessary after all to bai
|
+ // Unmount archive. |
+ disk_mount_manager->UnmountPath(mount_path); |
satorux1
2012/04/24 20:46:53
Please move this to right after mount_path is comp
hshi
2012/04/24 21:18:22
I've added comments to explain this.
On 2012/04/2
|
+ // 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) |
+ // Ignore the file_path argument for now. |
satorux1
2012/04/24 20:46:53
remove this comment and change the parameter to:
|
+ SendResponse(true); |
+#endif // defined(OS_CHROMEOS) |
} |
GetMountPointsFunction::GetMountPointsFunction() { |