diff options
author | joaodasilva@chromium.org <joaodasilva@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-11-05 18:07:42 +0000 |
---|---|---|
committer | joaodasilva@chromium.org <joaodasilva@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-11-05 18:07:42 +0000 |
commit | 8720d883bb35e1adec8baefca284f4ad406235d9 (patch) | |
tree | 541602c5c6361c50ed50b6defde79c79ae261f59 /chrome/browser/policy | |
parent | fb1f9a26f9138e0f2d23e4fd1c4bd9258f5eacc1 (diff) | |
download | chromium_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')
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) { |