diff options
author | rafaelw@chromium.org <rafaelw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-31 02:48:12 +0000 |
---|---|---|
committer | rafaelw@chromium.org <rafaelw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-31 02:48:12 +0000 |
commit | 583d45c199e5af7a53bb0b15e5ef0e2d6f5ead90 (patch) | |
tree | 516825f2a3da3f33527e1e145af4c020c5d13bc2 /chrome/common/extensions | |
parent | 3ad594ae4c38b057303eeb90d7e601a99d38a7c0 (diff) | |
download | chromium_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.cc | 47 | ||||
-rw-r--r-- | chrome/common/extensions/extension.h | 6 |
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 |