summaryrefslogtreecommitdiffstats
path: root/chrome/common/extensions
diff options
context:
space:
mode:
authorrafaelw@chromium.org <rafaelw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-31 02:48:12 +0000
committerrafaelw@chromium.org <rafaelw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-31 02:48:12 +0000
commit583d45c199e5af7a53bb0b15e5ef0e2d6f5ead90 (patch)
tree516825f2a3da3f33527e1e145af4c020c5d13bc2 /chrome/common/extensions
parent3ad594ae4c38b057303eeb90d7e601a99d38a7c0 (diff)
downloadchromium_src-583d45c199e5af7a53bb0b15e5ef0e2d6f5ead90.zip
chromium_src-583d45c199e5af7a53bb0b15e5ef0e2d6f5ead90.tar.gz
chromium_src-583d45c199e5af7a53bb0b15e5ef0e2d6f5ead90.tar.bz2
Reland r57788 - Expose Extension Bindings to Component Applications
This patch allows component (built-in) extension apps to have extension api bindings. Note that this patch adds browser-side api permission checking for extension requests. This is step two along the path to exposing an extension management api to the gallery (webstore). Original Review: http://codereview.chromium.org/3163044 BUG=27431 TBR=mpcomplete Review URL: http://codereview.chromium.org/3263007 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@57941 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/common/extensions')
-rw-r--r--chrome/common/extensions/extension.cc47
-rw-r--r--chrome/common/extensions/extension.h6
2 files changed, 51 insertions, 2 deletions
diff --git a/chrome/common/extensions/extension.cc b/chrome/common/extensions/extension.cc
index 9c8a428..9c4366e 100644
--- a/chrome/common/extensions/extension.cc
+++ b/chrome/common/extensions/extension.cc
@@ -93,6 +93,29 @@ bool IsBaseCrxKey(const std::string& key) {
return false;
}
+// Names of API modules that do not require a permission.
+const char kBrowserActionModuleName[] = "browserAction";
+const char kBrowserActionsModuleName[] = "browserActions";
+const char kDevToolsModuleName[] = "devtools";
+const char kExtensionModuleName[] = "extension";
+const char kI18NModuleName[] = "i18n";
+const char kPageActionModuleName[] = "pageAction";
+const char kPageActionsModuleName[] = "pageActions";
+const char kTestModuleName[] = "test";
+
+const char* kNonPermissionModuleNames[] = {
+ kBrowserActionModuleName,
+ kBrowserActionsModuleName,
+ kDevToolsModuleName,
+ kExtensionModuleName,
+ kI18NModuleName,
+ kPageActionModuleName,
+ kPageActionsModuleName,
+ kTestModuleName
+};
+const size_t kNumNonPermissionModuleNames =
+ arraysize(kNonPermissionModuleNames);
+
} // namespace
const FilePath::CharType Extension::kManifestFilename[] =
@@ -123,6 +146,7 @@ const int Extension::kIconSizes[] = {
const int Extension::kPageActionIconMaxSize = 19;
const int Extension::kBrowserActionIconMaxSize = 19;
+// Explicit permissions -- permission declaration required.
const char* Extension::kBackgroundPermission = "background";
const char* Extension::kContextMenusPermission = "contextMenus";
const char* Extension::kBookmarkPermission = "bookmarks";
@@ -1741,6 +1765,29 @@ bool Extension::CanAccessURL(const URLPattern pattern) const {
return true;
}
+// static.
+bool Extension::HasApiPermission(
+ const std::vector<std::string>& api_permissions,
+ const std::string& permission) {
+ std::string permission_name = permission;
+
+ // windows and tabs are the same permission.
+ if (permission_name == "windows")
+ permission_name = Extension::kTabPermission;
+
+ if (std::find(api_permissions.begin(), api_permissions.end(),
+ permission_name) != api_permissions.end())
+ return true;
+
+ for (size_t i = 0; i < kNumNonPermissionModuleNames; ++i) {
+ if (permission_name == kNonPermissionModuleNames[i]) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
bool Extension::HasHostPermission(const GURL& url) const {
for (URLPatternList::const_iterator host = host_permissions_.begin();
host != host_permissions_.end(); ++host) {
diff --git a/chrome/common/extensions/extension.h b/chrome/common/extensions/extension.h
index 9f2dc9b..66e12f2 100644
--- a/chrome/common/extensions/extension.h
+++ b/chrome/common/extensions/extension.h
@@ -278,9 +278,11 @@ class Extension {
}
// Returns true if the extension has the specified API permission.
+ static bool HasApiPermission(const std::vector<std::string>& api_permissions,
+ const std::string& permission);
+
bool HasApiPermission(const std::string& permission) const {
- return std::find(api_permissions_.begin(), api_permissions_.end(),
- permission) != api_permissions_.end();
+ return HasApiPermission(this->api_permissions(), permission);
}
// Returns the set of hosts that the extension effectively has access to. This