Index: chrome/common/extensions/extension_permission_set.h |
diff --git a/chrome/common/extensions/extension_permission_set.h b/chrome/common/extensions/extension_permission_set.h |
index 4b99c7f87429020311d22e868f831a2a600882c2..06dff0754896955af70864009785ccaba4206146 100644 |
--- a/chrome/common/extensions/extension_permission_set.h |
+++ b/chrome/common/extensions/extension_permission_set.h |
@@ -19,6 +19,7 @@ |
#include "chrome/common/extensions/url_pattern_set.h" |
class Extension; |
+class ExtensionPermissionsInfo; |
// When prompting the user to install or approve permissions, we display |
// messages describing the effects of the permissions rather than listing the |
@@ -132,23 +133,40 @@ class ExtensionAPIPermission { |
enum Flag { |
kFlagNone = 0, |
- // Indicates if the permission can be accessed by hosted apps. |
- kFlagHostedApp = 1 << 0, |
- |
// Indicates if the permission implies full access (native code). |
- kFlagImpliesFullAccess = 1 << 1, |
+ kFlagImpliesFullAccess = 1 << 0, |
// Indicates if the permission implies full URL access. |
- kFlagImpliesFullURLAccess = 1 << 2, |
+ kFlagImpliesFullURLAccess = 1 << 1, |
// Indicates that the permission is private to COMPONENT extensions. |
- kFlagComponentOnly = 1 << 3, |
+ kFlagComponentOnly = 1 << 2, |
// Indicates that the permission supports the optional permissions API. |
- kFlagSupportsOptional = 1 << 4, |
+ kFlagSupportsOptional = 1 << 3, |
+ }; |
+ |
+ // Flags for specifying what extension types can use the permission. |
+ enum TypeRestriction { |
+ kTypeNone = 0, |
+ |
+ // Extension::TYPE_EXTENSION and Extension::TYPE_USER_SCRIPT |
+ kTypeExtension = 1 << 0, |
+ |
+ // Extension::TYPE_HOSTED_APP |
+ kTypeHostedApp = 1 << 1, |
+ |
+ // Extension::TYPE_PACKAGED_APP |
+ kTypePackagedApp = 1 << 2, |
+ |
+ // Extension::TYPE_PLATFORM_APP |
+ kTypePlatformApp = 1 << 3, |
- // Indicates whether the permission is available only to platform apps. |
- kFlagPlatformAppOnly = 1 << 5, |
+ // Supports all types. |
+ kTypeAll = (1 << 4) - 1, |
+ |
+ // Convenience flag for all types except hosted apps. |
+ kTypeDefault = kTypeAll - kTypeHostedApp, |
}; |
typedef std::set<ID> IDSet; |
@@ -160,6 +178,8 @@ class ExtensionAPIPermission { |
int flags() const { return flags_; } |
+ int type_restrictions() const { return type_restrictions_; } |
+ |
ID id() const { return id_; } |
// Returns the message id associated with this permission. |
@@ -180,42 +200,62 @@ class ExtensionAPIPermission { |
return (flags_ & kFlagImpliesFullURLAccess) != 0; |
} |
- // Returns true if this permission can be accessed by hosted apps. |
- bool is_hosted_app() const { |
- return (flags_ & kFlagHostedApp) != 0; |
- } |
- |
// Returns true if this permission can only be acquired by COMPONENT |
// extensions. |
bool is_component_only() const { |
return (flags_ & kFlagComponentOnly) != 0; |
} |
+ // Returns true if regular extensions can specify this permission. |
+ bool supports_extensions() const { |
+ return (type_restrictions_ & kTypeExtension) != 0; |
+ } |
+ |
+ // Returns true if hosted apps can specify this permission. |
+ bool supports_hosted_apps() const { |
+ return (type_restrictions_ & kTypeHostedApp) != 0; |
+ } |
+ |
+ // Returns true if packaged apps can specify this permission. |
+ bool supports_packaged_apps() const { |
+ return (type_restrictions_ & kTypePackagedApp) != 0; |
+ } |
+ |
+ // Returns true if platform apps can specify this permission. |
+ bool supports_platform_apps() const { |
+ return (type_restrictions_ & kTypePlatformApp) != 0; |
+ } |
+ |
// Returns true if this permission can be added and removed via the |
// optional permissions extension API. |
bool supports_optional() const { |
return (flags_ & kFlagSupportsOptional) != 0; |
} |
- // Returns true if this permission can only be acquired by platform apps. |
- bool is_platform_app_only() const { |
- return (flags_ & kFlagPlatformAppOnly) != 0; |
+ // Returns true if this permissions supports the specified |type|. |
+ bool supports_type(TypeRestriction type) const { |
+ return (type_restrictions_ & type) != 0; |
} |
private: |
// Instances should only be constructed from within ExtensionPermissionsInfo. |
friend class ExtensionPermissionsInfo; |
+ // Register ALL the permissions! |
+ static void RegisterAllPermissions(ExtensionPermissionsInfo* info); |
+ |
explicit ExtensionAPIPermission( |
ID id, |
const char* name, |
int l10n_message_id, |
ExtensionPermissionMessage::ID message_id, |
- int flags); |
+ int flags, |
+ int type_restrictions); |
ID id_; |
const char* name_; |
int flags_; |
+ int type_restrictions_; |
int l10n_message_id_; |
ExtensionPermissionMessage::ID message_id_; |
}; |
@@ -243,15 +283,12 @@ class ExtensionPermissionsInfo { |
ExtensionAPIPermissionSet GetAllByName( |
const std::set<std::string>& permission_names); |
- // Gets the total number of API permissions available to hosted apps. |
- size_t get_hosted_app_permission_count() { |
- return hosted_app_permission_count_; |
- } |
- |
// Gets the total number of API permissions. |
size_t get_permission_count() { return permission_count_; } |
private: |
+ friend class ExtensionAPIPermission; |
+ |
~ExtensionPermissionsInfo(); |
ExtensionPermissionsInfo(); |
@@ -264,7 +301,8 @@ class ExtensionPermissionsInfo { |
const char* name, |
int l10n_message_id, |
ExtensionPermissionMessage::ID message_id, |
- int flags); |
+ int flags, |
+ int type_restrictions); |
// Maps permission ids to permissions. |
typedef std::map<ExtensionAPIPermission::ID, ExtensionAPIPermission*> IDMap; |
@@ -372,10 +410,6 @@ class ExtensionPermissionSet |
// restricted to internal extensions. |
bool HasPrivatePermissions() const; |
- // Returns true if this permission set includes permissions that are |
- // restricted to platform apps. |
- bool HasPlatformAppPermissions() const; |
- |
// Returns true if |permissions| has a greater privilege level than this |
// permission set (e.g., this permission set has less permissions). |
bool HasLessPrivilegesThan(const ExtensionPermissionSet* permissions) const; |