summaryrefslogtreecommitdiffstats
path: root/webkit/browser/fileapi/file_system_context.cc
diff options
context:
space:
mode:
authorkinuko@chromium.org <kinuko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-07-01 11:52:31 +0000
committerkinuko@chromium.org <kinuko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-07-01 11:52:31 +0000
commitce5cbed872693ef89bb6e33fa4dd513b1dd7054b (patch)
treeaae7f224608f012d54cdb7141c4d8bfd8ad0b3e6 /webkit/browser/fileapi/file_system_context.cc
parent5e5ba0428effebbcce06382c792f5c9d2afc1ab8 (diff)
downloadchromium_src-ce5cbed872693ef89bb6e33fa4dd513b1dd7054b.zip
chromium_src-ce5cbed872693ef89bb6e33fa4dd513b1dd7054b.tar.gz
chromium_src-ce5cbed872693ef89bb6e33fa4dd513b1dd7054b.tar.bz2
Implement ChildProcessSecurityPolicy::HasPermissionsForFileSystemFile()
In content/ layer: - Add CPSP::HasPermissionsForFileSystemFile() for central FileSystem permission check. - Replace all permission check code for FileSystem files with the newly added CPSP method In webkit/browser/fileapi layer: - Each MountPointProvider's GetPermissionPolicy() is replaced with a central static FileSystemContext::GetPermissionPolicy() method. Now the permission policy is statically defined for each type and used by CPSP. Some FS-specific security checks are moved into each FS's private implementation. - For SandboxMountPointProvider: moved some API-specific validity check code into a private IsAcessValid() method. - For CrosMountPointProvider: IsAccessAllowed() method is still called every time when a new FileSystemOperation is created, but doesn't participate the CPSP's permission check. BUG=174550 TEST=ChildProcessSecurityPolicyTest::FileSystemFilePermissions R=aedla@chromium.org, darin@chromium.org, tbarzic@chromium.org, tsepez@chromium.org Review URL: https://codereview.chromium.org/12310099 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@209418 0039d316-1c4b-4281-b951-d872f2087c98
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,