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

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

Issue 12093036: Move Extension Location and Type enums to Manifest, and move InstallWarning to its own file. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 11 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/features/simple_feature_unittest.cc ('k') | chrome/common/extensions/manifest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
};
« no previous file with comments | « chrome/common/extensions/features/simple_feature_unittest.cc ('k') | chrome/common/extensions/manifest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698