Index: chrome/browser/extensions/extension_info_map.cc |
diff --git a/chrome/browser/extensions/extension_info_map.cc b/chrome/browser/extensions/extension_info_map.cc |
index 50d75d508f450f2ec12a0e452efda055414433c0..0b33389e240564b8fe0d96c1d39abe1f3c0926b1 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/browser/browser_thread.h" |
namespace { |
@@ -122,3 +124,23 @@ bool ExtensionInfoMap::IsExtensionInProcess( |
ExtensionProcessIDMap::value_type(extension_id, process_id)) != |
extension_process_ids_.end(); |
} |
+ |
+bool ExtensionInfoMap::SecurityOriginHasAPIPermission( |
+ const GURL& origin, int process_id, |
Aaron Boodman
2011/10/31 23:57:11
How about adding GetByOrigin to ExtensionSet? That
dcheng
2011/11/01 18:18:02
Before I update this, what would GetByOrigin retur
Aaron Boodman
2011/11/01 19:20:57
Yeah, I realized this won't work on the train ride
|
+ 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; |
+} |