| Index: content/browser/child_process_security_policy_impl.cc
|
| ===================================================================
|
| --- content/browser/child_process_security_policy_impl.cc (revision 120580)
|
| +++ content/browser/child_process_security_policy_impl.cc (working copy)
|
| @@ -2,7 +2,7 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#include "content/browser/child_process_security_policy.h"
|
| +#include "content/browser/child_process_security_policy_impl.h"
|
|
|
| #include "base/file_path.h"
|
| #include "base/logging.h"
|
| @@ -18,6 +18,7 @@
|
| #include "net/url_request/url_request.h"
|
| #include "webkit/fileapi/isolated_context.h"
|
|
|
| +using content::ChildProcessSecurityPolicy;
|
| using content::SiteInstance;
|
|
|
| static const int kReadFilePermissions =
|
| @@ -32,7 +33,7 @@
|
|
|
| // The SecurityState class is used to maintain per-child process security state
|
| // information.
|
| -class ChildProcessSecurityPolicy::SecurityState {
|
| +class ChildProcessSecurityPolicyImpl::SecurityState {
|
| public:
|
| SecurityState()
|
| : enabled_bindings_(0),
|
| @@ -162,7 +163,7 @@
|
| DISALLOW_COPY_AND_ASSIGN(SecurityState);
|
| };
|
|
|
| -ChildProcessSecurityPolicy::ChildProcessSecurityPolicy() {
|
| +ChildProcessSecurityPolicyImpl::ChildProcessSecurityPolicyImpl() {
|
| // We know about these schemes and believe them to be safe.
|
| RegisterWebSafeScheme(chrome::kHttpScheme);
|
| RegisterWebSafeScheme(chrome::kHttpsScheme);
|
| @@ -178,7 +179,7 @@
|
| RegisterPseudoScheme(chrome::kViewSourceScheme);
|
| }
|
|
|
| -ChildProcessSecurityPolicy::~ChildProcessSecurityPolicy() {
|
| +ChildProcessSecurityPolicyImpl::~ChildProcessSecurityPolicyImpl() {
|
| web_safe_schemes_.clear();
|
| pseudo_schemes_.clear();
|
| STLDeleteContainerPairSecondPointers(security_state_.begin(),
|
| @@ -188,22 +189,26 @@
|
|
|
| // static
|
| ChildProcessSecurityPolicy* ChildProcessSecurityPolicy::GetInstance() {
|
| - return Singleton<ChildProcessSecurityPolicy>::get();
|
| + return ChildProcessSecurityPolicyImpl::GetInstance();
|
| }
|
|
|
| -void ChildProcessSecurityPolicy::Add(int child_id) {
|
| +ChildProcessSecurityPolicyImpl* ChildProcessSecurityPolicyImpl::GetInstance() {
|
| + return Singleton<ChildProcessSecurityPolicyImpl>::get();
|
| +}
|
| +
|
| +void ChildProcessSecurityPolicyImpl::Add(int child_id) {
|
| base::AutoLock lock(lock_);
|
| AddChild(child_id);
|
| }
|
|
|
| -void ChildProcessSecurityPolicy::AddWorker(int child_id,
|
| - int main_render_process_id) {
|
| +void ChildProcessSecurityPolicyImpl::AddWorker(int child_id,
|
| + int main_render_process_id) {
|
| base::AutoLock lock(lock_);
|
| AddChild(child_id);
|
| worker_map_[child_id] = main_render_process_id;
|
| }
|
|
|
| -void ChildProcessSecurityPolicy::Remove(int child_id) {
|
| +void ChildProcessSecurityPolicyImpl::Remove(int child_id) {
|
| base::AutoLock lock(lock_);
|
| if (!security_state_.count(child_id))
|
| return; // May be called multiple times.
|
| @@ -213,7 +218,7 @@
|
| worker_map_.erase(child_id);
|
| }
|
|
|
| -void ChildProcessSecurityPolicy::RegisterWebSafeScheme(
|
| +void ChildProcessSecurityPolicyImpl::RegisterWebSafeScheme(
|
| const std::string& scheme) {
|
| base::AutoLock lock(lock_);
|
| DCHECK(web_safe_schemes_.count(scheme) == 0) << "Add schemes at most once.";
|
| @@ -222,13 +227,14 @@
|
| web_safe_schemes_.insert(scheme);
|
| }
|
|
|
| -bool ChildProcessSecurityPolicy::IsWebSafeScheme(const std::string& scheme) {
|
| +bool ChildProcessSecurityPolicyImpl::IsWebSafeScheme(
|
| + const std::string& scheme) {
|
| base::AutoLock lock(lock_);
|
|
|
| return (web_safe_schemes_.find(scheme) != web_safe_schemes_.end());
|
| }
|
|
|
| -void ChildProcessSecurityPolicy::RegisterPseudoScheme(
|
| +void ChildProcessSecurityPolicyImpl::RegisterPseudoScheme(
|
| const std::string& scheme) {
|
| base::AutoLock lock(lock_);
|
| DCHECK(pseudo_schemes_.count(scheme) == 0) << "Add schemes at most once.";
|
| @@ -238,24 +244,26 @@
|
| pseudo_schemes_.insert(scheme);
|
| }
|
|
|
| -bool ChildProcessSecurityPolicy::IsPseudoScheme(const std::string& scheme) {
|
| +bool ChildProcessSecurityPolicyImpl::IsPseudoScheme(
|
| + const std::string& scheme) {
|
| base::AutoLock lock(lock_);
|
|
|
| return (pseudo_schemes_.find(scheme) != pseudo_schemes_.end());
|
| }
|
|
|
| -void ChildProcessSecurityPolicy::RegisterDisabledSchemes(
|
| +void ChildProcessSecurityPolicyImpl::RegisterDisabledSchemes(
|
| const std::set<std::string>& schemes) {
|
| base::AutoLock lock(lock_);
|
| disabled_schemes_ = schemes;
|
| }
|
|
|
| -bool ChildProcessSecurityPolicy::IsDisabledScheme(const std::string& scheme) {
|
| +bool ChildProcessSecurityPolicyImpl::IsDisabledScheme(
|
| + const std::string& scheme) {
|
| base::AutoLock lock(lock_);
|
| return disabled_schemes_.find(scheme) != disabled_schemes_.end();
|
| }
|
|
|
| -void ChildProcessSecurityPolicy::GrantRequestURL(
|
| +void ChildProcessSecurityPolicyImpl::GrantRequestURL(
|
| int child_id, const GURL& url) {
|
|
|
| if (!url.is_valid())
|
| @@ -290,17 +298,17 @@
|
| }
|
| }
|
|
|
| -void ChildProcessSecurityPolicy::GrantReadFile(int child_id,
|
| - const FilePath& file) {
|
| +void ChildProcessSecurityPolicyImpl::GrantReadFile(int child_id,
|
| + const FilePath& file) {
|
| GrantPermissionsForFile(child_id, file, kReadFilePermissions);
|
| }
|
|
|
| -void ChildProcessSecurityPolicy::GrantReadDirectory(int child_id,
|
| - const FilePath& directory) {
|
| +void ChildProcessSecurityPolicyImpl::GrantReadDirectory(
|
| + int child_id, const FilePath& directory) {
|
| GrantPermissionsForFile(child_id, directory, kEnumerateDirectoryPermissions);
|
| }
|
|
|
| -void ChildProcessSecurityPolicy::GrantPermissionsForFile(
|
| +void ChildProcessSecurityPolicyImpl::GrantPermissionsForFile(
|
| int child_id, const FilePath& file, int permissions) {
|
| base::AutoLock lock(lock_);
|
|
|
| @@ -311,7 +319,7 @@
|
| state->second->GrantPermissionsForFile(file, permissions);
|
| }
|
|
|
| -void ChildProcessSecurityPolicy::RevokeAllPermissionsForFile(
|
| +void ChildProcessSecurityPolicyImpl::RevokeAllPermissionsForFile(
|
| int child_id, const FilePath& file) {
|
| base::AutoLock lock(lock_);
|
|
|
| @@ -322,7 +330,7 @@
|
| state->second->RevokeAllPermissionsForFile(file);
|
| }
|
|
|
| -void ChildProcessSecurityPolicy::GrantAccessFileSystem(
|
| +void ChildProcessSecurityPolicyImpl::GrantAccessFileSystem(
|
| int child_id, const std::string& filesystem_id) {
|
| base::AutoLock lock(lock_);
|
|
|
| @@ -333,8 +341,8 @@
|
| state->second->GrantAccessFileSystem(filesystem_id);
|
| }
|
|
|
| -void ChildProcessSecurityPolicy::GrantScheme(int child_id,
|
| - const std::string& scheme) {
|
| +void ChildProcessSecurityPolicyImpl::GrantScheme(int child_id,
|
| + const std::string& scheme) {
|
| base::AutoLock lock(lock_);
|
|
|
| SecurityStateMap::iterator state = security_state_.find(child_id);
|
| @@ -344,7 +352,7 @@
|
| state->second->GrantScheme(scheme);
|
| }
|
|
|
| -void ChildProcessSecurityPolicy::GrantWebUIBindings(int child_id) {
|
| +void ChildProcessSecurityPolicyImpl::GrantWebUIBindings(int child_id) {
|
| base::AutoLock lock(lock_);
|
|
|
| SecurityStateMap::iterator state = security_state_.find(child_id);
|
| @@ -360,7 +368,7 @@
|
| state->second->GrantScheme(chrome::kFileScheme);
|
| }
|
|
|
| -void ChildProcessSecurityPolicy::GrantReadRawCookies(int child_id) {
|
| +void ChildProcessSecurityPolicyImpl::GrantReadRawCookies(int child_id) {
|
| base::AutoLock lock(lock_);
|
|
|
| SecurityStateMap::iterator state = security_state_.find(child_id);
|
| @@ -370,7 +378,7 @@
|
| state->second->GrantReadRawCookies();
|
| }
|
|
|
| -void ChildProcessSecurityPolicy::RevokeReadRawCookies(int child_id) {
|
| +void ChildProcessSecurityPolicyImpl::RevokeReadRawCookies(int child_id) {
|
| base::AutoLock lock(lock_);
|
|
|
| SecurityStateMap::iterator state = security_state_.find(child_id);
|
| @@ -380,7 +388,7 @@
|
| state->second->RevokeReadRawCookies();
|
| }
|
|
|
| -bool ChildProcessSecurityPolicy::CanRequestURL(
|
| +bool ChildProcessSecurityPolicyImpl::CanRequestURL(
|
| int child_id, const GURL& url) {
|
| if (!url.is_valid())
|
| return false; // Can't request invalid URLs.
|
| @@ -432,19 +440,19 @@
|
| }
|
| }
|
|
|
| -bool ChildProcessSecurityPolicy::CanReadFile(int child_id,
|
| +bool ChildProcessSecurityPolicyImpl::CanReadFile(int child_id,
|
| const FilePath& file) {
|
| return HasPermissionsForFile(child_id, file, kReadFilePermissions);
|
| }
|
|
|
| -bool ChildProcessSecurityPolicy::CanReadDirectory(int child_id,
|
| - const FilePath& directory) {
|
| +bool ChildProcessSecurityPolicyImpl::CanReadDirectory(
|
| + int child_id, const FilePath& directory) {
|
| return HasPermissionsForFile(child_id,
|
| directory,
|
| kEnumerateDirectoryPermissions);
|
| }
|
|
|
| -bool ChildProcessSecurityPolicy::HasPermissionsForFile(
|
| +bool ChildProcessSecurityPolicyImpl::HasPermissionsForFile(
|
| int child_id, const FilePath& file, int permissions) {
|
| base::AutoLock lock(lock_);
|
| bool result = ChildProcessHasPermissionsForFile(child_id, file, permissions);
|
| @@ -461,7 +469,7 @@
|
| return result;
|
| }
|
|
|
| -bool ChildProcessSecurityPolicy::HasWebUIBindings(int child_id) {
|
| +bool ChildProcessSecurityPolicyImpl::HasWebUIBindings(int child_id) {
|
| base::AutoLock lock(lock_);
|
|
|
| SecurityStateMap::iterator state = security_state_.find(child_id);
|
| @@ -471,7 +479,7 @@
|
| return state->second->has_web_ui_bindings();
|
| }
|
|
|
| -bool ChildProcessSecurityPolicy::CanReadRawCookies(int child_id) {
|
| +bool ChildProcessSecurityPolicyImpl::CanReadRawCookies(int child_id) {
|
| base::AutoLock lock(lock_);
|
|
|
| SecurityStateMap::iterator state = security_state_.find(child_id);
|
| @@ -481,7 +489,7 @@
|
| return state->second->can_read_raw_cookies();
|
| }
|
|
|
| -void ChildProcessSecurityPolicy::AddChild(int child_id) {
|
| +void ChildProcessSecurityPolicyImpl::AddChild(int child_id) {
|
| if (security_state_.count(child_id) != 0) {
|
| NOTREACHED() << "Add child process at most once.";
|
| return;
|
| @@ -490,7 +498,7 @@
|
| security_state_[child_id] = new SecurityState();
|
| }
|
|
|
| -bool ChildProcessSecurityPolicy::ChildProcessHasPermissionsForFile(
|
| +bool ChildProcessSecurityPolicyImpl::ChildProcessHasPermissionsForFile(
|
| int child_id, const FilePath& file, int permissions) {
|
| SecurityStateMap::iterator state = security_state_.find(child_id);
|
| if (state == security_state_.end())
|
| @@ -498,8 +506,8 @@
|
| return state->second->HasPermissionsForFile(file, permissions);
|
| }
|
|
|
| -bool ChildProcessSecurityPolicy::CanUseCookiesForOrigin(int child_id,
|
| - const GURL& gurl) {
|
| +bool ChildProcessSecurityPolicyImpl::CanUseCookiesForOrigin(int child_id,
|
| + const GURL& gurl) {
|
| base::AutoLock lock(lock_);
|
| SecurityStateMap::iterator state = security_state_.find(child_id);
|
| if (state == security_state_.end())
|
| @@ -507,7 +515,8 @@
|
| return state->second->CanUseCookiesForOrigin(gurl);
|
| }
|
|
|
| -void ChildProcessSecurityPolicy::LockToOrigin(int child_id, const GURL& gurl) {
|
| +void ChildProcessSecurityPolicyImpl::LockToOrigin(int child_id,
|
| + const GURL& gurl) {
|
| // "gurl" can be currently empty in some cases, such as file://blah.
|
| DCHECK(SiteInstanceImpl::GetSiteForURL(NULL, gurl) == gurl);
|
| base::AutoLock lock(lock_);
|
|
|