diff options
author | dcheng@chromium.org <dcheng@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-11-02 23:49:02 +0000 |
---|---|---|
committer | dcheng@chromium.org <dcheng@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-11-02 23:49:02 +0000 |
commit | 34eec7ffe3c9c05f58069ea4afce7e2d89843ac9 (patch) | |
tree | 36ee8914ed9d7b8ee47ba813a1ac67a0caf8ec0e /chrome/browser/extensions/extension_info_map.cc | |
parent | d1ab97933260754f589f719dcb518525f39436a2 (diff) | |
download | chromium_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.cc | 22 |
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; +} |