summaryrefslogtreecommitdiffstats
path: root/webkit/browser/fileapi/file_system_context.cc
diff options
context:
space:
mode:
Diffstat (limited to 'webkit/browser/fileapi/file_system_context.cc')
-rw-r--r--webkit/browser/fileapi/file_system_context.cc46
1 files changed, 46 insertions, 0 deletions
diff --git a/webkit/browser/fileapi/file_system_context.cc b/webkit/browser/fileapi/file_system_context.cc
index 79a4945..97f4205 100644
--- a/webkit/browser/fileapi/file_system_context.cc
+++ b/webkit/browser/fileapi/file_system_context.cc
@@ -11,6 +11,7 @@
#include "webkit/browser/blob/file_stream_reader.h"
#include "webkit/browser/fileapi/copy_or_move_file_validator.h"
#include "webkit/browser/fileapi/external_mount_points.h"
+#include "webkit/browser/fileapi/file_permission_policy.h"
#include "webkit/browser/fileapi/file_stream_writer.h"
#include "webkit/browser/fileapi/file_system_file_util.h"
#include "webkit/browser/fileapi/file_system_operation.h"
@@ -53,6 +54,51 @@ void DidOpenFileSystem(
} // namespace
+// static
+int FileSystemContext::GetPermissionPolicy(FileSystemType type) {
+ switch (type) {
+ case kFileSystemTypeTemporary:
+ case kFileSystemTypePersistent:
+ case kFileSystemTypeSyncable:
+ return FILE_PERMISSION_SANDBOX;
+
+ case kFileSystemTypeDrive:
+ case kFileSystemTypeNativeForPlatformApp:
+ case kFileSystemTypeNativeLocal:
+ return FILE_PERMISSION_USE_FILE_PERMISSION;
+
+ case kFileSystemTypeRestrictedNativeLocal:
+ return FILE_PERMISSION_READ_ONLY |
+ FILE_PERMISSION_USE_FILE_PERMISSION;
+
+ // Following types are only accessed via IsolatedFileSystem, and
+ // don't have their own permission policies.
+ case kFileSystemTypeDeviceMedia:
+ case kFileSystemTypeDragged:
+ case kFileSystemTypeForTransientFile:
+ case kFileSystemTypeItunes:
+ case kFileSystemTypeNativeMedia:
+ case kFileSystemTypePicasa:
+ return FILE_PERMISSION_ALWAYS_DENY;
+
+ // Following types only appear as mount_type, and will not be
+ // queried for their permission policies.
+ case kFileSystemTypeIsolated:
+ case kFileSystemTypeExternal:
+ return FILE_PERMISSION_ALWAYS_DENY;
+
+ // Following types should not be used to access files by FileAPI clients.
+ case kFileSystemTypeTest:
+ case kFileSystemTypeSyncableForInternalSync:
+ case kFileSystemInternalTypeEnumEnd:
+ case kFileSystemInternalTypeEnumStart:
+ case kFileSystemTypeUnknown:
+ return FILE_PERMISSION_ALWAYS_DENY;
+ }
+ NOTREACHED();
+ return FILE_PERMISSION_ALWAYS_DENY;
+}
+
FileSystemContext::FileSystemContext(
scoped_ptr<FileSystemTaskRunners> task_runners,
ExternalMountPoints* external_mount_points,