Index: chrome/browser/extensions/extension_management.h |
diff --git a/chrome/browser/extensions/extension_management.h b/chrome/browser/extensions/extension_management.h |
index d7d1466409cb672c0b5f1f44f1f22a0e3853651e..5cea880d30fd5c16b47752ccb8ce8fa47a2ac94f 100644 |
--- a/chrome/browser/extensions/extension_management.h |
+++ b/chrome/browser/extensions/extension_management.h |
@@ -5,10 +5,7 @@ |
#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_MANAGEMENT_H_ |
#define CHROME_BROWSER_EXTENSIONS_EXTENSION_MANAGEMENT_H_ |
-#include <map> |
-#include <string> |
-#include <vector> |
- |
+#include "base/containers/scoped_ptr_hash_map.h" |
#include "base/macros.h" |
#include "base/memory/scoped_ptr.h" |
#include "base/memory/singleton.h" |
@@ -20,7 +17,6 @@ |
#include "extensions/browser/management_policy.h" |
#include "extensions/common/extension.h" |
#include "extensions/common/manifest.h" |
-#include "extensions/common/url_pattern_set.h" |
class GURL; |
class PrefService; |
@@ -31,6 +27,13 @@ class BrowserContext; |
namespace extensions { |
+namespace internal { |
+ |
+struct IndividualSettings; |
+struct GlobalSettings; |
+ |
+} // namespace internal |
+ |
// Tracks the management policies that affect extensions and provides interfaces |
// for observing and obtaining the global settings for all extensions, as well |
// as per-extension settings. |
@@ -41,7 +44,7 @@ class ExtensionManagement : public KeyedService { |
public: |
virtual ~Observer() {} |
- // Will be called when an extension management preference changes. |
+ // Called when the extension management settings change. |
virtual void OnExtensionManagementSettingsChanged() = 0; |
}; |
@@ -59,48 +62,6 @@ class ExtensionManagement : public KeyedService { |
INSTALLATION_RECOMMENDED, |
}; |
- // Class to hold extension management settings for one or a group of |
- // extensions. Settings can be applied to an individual extension identified |
- // by an ID, a group of extensions with specific |update_url| or all |
- // extensions at once. |
- struct IndividualSettings { |
- IndividualSettings(); |
- ~IndividualSettings(); |
- |
- void Reset(); |
- |
- // Extension installation mode. Setting this to INSTALLATION_FORCED or |
- // INSTALLATION_RECOMMENDED will enable extension auto-loading (only |
- // applicable to single extension), and in this case the |update_url| must |
- // be specified, containing the update URL for this extension. |
- // Note that |update_url| will be ignored for INSTALLATION_ALLOWED and |
- // INSTALLATION_BLOCKED installation mode. |
- // These settings will override the default settings, and unspecified |
- // settings will take value from default settings. |
- InstallationMode installation_mode; |
- std::string update_url; |
- }; |
- |
- // Global extension management settings, applicable to all extensions. |
- struct GlobalSettings { |
- GlobalSettings(); |
- ~GlobalSettings(); |
- |
- void Reset(); |
- |
- // Settings specifying which URLs are allowed to install extensions, will be |
- // enforced only if |has_restricted_install_sources| is set to true. |
- URLPatternSet install_sources; |
- bool has_restricted_install_sources; |
- |
- // Settings specifying all allowed app/extension types, will be enforced |
- // only of |has_restricted_allowed_types| is set to true. |
- std::vector<Manifest::Type> allowed_types; |
- bool has_restricted_allowed_types; |
- }; |
- |
- typedef std::map<ExtensionId, IndividualSettings> SettingsIdMap; |
- |
explicit ExtensionManagement(PrefService* pref_service); |
virtual ~ExtensionManagement(); |
@@ -109,12 +70,15 @@ class ExtensionManagement : public KeyedService { |
// Get the ManagementPolicy::Provider controlled by extension management |
// policy settings. |
- ManagementPolicy::Provider* GetProvider(); |
+ ManagementPolicy::Provider* GetProvider() const; |
// Checks if extensions are blacklisted by default, by policy. When true, |
// this means that even extensions without an ID should be blacklisted (e.g. |
// from the command line, or when loaded as an unpacked extension). |
- bool BlacklistedByDefault(); |
+ bool BlacklistedByDefault() const; |
+ |
+ // Returns installation mode for an extension. |
+ InstallationMode GetInstallationMode(const ExtensionId& id) const; |
// Returns the force install list, in format specified by |
// ExternalPolicyLoader::AddExtension(). |
@@ -124,16 +88,18 @@ class ExtensionManagement : public KeyedService { |
bool IsInstallationAllowed(const ExtensionId& id) const; |
// Returns true if an extension download should be allowed to proceed. |
- bool IsOffstoreInstallAllowed(const GURL& url, const GURL& referrer_url); |
- |
- // Helper function to read |settings_by_id_| with |id| as key. Returns a |
- // constant reference to default settings if |id| does not exist. |
- const IndividualSettings& ReadById(const ExtensionId& id) const; |
+ bool IsOffstoreInstallAllowed(const GURL& url, |
+ const GURL& referrer_url) const; |
- // Returns a constant reference to |global_settings_|. |
- const GlobalSettings& ReadGlobalSettings() const; |
+ // Returns true if an extension with manifest type |manifest_type| is |
+ // allowed to be installed. |
+ bool IsAllowedManifestType(Manifest::Type manifest_type) const; |
private: |
+ typedef base::ScopedPtrHashMap<ExtensionId, internal::IndividualSettings> |
+ SettingsIdMap; |
+ friend class ExtensionManagementServiceTest; |
+ |
// Load all extension management preferences from |pref_service|, and |
// refresh the settings. |
void Refresh(); |
@@ -149,10 +115,17 @@ class ExtensionManagement : public KeyedService { |
void OnExtensionPrefChanged(); |
void NotifyExtensionManagementPrefChanged(); |
+ // Helper function to read |settings_by_id_| with |id| as key. Returns a |
+ // constant reference to default settings if |id| does not exist. |
+ const internal::IndividualSettings* ReadById(const ExtensionId& id) const; |
+ |
+ // Returns a constant reference to |global_settings_|. |
+ const internal::GlobalSettings* ReadGlobalSettings() const; |
+ |
// Helper function to access |settings_by_id_| with |id| as key. |
// Adds a new IndividualSettings entry to |settings_by_id_| if none exists for |
// |id| yet. |
- IndividualSettings* AccessById(const ExtensionId& id); |
+ internal::IndividualSettings* AccessById(const ExtensionId& id); |
// A map containing all IndividualSettings applied to an individual extension |
// identified by extension ID. The extension ID is used as index key of the |
@@ -167,10 +140,10 @@ class ExtensionManagement : public KeyedService { |
// URL), all unspecified part will take value from |default_settings_|. |
// For all other extensions, all settings from |default_settings_| will be |
// enforced. |
- IndividualSettings default_settings_; |
+ scoped_ptr<internal::IndividualSettings> default_settings_; |
// Extension settings applicable to all extensions. |
- GlobalSettings global_settings_; |
+ scoped_ptr<internal::GlobalSettings> global_settings_; |
PrefService* pref_service_; |