summaryrefslogtreecommitdiffstats
path: root/content/browser/child_process_security_policy_impl.h
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 /content/browser/child_process_security_policy_impl.h
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 'content/browser/child_process_security_policy_impl.h')
-rw-r--r--content/browser/child_process_security_policy_impl.h28
1 files changed, 25 insertions, 3 deletions
diff --git a/content/browser/child_process_security_policy_impl.h b/content/browser/child_process_security_policy_impl.h
index cfddada..9d58e3223 100644
--- a/content/browser/child_process_security_policy_impl.h
+++ b/content/browser/child_process_security_policy_impl.h
@@ -15,6 +15,7 @@
#include "base/memory/singleton.h"
#include "base/synchronization/lock.h"
#include "content/public/browser/child_process_security_policy.h"
+#include "webkit/common/fileapi/file_system_types.h"
#include "webkit/glue/resource_type.h"
class GURL;
@@ -23,6 +24,10 @@ namespace base {
class FilePath;
}
+namespace fileapi {
+class FileSystemURL;
+}
+
namespace content {
class CONTENT_EXPORT ChildProcessSecurityPolicyImpl
@@ -124,11 +129,17 @@ class CONTENT_EXPORT ChildProcessSecurityPolicyImpl
bool CanReadDirectory(int child_id, const base::FilePath& directory);
// Determines if certain permissions were granted for a file. |permissions|
- // must be a bit-set of base::PlatformFileFlags.
+ // must be a bitwise-or'd value of base::PlatformFileFlags.
bool HasPermissionsForFile(int child_id,
const base::FilePath& file,
int permissions);
+ // Determines if certain permissions were granted for a file in FileSystem
+ // API. |permissions| must be a bitwise-or'd value of base::PlatformFileFlags.
+ bool HasPermissionsForFileSystemFile(int child_id,
+ const fileapi::FileSystemURL& url,
+ int permissions);
+
// Returns true if the specified child_id has been granted WebUIBindings.
// The browser should check this property before assuming the child process is
// allowed to use WebUIBindings.
@@ -165,12 +176,19 @@ class CONTENT_EXPORT ChildProcessSecurityPolicyImpl
int permission);
// Determines if certain permissions were granted for a file fystem.
- // |permissions| must be a bit-set of base::PlatformFileFlags.
+ // |permissions| must be a bitwise-or'd value of base::PlatformFileFlags.
bool HasPermissionsForFileSystem(
int child_id,
const std::string& filesystem_id,
int permission);
+ // Register FileSystem type and permission policy which should be used
+ // for the type. The |policy| must be a bitwise-or'd value of
+ // fileapi::FilePermissionPolicy.
+ void RegisterFileSystemPermissionPolicy(
+ fileapi::FileSystemType type,
+ int policy);
+
private:
friend class ChildProcessSecurityPolicyInProcessBrowserTest;
FRIEND_TEST_ALL_PREFIXES(ChildProcessSecurityPolicyInProcessBrowserTest,
@@ -181,6 +199,7 @@ class CONTENT_EXPORT ChildProcessSecurityPolicyImpl
typedef std::set<std::string> SchemeSet;
typedef std::map<int, SecurityState*> SecurityStateMap;
typedef std::map<int, int> WorkerToMainProcessMap;
+ typedef std::map<fileapi::FileSystemType, int> FileSystemPermissionPolicyMap;
// Obtain an instance of ChildProcessSecurityPolicyImpl via GetInstance().
ChildProcessSecurityPolicyImpl();
@@ -190,7 +209,8 @@ class CONTENT_EXPORT ChildProcessSecurityPolicyImpl
void AddChild(int child_id);
// Determines if certain permissions were granted for a file to given child
- // process. |permissions| must be a bit-set of base::PlatformFileFlags.
+ // process. |permissions| must be a bitwise-or'd value of
+ // base::PlatformFileFlags.
bool ChildProcessHasPermissionsForFile(int child_id,
const base::FilePath& file,
int permissions);
@@ -218,6 +238,8 @@ class CONTENT_EXPORT ChildProcessSecurityPolicyImpl
// corresponds to which main js thread child process.
WorkerToMainProcessMap worker_map_;
+ FileSystemPermissionPolicyMap file_system_policy_map_;
+
DISALLOW_COPY_AND_ASSIGN(ChildProcessSecurityPolicyImpl);
};