summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions/extension_info_map.cc
diff options
context:
space:
mode:
authordcheng@chromium.org <dcheng@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-11-02 23:49:02 +0000
committerdcheng@chromium.org <dcheng@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-11-02 23:49:02 +0000
commit34eec7ffe3c9c05f58069ea4afce7e2d89843ac9 (patch)
tree36ee8914ed9d7b8ee47ba813a1ac67a0caf8ec0e /chrome/browser/extensions/extension_info_map.cc
parentd1ab97933260754f589f719dcb518525f39436a2 (diff)
downloadchromium_src-34eec7ffe3c9c05f58069ea4afce7e2d89843ac9.zip
chromium_src-34eec7ffe3c9c05f58069ea4afce7e2d89843ac9.tar.gz
chromium_src-34eec7ffe3c9c05f58069ea4afce7e2d89843ac9.tar.bz2
Ignore paths when matching patterns for extensions.
BUG=94399 TEST=lots Review URL: http://codereview.chromium.org/8312005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@108358 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/extensions/extension_info_map.cc')
-rw-r--r--chrome/browser/extensions/extension_info_map.cc22
1 files changed, 22 insertions, 0 deletions
diff --git a/chrome/browser/extensions/extension_info_map.cc b/chrome/browser/extensions/extension_info_map.cc
index d2126c5..ed3fd7d 100644
--- a/chrome/browser/extensions/extension_info_map.cc
+++ b/chrome/browser/extensions/extension_info_map.cc
@@ -5,6 +5,8 @@
#include "chrome/browser/extensions/extension_info_map.h"
#include "chrome/common/extensions/extension.h"
+#include "chrome/common/extensions/extension_set.h"
+#include "chrome/common/url_constants.h"
#include "content/public/browser/browser_thread.h"
using content::BrowserThread;
@@ -124,3 +126,23 @@ bool ExtensionInfoMap::IsExtensionInProcess(
ExtensionProcessIDMap::value_type(extension_id, process_id)) !=
extension_process_ids_.end();
}
+
+bool ExtensionInfoMap::SecurityOriginHasAPIPermission(
+ const GURL& origin, int process_id,
+ ExtensionAPIPermission::ID permission) const {
+ if (origin.SchemeIs(chrome::kExtensionScheme)) {
+ const std::string& id = origin.host();
+ return extensions_.GetByID(id)->HasAPIPermission(permission) &&
+ IsExtensionInProcess(id, process_id);
+ }
+
+ ExtensionSet::ExtensionMap::const_iterator i = extensions_.begin();
+ for (; i != extensions_.end(); ++i) {
+ if (i->second->web_extent().MatchesSecurityOrigin(origin) &&
+ IsExtensionInProcess(i->first, process_id) &&
+ i->second->HasAPIPermission(permission)) {
+ return true;
+ }
+ }
+ return false;
+}