Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(933)

Unified Diff: chrome/common/extensions/extension.h

Issue 7432006: Add an experimental permissions API for extensions. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix clang Created 9 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/common/extensions/docs/samples.json ('k') | chrome/common/extensions/extension.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/common/extensions/extension.h
diff --git a/chrome/common/extensions/extension.h b/chrome/common/extensions/extension.h
index a2ee0e72b87bdaf64d180ee721ba41fcffb99fb7..e46cba12900b5a5b17993deb43983e434283259e 100644
--- a/chrome/common/extensions/extension.h
+++ b/chrome/common/extensions/extension.h
@@ -16,6 +16,7 @@
#include "base/memory/linked_ptr.h"
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
+#include "base/synchronization/lock.h"
#include "chrome/common/extensions/extension_constants.h"
#include "chrome/common/extensions/extension_icon_set.h"
#include "chrome/common/extensions/extension_permission_set.h"
@@ -209,15 +210,6 @@ class Extension : public base::RefCountedThreadSafe<Extension> {
// its install source should be set to GetHigherPriorityLocation(A, B).
static Location GetHigherPriorityLocation(Location loc1, Location loc2);
- // Returns the full list of permission messages that this extension
- // should display at install time.
- ExtensionPermissionMessages GetPermissionMessages() const;
-
- // Returns the full list of permission messages that this extension
- // should display at install time. The messages are returned as strings
- // for convenience.
- std::vector<string16> GetPermissionMessageStrings() const;
-
// Icon sizes used by the extension system.
static const int kIconSizes[];
@@ -375,11 +367,25 @@ class Extension : public base::RefCountedThreadSafe<Extension> {
static void SetScriptingWhitelist(const ScriptingWhitelist& whitelist);
static const ScriptingWhitelist* GetScriptingWhitelist();
+ // Parses the host and api permissions from the specified permission |key|
+ // in the manifest |source|.
+ bool ParsePermissions(const base::DictionaryValue* source,
+ const char* key,
+ int flags,
+ std::string* error,
+ ExtensionAPIPermissionSet* api_permissions,
+ URLPatternSet* host_permissions);
+
bool HasAPIPermission(ExtensionAPIPermission::ID permission) const;
bool HasAPIPermission(const std::string& function_name) const;
const URLPatternSet& GetEffectiveHostPermissions() const;
+ // Returns true if the extension can silently increase its permission level.
+ // Extensions that can silently increase permissions are installed through
+ // mechanisms that are implicitly trusted.
+ bool CanSilentlyIncreasePermissions() const;
+
// Whether or not the extension is allowed permission for a URL pattern from
// the manifest. http, https, and chrome://favicon/ is allowed for all
// extensions, while component extensions are allowed access to
@@ -400,6 +406,21 @@ class Extension : public base::RefCountedThreadSafe<Extension> {
// having an NPAPI plugin).
bool HasFullPermissions() const;
+ // Returns the full list of permission messages that this extension
+ // should display at install time.
+ ExtensionPermissionMessages GetPermissionMessages() const;
+
+ // Returns the full list of permission messages that this extension
+ // should display at install time. The messages are returned as strings
+ // for convenience.
+ std::vector<string16> GetPermissionMessageStrings() const;
+
+ // Sets the active |permissions|.
+ void SetActivePermissions(const ExtensionPermissionSet* permissions) const;
+
+ // Gets the extension's active permission set.
+ scoped_refptr<const ExtensionPermissionSet> GetActivePermissions() const;
+
// Whether context menu should be shown for page and browser actions.
bool ShowConfigureContextMenus() const;
@@ -494,8 +515,11 @@ class Extension : public base::RefCountedThreadSafe<Extension> {
const GURL& options_url() const { return options_url_; }
const GURL& devtools_url() const { return devtools_url_; }
const std::vector<GURL>& toolstrips() const { return toolstrips_; }
- const ExtensionPermissionSet* permission_set() const {
- return permission_set_.get();
+ const ExtensionPermissionSet* optional_permission_set() const {
+ return optional_permission_set_.get();
+ }
+ const ExtensionPermissionSet* required_permission_set() const {
+ return required_permission_set_.get();
}
const GURL& update_url() const { return update_url_; }
const ExtensionIconSet& icons() const { return icons_; }
@@ -551,6 +575,20 @@ class Extension : public base::RefCountedThreadSafe<Extension> {
typedef std::pair<FilePath, std::string> ImageCacheKey;
typedef std::map<ImageCacheKey, SkBitmap> ImageCache;
+ class RuntimeData {
+ public:
+ RuntimeData();
+ explicit RuntimeData(const ExtensionPermissionSet* active);
+ ~RuntimeData();
+
+ void SetActivePermissions(const ExtensionPermissionSet* active);
+ scoped_refptr<const ExtensionPermissionSet> GetActivePermissions() const;
+
+ private:
+ friend class base::RefCountedThreadSafe<RuntimeData>;
+ scoped_refptr<const ExtensionPermissionSet> active_permissions_;
+ };
+
// Normalize the path for use by the extension. On Windows, this will make
// sure the drive letter is uppercase.
static FilePath MaybeNormalizePath(const FilePath& path);
@@ -673,8 +711,15 @@ class Extension : public base::RefCountedThreadSafe<Extension> {
// Defines the set of URLs in the extension's web content.
URLPatternSet extent_;
- // The set of permissions that the extension effectively has access to.
- scoped_ptr<ExtensionPermissionSet> permission_set_;
+ // The extension runtime data.
+ mutable base::Lock runtime_data_lock_;
+ mutable RuntimeData runtime_data_;
+
+ // The set of permissions the extension can request at runtime.
+ scoped_refptr<const ExtensionPermissionSet> optional_permission_set_;
+
+ // The extension's required / default set of permissions.
+ scoped_refptr<const ExtensionPermissionSet> required_permission_set_;
// The icons for the extension.
ExtensionIconSet icons_;
@@ -870,4 +915,27 @@ struct UnloadedExtensionInfo {
UnloadedExtensionInfo(const Extension* extension, Reason reason);
};
+// The details sent for EXTENSION_PERMISSIONS_UPDATED notifications.
+struct UpdatedExtensionPermissionsInfo {
+ enum Reason {
+ ADDED, // The permissions were added to the extension.
+ REMOVED, // The permissions were removed from the extension.
+ };
+
+ Reason reason;
+
+ // The extension who's permissions have changed.
+ const Extension* extension;
+
+ // The permissions that have changed. For Reason::ADDED, this would contain
+ // only the permissions that have added, and for Reason::REMOVED, this would
+ // only contain the removed permissions.
+ const ExtensionPermissionSet* permissions;
+
+ UpdatedExtensionPermissionsInfo(
+ const Extension* extension,
+ const ExtensionPermissionSet* permissions,
+ Reason reason);
+};
+
#endif // CHROME_COMMON_EXTENSIONS_EXTENSION_H_
« no previous file with comments | « chrome/common/extensions/docs/samples.json ('k') | chrome/common/extensions/extension.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698