// Copyright 2016 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// DO NOT MODIFY THIS FILE DIRECTLY!
// IT WAS GENERATED BY generate_policy_source.py
// FROM Chromium's components/policy/resources/policy_templates.json
//
// Note: The file isn't currently autogenerated during compile time.
// TODO(ljusten): Autogenerate this file, see crbug.com/659078.
//

#include "authpolicy/policy/user_policy_encoder.h"

#include "authpolicy/policy/policy_keys.h"
#include "bindings/cloud_policy.pb.h"

namespace em = enterprise_management;

namespace policy {

void UserPolicyEncoder::EncodeUserPolicy1(
    em::CloudPolicySettings* policy) const {
  EncodeString(key::kHomepageLocation,
               base::Bind(&em::CloudPolicySettings::mutable_homepagelocation,
                          base::Unretained(policy)));
  EncodeBoolean(
      key::kHomepageIsNewTabPage,
      base::Bind(&em::CloudPolicySettings::mutable_homepageisnewtabpage,
                 base::Unretained(policy)));
  EncodeBoolean(
      key::kAlternateErrorPagesEnabled,
      base::Bind(&em::CloudPolicySettings::mutable_alternateerrorpagesenabled,
                 base::Unretained(policy)));
  EncodeBoolean(
      key::kSearchSuggestEnabled,
      base::Bind(&em::CloudPolicySettings::mutable_searchsuggestenabled,
                 base::Unretained(policy)));
  EncodeInteger(
      key::kNetworkPredictionOptions,
      base::Bind(&em::CloudPolicySettings::mutable_networkpredictionoptions,
                 base::Unretained(policy)));
  EncodeBoolean(
      key::kWPADQuickCheckEnabled,
      base::Bind(&em::CloudPolicySettings::mutable_wpadquickcheckenabled,
                 base::Unretained(policy)));
  EncodeStringList(key::kDisabledSchemes,
                   base::Bind(&em::CloudPolicySettings::mutable_disabledschemes,
                              base::Unretained(policy)));
  EncodeBoolean(
      key::kHttp09OnNonDefaultPortsEnabled,
      base::Bind(
          &em::CloudPolicySettings::mutable_http09onnondefaultportsenabled,
          base::Unretained(policy)));
  EncodeBoolean(key::kJavascriptEnabled,
                base::Bind(&em::CloudPolicySettings::mutable_javascriptenabled,
                           base::Unretained(policy)));
  EncodeBoolean(key::kIncognitoEnabled,
                base::Bind(&em::CloudPolicySettings::mutable_incognitoenabled,
                           base::Unretained(policy)));
  EncodeInteger(
      key::kIncognitoModeAvailability,
      base::Bind(&em::CloudPolicySettings::mutable_incognitomodeavailability,
                 base::Unretained(policy)));
  EncodeBoolean(
      key::kSavingBrowserHistoryDisabled,
      base::Bind(&em::CloudPolicySettings::mutable_savingbrowserhistorydisabled,
                 base::Unretained(policy)));
  EncodeBoolean(
      key::kAllowDinosaurEasterEgg,
      base::Bind(&em::CloudPolicySettings::mutable_allowdinosaureasteregg,
                 base::Unretained(policy)));
  EncodeString(
      key::kRemoteAccessHostClientDomain,
      base::Bind(&em::CloudPolicySettings::mutable_remoteaccesshostclientdomain,
                 base::Unretained(policy)));
  EncodeBoolean(
      key::kRemoteAccessHostFirewallTraversal,
      base::Bind(
          &em::CloudPolicySettings::mutable_remoteaccesshostfirewalltraversal,
          base::Unretained(policy)));
  EncodeString(
      key::kRemoteAccessHostDomain,
      base::Bind(&em::CloudPolicySettings::mutable_remoteaccesshostdomain,
                 base::Unretained(policy)));
  EncodeString(
      key::kRemoteAccessHostTalkGadgetPrefix,
      base::Bind(
          &em::CloudPolicySettings::mutable_remoteaccesshosttalkgadgetprefix,
          base::Unretained(policy)));
  EncodeBoolean(
      key::kRemoteAccessHostRequireCurtain,
      base::Bind(
          &em::CloudPolicySettings::mutable_remoteaccesshostrequirecurtain,
          base::Unretained(policy)));
  EncodeBoolean(
      key::kRemoteAccessHostAllowClientPairing,
      base::Bind(
          &em::CloudPolicySettings::mutable_remoteaccesshostallowclientpairing,
          base::Unretained(policy)));
  EncodeBoolean(
      key::kRemoteAccessHostAllowGnubbyAuth,
      base::Bind(
          &em::CloudPolicySettings::mutable_remoteaccesshostallowgnubbyauth,
          base::Unretained(policy)));
  EncodeBoolean(key::kRemoteAccessHostAllowRelayedConnection,
                base::Bind(&em::CloudPolicySettings::
                               mutable_remoteaccesshostallowrelayedconnection,
                           base::Unretained(policy)));
  EncodeString(
      key::kRemoteAccessHostUdpPortRange,
      base::Bind(&em::CloudPolicySettings::mutable_remoteaccesshostudpportrange,
                 base::Unretained(policy)));
  EncodeBoolean(
      key::kRemoteAccessHostMatchUsername,
      base::Bind(
          &em::CloudPolicySettings::mutable_remoteaccesshostmatchusername,
          base::Unretained(policy)));
  EncodeString(
      key::kRemoteAccessHostTokenUrl,
      base::Bind(&em::CloudPolicySettings::mutable_remoteaccesshosttokenurl,
                 base::Unretained(policy)));
  EncodeString(
      key::kRemoteAccessHostTokenValidationUrl,
      base::Bind(
          &em::CloudPolicySettings::mutable_remoteaccesshosttokenvalidationurl,
          base::Unretained(policy)));
  EncodeString(
      key::kRemoteAccessHostTokenValidationCertificateIssuer,
      base::Bind(&em::CloudPolicySettings::
                     mutable_remoteaccesshosttokenvalidationcertificateissuer,
                 base::Unretained(policy)));
  EncodeBoolean(key::kPrintingEnabled,
                base::Bind(&em::CloudPolicySettings::mutable_printingenabled,
                           base::Unretained(policy)));
  EncodeBoolean(key::kForceSafeSearch,
                base::Bind(&em::CloudPolicySettings::mutable_forcesafesearch,
                           base::Unretained(policy)));
  EncodeBoolean(
      key::kForceGoogleSafeSearch,
      base::Bind(&em::CloudPolicySettings::mutable_forcegooglesafesearch,
                 base::Unretained(policy)));
  EncodeBoolean(
      key::kForceYouTubeSafetyMode,
      base::Bind(&em::CloudPolicySettings::mutable_forceyoutubesafetymode,
                 base::Unretained(policy)));
  EncodeBoolean(
      key::kSafeBrowsingEnabled,
      base::Bind(&em::CloudPolicySettings::mutable_safebrowsingenabled,
                 base::Unretained(policy)));
  EncodeBoolean(
      key::kPasswordManagerEnabled,
      base::Bind(&em::CloudPolicySettings::mutable_passwordmanagerenabled,
                 base::Unretained(policy)));
  EncodeBoolean(key::kAutoFillEnabled,
                base::Bind(&em::CloudPolicySettings::mutable_autofillenabled,
                           base::Unretained(policy)));
  EncodeStringList(key::kDisabledPlugins,
                   base::Bind(&em::CloudPolicySettings::mutable_disabledplugins,
                              base::Unretained(policy)));
  EncodeStringList(key::kEnabledPlugins,
                   base::Bind(&em::CloudPolicySettings::mutable_enabledplugins,
                              base::Unretained(policy)));
  EncodeStringList(
      key::kDisabledPluginsExceptions,
      base::Bind(&em::CloudPolicySettings::mutable_disabledpluginsexceptions,
                 base::Unretained(policy)));
  EncodeBoolean(
      key::kDisablePluginFinder,
      base::Bind(&em::CloudPolicySettings::mutable_disablepluginfinder,
                 base::Unretained(policy)));
  EncodeBoolean(key::kSyncDisabled,
                base::Bind(&em::CloudPolicySettings::mutable_syncdisabled,
                           base::Unretained(policy)));
  EncodeString(key::kDownloadDirectory,
               base::Bind(&em::CloudPolicySettings::mutable_downloaddirectory,
                          base::Unretained(policy)));
  EncodeBoolean(key::kCaptivePortalAuthenticationIgnoresProxy,
                base::Bind(&em::CloudPolicySettings::
                               mutable_captiveportalauthenticationignoresproxy,
                           base::Unretained(policy)));
  EncodeString(key::kProxyMode,
               base::Bind(&em::CloudPolicySettings::mutable_proxymode,
                          base::Unretained(policy)));
  EncodeInteger(key::kProxyServerMode,
                base::Bind(&em::CloudPolicySettings::mutable_proxyservermode,
                           base::Unretained(policy)));
  EncodeString(key::kProxyServer,
               base::Bind(&em::CloudPolicySettings::mutable_proxyserver,
                          base::Unretained(policy)));
  EncodeString(key::kProxyPacUrl,
               base::Bind(&em::CloudPolicySettings::mutable_proxypacurl,
                          base::Unretained(policy)));
  EncodeString(key::kProxyBypassList,
               base::Bind(&em::CloudPolicySettings::mutable_proxybypasslist,
                          base::Unretained(policy)));
  EncodeString(key::kProxySettings,
               base::Bind(&em::CloudPolicySettings::mutable_proxysettings,
                          base::Unretained(policy)));
  EncodeStringList(
      key::kExtensionInstallBlacklist,
      base::Bind(&em::CloudPolicySettings::mutable_extensioninstallblacklist,
                 base::Unretained(policy)));
  EncodeStringList(
      key::kExtensionInstallWhitelist,
      base::Bind(&em::CloudPolicySettings::mutable_extensioninstallwhitelist,
                 base::Unretained(policy)));
  EncodeStringList(
      key::kExtensionInstallForcelist,
      base::Bind(&em::CloudPolicySettings::mutable_extensioninstallforcelist,
                 base::Unretained(policy)));
  EncodeStringList(
      key::kExtensionInstallSources,
      base::Bind(&em::CloudPolicySettings::mutable_extensioninstallsources,
                 base::Unretained(policy)));
  EncodeStringList(
      key::kExtensionAllowedTypes,
      base::Bind(&em::CloudPolicySettings::mutable_extensionallowedtypes,
                 base::Unretained(policy)));
  EncodeString(key::kExtensionSettings,
               base::Bind(&em::CloudPolicySettings::mutable_extensionsettings,
                          base::Unretained(policy)));
  EncodeBoolean(key::kShowHomeButton,
                base::Bind(&em::CloudPolicySettings::mutable_showhomebutton,
                           base::Unretained(policy)));
  EncodeBoolean(
      key::kDeveloperToolsDisabled,
      base::Bind(&em::CloudPolicySettings::mutable_developertoolsdisabled,
                 base::Unretained(policy)));
  EncodeInteger(key::kRestoreOnStartup,
                base::Bind(&em::CloudPolicySettings::mutable_restoreonstartup,
                           base::Unretained(policy)));
  EncodeStringList(
      key::kRestoreOnStartupURLs,
      base::Bind(&em::CloudPolicySettings::mutable_restoreonstartupurls,
                 base::Unretained(policy)));
  EncodeBoolean(
      key::kBlockThirdPartyCookies,
      base::Bind(&em::CloudPolicySettings::mutable_blockthirdpartycookies,
                 base::Unretained(policy)));
  EncodeBoolean(
      key::kDefaultSearchProviderEnabled,
      base::Bind(&em::CloudPolicySettings::mutable_defaultsearchproviderenabled,
                 base::Unretained(policy)));
  EncodeString(
      key::kDefaultSearchProviderName,
      base::Bind(&em::CloudPolicySettings::mutable_defaultsearchprovidername,
                 base::Unretained(policy)));
  EncodeString(
      key::kDefaultSearchProviderKeyword,
      base::Bind(&em::CloudPolicySettings::mutable_defaultsearchproviderkeyword,
                 base::Unretained(policy)));
  EncodeString(
      key::kDefaultSearchProviderSearchURL,
      base::Bind(
          &em::CloudPolicySettings::mutable_defaultsearchprovidersearchurl,
          base::Unretained(policy)));
  EncodeString(
      key::kDefaultSearchProviderSuggestURL,
      base::Bind(
          &em::CloudPolicySettings::mutable_defaultsearchprovidersuggesturl,
          base::Unretained(policy)));
  EncodeString(
      key::kDefaultSearchProviderInstantURL,
      base::Bind(
          &em::CloudPolicySettings::mutable_defaultsearchproviderinstanturl,
          base::Unretained(policy)));
  EncodeString(
      key::kDefaultSearchProviderIconURL,
      base::Bind(&em::CloudPolicySettings::mutable_defaultsearchprovidericonurl,
                 base::Unretained(policy)));
  EncodeStringList(
      key::kDefaultSearchProviderEncodings,
      base::Bind(
          &em::CloudPolicySettings::mutable_defaultsearchproviderencodings,
          base::Unretained(policy)));
  EncodeStringList(
      key::kDefaultSearchProviderAlternateURLs,
      base::Bind(
          &em::CloudPolicySettings::mutable_defaultsearchprovideralternateurls,
          base::Unretained(policy)));
  EncodeString(
      key::kDefaultSearchProviderSearchTermsReplacementKey,
      base::Bind(&em::CloudPolicySettings::
                     mutable_defaultsearchprovidersearchtermsreplacementkey,
                 base::Unretained(policy)));
  EncodeString(
      key::kDefaultSearchProviderImageURL,
      base::Bind(
          &em::CloudPolicySettings::mutable_defaultsearchproviderimageurl,
          base::Unretained(policy)));
  EncodeString(
      key::kDefaultSearchProviderNewTabURL,
      base::Bind(
          &em::CloudPolicySettings::mutable_defaultsearchprovidernewtaburl,
          base::Unretained(policy)));
  EncodeString(key::kDefaultSearchProviderSearchURLPostParams,
               base::Bind(&em::CloudPolicySettings::
                              mutable_defaultsearchprovidersearchurlpostparams,
                          base::Unretained(policy)));
  EncodeString(key::kDefaultSearchProviderSuggestURLPostParams,
               base::Bind(&em::CloudPolicySettings::
                              mutable_defaultsearchprovidersuggesturlpostparams,
                          base::Unretained(policy)));
  EncodeString(key::kDefaultSearchProviderInstantURLPostParams,
               base::Bind(&em::CloudPolicySettings::
                              mutable_defaultsearchproviderinstanturlpostparams,
                          base::Unretained(policy)));
  EncodeString(key::kDefaultSearchProviderImageURLPostParams,
               base::Bind(&em::CloudPolicySettings::
                              mutable_defaultsearchproviderimageurlpostparams,
                          base::Unretained(policy)));
  EncodeInteger(
      key::kDefaultCookiesSetting,
      base::Bind(&em::CloudPolicySettings::mutable_defaultcookiessetting,
                 base::Unretained(policy)));
  EncodeInteger(
      key::kDefaultImagesSetting,
      base::Bind(&em::CloudPolicySettings::mutable_defaultimagessetting,
                 base::Unretained(policy)));
  EncodeInteger(
      key::kDefaultJavaScriptSetting,
      base::Bind(&em::CloudPolicySettings::mutable_defaultjavascriptsetting,
                 base::Unretained(policy)));
  EncodeInteger(
      key::kDefaultPluginsSetting,
      base::Bind(&em::CloudPolicySettings::mutable_defaultpluginssetting,
                 base::Unretained(policy)));
  EncodeInteger(
      key::kDefaultPopupsSetting,
      base::Bind(&em::CloudPolicySettings::mutable_defaultpopupssetting,
                 base::Unretained(policy)));
  EncodeInteger(
      key::kDefaultNotificationsSetting,
      base::Bind(&em::CloudPolicySettings::mutable_defaultnotificationssetting,
                 base::Unretained(policy)));
  EncodeInteger(
      key::kDefaultGeolocationSetting,
      base::Bind(&em::CloudPolicySettings::mutable_defaultgeolocationsetting,
                 base::Unretained(policy)));
  EncodeInteger(
      key::kDefaultMediaStreamSetting,
      base::Bind(&em::CloudPolicySettings::mutable_defaultmediastreamsetting,
                 base::Unretained(policy)));
  EncodeInteger(
      key::kDefaultWebBluetoothGuardSetting,
      base::Bind(
          &em::CloudPolicySettings::mutable_defaultwebbluetoothguardsetting,
          base::Unretained(policy)));
  EncodeInteger(
      key::kDefaultKeygenSetting,
      base::Bind(&em::CloudPolicySettings::mutable_defaultkeygensetting,
                 base::Unretained(policy)));
  EncodeStringList(
      key::kAutoSelectCertificateForUrls,
      base::Bind(&em::CloudPolicySettings::mutable_autoselectcertificateforurls,
                 base::Unretained(policy)));
  EncodeStringList(
      key::kCookiesAllowedForUrls,
      base::Bind(&em::CloudPolicySettings::mutable_cookiesallowedforurls,
                 base::Unretained(policy)));
  EncodeStringList(
      key::kCookiesBlockedForUrls,
      base::Bind(&em::CloudPolicySettings::mutable_cookiesblockedforurls,
                 base::Unretained(policy)));
  EncodeStringList(
      key::kCookiesSessionOnlyForUrls,
      base::Bind(&em::CloudPolicySettings::mutable_cookiessessiononlyforurls,
                 base::Unretained(policy)));
  EncodeStringList(
      key::kImagesAllowedForUrls,
      base::Bind(&em::CloudPolicySettings::mutable_imagesallowedforurls,
                 base::Unretained(policy)));
  EncodeStringList(
      key::kImagesBlockedForUrls,
      base::Bind(&em::CloudPolicySettings::mutable_imagesblockedforurls,
                 base::Unretained(policy)));
  EncodeStringList(
      key::kJavaScriptAllowedForUrls,
      base::Bind(&em::CloudPolicySettings::mutable_javascriptallowedforurls,
                 base::Unretained(policy)));
  EncodeStringList(
      key::kJavaScriptBlockedForUrls,
      base::Bind(&em::CloudPolicySettings::mutable_javascriptblockedforurls,
                 base::Unretained(policy)));
  EncodeStringList(
      key::kKeygenAllowedForUrls,
      base::Bind(&em::CloudPolicySettings::mutable_keygenallowedforurls,
                 base::Unretained(policy)));
  EncodeStringList(
      key::kKeygenBlockedForUrls,
      base::Bind(&em::CloudPolicySettings::mutable_keygenblockedforurls,
                 base::Unretained(policy)));
  EncodeStringList(
      key::kPluginsAllowedForUrls,
      base::Bind(&em::CloudPolicySettings::mutable_pluginsallowedforurls,
                 base::Unretained(policy)));
  EncodeStringList(
      key::kPluginsBlockedForUrls,
      base::Bind(&em::CloudPolicySettings::mutable_pluginsblockedforurls,
                 base::Unretained(policy)));
  EncodeStringList(
      key::kPopupsAllowedForUrls,
      base::Bind(&em::CloudPolicySettings::mutable_popupsallowedforurls,
                 base::Unretained(policy)));
  EncodeString(
      key::kRegisteredProtocolHandlers,
      base::Bind(&em::CloudPolicySettings::mutable_registeredprotocolhandlers,
                 base::Unretained(policy)));
  EncodeStringList(
      key::kPopupsBlockedForUrls,
      base::Bind(&em::CloudPolicySettings::mutable_popupsblockedforurls,
                 base::Unretained(policy)));
  EncodeStringList(
      key::kNotificationsAllowedForUrls,
      base::Bind(&em::CloudPolicySettings::mutable_notificationsallowedforurls,
                 base::Unretained(policy)));
  EncodeStringList(
      key::kNotificationsBlockedForUrls,
      base::Bind(&em::CloudPolicySettings::mutable_notificationsblockedforurls,
                 base::Unretained(policy)));
  EncodeBoolean(key::kDisable3DAPIs,
                base::Bind(&em::CloudPolicySettings::mutable_disable3dapis,
                           base::Unretained(policy)));
  EncodeInteger(key::kPolicyRefreshRate,
                base::Bind(&em::CloudPolicySettings::mutable_policyrefreshrate,
                           base::Unretained(policy)));
  EncodeInteger(
      key::kMaxInvalidationFetchDelay,
      base::Bind(&em::CloudPolicySettings::mutable_maxinvalidationfetchdelay,
                 base::Unretained(policy)));
  EncodeBoolean(
      key::kChromeOsLockOnIdleSuspend,
      base::Bind(&em::CloudPolicySettings::mutable_chromeoslockonidlesuspend,
                 base::Unretained(policy)));
}

void UserPolicyEncoder::EncodeUserPolicy2(
    em::CloudPolicySettings* policy) const {
  EncodeString(
      key::kChromeOsMultiProfileUserBehavior,
      base::Bind(
          &em::CloudPolicySettings::mutable_chromeosmultiprofileuserbehavior,
          base::Unretained(policy)));
  EncodeBoolean(key::kTranslateEnabled,
                base::Bind(&em::CloudPolicySettings::mutable_translateenabled,
                           base::Unretained(policy)));
  EncodeBoolean(
      key::kAllowOutdatedPlugins,
      base::Bind(&em::CloudPolicySettings::mutable_allowoutdatedplugins,
                 base::Unretained(policy)));
  EncodeBoolean(
      key::kAlwaysAuthorizePlugins,
      base::Bind(&em::CloudPolicySettings::mutable_alwaysauthorizeplugins,
                 base::Unretained(policy)));
  EncodeBoolean(key::kBookmarkBarEnabled,
                base::Bind(&em::CloudPolicySettings::mutable_bookmarkbarenabled,
                           base::Unretained(policy)));
  EncodeBoolean(
      key::kEditBookmarksEnabled,
      base::Bind(&em::CloudPolicySettings::mutable_editbookmarksenabled,
                 base::Unretained(policy)));
  EncodeStringList(key::kURLBlacklist,
                   base::Bind(&em::CloudPolicySettings::mutable_urlblacklist,
                              base::Unretained(policy)));
  EncodeStringList(key::kURLWhitelist,
                   base::Bind(&em::CloudPolicySettings::mutable_urlwhitelist,
                              base::Unretained(policy)));
  EncodeString(
      key::kOpenNetworkConfiguration,
      base::Bind(&em::CloudPolicySettings::mutable_opennetworkconfiguration,
                 base::Unretained(policy)));
  EncodeString(
      key::kDefaultPrinterSelection,
      base::Bind(&em::CloudPolicySettings::mutable_defaultprinterselection,
                 base::Unretained(policy)));
  EncodeBoolean(
      key::kEnableOnlineRevocationChecks,
      base::Bind(&em::CloudPolicySettings::mutable_enableonlinerevocationchecks,
                 base::Unretained(policy)));
  EncodeBoolean(
      key::kRequireOnlineRevocationChecksForLocalAnchors,
      base::Bind(&em::CloudPolicySettings::
                     mutable_requireonlinerevocationchecksforlocalanchors,
                 base::Unretained(policy)));
  EncodeBoolean(
      key::kEnableSha1ForLocalAnchors,
      base::Bind(&em::CloudPolicySettings::mutable_enablesha1forlocalanchors,
                 base::Unretained(policy)));
  EncodeInteger(
      key::kSAMLOfflineSigninTimeLimit,
      base::Bind(&em::CloudPolicySettings::mutable_samlofflinesignintimelimit,
                 base::Unretained(policy)));
  EncodeBoolean(key::kDriveDisabled,
                base::Bind(&em::CloudPolicySettings::mutable_drivedisabled,
                           base::Unretained(policy)));
  EncodeBoolean(
      key::kDriveDisabledOverCellular,
      base::Bind(&em::CloudPolicySettings::mutable_drivedisabledovercellular,
                 base::Unretained(policy)));
  EncodeStringList(
      key::kPinnedLauncherApps,
      base::Bind(&em::CloudPolicySettings::mutable_pinnedlauncherapps,
                 base::Unretained(policy)));
  EncodeBoolean(
      key::kDisableSafeBrowsingProceedAnyway,
      base::Bind(
          &em::CloudPolicySettings::mutable_disablesafebrowsingproceedanyway,
          base::Unretained(policy)));
  EncodeBoolean(
      key::kSafeBrowsingExtendedReportingOptInAllowed,
      base::Bind(&em::CloudPolicySettings::
                     mutable_safebrowsingextendedreportingoptinallowed,
                 base::Unretained(policy)));
  EncodeBoolean(
      key::kSpellCheckServiceEnabled,
      base::Bind(&em::CloudPolicySettings::mutable_spellcheckserviceenabled,
                 base::Unretained(policy)));
  EncodeBoolean(
      key::kExternalStorageDisabled,
      base::Bind(&em::CloudPolicySettings::mutable_externalstoragedisabled,
                 base::Unretained(policy)));
  EncodeBoolean(
      key::kExternalStorageReadOnly,
      base::Bind(&em::CloudPolicySettings::mutable_externalstoragereadonly,
                 base::Unretained(policy)));
  EncodeBoolean(key::kAudioOutputAllowed,
                base::Bind(&em::CloudPolicySettings::mutable_audiooutputallowed,
                           base::Unretained(policy)));
  EncodeBoolean(
      key::kAudioCaptureAllowed,
      base::Bind(&em::CloudPolicySettings::mutable_audiocaptureallowed,
                 base::Unretained(policy)));
  EncodeStringList(
      key::kAudioCaptureAllowedUrls,
      base::Bind(&em::CloudPolicySettings::mutable_audiocaptureallowedurls,
                 base::Unretained(policy)));
  EncodeBoolean(
      key::kVideoCaptureAllowed,
      base::Bind(&em::CloudPolicySettings::mutable_videocaptureallowed,
                 base::Unretained(policy)));
  EncodeStringList(
      key::kVideoCaptureAllowedUrls,
      base::Bind(&em::CloudPolicySettings::mutable_videocaptureallowedurls,
                 base::Unretained(policy)));
  EncodeBoolean(key::kDisableScreenshots,
                base::Bind(&em::CloudPolicySettings::mutable_disablescreenshots,
                           base::Unretained(policy)));
  EncodeBoolean(
      key::kTouchVirtualKeyboardEnabled,
      base::Bind(&em::CloudPolicySettings::mutable_touchvirtualkeyboardenabled,
                 base::Unretained(policy)));
  EncodeBoolean(
      key::kShowLogoutButtonInTray,
      base::Bind(&em::CloudPolicySettings::mutable_showlogoutbuttonintray,
                 base::Unretained(policy)));
  EncodeString(
      key::kShelfAutoHideBehavior,
      base::Bind(&em::CloudPolicySettings::mutable_shelfautohidebehavior,
                 base::Unretained(policy)));
  EncodeString(key::kUserDisplayName,
               base::Bind(&em::CloudPolicySettings::mutable_userdisplayname,
                          base::Unretained(policy)));
  EncodeInteger(key::kSessionLengthLimit,
                base::Bind(&em::CloudPolicySettings::mutable_sessionlengthlimit,
                           base::Unretained(policy)));
  EncodeBoolean(key::kFullscreenAllowed,
                base::Bind(&em::CloudPolicySettings::mutable_fullscreenallowed,
                           base::Unretained(policy)));
  EncodeInteger(key::kScreenDimDelayAC,
                base::Bind(&em::CloudPolicySettings::mutable_screendimdelayac,
                           base::Unretained(policy)));
  EncodeInteger(key::kScreenOffDelayAC,
                base::Bind(&em::CloudPolicySettings::mutable_screenoffdelayac,
                           base::Unretained(policy)));
  EncodeInteger(key::kScreenLockDelayAC,
                base::Bind(&em::CloudPolicySettings::mutable_screenlockdelayac,
                           base::Unretained(policy)));
  EncodeInteger(key::kIdleWarningDelayAC,
                base::Bind(&em::CloudPolicySettings::mutable_idlewarningdelayac,
                           base::Unretained(policy)));
  EncodeInteger(key::kIdleDelayAC,
                base::Bind(&em::CloudPolicySettings::mutable_idledelayac,
                           base::Unretained(policy)));
  EncodeInteger(
      key::kScreenDimDelayBattery,
      base::Bind(&em::CloudPolicySettings::mutable_screendimdelaybattery,
                 base::Unretained(policy)));
  EncodeInteger(
      key::kScreenOffDelayBattery,
      base::Bind(&em::CloudPolicySettings::mutable_screenoffdelaybattery,
                 base::Unretained(policy)));
  EncodeInteger(
      key::kScreenLockDelayBattery,
      base::Bind(&em::CloudPolicySettings::mutable_screenlockdelaybattery,
                 base::Unretained(policy)));
  EncodeInteger(
      key::kIdleWarningDelayBattery,
      base::Bind(&em::CloudPolicySettings::mutable_idlewarningdelaybattery,
                 base::Unretained(policy)));
  EncodeInteger(key::kIdleDelayBattery,
                base::Bind(&em::CloudPolicySettings::mutable_idledelaybattery,
                           base::Unretained(policy)));
  EncodeInteger(key::kIdleAction,
                base::Bind(&em::CloudPolicySettings::mutable_idleaction,
                           base::Unretained(policy)));
  EncodeInteger(key::kIdleActionAC,
                base::Bind(&em::CloudPolicySettings::mutable_idleactionac,
                           base::Unretained(policy)));
  EncodeInteger(key::kIdleActionBattery,
                base::Bind(&em::CloudPolicySettings::mutable_idleactionbattery,
                           base::Unretained(policy)));
  EncodeInteger(key::kLidCloseAction,
                base::Bind(&em::CloudPolicySettings::mutable_lidcloseaction,
                           base::Unretained(policy)));
  EncodeBoolean(
      key::kPowerManagementUsesAudioActivity,
      base::Bind(
          &em::CloudPolicySettings::mutable_powermanagementusesaudioactivity,
          base::Unretained(policy)));
  EncodeBoolean(
      key::kPowerManagementUsesVideoActivity,
      base::Bind(
          &em::CloudPolicySettings::mutable_powermanagementusesvideoactivity,
          base::Unretained(policy)));
  EncodeInteger(
      key::kPresentationScreenDimDelayScale,
      base::Bind(
          &em::CloudPolicySettings::mutable_presentationscreendimdelayscale,
          base::Unretained(policy)));
  EncodeBoolean(
      key::kAllowScreenWakeLocks,
      base::Bind(&em::CloudPolicySettings::mutable_allowscreenwakelocks,
                 base::Unretained(policy)));
  EncodeInteger(
      key::kUserActivityScreenDimDelayScale,
      base::Bind(
          &em::CloudPolicySettings::mutable_useractivityscreendimdelayscale,
          base::Unretained(policy)));
  EncodeBoolean(
      key::kWaitForInitialUserActivity,
      base::Bind(&em::CloudPolicySettings::mutable_waitforinitialuseractivity,
                 base::Unretained(policy)));
  EncodeString(
      key::kPowerManagementIdleSettings,
      base::Bind(&em::CloudPolicySettings::mutable_powermanagementidlesettings,
                 base::Unretained(policy)));
  EncodeString(key::kScreenLockDelays,
               base::Bind(&em::CloudPolicySettings::mutable_screenlockdelays,
                          base::Unretained(policy)));
  EncodeString(key::kTermsOfServiceURL,
               base::Bind(&em::CloudPolicySettings::mutable_termsofserviceurl,
                          base::Unretained(policy)));
  EncodeBoolean(key::kShowAccessibilityOptionsInSystemTrayMenu,
                base::Bind(&em::CloudPolicySettings::
                               mutable_showaccessibilityoptionsinsystemtraymenu,
                           base::Unretained(policy)));
  EncodeBoolean(key::kLargeCursorEnabled,
                base::Bind(&em::CloudPolicySettings::mutable_largecursorenabled,
                           base::Unretained(policy)));
  EncodeBoolean(
      key::kSpokenFeedbackEnabled,
      base::Bind(&em::CloudPolicySettings::mutable_spokenfeedbackenabled,
                 base::Unretained(policy)));
  EncodeBoolean(
      key::kHighContrastEnabled,
      base::Bind(&em::CloudPolicySettings::mutable_highcontrastenabled,
                 base::Unretained(policy)));
  EncodeBoolean(
      key::kVirtualKeyboardEnabled,
      base::Bind(&em::CloudPolicySettings::mutable_virtualkeyboardenabled,
                 base::Unretained(policy)));
  EncodeBoolean(
      key::kKeyboardDefaultToFunctionKeys,
      base::Bind(
          &em::CloudPolicySettings::mutable_keyboarddefaulttofunctionkeys,
          base::Unretained(policy)));
  EncodeInteger(
      key::kScreenMagnifierType,
      base::Bind(&em::CloudPolicySettings::mutable_screenmagnifiertype,
                 base::Unretained(policy)));
  EncodeBoolean(
      key::kAttestationEnabledForUser,
      base::Bind(&em::CloudPolicySettings::mutable_attestationenabledforuser,
                 base::Unretained(policy)));
  EncodeStringList(
      key::kAttestationExtensionWhitelist,
      base::Bind(
          &em::CloudPolicySettings::mutable_attestationextensionwhitelist,
          base::Unretained(policy)));
  EncodeInteger(
      key::kContentPackDefaultFilteringBehavior,
      base::Bind(
          &em::CloudPolicySettings::mutable_contentpackdefaultfilteringbehavior,
          base::Unretained(policy)));
  EncodeString(
      key::kContentPackManualBehaviorHosts,
      base::Bind(
          &em::CloudPolicySettings::mutable_contentpackmanualbehaviorhosts,
          base::Unretained(policy)));
  EncodeString(
      key::kContentPackManualBehaviorURLs,
      base::Bind(
          &em::CloudPolicySettings::mutable_contentpackmanualbehaviorurls,
          base::Unretained(policy)));
  EncodeString(key::kManagedBookmarks,
               base::Bind(&em::CloudPolicySettings::mutable_managedbookmarks,
                          base::Unretained(policy)));
  EncodeString(key::kUserAvatarImage,
               base::Bind(&em::CloudPolicySettings::mutable_useravatarimage,
                          base::Unretained(policy)));
  EncodeString(key::kWallpaperImage,
               base::Bind(&em::CloudPolicySettings::mutable_wallpaperimage,
                          base::Unretained(policy)));
  EncodeStringList(
      key::kEnableDeprecatedWebPlatformFeatures,
      base::Bind(
          &em::CloudPolicySettings::mutable_enabledeprecatedwebplatformfeatures,
          base::Unretained(policy)));
  EncodeBoolean(key::kEasyUnlockAllowed,
                base::Bind(&em::CloudPolicySettings::mutable_easyunlockallowed,
                           base::Unretained(policy)));
  EncodeStringList(key::kSessionLocales,
                   base::Bind(&em::CloudPolicySettings::mutable_sessionlocales,
                              base::Unretained(policy)));
  EncodeStringList(
      key::kCertificateTransparencyEnforcementDisabledForUrls,
      base::Bind(&em::CloudPolicySettings::
                     mutable_certificatetransparencyenforcementdisabledforurls,
                 base::Unretained(policy)));
  EncodeBoolean(key::kDHEEnabled,
                base::Bind(&em::CloudPolicySettings::mutable_dheenabled,
                           base::Unretained(policy)));
  EncodeBoolean(
      key::kForceMaximizeOnFirstRun,
      base::Bind(&em::CloudPolicySettings::mutable_forcemaximizeonfirstrun,
                 base::Unretained(policy)));
  EncodeBoolean(
      key::kSSLErrorOverrideAllowed,
      base::Bind(&em::CloudPolicySettings::mutable_sslerroroverrideallowed,
                 base::Unretained(policy)));
  EncodeBoolean(key::kQuicAllowed,
                base::Bind(&em::CloudPolicySettings::mutable_quicallowed,
                           base::Unretained(policy)));
  EncodeString(key::kKeyPermissions,
               base::Bind(&em::CloudPolicySettings::mutable_keypermissions,
                          base::Unretained(policy)));
  EncodeBoolean(
      key::kUnifiedDesktopEnabledByDefault,
      base::Bind(
          &em::CloudPolicySettings::mutable_unifieddesktopenabledbydefault,
          base::Unretained(policy)));
  EncodeBoolean(key::kArcEnabled,
                base::Bind(&em::CloudPolicySettings::mutable_arcenabled,
                           base::Unretained(policy)));
  EncodeString(key::kArcPolicy,
               base::Bind(&em::CloudPolicySettings::mutable_arcpolicy,
                          base::Unretained(policy)));
  EncodeBoolean(
      key::kSuppressUnsupportedOSWarning,
      base::Bind(&em::CloudPolicySettings::mutable_suppressunsupportedoswarning,
                 base::Unretained(policy)));
  EncodeBoolean(
      key::kTaskManagerEndProcessEnabled,
      base::Bind(&em::CloudPolicySettings::mutable_taskmanagerendprocessenabled,
                 base::Unretained(policy)));
  EncodeBoolean(key::kAllowScreenLock,
                base::Bind(&em::CloudPolicySettings::mutable_allowscreenlock,
                           base::Unretained(policy)));
  EncodeInteger(
      key::kArcCertificatesSyncMode,
      base::Bind(&em::CloudPolicySettings::mutable_arccertificatessyncmode,
                 base::Unretained(policy)));
  EncodeString(
      key::kAllowedDomainsForApps,
      base::Bind(&em::CloudPolicySettings::mutable_alloweddomainsforapps,
                 base::Unretained(policy)));
  EncodeBoolean(
      key::kPacHttpsUrlStrippingEnabled,
      base::Bind(&em::CloudPolicySettings::mutable_pachttpsurlstrippingenabled,
                 base::Unretained(policy)));
  EncodeBoolean(key::kEnableMediaRouter,
                base::Bind(&em::CloudPolicySettings::mutable_enablemediarouter,
                           base::Unretained(policy)));
  EncodeBoolean(
      key::kArcBackupRestoreEnabled,
      base::Bind(&em::CloudPolicySettings::mutable_arcbackuprestoreenabled,
                 base::Unretained(policy)));
  EncodeString(key::kWebRtcUdpPortRange,
               base::Bind(&em::CloudPolicySettings::mutable_webrtcudpportrange,
                          base::Unretained(policy)));
  EncodeBoolean(
      key::kComponentUpdatesEnabled,
      base::Bind(&em::CloudPolicySettings::mutable_componentupdatesenabled,
                 base::Unretained(policy)));
}

}  // namespace policy
