summaryrefslogtreecommitdiffstats
path: root/chrome/browser/policy
diff options
context:
space:
mode:
authorjoaodasilva@chromium.org <joaodasilva@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-11-05 18:07:42 +0000
committerjoaodasilva@chromium.org <joaodasilva@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-11-05 18:07:42 +0000
commit8720d883bb35e1adec8baefca284f4ad406235d9 (patch)
tree541602c5c6361c50ed50b6defde79c79ae261f59 /chrome/browser/policy
parentfb1f9a26f9138e0f2d23e4fd1c4bd9258f5eacc1 (diff)
downloadchromium_src-8720d883bb35e1adec8baefca284f4ad406235d9.zip
chromium_src-8720d883bb35e1adec8baefca284f4ad406235d9.tar.gz
chromium_src-8720d883bb35e1adec8baefca284f4ad406235d9.tar.bz2
Introduced the ConfigurationPolicyHandlerList class, and refactored some of
the policy code to use it. Review URL: http://codereview.chromium.org/8479003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@108795 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/policy')
-rw-r--r--chrome/browser/policy/browser_policy_connector.cc33
-rw-r--r--chrome/browser/policy/browser_policy_connector.h16
-rw-r--r--chrome/browser/policy/configuration_policy_handler.cc468
-rw-r--r--chrome/browser/policy/configuration_policy_handler.h249
-rw-r--r--chrome/browser/policy/configuration_policy_handler_list.cc249
-rw-r--r--chrome/browser/policy/configuration_policy_handler_list.h46
-rw-r--r--chrome/browser/policy/configuration_policy_pref_store.cc6
-rw-r--r--chrome/browser/policy/configuration_policy_reader.cc5
8 files changed, 573 insertions, 499 deletions
diff --git a/chrome/browser/policy/browser_policy_connector.cc b/chrome/browser/policy/browser_policy_connector.cc
index 9c04330..c6144dd 100644
--- a/chrome/browser/policy/browser_policy_connector.cc
+++ b/chrome/browser/policy/browser_policy_connector.cc
@@ -8,7 +8,6 @@
#include "base/command_line.h"
#include "base/file_path.h"
#include "base/path_service.h"
-#include "base/stl_util.h"
#include "chrome/browser/net/gaia/token_service.h"
#include "chrome/browser/policy/cloud_policy_provider.h"
#include "chrome/browser/policy/cloud_policy_provider_impl.h"
@@ -16,11 +15,8 @@
#include "chrome/browser/policy/configuration_policy_pref_store.h"
#include "chrome/browser/policy/configuration_policy_provider.h"
#include "chrome/browser/policy/network_configuration_updater.h"
-#include "chrome/browser/policy/policy_error_map.h"
-#include "chrome/browser/policy/policy_map.h"
#include "chrome/browser/policy/user_policy_cache.h"
#include "chrome/browser/policy/user_policy_token_cache.h"
-#include "chrome/browser/prefs/pref_value_map.h"
#include "chrome/common/chrome_notification_types.h"
#include "chrome/common/chrome_paths.h"
#include "chrome/common/chrome_switches.h"
@@ -105,8 +101,6 @@ BrowserPolicyConnector::~BrowserPolicyConnector() {
user_cloud_policy_subsystem_.reset();
user_policy_token_cache_.reset();
user_data_store_.reset();
-
- STLDeleteElements(policy_handlers_.get());
}
ConfigurationPolicyProvider*
@@ -318,28 +312,9 @@ const CloudPolicyDataStore*
return user_data_store_.get();
}
-void BrowserPolicyConnector::GetPoliciesAsPreferences(
- const PolicyMap& policies,
- PrefValueMap* prefs,
- PolicyErrorMap* errors) {
- PolicyErrorMap scoped_errors;
- if (!errors)
- errors = &scoped_errors;
-
- ConfigurationPolicyHandler::HandlerList::const_iterator handler;
- for (handler = policy_handlers_->begin();
- handler != policy_handlers_->end();
- ++handler) {
- if ((*handler)->CheckPolicySettings(policies, errors) && prefs)
- (*handler)->ApplyPolicySettings(policies, prefs);
- }
-
- for (PolicyMap::const_iterator it = policies.begin();
- it != policies.end();
- ++it) {
- if (IsDeprecatedPolicy(it->first))
- errors->AddError(it->first, IDS_POLICY_DEPRECATED);
- }
+const ConfigurationPolicyHandlerList*
+ BrowserPolicyConnector::GetHandlerList() const {
+ return &handler_list_;
}
BrowserPolicyConnector::BrowserPolicyConnector()
@@ -362,7 +337,6 @@ BrowserPolicyConnector::BrowserPolicyConnector()
managed_cloud_provider_.get(),
chromeos::CrosLibrary::Get()->GetNetworkLibrary()));
#endif
- policy_handlers_.reset(ConfigurationPolicyHandler::CreateHandlerList());
}
BrowserPolicyConnector::BrowserPolicyConnector(
@@ -375,7 +349,6 @@ BrowserPolicyConnector::BrowserPolicyConnector(
managed_cloud_provider_(managed_cloud_provider),
recommended_cloud_provider_(recommended_cloud_provider),
ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)) {
- policy_handlers_.reset(ConfigurationPolicyHandler::CreateHandlerList());
}
void BrowserPolicyConnector::Observe(
diff --git a/chrome/browser/policy/browser_policy_connector.h b/chrome/browser/policy/browser_policy_connector.h
index 289ae06..da746b5 100644
--- a/chrome/browser/policy/browser_policy_connector.h
+++ b/chrome/browser/policy/browser_policy_connector.h
@@ -12,12 +12,11 @@
#include "base/memory/scoped_ptr.h"
#include "base/memory/weak_ptr.h"
#include "chrome/browser/policy/cloud_policy_data_store.h"
-#include "chrome/browser/policy/configuration_policy_handler.h"
+#include "chrome/browser/policy/configuration_policy_handler_list.h"
#include "chrome/browser/policy/enterprise_install_attributes.h"
#include "content/public/browser/notification_observer.h"
#include "content/public/browser/notification_registrar.h"
-class PrefValueMap;
class TestingBrowserProcess;
class TokenService;
@@ -27,8 +26,6 @@ class CloudPolicyProvider;
class CloudPolicySubsystem;
class ConfigurationPolicyProvider;
class NetworkConfigurationUpdater;
-class PolicyErrorMap;
-class PolicyMap;
class UserPolicyTokenCache;
// Manages the lifecycle of browser-global policy infrastructure, such as the
@@ -113,12 +110,7 @@ class BrowserPolicyConnector : public content::NotificationObserver {
const CloudPolicyDataStore* GetDeviceCloudPolicyDataStore() const;
const CloudPolicyDataStore* GetUserCloudPolicyDataStore() const;
- // Translates |policies| to their corresponding preferences in |prefs|.
- // Any errors found while processing the policies are stored in |errors|.
- // |prefs| or |errors| can be NULL, and won't be filled in that case.
- void GetPoliciesAsPreferences(const PolicyMap& policies,
- PrefValueMap* prefs,
- PolicyErrorMap* errors);
+ const ConfigurationPolicyHandlerList* GetHandlerList() const;
private:
friend class ::TestingBrowserProcess;
@@ -184,8 +176,8 @@ class BrowserPolicyConnector : public content::NotificationObserver {
// policy authentication tokens.
TokenService* token_service_;
- // List of all available handlers derived from ConfigurationPolicyHandler.
- scoped_ptr<ConfigurationPolicyHandler::HandlerList> policy_handlers_;
+ // Used to convert policies to preferences.
+ ConfigurationPolicyHandlerList handler_list_;
DISALLOW_COPY_AND_ASSIGN(BrowserPolicyConnector);
};
diff --git a/chrome/browser/policy/configuration_policy_handler.cc b/chrome/browser/policy/configuration_policy_handler.cc
index 755f273..18e5696 100644
--- a/chrome/browser/policy/configuration_policy_handler.cc
+++ b/chrome/browser/policy/configuration_policy_handler.cc
@@ -5,7 +5,6 @@
#include "chrome/browser/policy/configuration_policy_handler.h"
#include <string>
-#include <vector>
#include "base/file_path.h"
#include "base/logging.h"
@@ -13,13 +12,11 @@
#include "base/string16.h"
#include "base/string_number_conversions.h"
#include "base/string_util.h"
-#include "base/values.h"
#include "chrome/browser/download/download_util.h"
#include "chrome/browser/policy/configuration_policy_pref_store.h"
#include "chrome/browser/policy/policy_error_map.h"
#include "chrome/browser/policy/policy_map.h"
#include "chrome/browser/policy/policy_path_parser.h"
-#include "chrome/browser/prefs/incognito_mode_prefs.h"
#include "chrome/browser/prefs/pref_value_map.h"
#include "chrome/browser/prefs/proxy_config_dictionary.h"
#include "chrome/browser/prefs/proxy_prefs.h"
@@ -28,251 +25,12 @@
#include "chrome/common/content_settings.h"
#include "chrome/common/pref_names.h"
#include "grit/generated_resources.h"
-#include "policy/configuration_policy_type.h"
#include "policy/policy_constants.h"
namespace policy {
namespace {
-// Implementations of ConfigurationPolicyHandler -------------------------------
-
-// Abstract class derived from ConfigurationPolicyHandler that should be
-// subclassed to handle a single policy (not a combination of policies).
-class TypeCheckingPolicyHandler : public ConfigurationPolicyHandler {
- public:
- TypeCheckingPolicyHandler(ConfigurationPolicyType policy_type,
- base::Value::Type value_type);
-
- // ConfigurationPolicyHandler methods:
- virtual bool CheckPolicySettings(const PolicyMap& policies,
- PolicyErrorMap* errors) OVERRIDE;
-
- protected:
- virtual ~TypeCheckingPolicyHandler();
-
- ConfigurationPolicyType policy_type() const;
-
- private:
- // The ConfigurationPolicyType of the policy.
- ConfigurationPolicyType policy_type_;
-
- // The type the value of the policy should have.
- base::Value::Type value_type_;
-
- DISALLOW_COPY_AND_ASSIGN(TypeCheckingPolicyHandler);
-};
-
-// ConfigurationPolicyHandler for policies that map directly to a preference.
-class SimplePolicyHandler : public TypeCheckingPolicyHandler {
- public:
- SimplePolicyHandler(ConfigurationPolicyType policy_type,
- base::Value::Type value_type,
- const char* pref_path);
- virtual ~SimplePolicyHandler();
-
- // ConfigurationPolicyHandler methods:
- virtual void ApplyPolicySettings(const PolicyMap& policies,
- PrefValueMap* prefs) OVERRIDE;
-
- private:
- // The DictionaryValue path of the preference the policy maps to.
- const char* pref_path_;
-
- DISALLOW_COPY_AND_ASSIGN(SimplePolicyHandler);
-};
-
-// ConfigurationPolicyHandler for the SyncDisabled policy.
-class SyncPolicyHandler : public TypeCheckingPolicyHandler {
- public:
- SyncPolicyHandler();
- virtual ~SyncPolicyHandler();
-
- // ConfigurationPolicyHandler methods:
- virtual void ApplyPolicySettings(const PolicyMap& policies,
- PrefValueMap* prefs) OVERRIDE;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(SyncPolicyHandler);
-};
-
-// ConfigurationPolicyHandler for the AutofillEnabled policy.
-class AutofillPolicyHandler : public TypeCheckingPolicyHandler {
- public:
- AutofillPolicyHandler();
- virtual ~AutofillPolicyHandler();
-
- // ConfigurationPolicyHandler methods:
- virtual void ApplyPolicySettings(const PolicyMap& policies,
- PrefValueMap* prefs) OVERRIDE;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(AutofillPolicyHandler);
-};
-
-// ConfigurationPolicyHandler for the DownloadDirectory policy.
-class DownloadDirPolicyHandler : public TypeCheckingPolicyHandler {
- public:
- DownloadDirPolicyHandler();
- virtual ~DownloadDirPolicyHandler();
-
- // ConfigurationPolicyHandler methods:
- virtual void ApplyPolicySettings(const PolicyMap& policies,
- PrefValueMap* prefs) OVERRIDE;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(DownloadDirPolicyHandler);
-};
-
-// ConfigurationPolicyHandler for the DiskCacheDir policy.
-class DiskCacheDirPolicyHandler : public TypeCheckingPolicyHandler {
- public:
- explicit DiskCacheDirPolicyHandler();
- virtual ~DiskCacheDirPolicyHandler();
-
- // ConfigurationPolicyHandler methods:
- virtual void ApplyPolicySettings(const PolicyMap& policies,
- PrefValueMap* prefs) OVERRIDE;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(DiskCacheDirPolicyHandler);
-};
-
-// ConfigurationPolicyHandler for the FileSelectionDialogsHandler policy.
-class FileSelectionDialogsHandler : public TypeCheckingPolicyHandler {
- public:
- FileSelectionDialogsHandler();
- virtual ~FileSelectionDialogsHandler();
-
- // ConfigurationPolicyHandler methods:
- virtual void ApplyPolicySettings(const PolicyMap& policies,
- PrefValueMap* prefs) OVERRIDE;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(FileSelectionDialogsHandler);
-};
-
-// ConfigurationPolicyHandler for the incognito mode policies.
-class IncognitoModePolicyHandler : public ConfigurationPolicyHandler {
- public:
- IncognitoModePolicyHandler();
- virtual ~IncognitoModePolicyHandler();
-
- // ConfigurationPolicyHandler methods:
- virtual bool CheckPolicySettings(const PolicyMap& policies,
- PolicyErrorMap* errors) OVERRIDE;
- virtual void ApplyPolicySettings(const PolicyMap& policies,
- PrefValueMap* prefs) OVERRIDE;
-
- private:
- IncognitoModePrefs::Availability GetAvailabilityValueAsEnum(
- const Value* availability);
-
- DISALLOW_COPY_AND_ASSIGN(IncognitoModePolicyHandler);
-};
-
-// ConfigurationPolicyHandler for the DefaultSearchEncodings policy.
-class DefaultSearchEncodingsPolicyHandler : public TypeCheckingPolicyHandler {
- public:
- DefaultSearchEncodingsPolicyHandler();
- virtual ~DefaultSearchEncodingsPolicyHandler();
-
- // ConfigurationPolicyHandler methods:
- virtual void ApplyPolicySettings(const PolicyMap& policies,
- PrefValueMap* prefs) OVERRIDE;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(DefaultSearchEncodingsPolicyHandler);
-};
-
-// ConfigurationPolicyHandler for the default search policies.
-class DefaultSearchPolicyHandler : public ConfigurationPolicyHandler {
- public:
- DefaultSearchPolicyHandler();
- virtual ~DefaultSearchPolicyHandler();
-
- // ConfigurationPolicyHandler methods:
- virtual bool CheckPolicySettings(const PolicyMap& policies,
- PolicyErrorMap* errors) OVERRIDE;
- virtual void ApplyPolicySettings(const PolicyMap& policies,
- PrefValueMap* prefs) OVERRIDE;
-
- private:
- // Calls |CheckPolicySettings()| on each of the handlers in |handlers_|
- // and returns true if all of the calls return true and false otherwise.
- bool CheckIndividualPolicies(const PolicyMap& policies,
- PolicyErrorMap* errors);
-
- // Returns true if there is a value for |policy_type| in |policies| and false
- // otherwise.
- bool HasDefaultSearchPolicy(const PolicyMap& policies,
- ConfigurationPolicyType policy_type);
-
- // Returns true if any default search policies are specified in |policies| and
- // false otherwise.
- bool AnyDefaultSearchPoliciesSpecified(const PolicyMap& policies);
-
- // Returns true if the default search provider is disabled and false
- // otherwise.
- bool DefaultSearchProviderIsDisabled(const PolicyMap& policies);
-
- // Returns true if the default search URL was set and is valid and false
- // otherwise.
- bool DefaultSearchURLIsValid(const PolicyMap& policies);
-
- // Make sure that the |path| if present in |prefs_|. If not, set it to
- // a blank string.
- void EnsureStringPrefExists(PrefValueMap* prefs, const std::string& path);
-
- // The ConfigurationPolicyHandler handlers for each default search policy.
- HandlerList handlers_;
-
- DISALLOW_COPY_AND_ASSIGN(DefaultSearchPolicyHandler);
-};
-
-// ConfigurationPolicyHandler for the proxy policies.
-class ProxyPolicyHandler : public ConfigurationPolicyHandler {
- public:
- ProxyPolicyHandler();
- virtual ~ProxyPolicyHandler();
-
- // ConfigurationPolicyHandler methods:
- virtual bool CheckPolicySettings(const PolicyMap& policies,
- PolicyErrorMap* errors) OVERRIDE;
- virtual void ApplyPolicySettings(const PolicyMap& policies,
- PrefValueMap* prefs) OVERRIDE;
-
- private:
- const Value* GetProxyPolicyValue(const PolicyMap& policies,
- ConfigurationPolicyType policy);
-
- // Converts the deprecated ProxyServerMode policy value to a ProxyMode value
- // and places the result in |mode_value|. Returns true if the conversion
- // succeeded and false otherwise.
- bool CheckProxyModeAndServerMode(const PolicyMap& policies,
- PolicyErrorMap* errors,
- std::string* mode_value);
-
- DISALLOW_COPY_AND_ASSIGN(ProxyPolicyHandler);
-};
-
-//
-class JavascriptPolicyHandler : public ConfigurationPolicyHandler {
- public:
- JavascriptPolicyHandler();
- virtual ~JavascriptPolicyHandler();
-
- // ConfigurationPolicyHandler methods:
- virtual bool CheckPolicySettings(const PolicyMap& policies,
- PolicyErrorMap* errors) OVERRIDE;
- virtual void ApplyPolicySettings(const PolicyMap& policies,
- PrefValueMap* prefs) OVERRIDE;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(JavascriptPolicyHandler);
-};
-
-
// Helper classes --------------------------------------------------------------
// Implementation of SearchTermsData just for validation.
@@ -310,8 +68,7 @@ struct ProxyModeValidationEntry {
};
// Maps a policy type to a preference path, and to the expected value type.
-// This is the entry type of |kSimplePolicyMap| below.
-struct PolicyToPreferenceMapEntry {
+struct DefaultSearchSimplePolicyHandlerEntry {
base::Value::Type value_type;
ConfigurationPolicyType policy_type;
const char* preference_path;
@@ -320,172 +77,9 @@ struct PolicyToPreferenceMapEntry {
// Static data -----------------------------------------------------------------
-// List of policy types to preference names. This is used for simple policies
-// that directly map to a single preference.
-const PolicyToPreferenceMapEntry kSimplePolicyMap[] = {
- { Value::TYPE_STRING, kPolicyHomepageLocation, prefs::kHomePage },
- { Value::TYPE_BOOLEAN, kPolicyHomepageIsNewTabPage,
- prefs::kHomePageIsNewTabPage },
- { Value::TYPE_INTEGER, kPolicyRestoreOnStartup,
- prefs::kRestoreOnStartup},
- { Value::TYPE_LIST, kPolicyRestoreOnStartupURLs,
- prefs::kURLsToRestoreOnStartup },
- { Value::TYPE_BOOLEAN, kPolicyAlternateErrorPagesEnabled,
- prefs::kAlternateErrorPagesEnabled },
- { Value::TYPE_BOOLEAN, kPolicySearchSuggestEnabled,
- prefs::kSearchSuggestEnabled },
- { Value::TYPE_BOOLEAN, kPolicyDnsPrefetchingEnabled,
- prefs::kNetworkPredictionEnabled },
- { Value::TYPE_BOOLEAN, kPolicyDisableSpdy,
- prefs::kDisableSpdy },
- { Value::TYPE_LIST, kPolicyDisabledSchemes,
- prefs::kDisabledSchemes },
- { Value::TYPE_BOOLEAN, kPolicySafeBrowsingEnabled,
- prefs::kSafeBrowsingEnabled },
- { Value::TYPE_BOOLEAN, kPolicyPasswordManagerEnabled,
- prefs::kPasswordManagerEnabled },
- { Value::TYPE_BOOLEAN, kPolicyPasswordManagerAllowShowPasswords,
- prefs::kPasswordManagerAllowShowPasswords },
- { Value::TYPE_BOOLEAN, kPolicyPrintingEnabled,
- prefs::kPrintingEnabled },
- { Value::TYPE_BOOLEAN, kPolicyMetricsReportingEnabled,
- prefs::kMetricsReportingEnabled },
- { Value::TYPE_STRING, kPolicyApplicationLocaleValue,
- prefs::kApplicationLocale},
- { Value::TYPE_LIST, kPolicyExtensionInstallWhitelist,
- prefs::kExtensionInstallAllowList},
- { Value::TYPE_LIST, kPolicyExtensionInstallBlacklist,
- prefs::kExtensionInstallDenyList},
- { Value::TYPE_LIST, kPolicyExtensionInstallForcelist,
- prefs::kExtensionInstallForceList},
- { Value::TYPE_LIST, kPolicyDisabledPlugins,
- prefs::kPluginsDisabledPlugins},
- { Value::TYPE_LIST, kPolicyDisabledPluginsExceptions,
- prefs::kPluginsDisabledPluginsExceptions},
- { Value::TYPE_LIST, kPolicyEnabledPlugins,
- prefs::kPluginsEnabledPlugins},
- { Value::TYPE_BOOLEAN, kPolicyShowHomeButton,
- prefs::kShowHomeButton },
- { Value::TYPE_BOOLEAN, kPolicySavingBrowserHistoryDisabled,
- prefs::kSavingBrowserHistoryDisabled },
- { Value::TYPE_BOOLEAN, kPolicyClearSiteDataOnExit,
- prefs::kClearSiteDataOnExit },
- { Value::TYPE_BOOLEAN, kPolicyDeveloperToolsDisabled,
- prefs::kDevToolsDisabled },
- { Value::TYPE_BOOLEAN, kPolicyBlockThirdPartyCookies,
- prefs::kBlockThirdPartyCookies },
- { Value::TYPE_INTEGER, kPolicyDefaultCookiesSetting,
- prefs::kManagedDefaultCookiesSetting },
- { Value::TYPE_INTEGER, kPolicyDefaultImagesSetting,
- prefs::kManagedDefaultImagesSetting },
- { Value::TYPE_INTEGER, kPolicyDefaultPluginsSetting,
- prefs::kManagedDefaultPluginsSetting },
- { Value::TYPE_INTEGER, kPolicyDefaultPopupsSetting,
- prefs::kManagedDefaultPopupsSetting },
- { Value::TYPE_LIST, kPolicyAutoSelectCertificateForUrls,
- prefs::kManagedAutoSelectCertificateForUrls},
- { Value::TYPE_LIST, kPolicyCookiesAllowedForUrls,
- prefs::kManagedCookiesAllowedForUrls },
- { Value::TYPE_LIST, kPolicyCookiesBlockedForUrls,
- prefs::kManagedCookiesBlockedForUrls },
- { Value::TYPE_LIST, kPolicyCookiesSessionOnlyForUrls,
- prefs::kManagedCookiesSessionOnlyForUrls },
- { Value::TYPE_LIST, kPolicyImagesAllowedForUrls,
- prefs::kManagedImagesAllowedForUrls },
- { Value::TYPE_LIST, kPolicyImagesBlockedForUrls,
- prefs::kManagedImagesBlockedForUrls },
- { Value::TYPE_LIST, kPolicyJavaScriptAllowedForUrls,
- prefs::kManagedJavaScriptAllowedForUrls },
- { Value::TYPE_LIST, kPolicyJavaScriptBlockedForUrls,
- prefs::kManagedJavaScriptBlockedForUrls },
- { Value::TYPE_LIST, kPolicyPluginsAllowedForUrls,
- prefs::kManagedPluginsAllowedForUrls },
- { Value::TYPE_LIST, kPolicyPluginsBlockedForUrls,
- prefs::kManagedPluginsBlockedForUrls },
- { Value::TYPE_LIST, kPolicyPopupsAllowedForUrls,
- prefs::kManagedPopupsAllowedForUrls },
- { Value::TYPE_LIST, kPolicyPopupsBlockedForUrls,
- prefs::kManagedPopupsBlockedForUrls },
- { Value::TYPE_LIST, kPolicyNotificationsAllowedForUrls,
- prefs::kManagedNotificationsAllowedForUrls },
- { Value::TYPE_LIST, kPolicyNotificationsBlockedForUrls,
- prefs::kManagedNotificationsBlockedForUrls },
- { Value::TYPE_INTEGER, kPolicyDefaultNotificationsSetting,
- prefs::kManagedDefaultNotificationsSetting },
- { Value::TYPE_INTEGER, kPolicyDefaultGeolocationSetting,
- prefs::kManagedDefaultGeolocationSetting },
- { Value::TYPE_STRING, kPolicyAuthSchemes,
- prefs::kAuthSchemes },
- { Value::TYPE_BOOLEAN, kPolicyDisableAuthNegotiateCnameLookup,
- prefs::kDisableAuthNegotiateCnameLookup },
- { Value::TYPE_BOOLEAN, kPolicyEnableAuthNegotiatePort,
- prefs::kEnableAuthNegotiatePort },
- { Value::TYPE_STRING, kPolicyAuthServerWhitelist,
- prefs::kAuthServerWhitelist },
- { Value::TYPE_STRING, kPolicyAuthNegotiateDelegateWhitelist,
- prefs::kAuthNegotiateDelegateWhitelist },
- { Value::TYPE_STRING, kPolicyGSSAPILibraryName,
- prefs::kGSSAPILibraryName },
- { Value::TYPE_BOOLEAN, kPolicyAllowCrossOriginAuthPrompt,
- prefs::kAllowCrossOriginAuthPrompt },
- { Value::TYPE_BOOLEAN, kPolicyDisable3DAPIs,
- prefs::kDisable3DAPIs },
- { Value::TYPE_BOOLEAN, kPolicyDisablePluginFinder,
- prefs::kDisablePluginFinder },
- { Value::TYPE_INTEGER, kPolicyPolicyRefreshRate,
- prefs::kUserPolicyRefreshRate },
- { Value::TYPE_INTEGER, kPolicyDevicePolicyRefreshRate,
- prefs::kDevicePolicyRefreshRate },
- { Value::TYPE_BOOLEAN, kPolicyInstantEnabled, prefs::kInstantEnabled },
- { Value::TYPE_BOOLEAN, kPolicyDefaultBrowserSettingEnabled,
- prefs::kDefaultBrowserSettingEnabled },
- { Value::TYPE_BOOLEAN, kPolicyRemoteAccessHostFirewallTraversal,
- prefs::kRemoteAccessHostFirewallTraversal },
- { Value::TYPE_BOOLEAN, kPolicyCloudPrintProxyEnabled,
- prefs::kCloudPrintProxyEnabled },
- { Value::TYPE_BOOLEAN, kPolicyCloudPrintSubmitEnabled,
- prefs::kCloudPrintSubmitEnabled },
- { Value::TYPE_BOOLEAN, kPolicyTranslateEnabled, prefs::kEnableTranslate },
- { Value::TYPE_BOOLEAN, kPolicyAllowOutdatedPlugins,
- prefs::kPluginsAllowOutdated },
- { Value::TYPE_BOOLEAN, kPolicyAlwaysAuthorizePlugins,
- prefs::kPluginsAlwaysAuthorize },
- { Value::TYPE_BOOLEAN, kPolicyBookmarkBarEnabled,
- prefs::kShowBookmarkBar },
- { Value::TYPE_BOOLEAN, kPolicyEditBookmarksEnabled,
- prefs::kEditBookmarksEnabled },
- { Value::TYPE_BOOLEAN, kPolicyAllowFileSelectionDialogs,
- prefs::kAllowFileSelectionDialogs },
- { Value::TYPE_BOOLEAN, kPolicyImportBookmarks,
- prefs::kImportBookmarks},
- { Value::TYPE_BOOLEAN, kPolicyImportHistory,
- prefs::kImportHistory},
- { Value::TYPE_BOOLEAN, kPolicyImportHomepage,
- prefs::kImportHomepage},
- { Value::TYPE_BOOLEAN, kPolicyImportSearchEngine,
- prefs::kImportSearchEngine },
- { Value::TYPE_BOOLEAN, kPolicyImportSavedPasswords,
- prefs::kImportSavedPasswords },
- { Value::TYPE_INTEGER, kPolicyMaxConnectionsPerProxy,
- prefs::kMaxConnectionsPerProxy },
- { Value::TYPE_BOOLEAN, kPolicyHideWebStorePromo,
- prefs::kNTPHideWebStorePromo },
- { Value::TYPE_LIST, kPolicyURLBlacklist,
- prefs::kUrlBlacklist },
- { Value::TYPE_LIST, kPolicyURLWhitelist,
- prefs::kUrlWhitelist },
-
-#if defined(OS_CHROMEOS)
- { Value::TYPE_BOOLEAN, kPolicyChromeOsLockOnIdleSuspend,
- prefs::kEnableScreenLock },
- { Value::TYPE_STRING, kPolicyChromeOsReleaseChannel,
- prefs::kChromeOsReleaseChannel },
-#endif
-};
-
// List of policy types to preference names, for policies affecting the default
// search provider.
-const PolicyToPreferenceMapEntry kDefaultSearchPolicyMap[] = {
+const DefaultSearchSimplePolicyHandlerEntry kDefaultSearchPolicyMap[] = {
{ Value::TYPE_BOOLEAN, kPolicyDefaultSearchProviderEnabled,
prefs::kDefaultSearchProviderEnabled },
{ Value::TYPE_STRING, kPolicyDefaultSearchProviderName,
@@ -538,6 +132,22 @@ std::string ValueTypeToString(Value::Type type) {
}
+} // namespace
+
+
+// ConfigurationPolicyHandler implementation -----------------------------------
+
+ConfigurationPolicyHandler::ConfigurationPolicyHandler() {
+}
+
+ConfigurationPolicyHandler::~ConfigurationPolicyHandler() {
+}
+
+void ConfigurationPolicyHandler::PrepareForDisplaying(
+ PolicyMap* policies) const {
+}
+
+
// TypeCheckingPolicyHandler implementation ------------------------------------
TypeCheckingPolicyHandler::TypeCheckingPolicyHandler(
@@ -895,8 +505,8 @@ void DefaultSearchPolicyHandler::ApplyPolicySettings(const PolicyMap& policies,
// The other entries are optional. Just make sure that they are all
// specified via policy, so that the regular prefs aren't used.
if (DefaultSearchURLIsValid(policies)) {
- HandlerList::const_iterator handler = handlers_.begin();
- for ( ; handler != handlers_.end(); ++handler)
+ std::vector<ConfigurationPolicyHandler*>::const_iterator handler;
+ for (handler = handlers_.begin() ; handler != handlers_.end(); ++handler)
(*handler)->ApplyPolicySettings(policies, prefs);
EnsureStringPrefExists(prefs, prefs::kDefaultSearchProviderSuggestURL);
@@ -926,8 +536,8 @@ void DefaultSearchPolicyHandler::ApplyPolicySettings(const PolicyMap& policies,
bool DefaultSearchPolicyHandler::CheckIndividualPolicies(
const PolicyMap& policies,
PolicyErrorMap* errors) {
- HandlerList::const_iterator handler = handlers_.begin();
- for ( ; handler != handlers_.end(); ++handler) {
+ std::vector<ConfigurationPolicyHandler*>::const_iterator handler;
+ for (handler = handlers_.begin() ; handler != handlers_.end(); ++handler) {
if (!(*handler)->CheckPolicySettings(policies, errors))
return false;
}
@@ -1284,38 +894,4 @@ void JavascriptPolicyHandler::ApplyPolicySettings(const PolicyMap& policies,
}
}
-
-} // namespace
-
-
-// ConfigurationPolicyHandler implementation -----------------------------------
-
-// static
-ConfigurationPolicyHandler::HandlerList*
- ConfigurationPolicyHandler::CreateHandlerList() {
- HandlerList* list = new HandlerList;
-
- for (size_t i = 0; i < arraysize(kSimplePolicyMap); ++i) {
- list->push_back(
- new SimplePolicyHandler(kSimplePolicyMap[i].policy_type,
- kSimplePolicyMap[i].value_type,
- kSimplePolicyMap[i].preference_path));
- }
-
- list->push_back(new AutofillPolicyHandler());
- list->push_back(new DefaultSearchPolicyHandler());
- list->push_back(new DiskCacheDirPolicyHandler());
- list->push_back(new FileSelectionDialogsHandler());
- list->push_back(new IncognitoModePolicyHandler());
- list->push_back(new JavascriptPolicyHandler());
- list->push_back(new ProxyPolicyHandler());
- list->push_back(new SyncPolicyHandler());
-
-#if !defined(OS_CHROMEOS)
- list->push_back(new DownloadDirPolicyHandler());
-#endif // !defined(OS_CHROME0S)
-
- return list;
-}
-
} // namespace policy
diff --git a/chrome/browser/policy/configuration_policy_handler.h b/chrome/browser/policy/configuration_policy_handler.h
index 61423c3..375b8f9 100644
--- a/chrome/browser/policy/configuration_policy_handler.h
+++ b/chrome/browser/policy/configuration_policy_handler.h
@@ -9,6 +9,9 @@
#include <vector>
#include "base/basictypes.h"
+#include "base/values.h"
+#include "chrome/browser/prefs/incognito_mode_prefs.h"
+#include "policy/configuration_policy_type.h"
class PrefValueMap;
@@ -21,10 +24,8 @@ class PolicyMap;
// their corresponding preferences, and to check whether the policies are valid.
class ConfigurationPolicyHandler {
public:
- typedef std::vector<ConfigurationPolicyHandler*> HandlerList;
-
- ConfigurationPolicyHandler() {}
- virtual ~ConfigurationPolicyHandler() {}
+ ConfigurationPolicyHandler();
+ virtual ~ConfigurationPolicyHandler();
// Returns true if the policy settings handled by this
// ConfigurationPolicyHandler can be applied and false otherwise. Fills
@@ -38,14 +39,248 @@ class ConfigurationPolicyHandler {
virtual void ApplyPolicySettings(const PolicyMap& policies,
PrefValueMap* prefs) = 0;
- // Creates a new HandlerList with all the known handlers and returns it.
- // The new list and its elements are owned by the caller.
- static HandlerList* CreateHandlerList();
+ // Converts sensitive policy values to others more appropriate for displaying.
+ virtual void PrepareForDisplaying(PolicyMap* policies) const;
private:
DISALLOW_COPY_AND_ASSIGN(ConfigurationPolicyHandler);
};
+// Abstract class derived from ConfigurationPolicyHandler that should be
+// subclassed to handle a single policy (not a combination of policies).
+class TypeCheckingPolicyHandler : public ConfigurationPolicyHandler {
+ public:
+ TypeCheckingPolicyHandler(ConfigurationPolicyType policy_type,
+ base::Value::Type value_type);
+
+ // ConfigurationPolicyHandler methods:
+ virtual bool CheckPolicySettings(const PolicyMap& policies,
+ PolicyErrorMap* errors) OVERRIDE;
+
+ protected:
+ virtual ~TypeCheckingPolicyHandler();
+
+ ConfigurationPolicyType policy_type() const;
+
+ private:
+ // The ConfigurationPolicyType of the policy.
+ ConfigurationPolicyType policy_type_;
+
+ // The type the value of the policy should have.
+ base::Value::Type value_type_;
+
+ DISALLOW_COPY_AND_ASSIGN(TypeCheckingPolicyHandler);
+};
+
+// ConfigurationPolicyHandler for policies that map directly to a preference.
+class SimplePolicyHandler : public TypeCheckingPolicyHandler {
+ public:
+ SimplePolicyHandler(ConfigurationPolicyType policy_type,
+ base::Value::Type value_type,
+ const char* pref_path);
+ virtual ~SimplePolicyHandler();
+
+ // ConfigurationPolicyHandler methods:
+ virtual void ApplyPolicySettings(const PolicyMap& policies,
+ PrefValueMap* prefs) OVERRIDE;
+
+ private:
+ // The DictionaryValue path of the preference the policy maps to.
+ const char* pref_path_;
+
+ DISALLOW_COPY_AND_ASSIGN(SimplePolicyHandler);
+};
+
+// ConfigurationPolicyHandler for the SyncDisabled policy.
+class SyncPolicyHandler : public TypeCheckingPolicyHandler {
+ public:
+ SyncPolicyHandler();
+ virtual ~SyncPolicyHandler();
+
+ // ConfigurationPolicyHandler methods:
+ virtual void ApplyPolicySettings(const PolicyMap& policies,
+ PrefValueMap* prefs) OVERRIDE;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(SyncPolicyHandler);
+};
+
+// ConfigurationPolicyHandler for the AutofillEnabled policy.
+class AutofillPolicyHandler : public TypeCheckingPolicyHandler {
+ public:
+ AutofillPolicyHandler();
+ virtual ~AutofillPolicyHandler();
+
+ // ConfigurationPolicyHandler methods:
+ virtual void ApplyPolicySettings(const PolicyMap& policies,
+ PrefValueMap* prefs) OVERRIDE;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(AutofillPolicyHandler);
+};
+
+// ConfigurationPolicyHandler for the DownloadDirectory policy.
+class DownloadDirPolicyHandler : public TypeCheckingPolicyHandler {
+ public:
+ DownloadDirPolicyHandler();
+ virtual ~DownloadDirPolicyHandler();
+
+ // ConfigurationPolicyHandler methods:
+ virtual void ApplyPolicySettings(const PolicyMap& policies,
+ PrefValueMap* prefs) OVERRIDE;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(DownloadDirPolicyHandler);
+};
+
+// ConfigurationPolicyHandler for the DiskCacheDir policy.
+class DiskCacheDirPolicyHandler : public TypeCheckingPolicyHandler {
+ public:
+ explicit DiskCacheDirPolicyHandler();
+ virtual ~DiskCacheDirPolicyHandler();
+
+ // ConfigurationPolicyHandler methods:
+ virtual void ApplyPolicySettings(const PolicyMap& policies,
+ PrefValueMap* prefs) OVERRIDE;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(DiskCacheDirPolicyHandler);
+};
+
+// ConfigurationPolicyHandler for the FileSelectionDialogsHandler policy.
+class FileSelectionDialogsHandler : public TypeCheckingPolicyHandler {
+ public:
+ FileSelectionDialogsHandler();
+ virtual ~FileSelectionDialogsHandler();
+
+ // ConfigurationPolicyHandler methods:
+ virtual void ApplyPolicySettings(const PolicyMap& policies,
+ PrefValueMap* prefs) OVERRIDE;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(FileSelectionDialogsHandler);
+};
+
+// ConfigurationPolicyHandler for the incognito mode policies.
+class IncognitoModePolicyHandler : public ConfigurationPolicyHandler {
+ public:
+ IncognitoModePolicyHandler();
+ virtual ~IncognitoModePolicyHandler();
+
+ // ConfigurationPolicyHandler methods:
+ virtual bool CheckPolicySettings(const PolicyMap& policies,
+ PolicyErrorMap* errors) OVERRIDE;
+ virtual void ApplyPolicySettings(const PolicyMap& policies,
+ PrefValueMap* prefs) OVERRIDE;
+
+ private:
+ IncognitoModePrefs::Availability GetAvailabilityValueAsEnum(
+ const Value* availability);
+
+ DISALLOW_COPY_AND_ASSIGN(IncognitoModePolicyHandler);
+};
+
+// ConfigurationPolicyHandler for the DefaultSearchEncodings policy.
+class DefaultSearchEncodingsPolicyHandler : public TypeCheckingPolicyHandler {
+ public:
+ DefaultSearchEncodingsPolicyHandler();
+ virtual ~DefaultSearchEncodingsPolicyHandler();
+
+ // ConfigurationPolicyHandler methods:
+ virtual void ApplyPolicySettings(const PolicyMap& policies,
+ PrefValueMap* prefs) OVERRIDE;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(DefaultSearchEncodingsPolicyHandler);
+};
+
+// ConfigurationPolicyHandler for the default search policies.
+class DefaultSearchPolicyHandler : public ConfigurationPolicyHandler {
+ public:
+ DefaultSearchPolicyHandler();
+ virtual ~DefaultSearchPolicyHandler();
+
+ // ConfigurationPolicyHandler methods:
+ virtual bool CheckPolicySettings(const PolicyMap& policies,
+ PolicyErrorMap* errors) OVERRIDE;
+ virtual void ApplyPolicySettings(const PolicyMap& policies,
+ PrefValueMap* prefs) OVERRIDE;
+
+ private:
+ // Calls |CheckPolicySettings()| on each of the handlers in |handlers_|
+ // and returns true if all of the calls return true and false otherwise.
+ bool CheckIndividualPolicies(const PolicyMap& policies,
+ PolicyErrorMap* errors);
+
+ // Returns true if there is a value for |policy_type| in |policies| and false
+ // otherwise.
+ bool HasDefaultSearchPolicy(const PolicyMap& policies,
+ ConfigurationPolicyType policy_type);
+
+ // Returns true if any default search policies are specified in |policies| and
+ // false otherwise.
+ bool AnyDefaultSearchPoliciesSpecified(const PolicyMap& policies);
+
+ // Returns true if the default search provider is disabled and false
+ // otherwise.
+ bool DefaultSearchProviderIsDisabled(const PolicyMap& policies);
+
+ // Returns true if the default search URL was set and is valid and false
+ // otherwise.
+ bool DefaultSearchURLIsValid(const PolicyMap& policies);
+
+ // Make sure that the |path| if present in |prefs_|. If not, set it to
+ // a blank string.
+ void EnsureStringPrefExists(PrefValueMap* prefs, const std::string& path);
+
+ // The ConfigurationPolicyHandler handlers for each default search policy.
+ std::vector<ConfigurationPolicyHandler*> handlers_;
+
+ DISALLOW_COPY_AND_ASSIGN(DefaultSearchPolicyHandler);
+};
+
+// ConfigurationPolicyHandler for the proxy policies.
+class ProxyPolicyHandler : public ConfigurationPolicyHandler {
+ public:
+ ProxyPolicyHandler();
+ virtual ~ProxyPolicyHandler();
+
+ // ConfigurationPolicyHandler methods:
+ virtual bool CheckPolicySettings(const PolicyMap& policies,
+ PolicyErrorMap* errors) OVERRIDE;
+ virtual void ApplyPolicySettings(const PolicyMap& policies,
+ PrefValueMap* prefs) OVERRIDE;
+
+ private:
+ const Value* GetProxyPolicyValue(const PolicyMap& policies,
+ ConfigurationPolicyType policy);
+
+ // Converts the deprecated ProxyServerMode policy value to a ProxyMode value
+ // and places the result in |mode_value|. Returns true if the conversion
+ // succeeded and false otherwise.
+ bool CheckProxyModeAndServerMode(const PolicyMap& policies,
+ PolicyErrorMap* errors,
+ std::string* mode_value);
+
+ DISALLOW_COPY_AND_ASSIGN(ProxyPolicyHandler);
+};
+
+//
+class JavascriptPolicyHandler : public ConfigurationPolicyHandler {
+ public:
+ JavascriptPolicyHandler();
+ virtual ~JavascriptPolicyHandler();
+
+ // ConfigurationPolicyHandler methods:
+ virtual bool CheckPolicySettings(const PolicyMap& policies,
+ PolicyErrorMap* errors) OVERRIDE;
+ virtual void ApplyPolicySettings(const PolicyMap& policies,
+ PrefValueMap* prefs) OVERRIDE;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(JavascriptPolicyHandler);
+};
+
} // namespace policy
#endif // CHROME_BROWSER_POLICY_CONFIGURATION_POLICY_HANDLER_H_
diff --git a/chrome/browser/policy/configuration_policy_handler_list.cc b/chrome/browser/policy/configuration_policy_handler_list.cc
new file mode 100644
index 0000000..8454105
--- /dev/null
+++ b/chrome/browser/policy/configuration_policy_handler_list.cc
@@ -0,0 +1,249 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/policy/configuration_policy_handler_list.h"
+
+#include "base/stl_util.h"
+#include "base/values.h"
+#include "chrome/browser/policy/configuration_policy_handler.h"
+#include "chrome/browser/policy/policy_error_map.h"
+#include "chrome/browser/policy/policy_map.h"
+#include "chrome/browser/prefs/pref_value_map.h"
+#include "chrome/common/pref_names.h"
+#include "grit/generated_resources.h"
+#include "policy/policy_constants.h"
+
+namespace policy {
+
+namespace {
+
+// Maps a policy type to a preference path, and to the expected value type.
+// This is the entry type of |kSimplePolicyMap| below.
+struct PolicyToPreferenceMapEntry {
+ base::Value::Type value_type;
+ ConfigurationPolicyType policy_type;
+ const char* preference_path;
+};
+
+// List of policy types to preference names. This is used for simple policies
+// that directly map to a single preference.
+const PolicyToPreferenceMapEntry kSimplePolicyMap[] = {
+ { Value::TYPE_STRING, kPolicyHomepageLocation, prefs::kHomePage },
+ { Value::TYPE_BOOLEAN, kPolicyHomepageIsNewTabPage,
+ prefs::kHomePageIsNewTabPage },
+ { Value::TYPE_INTEGER, kPolicyRestoreOnStartup,
+ prefs::kRestoreOnStartup},
+ { Value::TYPE_LIST, kPolicyRestoreOnStartupURLs,
+ prefs::kURLsToRestoreOnStartup },
+ { Value::TYPE_BOOLEAN, kPolicyAlternateErrorPagesEnabled,
+ prefs::kAlternateErrorPagesEnabled },
+ { Value::TYPE_BOOLEAN, kPolicySearchSuggestEnabled,
+ prefs::kSearchSuggestEnabled },
+ { Value::TYPE_BOOLEAN, kPolicyDnsPrefetchingEnabled,
+ prefs::kNetworkPredictionEnabled },
+ { Value::TYPE_BOOLEAN, kPolicyDisableSpdy,
+ prefs::kDisableSpdy },
+ { Value::TYPE_LIST, kPolicyDisabledSchemes,
+ prefs::kDisabledSchemes },
+ { Value::TYPE_BOOLEAN, kPolicySafeBrowsingEnabled,
+ prefs::kSafeBrowsingEnabled },
+ { Value::TYPE_BOOLEAN, kPolicyPasswordManagerEnabled,
+ prefs::kPasswordManagerEnabled },
+ { Value::TYPE_BOOLEAN, kPolicyPasswordManagerAllowShowPasswords,
+ prefs::kPasswordManagerAllowShowPasswords },
+ { Value::TYPE_BOOLEAN, kPolicyPrintingEnabled,
+ prefs::kPrintingEnabled },
+ { Value::TYPE_BOOLEAN, kPolicyMetricsReportingEnabled,
+ prefs::kMetricsReportingEnabled },
+ { Value::TYPE_STRING, kPolicyApplicationLocaleValue,
+ prefs::kApplicationLocale},
+ { Value::TYPE_LIST, kPolicyExtensionInstallWhitelist,
+ prefs::kExtensionInstallAllowList},
+ { Value::TYPE_LIST, kPolicyExtensionInstallBlacklist,
+ prefs::kExtensionInstallDenyList},
+ { Value::TYPE_LIST, kPolicyExtensionInstallForcelist,
+ prefs::kExtensionInstallForceList},
+ { Value::TYPE_LIST, kPolicyDisabledPlugins,
+ prefs::kPluginsDisabledPlugins},
+ { Value::TYPE_LIST, kPolicyDisabledPluginsExceptions,
+ prefs::kPluginsDisabledPluginsExceptions},
+ { Value::TYPE_LIST, kPolicyEnabledPlugins,
+ prefs::kPluginsEnabledPlugins},
+ { Value::TYPE_BOOLEAN, kPolicyShowHomeButton,
+ prefs::kShowHomeButton },
+ { Value::TYPE_BOOLEAN, kPolicySavingBrowserHistoryDisabled,
+ prefs::kSavingBrowserHistoryDisabled },
+ { Value::TYPE_BOOLEAN, kPolicyClearSiteDataOnExit,
+ prefs::kClearSiteDataOnExit },
+ { Value::TYPE_BOOLEAN, kPolicyDeveloperToolsDisabled,
+ prefs::kDevToolsDisabled },
+ { Value::TYPE_BOOLEAN, kPolicyBlockThirdPartyCookies,
+ prefs::kBlockThirdPartyCookies },
+ { Value::TYPE_INTEGER, kPolicyDefaultCookiesSetting,
+ prefs::kManagedDefaultCookiesSetting },
+ { Value::TYPE_INTEGER, kPolicyDefaultImagesSetting,
+ prefs::kManagedDefaultImagesSetting },
+ { Value::TYPE_INTEGER, kPolicyDefaultPluginsSetting,
+ prefs::kManagedDefaultPluginsSetting },
+ { Value::TYPE_INTEGER, kPolicyDefaultPopupsSetting,
+ prefs::kManagedDefaultPopupsSetting },
+ { Value::TYPE_LIST, kPolicyAutoSelectCertificateForUrls,
+ prefs::kManagedAutoSelectCertificateForUrls},
+ { Value::TYPE_LIST, kPolicyCookiesAllowedForUrls,
+ prefs::kManagedCookiesAllowedForUrls },
+ { Value::TYPE_LIST, kPolicyCookiesBlockedForUrls,
+ prefs::kManagedCookiesBlockedForUrls },
+ { Value::TYPE_LIST, kPolicyCookiesSessionOnlyForUrls,
+ prefs::kManagedCookiesSessionOnlyForUrls },
+ { Value::TYPE_LIST, kPolicyImagesAllowedForUrls,
+ prefs::kManagedImagesAllowedForUrls },
+ { Value::TYPE_LIST, kPolicyImagesBlockedForUrls,
+ prefs::kManagedImagesBlockedForUrls },
+ { Value::TYPE_LIST, kPolicyJavaScriptAllowedForUrls,
+ prefs::kManagedJavaScriptAllowedForUrls },
+ { Value::TYPE_LIST, kPolicyJavaScriptBlockedForUrls,
+ prefs::kManagedJavaScriptBlockedForUrls },
+ { Value::TYPE_LIST, kPolicyPluginsAllowedForUrls,
+ prefs::kManagedPluginsAllowedForUrls },
+ { Value::TYPE_LIST, kPolicyPluginsBlockedForUrls,
+ prefs::kManagedPluginsBlockedForUrls },
+ { Value::TYPE_LIST, kPolicyPopupsAllowedForUrls,
+ prefs::kManagedPopupsAllowedForUrls },
+ { Value::TYPE_LIST, kPolicyPopupsBlockedForUrls,
+ prefs::kManagedPopupsBlockedForUrls },
+ { Value::TYPE_LIST, kPolicyNotificationsAllowedForUrls,
+ prefs::kManagedNotificationsAllowedForUrls },
+ { Value::TYPE_LIST, kPolicyNotificationsBlockedForUrls,
+ prefs::kManagedNotificationsBlockedForUrls },
+ { Value::TYPE_INTEGER, kPolicyDefaultNotificationsSetting,
+ prefs::kManagedDefaultNotificationsSetting },
+ { Value::TYPE_INTEGER, kPolicyDefaultGeolocationSetting,
+ prefs::kManagedDefaultGeolocationSetting },
+ { Value::TYPE_STRING, kPolicyAuthSchemes,
+ prefs::kAuthSchemes },
+ { Value::TYPE_BOOLEAN, kPolicyDisableAuthNegotiateCnameLookup,
+ prefs::kDisableAuthNegotiateCnameLookup },
+ { Value::TYPE_BOOLEAN, kPolicyEnableAuthNegotiatePort,
+ prefs::kEnableAuthNegotiatePort },
+ { Value::TYPE_STRING, kPolicyAuthServerWhitelist,
+ prefs::kAuthServerWhitelist },
+ { Value::TYPE_STRING, kPolicyAuthNegotiateDelegateWhitelist,
+ prefs::kAuthNegotiateDelegateWhitelist },
+ { Value::TYPE_STRING, kPolicyGSSAPILibraryName,
+ prefs::kGSSAPILibraryName },
+ { Value::TYPE_BOOLEAN, kPolicyAllowCrossOriginAuthPrompt,
+ prefs::kAllowCrossOriginAuthPrompt },
+ { Value::TYPE_BOOLEAN, kPolicyDisable3DAPIs,
+ prefs::kDisable3DAPIs },
+ { Value::TYPE_BOOLEAN, kPolicyDisablePluginFinder,
+ prefs::kDisablePluginFinder },
+ { Value::TYPE_INTEGER, kPolicyPolicyRefreshRate,
+ prefs::kUserPolicyRefreshRate },
+ { Value::TYPE_INTEGER, kPolicyDevicePolicyRefreshRate,
+ prefs::kDevicePolicyRefreshRate },
+ { Value::TYPE_BOOLEAN, kPolicyInstantEnabled, prefs::kInstantEnabled },
+ { Value::TYPE_BOOLEAN, kPolicyDefaultBrowserSettingEnabled,
+ prefs::kDefaultBrowserSettingEnabled },
+ { Value::TYPE_BOOLEAN, kPolicyRemoteAccessHostFirewallTraversal,
+ prefs::kRemoteAccessHostFirewallTraversal },
+ { Value::TYPE_BOOLEAN, kPolicyCloudPrintProxyEnabled,
+ prefs::kCloudPrintProxyEnabled },
+ { Value::TYPE_BOOLEAN, kPolicyCloudPrintSubmitEnabled,
+ prefs::kCloudPrintSubmitEnabled },
+ { Value::TYPE_BOOLEAN, kPolicyTranslateEnabled, prefs::kEnableTranslate },
+ { Value::TYPE_BOOLEAN, kPolicyAllowOutdatedPlugins,
+ prefs::kPluginsAllowOutdated },
+ { Value::TYPE_BOOLEAN, kPolicyAlwaysAuthorizePlugins,
+ prefs::kPluginsAlwaysAuthorize },
+ { Value::TYPE_BOOLEAN, kPolicyBookmarkBarEnabled,
+ prefs::kShowBookmarkBar },
+ { Value::TYPE_BOOLEAN, kPolicyEditBookmarksEnabled,
+ prefs::kEditBookmarksEnabled },
+ { Value::TYPE_BOOLEAN, kPolicyAllowFileSelectionDialogs,
+ prefs::kAllowFileSelectionDialogs },
+ { Value::TYPE_BOOLEAN, kPolicyImportBookmarks,
+ prefs::kImportBookmarks},
+ { Value::TYPE_BOOLEAN, kPolicyImportHistory,
+ prefs::kImportHistory},
+ { Value::TYPE_BOOLEAN, kPolicyImportHomepage,
+ prefs::kImportHomepage},
+ { Value::TYPE_BOOLEAN, kPolicyImportSearchEngine,
+ prefs::kImportSearchEngine },
+ { Value::TYPE_BOOLEAN, kPolicyImportSavedPasswords,
+ prefs::kImportSavedPasswords },
+ { Value::TYPE_INTEGER, kPolicyMaxConnectionsPerProxy,
+ prefs::kMaxConnectionsPerProxy },
+ { Value::TYPE_BOOLEAN, kPolicyHideWebStorePromo,
+ prefs::kNTPHideWebStorePromo },
+ { Value::TYPE_LIST, kPolicyURLBlacklist,
+ prefs::kUrlBlacklist },
+ { Value::TYPE_LIST, kPolicyURLWhitelist,
+ prefs::kUrlWhitelist },
+
+#if defined(OS_CHROMEOS)
+ { Value::TYPE_BOOLEAN, kPolicyChromeOsLockOnIdleSuspend,
+ prefs::kEnableScreenLock },
+ { Value::TYPE_STRING, kPolicyChromeOsReleaseChannel,
+ prefs::kChromeOsReleaseChannel },
+#endif
+};
+
+} // namespace
+
+ConfigurationPolicyHandlerList::ConfigurationPolicyHandlerList() {
+ for (size_t i = 0; i < arraysize(kSimplePolicyMap); ++i) {
+ handlers_.push_back(
+ new SimplePolicyHandler(kSimplePolicyMap[i].policy_type,
+ kSimplePolicyMap[i].value_type,
+ kSimplePolicyMap[i].preference_path));
+ }
+
+ handlers_.push_back(new AutofillPolicyHandler());
+ handlers_.push_back(new DefaultSearchPolicyHandler());
+ handlers_.push_back(new DiskCacheDirPolicyHandler());
+ handlers_.push_back(new FileSelectionDialogsHandler());
+ handlers_.push_back(new IncognitoModePolicyHandler());
+ handlers_.push_back(new JavascriptPolicyHandler());
+ handlers_.push_back(new ProxyPolicyHandler());
+ handlers_.push_back(new SyncPolicyHandler());
+
+#if !defined(OS_CHROMEOS)
+ handlers_.push_back(new DownloadDirPolicyHandler());
+#endif // !defined(OS_CHROME0S)
+}
+
+ConfigurationPolicyHandlerList::~ConfigurationPolicyHandlerList() {
+ STLDeleteElements(&handlers_);
+}
+
+void ConfigurationPolicyHandlerList::ApplyPolicySettings(
+ const PolicyMap& policies,
+ PrefValueMap* prefs,
+ PolicyErrorMap* errors) const {
+ PolicyErrorMap scoped_errors;
+ if (!errors)
+ errors = &scoped_errors;
+
+ std::vector<ConfigurationPolicyHandler*>::const_iterator handler;
+ for (handler = handlers_.begin(); handler != handlers_.end(); ++handler) {
+ if ((*handler)->CheckPolicySettings(policies, errors) && prefs)
+ (*handler)->ApplyPolicySettings(policies, prefs);
+ }
+
+ for (PolicyMap::const_iterator it = policies.begin();
+ it != policies.end();
+ ++it) {
+ if (IsDeprecatedPolicy(it->first))
+ errors->AddError(it->first, IDS_POLICY_DEPRECATED);
+ }
+}
+
+void ConfigurationPolicyHandlerList::PrepareForDisplaying(
+ PolicyMap* policies) const {
+ std::vector<ConfigurationPolicyHandler*>::const_iterator handler;
+ for (handler = handlers_.begin(); handler != handlers_.end(); ++handler)
+ (*handler)->PrepareForDisplaying(policies);
+}
+
+} // namespace policy
diff --git a/chrome/browser/policy/configuration_policy_handler_list.h b/chrome/browser/policy/configuration_policy_handler_list.h
new file mode 100644
index 0000000..29731de
--- /dev/null
+++ b/chrome/browser/policy/configuration_policy_handler_list.h
@@ -0,0 +1,46 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_POLICY_CONFIGURATION_POLICY_HANDLER_LIST_H_
+#define CHROME_BROWSER_POLICY_CONFIGURATION_POLICY_HANDLER_LIST_H_
+#pragma once
+
+#include <vector>
+
+#include "base/basictypes.h"
+
+class PrefValueMap;
+
+namespace policy {
+
+class ConfigurationPolicyHandler;
+class PolicyErrorMap;
+class PolicyMap;
+
+// Converts policies to their corresponding preferences. Also does error
+// checking and cleans up policy values for displaying.
+class ConfigurationPolicyHandlerList {
+ public:
+ ConfigurationPolicyHandlerList();
+ ~ConfigurationPolicyHandlerList();
+
+ // Translates |policies| to their corresponding preferences in |prefs|.
+ // Any errors found while processing the policies are stored in |errors|.
+ // |prefs| or |errors| can be NULL, and won't be filled in that case.
+ void ApplyPolicySettings(const PolicyMap& policies,
+ PrefValueMap* prefs,
+ PolicyErrorMap* errors) const;
+
+ // Converts sensitive policy values to others more appropriate for displaying.
+ void PrepareForDisplaying(PolicyMap* policies) const;
+
+ private:
+ std::vector<ConfigurationPolicyHandler*> handlers_;
+
+ DISALLOW_COPY_AND_ASSIGN(ConfigurationPolicyHandlerList);
+};
+
+} // namespace policy
+
+#endif // CHROME_BROWSER_POLICY_CONFIGURATION_POLICY_HANDLER_LIST_H_
diff --git a/chrome/browser/policy/configuration_policy_pref_store.cc b/chrome/browser/policy/configuration_policy_pref_store.cc
index 1fc9c87..d928691 100644
--- a/chrome/browser/policy/configuration_policy_pref_store.cc
+++ b/chrome/browser/policy/configuration_policy_pref_store.cc
@@ -13,6 +13,7 @@
#include "base/utf_string_conversions.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/policy/browser_policy_connector.h"
+#include "chrome/browser/policy/configuration_policy_handler_list.h"
#include "chrome/browser/policy/policy_error_map.h"
#include "chrome/browser/policy/policy_map.h"
#include "chrome/browser/prefs/pref_value_map.h"
@@ -161,8 +162,9 @@ PrefValueMap* ConfigurationPolicyPrefStore::CreatePreferencesFromPolicies() {
scoped_ptr<PrefValueMap> prefs(new PrefValueMap);
scoped_ptr<PolicyErrorMap> errors(new PolicyErrorMap);
- g_browser_process->browser_policy_connector()->GetPoliciesAsPreferences(
- policies, prefs.get(), errors.get());
+ const ConfigurationPolicyHandlerList* handler_list =
+ g_browser_process->browser_policy_connector()->GetHandlerList();
+ handler_list->ApplyPolicySettings(policies, prefs.get(), errors.get());
// Retrieve and log the errors once the UI loop is ready. This is only an
// issue during startup.
diff --git a/chrome/browser/policy/configuration_policy_reader.cc b/chrome/browser/policy/configuration_policy_reader.cc
index 215dad1..d0c0a04 100644
--- a/chrome/browser/policy/configuration_policy_reader.cc
+++ b/chrome/browser/policy/configuration_policy_reader.cc
@@ -76,8 +76,9 @@ void ConfigurationPolicyStatusKeeper::GetPoliciesFromProvider(
DLOG(WARNING) << "Failed to get policy from provider.";
PolicyErrorMap errors;
- g_browser_process->browser_policy_connector()->GetPoliciesAsPreferences(
- policies, NULL, &errors);
+ const ConfigurationPolicyHandlerList* handler_list =
+ g_browser_process->browser_policy_connector()->GetHandlerList();
+ handler_list->ApplyPolicySettings(policies, NULL, &errors);
PolicyMap::const_iterator policy = policies.begin();
for ( ; policy != policies.end(); ++policy) {