Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(175)

Unified Diff: chrome/browser/child_process_security_policy.cc

Issue 3431032: Change ChildProcessSecurityPolicy to store a list of allowed flags for... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/child_process_security_policy.cc
===================================================================
--- chrome/browser/child_process_security_policy.cc (revision 60686)
+++ chrome/browser/child_process_security_policy.cc (working copy)
@@ -6,6 +6,7 @@
#include "base/file_path.h"
#include "base/logging.h"
+#include "base/platform_file.h"
#include "base/stl_util-inl.h"
#include "base/string_util.h"
#include "chrome/common/bindings_policy.h"
@@ -13,6 +14,12 @@
#include "googleurl/src/gurl.h"
#include "net/url_request/url_request.h"
+const int kReadFilePermissions =
darin (slow to review) 2010/09/28 06:18:27 nit: mark this as 'static'
+ base::PLATFORM_FILE_OPEN |
+ base::PLATFORM_FILE_READ |
+ base::PLATFORM_FILE_EXCLUSIVE_READ |
+ base::PLATFORM_FILE_ASYNC;
+
// The SecurityState class is used to maintain per-renderer security state
// information.
class ChildProcessSecurityPolicy::SecurityState {
@@ -34,9 +41,9 @@
scheme_policy_[scheme] = false;
}
- // Grant permission to upload the specified file to the web.
- void GrantUploadFile(const FilePath& file) {
- uploadable_files_.insert(file);
+ // Grant certain permissions to a file.
+ void GrantPermissionsForFile(const FilePath& file, int permissions) {
+ file_permissions_[file.StripTrailingSeparators()] |= permissions;
}
void GrantBindings(int bindings) {
@@ -62,10 +69,18 @@
return judgment->second;
}
- // Determine whether permission has been granted to upload file.
- // Files that have not been granted default to being denied.
- bool CanUploadFile(const FilePath& file) {
- return uploadable_files_.find(file) != uploadable_files_.end();
+ // Determine if the certain permissions have been granted to a file.
+ bool HasPermissionsForFile(const FilePath& file, int permissions) {
+ FilePath current_path = file.StripTrailingSeparators();
+ FilePath last_path;
+ while (current_path != last_path) {
+ if (file_permissions_.find(current_path) != file_permissions_.end())
+ return (file_permissions_[current_path] & permissions) == permissions;
+ last_path = current_path;
+ current_path = current_path.DirName();
+ }
+
+ return false;
}
bool has_dom_ui_bindings() const {
@@ -82,7 +97,7 @@
private:
typedef std::map<std::string, bool> SchemeMap;
- typedef std::set<FilePath> FileSet;
+ typedef std::map<FilePath, int> FileMap; // bit-set of PlatformFileFlags
darin (slow to review) 2010/09/28 06:18:27 nit: two spaces before the '//'
// Maps URL schemes to whether permission has been granted or revoked:
// |true| means the scheme has been granted.
@@ -92,7 +107,7 @@
SchemeMap scheme_policy_;
// The set of files the renderer is permited to upload to the web.
- FileSet uploadable_files_;
+ FileMap file_permissions_;
int enabled_bindings_;
@@ -215,15 +230,20 @@
}
}
-void ChildProcessSecurityPolicy::GrantUploadFile(int renderer_id,
- const FilePath& file) {
+void ChildProcessSecurityPolicy::GrantReadFile(int renderer_id,
+ const FilePath& file) {
+ GrantPermissionsForFile(renderer_id, file, kReadFilePermissions);
+}
+
+void ChildProcessSecurityPolicy::GrantPermissionsForFile(
+ int renderer_id, const FilePath& file, int permissions) {
AutoLock lock(lock_);
SecurityStateMap::iterator state = security_state_.find(renderer_id);
if (state == security_state_.end())
return;
- state->second->GrantUploadFile(file);
+ state->second->GrantPermissionsForFile(file, permissions);
}
void ChildProcessSecurityPolicy::GrantScheme(int renderer_id,
@@ -336,15 +356,20 @@
}
}
-bool ChildProcessSecurityPolicy::CanUploadFile(int renderer_id,
- const FilePath& file) {
+bool ChildProcessSecurityPolicy::CanReadFile(int renderer_id,
+ const FilePath& file) {
+ return HasPermissionsForFile(renderer_id, file, kReadFilePermissions);
+}
+
+bool ChildProcessSecurityPolicy::HasPermissionsForFile(
+ int renderer_id, const FilePath& file, int permissions) {
AutoLock lock(lock_);
SecurityStateMap::iterator state = security_state_.find(renderer_id);
if (state == security_state_.end())
return false;
- return state->second->CanUploadFile(file);
+ return state->second->HasPermissionsForFile(file, permissions);
}
bool ChildProcessSecurityPolicy::HasDOMUIBindings(int renderer_id) {

Powered by Google App Engine
This is Rietveld 408576698