Index: chrome/browser/extensions/api/file_system/file_system_api.cc |
diff --git a/chrome/browser/extensions/api/file_system/file_system_api.cc b/chrome/browser/extensions/api/file_system/file_system_api.cc |
index 18d84e29df97d33a97ea4c97a3d74425c82f9984..09bf70d264a988221abf55bdb70aea7c90a92793 100644 |
--- a/chrome/browser/extensions/api/file_system/file_system_api.cc |
+++ b/chrome/browser/extensions/api/file_system/file_system_api.cc |
@@ -39,6 +39,10 @@ |
#include "base/mac/foundation_util.h" |
#endif |
+#if defined(OS_CHROMEOS) |
+#include "chrome/browser/chromeos/drive/drive_file_system_util.h" |
+#endif |
+ |
using fileapi::IsolatedContext; |
const char kInvalidParameters[] = "Invalid parameters"; |
@@ -192,6 +196,24 @@ bool DoCheckWritableFile(const base::FilePath& path) { |
error == base::PLATFORM_FILE_ERROR_EXISTS; |
} |
+void CheckLocalWritableFile(const base::FilePath& path, |
+ const base::Closure& on_success, |
+ const base::Closure& on_failure) { |
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::FILE)); |
+ content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE, |
+ DoCheckWritableFile(path) ? on_success : on_failure); |
+} |
+ |
+#if defined(OS_CHROMEOS) |
+void CheckRemoteWritableFile(const base::Closure& on_success, |
+ const base::Closure& on_failure, |
+ drive::DriveFileError error, |
+ const base::FilePath& path) { |
+ content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE, |
+ error == drive::DRIVE_FILE_OK ? on_success : on_failure); |
+} |
+#endif |
+ |
// Expand the mime-types and extensions provided in an AcceptOption, returning |
// them within the passed extension vector. Returns false if no valid types |
// were found. |
@@ -284,16 +306,22 @@ bool FileSystemEntryFunction::HasFileSystemWritePermission() { |
} |
void FileSystemEntryFunction::CheckWritableFile(const base::FilePath& path) { |
- DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::FILE)); |
- if (DoCheckWritableFile(path)) { |
- content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE, |
- base::Bind(&FileSystemEntryFunction::RegisterFileSystemAndSendResponse, |
- this, path, WRITABLE)); |
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
+ base::Closure on_success = |
+ base::Bind(&FileSystemEntryFunction::RegisterFileSystemAndSendResponse, |
+ this, path, WRITABLE); |
+ base::Closure on_failure = |
+ base::Bind(&FileSystemEntryFunction::HandleWritableFileError, this); |
+ |
+#if defined(OS_CHROMEOS) |
+ if (drive::util::IsUnderDriveMountPoint(path)) { |
+ drive::util::PrepareWritableFileAndRun(profile_, path, |
+ base::Bind(&CheckRemoteWritableFile, on_success, on_failure)); |
return; |
} |
- |
- content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE, |
- base::Bind(&FileSystemEntryFunction::HandleWritableFileError, this)); |
+#endif |
+ content::BrowserThread::PostTask(content::BrowserThread::FILE, FROM_HERE, |
+ base::Bind(&CheckLocalWritableFile, path, on_success, on_failure)); |
} |
void FileSystemEntryFunction::RegisterFileSystemAndSendResponse( |
@@ -341,9 +369,7 @@ bool FileSystemGetWritableEntryFunction::RunImpl() { |
render_view_host_, &path, &error_)) |
return false; |
- content::BrowserThread::PostTask(content::BrowserThread::FILE, FROM_HERE, |
- base::Bind(&FileSystemGetWritableEntryFunction::CheckWritableFile, |
- this, path)); |
+ CheckWritableFile(path); |
return true; |
} |
@@ -511,9 +537,7 @@ void FileSystemChooseEntryFunction::RegisterTempExternalFileSystemForTest( |
void FileSystemChooseEntryFunction::FileSelected(const base::FilePath& path, |
EntryType entry_type) { |
if (entry_type == WRITABLE) { |
- content::BrowserThread::PostTask(content::BrowserThread::FILE, FROM_HERE, |
- base::Bind(&FileSystemChooseEntryFunction::CheckWritableFile, |
- this, path)); |
+ CheckWritableFile(path); |
return; |
} |
@@ -623,9 +647,7 @@ bool FileSystemChooseEntryFunction::RunImpl() { |
return false; |
} |
- if (entry_type != WRITABLE) |
- file_type_info.support_drive = true; |
- |
+ file_type_info.support_drive = true; |
return ShowPicker(suggested_name, file_type_info, picker_type, entry_type); |
} |