summaryrefslogtreecommitdiffstats
path: root/chrome/browser/chromeos/file_manager/fileapi_util.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/chromeos/file_manager/fileapi_util.cc')
-rw-r--r--chrome/browser/chromeos/file_manager/fileapi_util.cc35
1 files changed, 35 insertions, 0 deletions
diff --git a/chrome/browser/chromeos/file_manager/fileapi_util.cc b/chrome/browser/chromeos/file_manager/fileapi_util.cc
index 0286b58..68e4cab 100644
--- a/chrome/browser/chromeos/file_manager/fileapi_util.cc
+++ b/chrome/browser/chromeos/file_manager/fileapi_util.cc
@@ -7,6 +7,7 @@
#include "base/files/file.h"
#include "base/files/file_path.h"
#include "chrome/browser/chromeos/drive/file_system_util.h"
+#include "chrome/browser/chromeos/file_manager/app_id.h"
#include "chrome/browser/extensions/extension_util.h"
#include "chrome/browser/profiles/profile.h"
#include "content/public/browser/browser_thread.h"
@@ -14,6 +15,7 @@
#include "content/public/browser/site_instance.h"
#include "content/public/browser/storage_partition.h"
#include "extensions/common/extension.h"
+#include "google_apis/drive/task_util.h"
#include "net/base/escape.h"
#include "url/gurl.h"
#include "webkit/browser/fileapi/file_system_context.h"
@@ -211,6 +213,18 @@ void OnConvertFileDefinitionDone(
callback.Run(entry_definition_list->at(0));
}
+// Used to implement CheckIfDirectoryExists().
+void CheckIfDirectoryExistsOnIOThread(
+ scoped_refptr<fileapi::FileSystemContext> file_system_context,
+ const GURL& url,
+ const fileapi::FileSystemOperationRunner::StatusCallback& callback) {
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+
+ fileapi::FileSystemURL file_system_url = file_system_context->CrackURL(url);
+ file_system_context->operation_runner()->DirectoryExists(
+ file_system_url, callback);
+}
+
} // namespace
EntryDefinition::EntryDefinition() {
@@ -328,5 +342,26 @@ void ConvertFileDefinitionToEntryDefinition(
base::Bind(&OnConvertFileDefinitionDone, callback));
}
+void CheckIfDirectoryExists(
+ scoped_refptr<fileapi::FileSystemContext> file_system_context,
+ const GURL& url,
+ const fileapi::FileSystemOperationRunner::StatusCallback& callback) {
+ DCHECK_CURRENTLY_ON(BrowserThread::UI);
+
+ // Check the existence of directory using file system API implementation on
+ // behalf of the file manager app. We need to grant access beforehand.
+ fileapi::ExternalFileSystemBackend* backend =
+ file_system_context->external_backend();
+ DCHECK(backend);
+ backend->GrantFullAccessToExtension(kFileManagerAppId);
+
+ BrowserThread::PostTask(
+ BrowserThread::IO, FROM_HERE,
+ base::Bind(&CheckIfDirectoryExistsOnIOThread,
+ file_system_context,
+ url,
+ google_apis::CreateRelayCallback(callback)));
+}
+
} // namespace util
} // namespace file_manager