| Index: chrome/browser/child_process_security_policy.cc
|
| ===================================================================
|
| --- chrome/browser/child_process_security_policy.cc (revision 17323)
|
| +++ chrome/browser/child_process_security_policy.cc (working copy)
|
| @@ -8,6 +8,7 @@
|
| #include "base/logging.h"
|
| #include "base/stl_util-inl.h"
|
| #include "base/string_util.h"
|
| +#include "chrome/common/bindings_policy.h"
|
| #include "chrome/common/url_constants.h"
|
| #include "googleurl/src/gurl.h"
|
| #include "net/url_request/url_request.h"
|
| @@ -16,7 +17,7 @@
|
| // information.
|
| class ChildProcessSecurityPolicy::SecurityState {
|
| public:
|
| - SecurityState() : has_dom_ui_bindings_(false) { }
|
| + SecurityState() : enabled_bindings_(0) { }
|
| ~SecurityState() {
|
| scheme_policy_.clear();
|
| }
|
| @@ -36,8 +37,8 @@
|
| uploadable_files_.insert(file);
|
| }
|
|
|
| - void GrantDOMUIBindings() {
|
| - has_dom_ui_bindings_ = true;
|
| + void GrantBindings(int bindings) {
|
| + enabled_bindings_ |= bindings;
|
| }
|
|
|
| // Determine whether permission has been granted to request url.
|
| @@ -57,8 +58,14 @@
|
| return uploadable_files_.find(file) != uploadable_files_.end();
|
| }
|
|
|
| - bool has_dom_ui_bindings() const { return has_dom_ui_bindings_; }
|
| + bool has_dom_ui_bindings() const {
|
| + return BindingsPolicy::is_dom_ui_enabled(enabled_bindings_);
|
| + }
|
|
|
| + bool has_extension_bindings() const {
|
| + return BindingsPolicy::is_extension_enabled(enabled_bindings_);
|
| + }
|
| +
|
| private:
|
| typedef std::map<std::string, bool> SchemeMap;
|
| typedef std::set<FilePath> FileSet;
|
| @@ -73,7 +80,7 @@
|
| // The set of files the renderer is permited to upload to the web.
|
| FileSet uploadable_files_;
|
|
|
| - bool has_dom_ui_bindings_;
|
| + int enabled_bindings_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(SecurityState);
|
| };
|
| @@ -218,7 +225,7 @@
|
| if (state == security_state_.end())
|
| return;
|
|
|
| - state->second->GrantDOMUIBindings();
|
| + state->second->GrantBindings(BindingsPolicy::DOM_UI);
|
|
|
| // DOM UI bindings need the ability to request chrome: URLs.
|
| state->second->GrantScheme(chrome::kChromeUIScheme);
|
| @@ -227,6 +234,16 @@
|
| state->second->GrantScheme(chrome::kFileScheme);
|
| }
|
|
|
| +void ChildProcessSecurityPolicy::GrantExtensionBindings(int renderer_id) {
|
| + AutoLock lock(lock_);
|
| +
|
| + SecurityStateMap::iterator state = security_state_.find(renderer_id);
|
| + if (state == security_state_.end())
|
| + return;
|
| +
|
| + state->second->GrantBindings(BindingsPolicy::EXTENSION);
|
| +}
|
| +
|
| bool ChildProcessSecurityPolicy::CanRequestURL(int renderer_id, const GURL& url) {
|
| if (!url.is_valid())
|
| return false; // Can't request invalid URLs.
|
| @@ -288,3 +305,13 @@
|
|
|
| return state->second->has_dom_ui_bindings();
|
| }
|
| +
|
| +bool ChildProcessSecurityPolicy::HasExtensionBindings(int renderer_id) {
|
| + AutoLock lock(lock_);
|
| +
|
| + SecurityStateMap::iterator state = security_state_.find(renderer_id);
|
| + if (state == security_state_.end())
|
| + return false;
|
| +
|
| + return state->second->has_extension_bindings();
|
| +}
|
|
|