Index: chrome/common/extensions/manifest.h |
diff --git a/chrome/common/extensions/manifest.h b/chrome/common/extensions/manifest.h |
index 7472c2944814c645671217bcc77ac22c07b58605..3d892cb360a38eaeff5428c2866e74a636f93050 100644 |
--- a/chrome/common/extensions/manifest.h |
+++ b/chrome/common/extensions/manifest.h |
@@ -12,27 +12,89 @@ |
#include "base/memory/scoped_ptr.h" |
#include "base/string16.h" |
#include "base/values.h" |
-#include "chrome/common/extensions/extension.h" |
namespace extensions { |
+struct InstallWarning; |
// Wraps the DictionaryValue form of extension's manifest. Enforces access to |
// properties of the manifest using ManifestFeatureProvider. |
class Manifest { |
public: |
- Manifest(Extension::Location location, scoped_ptr<DictionaryValue> value); |
+ // What an extension was loaded from. |
+ // NOTE: These values are stored as integers in the preferences and used |
+ // in histograms so don't remove or reorder existing items. Just append |
+ // to the end. |
+ enum Location { |
+ INVALID_LOCATION, |
+ INTERNAL, // A crx file from the internal Extensions directory. |
+ EXTERNAL_PREF, // A crx file from an external directory (via prefs). |
+ EXTERNAL_REGISTRY, // A crx file from an external directory (via eg the |
+ // registry on Windows). |
+ LOAD, // --load-extension. |
+ COMPONENT, // An integral component of Chrome itself, which |
+ // happens to be implemented as an extension. We don't |
+ // show these in the management UI. |
+ EXTERNAL_PREF_DOWNLOAD, // A crx file from an external directory (via |
+ // prefs), installed from an update URL. |
+ EXTERNAL_POLICY_DOWNLOAD, // A crx file from an external directory (via |
+ // admin policies), installed from an update URL. |
+ |
+ NUM_LOCATIONS |
+ }; |
+ |
+ // Do not change the order of entries or remove entries in this list |
+ // as this is used in UMA_HISTOGRAM_ENUMERATIONs about extensions. |
+ enum Type { |
+ TYPE_UNKNOWN = 0, |
+ TYPE_EXTENSION, |
+ TYPE_THEME, |
+ TYPE_USER_SCRIPT, |
+ TYPE_HOSTED_APP, |
+ // This is marked legacy because platform apps are preferred. For |
+ // backwards compatibility, we can't remove support for packaged apps |
+ TYPE_LEGACY_PACKAGED_APP, |
+ TYPE_PLATFORM_APP |
+ }; |
+ |
+ // Given two install sources, return the one which should take priority |
+ // over the other. If an extension is installed from two sources A and B, |
+ // its install source should be set to GetHigherPriorityLocation(A, B). |
+ static Location GetHigherPriorityLocation(Location loc1, Location loc2); |
+ |
+ // Whether the |location| is external or not. |
+ static inline bool IsExternalLocation(Location location) { |
+ return location == EXTERNAL_PREF || |
+ location == EXTERNAL_REGISTRY || |
+ location == EXTERNAL_PREF_DOWNLOAD || |
+ location == EXTERNAL_POLICY_DOWNLOAD; |
+ } |
+ |
+ // Whether extensions with |location| are auto-updatable or not. |
+ static inline bool IsAutoUpdateableLocation(Location location) { |
+ // Only internal and external extensions can be autoupdated. |
+ return location == INTERNAL || |
+ IsExternalLocation(location); |
+ } |
+ |
+ // Unpacked extensions start off with file access since they are a developer |
+ // feature. |
+ static inline bool ShouldAlwaysAllowFileAccess(Location location) { |
+ return location == LOAD; |
+ } |
+ |
+ Manifest(Location location, scoped_ptr<DictionaryValue> value); |
virtual ~Manifest(); |
const std::string& extension_id() const { return extension_id_; } |
void set_extension_id(const std::string& id) { extension_id_ = id; } |
- Extension::Location location() const { return location_; } |
+ Location location() const { return location_; } |
// |error| will be non-empty if the manifest is malformed. |warnings| will |
// be populated if there are keys in the manifest that cannot be specified by |
// the extension type. |
void ValidateManifest(std::string* error, |
- Extension::InstallWarningVector* warnings) const; |
+ std::vector<InstallWarning>* warnings) const; |
// The version of this extension's manifest. We increase the manifest |
// version when making breaking changes to the extension system. If the |
@@ -41,15 +103,15 @@ class Manifest { |
int GetManifestVersion() const; |
// Returns the manifest type. |
- Extension::Type type() const { return type_; } |
+ Type type() const { return type_; } |
- bool is_theme() const { return type_ == Extension::TYPE_THEME; } |
- bool is_platform_app() const { return type_ == Extension::TYPE_PLATFORM_APP; } |
- bool is_hosted_app() const { return type_ == Extension::TYPE_HOSTED_APP; } |
+ bool is_theme() const { return type_ == TYPE_THEME; } |
+ bool is_platform_app() const { return type_ == TYPE_PLATFORM_APP; } |
+ bool is_hosted_app() const { return type_ == TYPE_HOSTED_APP; } |
bool is_legacy_packaged_app() const { |
- return type_ == Extension::TYPE_LEGACY_PACKAGED_APP; |
+ return type_ == TYPE_LEGACY_PACKAGED_APP; |
} |
- bool is_extension() const { return type_ == Extension::TYPE_EXTENSION; } |
+ bool is_extension() const { return type_ == TYPE_EXTENSION; } |
// These access the wrapped manifest value, returning false when the property |
// does not exist or if the manifest type can't access it. |
@@ -91,12 +153,12 @@ class Manifest { |
std::string extension_id_; |
// The location the extension was loaded from. |
- Extension::Location location_; |
+ Location location_; |
// The underlying dictionary representation of the manifest. |
scoped_ptr<base::DictionaryValue> value_; |
- Extension::Type type_; |
+ Type type_; |
DISALLOW_COPY_AND_ASSIGN(Manifest); |
}; |