summaryrefslogtreecommitdiffstats
path: root/webkit/browser/fileapi/isolated_file_system_backend.cc
diff options
context:
space:
mode:
Diffstat (limited to 'webkit/browser/fileapi/isolated_file_system_backend.cc')
-rw-r--r--webkit/browser/fileapi/isolated_file_system_backend.cc141
1 files changed, 141 insertions, 0 deletions
diff --git a/webkit/browser/fileapi/isolated_file_system_backend.cc b/webkit/browser/fileapi/isolated_file_system_backend.cc
new file mode 100644
index 0000000..d40fe36
--- /dev/null
+++ b/webkit/browser/fileapi/isolated_file_system_backend.cc
@@ -0,0 +1,141 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "webkit/browser/fileapi/isolated_file_system_backend.h"
+
+#include <string>
+
+#include "base/bind.h"
+#include "base/files/file_path.h"
+#include "base/files/file_util_proxy.h"
+#include "base/logging.h"
+#include "base/message_loop/message_loop_proxy.h"
+#include "base/platform_file.h"
+#include "base/sequenced_task_runner.h"
+#include "webkit/browser/blob/local_file_stream_reader.h"
+#include "webkit/browser/fileapi/async_file_util_adapter.h"
+#include "webkit/browser/fileapi/copy_or_move_file_validator.h"
+#include "webkit/browser/fileapi/file_system_context.h"
+#include "webkit/browser/fileapi/file_system_file_stream_reader.h"
+#include "webkit/browser/fileapi/file_system_operation_context.h"
+#include "webkit/browser/fileapi/file_system_task_runners.h"
+#include "webkit/browser/fileapi/isolated_context.h"
+#include "webkit/browser/fileapi/isolated_file_util.h"
+#include "webkit/browser/fileapi/local_file_stream_writer.h"
+#include "webkit/browser/fileapi/local_file_system_operation.h"
+#include "webkit/browser/fileapi/native_file_util.h"
+#include "webkit/browser/fileapi/transient_file_util.h"
+#include "webkit/common/fileapi/file_system_types.h"
+#include "webkit/common/fileapi/file_system_util.h"
+
+namespace fileapi {
+
+IsolatedFileSystemBackend::IsolatedFileSystemBackend()
+ : isolated_file_util_(new AsyncFileUtilAdapter(new IsolatedFileUtil())),
+ dragged_file_util_(new AsyncFileUtilAdapter(new DraggedFileUtil())),
+ transient_file_util_(new AsyncFileUtilAdapter(new TransientFileUtil())) {
+}
+
+IsolatedFileSystemBackend::~IsolatedFileSystemBackend() {
+}
+
+bool IsolatedFileSystemBackend::CanHandleType(FileSystemType type) const {
+ switch (type) {
+ case kFileSystemTypeIsolated:
+ case kFileSystemTypeDragged:
+ case kFileSystemTypeForTransientFile:
+ return true;
+#if !defined(OS_CHROMEOS)
+ case kFileSystemTypeNativeLocal:
+ case kFileSystemTypeNativeForPlatformApp:
+ return true;
+#endif
+ default:
+ return false;
+ }
+}
+
+void IsolatedFileSystemBackend::OpenFileSystem(
+ const GURL& origin_url,
+ FileSystemType type,
+ OpenFileSystemMode mode,
+ const OpenFileSystemCallback& callback) {
+ // We never allow opening a new isolated FileSystem via usual OpenFileSystem.
+ base::MessageLoopProxy::current()->PostTask(
+ FROM_HERE,
+ base::Bind(callback, base::PLATFORM_FILE_ERROR_SECURITY));
+}
+
+FileSystemFileUtil* IsolatedFileSystemBackend::GetFileUtil(
+ FileSystemType type) {
+ switch (type) {
+ case kFileSystemTypeNativeLocal:
+ return isolated_file_util_->sync_file_util();
+ case kFileSystemTypeDragged:
+ return dragged_file_util_->sync_file_util();
+ case kFileSystemTypeForTransientFile:
+ return transient_file_util_->sync_file_util();
+ default:
+ NOTREACHED();
+ }
+ return NULL;
+}
+
+AsyncFileUtil* IsolatedFileSystemBackend::GetAsyncFileUtil(
+ FileSystemType type) {
+ switch (type) {
+ case kFileSystemTypeNativeLocal:
+ return isolated_file_util_.get();
+ case kFileSystemTypeDragged:
+ return dragged_file_util_.get();
+ case kFileSystemTypeForTransientFile:
+ return transient_file_util_.get();
+ default:
+ NOTREACHED();
+ }
+ return NULL;
+}
+
+CopyOrMoveFileValidatorFactory*
+IsolatedFileSystemBackend::GetCopyOrMoveFileValidatorFactory(
+ FileSystemType type, base::PlatformFileError* error_code) {
+ DCHECK(error_code);
+ *error_code = base::PLATFORM_FILE_OK;
+ return NULL;
+}
+
+FileSystemOperation* IsolatedFileSystemBackend::CreateFileSystemOperation(
+ const FileSystemURL& url,
+ FileSystemContext* context,
+ base::PlatformFileError* error_code) const {
+ return new LocalFileSystemOperation(
+ url, context, make_scoped_ptr(new FileSystemOperationContext(context)));
+}
+
+scoped_ptr<webkit_blob::FileStreamReader>
+IsolatedFileSystemBackend::CreateFileStreamReader(
+ const FileSystemURL& url,
+ int64 offset,
+ const base::Time& expected_modification_time,
+ FileSystemContext* context) const {
+ return scoped_ptr<webkit_blob::FileStreamReader>(
+ new webkit_blob::LocalFileStreamReader(
+ context->task_runners()->file_task_runner(),
+ url.path(), offset, expected_modification_time));
+}
+
+scoped_ptr<FileStreamWriter> IsolatedFileSystemBackend::CreateFileStreamWriter(
+ const FileSystemURL& url,
+ int64 offset,
+ FileSystemContext* context) const {
+ return scoped_ptr<FileStreamWriter>(new LocalFileStreamWriter(
+ context->task_runners()->file_task_runner(), url.path(), offset));
+}
+
+FileSystemQuotaUtil* IsolatedFileSystemBackend::GetQuotaUtil() {
+ // No quota support.
+ return NULL;
+}
+
+} // namespace fileapi