summaryrefslogtreecommitdiffstats
path: root/extensions/browser/process_map.cc
diff options
context:
space:
mode:
authorkalman@chromium.org <kalman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-08-07 07:27:19 +0000
committerkalman@chromium.org <kalman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-08-07 07:27:19 +0000
commit0239bc50ab72bc787ea41a8f1087480b1bffd0c5 (patch)
treeb63840058a98d2adbed751a86155dc2dbb79db1d /extensions/browser/process_map.cc
parentbe7407da49624f375478e953c4644e6c0cb6f656 (diff)
downloadchromium_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.cc33
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