diff options
author | kalman@chromium.org <kalman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-08-07 07:27:19 +0000 |
---|---|---|
committer | kalman@chromium.org <kalman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-08-07 07:27:19 +0000 |
commit | 0239bc50ab72bc787ea41a8f1087480b1bffd0c5 (patch) | |
tree | b63840058a98d2adbed751a86155dc2dbb79db1d /extensions/browser/process_map.cc | |
parent | be7407da49624f375478e953c4644e6c0cb6f656 (diff) | |
download | chromium_src-0239bc50ab72bc787ea41a8f1087480b1bffd0c5.zip chromium_src-0239bc50ab72bc787ea41a8f1087480b1bffd0c5.tar.gz chromium_src-0239bc50ab72bc787ea41a8f1087480b1bffd0c5.tar.bz2 |
Change the default implementation of ExtensionFunction::HasPermission to use
the real context type, not assume it's BLESSED_CONTEXT_TYPE (which has always
been wrong). This cleans up some other code.
BUG=391944
R=rockot@chromium.org
Review URL: https://codereview.chromium.org/427983003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@287987 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'extensions/browser/process_map.cc')
-rw-r--r-- | extensions/browser/process_map.cc | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/extensions/browser/process_map.cc b/extensions/browser/process_map.cc index 3651f8a..12fb538 100644 --- a/extensions/browser/process_map.cc +++ b/extensions/browser/process_map.cc @@ -4,7 +4,11 @@ #include "extensions/browser/process_map.h" +#include "content/public/browser/child_process_security_policy.h" +#include "extensions/browser/extension_registry.h" #include "extensions/browser/process_map_factory.h" +#include "extensions/common/extension.h" +#include "extensions/common/features/feature.h" namespace extensions { @@ -119,4 +123,33 @@ std::set<std::string> ProcessMap::GetExtensionsInProcess(int process_id) const { return result; } +Feature::Context ProcessMap::GuessContextType(const Extension* extension, + int process_id) const { + // WARNING: This logic must match Dispatcher::ClassifyJavaScriptContext, as + // much as possible. + + if (content::ChildProcessSecurityPolicy::GetInstance()->HasWebUIBindings( + process_id)) { + return Feature::WEBUI_CONTEXT; + } + + if (!extension) { + return Feature::WEB_PAGE_CONTEXT; + } + + if (!Contains(extension->id(), process_id)) { + // This could equally be UNBLESSED_EXTENSION_CONTEXT, but we don't record + // which processes have extension frames in them. + // TODO(kalman): Investigate this. + return Feature::CONTENT_SCRIPT_CONTEXT; + } + + if (extension->is_hosted_app() && + extension->location() != Manifest::COMPONENT) { + return Feature::BLESSED_WEB_PAGE_CONTEXT; + } + + return Feature::BLESSED_EXTENSION_CONTEXT; +} + } // namespace extensions |