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

Unified Diff: content/browser/child_process_security_policy.cc

Issue 6893145: Ensured that worker thread renderer process file permissions are inherited from its main thread r... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 8 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: content/browser/child_process_security_policy.cc
===================================================================
--- content/browser/child_process_security_policy.cc (revision 83553)
+++ content/browser/child_process_security_policy.cc (working copy)
@@ -157,12 +157,15 @@
void ChildProcessSecurityPolicy::Add(int child_id) {
base::AutoLock lock(lock_);
- if (security_state_.count(child_id) != 0) {
- NOTREACHED() << "Add child process at most once.";
- return;
- }
+ AddChild(child_id);
+}
- security_state_[child_id] = new SecurityState();
+void ChildProcessSecurityPolicy::AddWorker(int child_id,
+ int main_render_process_id) {
+ base::AutoLock lock(lock_);
+ AddChild(child_id);
+ worker_map_.insert(WorkerToMainProcessMap::value_type(child_id,
+ main_render_process_id));
jam 2011/05/02 17:17:53 nit: seems simpler to read if it's just worker_ma
zel 2011/05/02 18:16:11 Done.
}
void ChildProcessSecurityPolicy::Remove(int child_id) {
@@ -172,6 +175,7 @@
delete security_state_[child_id];
security_state_.erase(child_id);
+ worker_map_.erase(child_id);
}
void ChildProcessSecurityPolicy::RegisterWebSafeScheme(
@@ -405,12 +409,19 @@
bool ChildProcessSecurityPolicy::HasPermissionsForFile(
int child_id, const FilePath& file, int permissions) {
base::AutoLock lock(lock_);
-
- SecurityStateMap::iterator state = security_state_.find(child_id);
- if (state == security_state_.end())
- return false;
-
- return state->second->HasPermissionsForFile(file, permissions);
+ bool result = ChildProcessHasPermissionsForFile(child_id, file, permissions);
+ if (!result) {
+ // If this is a worker thread that has no access to a given file,
+ // let's check that its main thread renderer process has access to that
jam 2011/05/02 17:17:53 nit "main thread" seems redundant. "its renderer
zel 2011/05/02 18:16:11 Done.
+ // file instead.
+ WorkerToMainProcessMap::iterator iter = worker_map_.find(child_id);
+ if (iter != worker_map_.end() && iter->second != 0) {
+ result = ChildProcessHasPermissionsForFile(iter->second,
+ file,
+ permissions);
+ }
+ }
+ return result;
}
bool ChildProcessSecurityPolicy::HasWebUIBindings(int child_id) {
@@ -442,3 +453,20 @@
return state->second->can_read_raw_cookies();
}
+
+void ChildProcessSecurityPolicy::AddChild(int child_id) {
+ if (security_state_.count(child_id) != 0) {
+ NOTREACHED() << "Add child process at most once.";
+ return;
+ }
+
+ security_state_[child_id] = new SecurityState();
+}
+
+bool ChildProcessSecurityPolicy::ChildProcessHasPermissionsForFile(
+ int child_id, const FilePath& file, int permissions) {
+ SecurityStateMap::iterator state = security_state_.find(child_id);
+ if (state == security_state_.end())
+ return false;
+ return state->second->HasPermissionsForFile(file, permissions);
+}
« no previous file with comments | « content/browser/child_process_security_policy.h ('k') | content/browser/child_process_security_policy_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698