{
# policy_templates.json - Metafile for policy templates
#
# The content of this file is evaluated as a Python expression.
#
# This file is used as input to generate the following policy templates:
# ADM, ADMX+ADML, MCX/plist and html documentation.
#
# Policy templates are user interface definitions or documents about the
# policies that can be used to configure Chrome. Each policy is a name-value
# pair where the value has a given type. Chrome looks up the values using the
# names of the policies. In the user interface where the values can be set,
# related policies might appear together in policy groups. The grouping is not
# visible to Chrome.
#
# This file contains a list of policies and groups. Each group contains a list
# of policies under the key 'policies'. All the policies and groups must have
# unique names. Group names are not exposed to Chrome at all.
#
# Each policy has a type. The currently implemented types:
#   'group': - not a real policy, contains a list of policies
#     NOTE: Currently nesting groups inside other groups is not supported.
#   'string' - a string value
#   'int' - an integer value
#   'int-enum' - the user can select an integer value from a collection of
#     items
#   'string-enum' - the user can select a string value from a collection of
#     items
#   'string-enum-list' - the user can select a set of string values from a
#     collection of items
#   'main' - a boolean value
#   'list' - a list of string values. Using this for a list of JSON strings
#     is now discouraged, because the 'dict' is better for JSON.
#   'dict' - perhaps should be named JSON. An arbitrarily complex object or
#     array, nested objects/arrays, etc. The user defines the value with JSON.
#   'external' - a policy that references external data.
#     NOTE: This type is currently supported on Chrome OS only.
#
# NOTE to 'dict' vs 'list' - in the past, 'list' has been used for a policy
# that is an array of objects. The user supplied a list of strings, and each
# of those strings was parsed as JSON, resulting in an array of objects.
# However, there are a couple of reasons why 'dict' is better for these sorts
# of policies. Some interfaces (eg the GPO editor) only allow each list item
# to be a single-line string, which is not great for inputting a complex JSON
# object. It also means any example values shown in the documentation will
# have a hybrid syntax, with both commas and new-lines being used to delimit
# array elements - and these examples will be harder to copy and paste.
# To conclude, prefer 'dict' to 'list' if JSON is involved.
#
# Each policy is tagged with risk tags that indicate potential privacy or
# security risks. They are defined at the beginning of this file (tag
# 'risk_tag_definitions').
# Each risk tag contains the following information:
#   - name: The name of the risk tag. May not contain spaces.
#   - description: Description for developers so they know which tags apply to
#       newly added policies.
#   - user-description: A text that helps users understand what a policy with
#       this tag means for their privacy and/or security.
# TODO(fhorschig|tnagel): Revisit policy tags after reviews.
#
# Policy group descriptions, policy captions and similar texts are localized
# strings taken from the <message> nodes of the .grd file. Their name attributes
# are generated from the JSON keys.
# Each item (policy or group) may have the following messages:
#   - description:
#     Describes the item it applies to.
#   - caption
#     A short, one-line summary of the item it applies to. This can appear
#     both in policy or group listings or on title bars of policy-setting
#     windows. (The caption should not end with a punctuation mark.)
#   - label (Optional, defaults to caption if not specified.)
#     A short, one-line summary of the item it applies to. The difference
#     from caption is that label always appears next to the entry field
#     where the value of the policy can be entered. 'main' policies on
#     Windows ignore this. Policies on Mac are using this instead of caption.
#
# As a reference for translators, non-translateable strings must be tagged using
# <ph name="..."></ph> as described in [1]. As these tags are pruned before
# generating the comments for .proto files, paragraphs containing such tags
# should not be line-wrapped (use one long line per paragraph instead) to allow
# for correct re-flowing of the text.
# [1] https://www.chromium.org/developers/tools-we-use-in-chromium/grit/grit-users-guide.
#
# Generated grd names:
#   Each name has two parts: the second part is either CAPTION, DESC or LABEL,
#   and the first part identifies the item the text applies to:
#   -For policies and groups:
#     IDS_POLICY_<NAME OF THE POLICY OR GROUP>
#     e.g. the name of the caption of policy HomepageLocation:
#       IDS_POLICY_HOMEPAGELOCATION_CAPTION
#     or other messages of the policy HomepageLocation:
#       IDS_POLICY_HOMEPAGELOCATION_LABEL
#       IDS_POLICY_HOMEPAGELOCATION_DESC
#   -For enum items:
#     IDS_POLICY_ENUM_<NAME OF THE ITEM>
#     e.g. the name of the caption of ProxyServerDisabled:
#       IDS_POLICY_ENUM_PROXYSERVERDISABLED_CAPTION
#
# Products and versions:
#   Each policy has the list of products and version numbers where it is
#   supported under the key 'supported_on'. Each item of this list has the
#   form of 'product:since_version-until_version', which means that support
#   for the policy in 'product' was introduced in 'since_version' and removed
#   after 'until_version'. Product names may contain a suffix specifying a
#   platform name, e.g.: 'chrome.win' is read as 'Chrome on Windows'. Version
#   numbers can be any string that does not contain ':' or '-' characters.
#
#   Currently supported product names:
#       'chrome_frame', 'chrome_os', 'android', 'webview_android',
#       'chrome.win', 'chrome.linux', 'chrome.mac', 'chrome.*'
#     For example if 'chrome.*:5-10' is specified for a policy, then it should
#     be read as:
#       'chrome.linux:5-10', 'chrome.mac:5-10', 'chrome.win:5-10'
#
#   The product name also affects in which templates the policy is included:
#     chrome.*, chrome.win, chrome_frame -> ADM, ADMX, ADML, doc
#     chrome.*, chrome.linux -> JSON, doc
#     chrome.*, chrome.mac -> plist, plist_strings, doc
#     everything else -> doc
#
#   The default list of policies supported by Chrome is also generated based
#   on the product names:
#     chrome.* -> Chrome policy definition list
#     chrome_os -> Chrome policy definition list, when building OS_CHROMEOS
#
# Annotations:
#   Additional information is specified under keys 'features' and
#   'example_value'. These are used in the generated documentation and example
#   policy configuration files. Examples must cover the entire schema, i.e. use
#   every defined property at least once.
#   'dynamic_refresh' controls if the generated documentation should state that
#   the policy supports dynamic refresh or not. Supporting dynamic refresh means
#   that Chrome respects the changes to the policy immediately, without the need
#   for restart.
#   'can_be_mandatory' Set to False to suppress the policy in the generated
#   mandatory policy templates. The generated documentation for the policy
#   will contain a suitable hint for administrators.
#   'can_be_recommended' Set to True to include the policy in the generated
#   recommended policy templates. The generated documentation for the policy
#   will contain a suitable hint for administrators.
#   Policies settings in the mandatory template override user preferences, while
#   recommended policies provide a default setting that may be overridden by the
#   user. By default, each policy is mandatory and not recommended.
#   'per_profile' controls whether a user policy applies to every user logging
#   into the browser or only one profile.
#
#   The 'max_size' key is used to specify the maximal size of the external data
#   that a policy can reference, in bytes. This annotation is compulsory for
#   policies of type 'external'. It is ignored for all other policy types.
#
#   The 'future' key is used to indicate that a policy isn't yet ready for
#   usage. It defaults to False, and currently affects the generated policy
#   templates and documentation. The policy definition list that Chrome sees
#   will include policies marked with 'future'. If a WIP policy isn't meant to
#   be seen by the policy providers either, the 'supported_on' key should be set
#   to an empty list.
#
# Schemas:
#   All policies have a key 'schema' which describes the schema of the policy.
#   This schema supports a subset of the JSON Schema standard
#   (https://json-schema.org/understanding-json-schema/index.html). For more
#   information see //components/policy/tools/schema_validator.py. This
#   validator is also used during presubmit to validate all schemas,
#   validation_schemas and the example_values. On the client-side we use
#   //components/policy/core/common/schema.h to validate policy values against
#   the provided schemas in this file. This validator supports the same subset
#   of features supported by the python schema validator used during presubmit.
#
#   For many policies this is simply a type eg 'boolean' or 'string', but for
#   'dict' policies this describes the types of not only the root object, but
#   also all of its descendants. This schema data is used to validate 'dict'
#   policies, if a SchemaValidatingPolicyHandler is configured appropriately in
#   configuration_policy_handler_list_factory.cc
#
#   Some policies at first seem to have simple schema e.g. a string or a list of
#   strings, but those strings are actually JSON strings, and this JSON has
#   another schema. This type of policy is deprecated. When adding new policies,
#   make sure the entire schema is described by the 'schema' field and that
#   there are no strings which contain JSON.
#   The legacy policies which contain JSON strings have an extra field, the
#   'validation_schema' which is used to validate not only the schema of the
#   policy itself, but also the content of the JSON strings inside the policy.
#   Do not use this field when adding new policies.
#
# IDs:
#   Since a Protocol Buffer definition is generated from this file, unique and
#   persistent IDs for all fields (but not for groups!) are needed. These are
#   specified by the 'id' keys of each policy. NEVER CHANGE EXISTING IDs,
#   because doing so would break the deployed wire format!
#   For your editing convenience:
#   The highest ID currently used is always set in the
#   'highest_id_currently_used' value at the end of this file.
#   And don't forget to also update the EnterprisePolicies enum of
#   histograms.xml (run 'python tools/metrics/histograms/update_policies.py').
#   A policy can be deleted from this file if and only if it is never launched;
#   in which case its id must be added to the 'deleted_policy_ids' list to
#   prevent reuse.
#
# Placeholders:
#   The following placeholder strings are automatically substituted:
#     $1 -> Google Chrome / Chromium
#     $2 -> Google Chrome OS / Chromium OS
#     $3 -> Google Chrome Frame / Chromium Frame
#     $6 is reserved for doc_writer
#
# Device Policy:
#   An additional flag 'device_only' (optional, defaults to False) indicates
#   that this policy is only supported as a device-level Cloud Policy. In that
#   case no entry in the UserPolicy Protobuf is generated and it is assumed that
#   it will be added to the DevicePolicy Protobuf manually. Device policy only
#   exists on Chrome OS.
#
# Management Type:
#   Chrome OS devices can either be managed through the Google cloud or through
#   Active Directory. Most policies are supported for both management types, but
#   some are not. To indicate supported management types, use
#     'supported_chrome_os_management': ['google_cloud', 'active_directory'],
#   where
#     'google_cloud' = Policy is supported for Google cloud management.
#     'active_directory' = Policy is supported for Active Directory management.
#   This setting applies to Chrome OS only. If the setting is missing, both
#   types are assumed. The array must not be empty.
#
# Enterprise defaults for user policy:
#   For managed users on Chrome OS (i.e. users receiving user policy from the
#   cloud), if the optional key 'default_for_enterprise_users' is set, its value
#   is applied as mandatory policy unless a different setting is received from
#   the cloud. This default value handling is automatically enforced by the
#   policy stack when filling the PolicyMap (specifically, by the generated
#   function SetEnterpriseUsersDefaults).
#
# Enterprise defaults for device policy:
#   The optional key 'default_for_managed_devices_doc_only' can be used to
#   document a differing default value for devices enrolled into enterprise
#   management. This is for documentation only - the enrollment-dependent
#   handling must be manually implemented.

  'risk_tag_definitions' : [
    # All following tags are ordered by severity of their impact.
    # TODO(fhorschig|tnagel): Revisit user-descriptions after reviews.
    {
      'name': 'full-admin-access',
      'description': '''Policies with this tag enable an administrator to
      execute arbitrary code or configure a machine in a way that a
      man-in-the-middle situation can occur.''',
      'user-description': '''Your administrator has set up certificates or applications that could potentially access all of your data.
      This could possibly allow inspecting and modifying all data sent and received by Chrome.'''
    },
    {
      'name': 'system-security',
      'description': '''Policies with this tag can make the user vulnerable
      against attacks which are not possible when the policies are unset.
      This includes execution of deprecated code or unsafe configuration of
      network settings and proxies.''',
      'user-description': '''Policy set by your administrator could enable functionality that is outdated or that could reduce the security of the system in other ways.'''
    },
    {
      'name': 'website-sharing',
      'description': '''Setting Policies with this tag will allow sharing
      information with a server that would normally not be allowed.
      Those information can include geolocation, audio/video device inputs or
      data that can be used to identify the user.''',
      'user-description': '''Policy set by your administrator could enable sharing of data with websites.
      Some of these data might suffice to identify you or could be used to record private information.'''
    },
    {
      'name': 'admin-sharing',
      'description': '''Policies with this tag enable an administrator to log
      the user's activity or traffic.''',
      'user-description': '''Policy configured by your administrator might allow them to gather general information about your device and your activity.'''
    },
    {
      'name': 'filtering',
      'description': '''Policies with this tag can restrict the information a
      user can query from the world-wide web. This includes blocked websites,
      enforced search settings and partly data synchronization.''',
      'user-description': '''Your administrator has set up policy that may restrict your access to websites, services or search results.'''
    },
    {
      'name': 'local-data-access',
      'description': '''Policies with this tag can cause storing data to or
      reading data from a local file system without the user's knowledge. This
      includes import of existing settings to the cloud or avoiding clean-up of
      local history data.''',
      'user-description': '''Your administrator has set up policy that could cause private data to be imported from your system or could cause private data to be written to an admin-specified place.'''
    },
    {
      'name': 'google-sharing',
      'description': '''Set policies might enforce sharing data with google,
      like crash reports or history.''',
      'user-description': '''There are policies set by your administrator which can affect the communication with Google services.
      Therefore, some services could either be unreachable or you might not be able to restrict sent data.'''
    }
  ],
  'policy_definitions': [
    {
      'name': 'Homepage',
      'type': 'group',
      'caption': '''Home page''',
      'desc': '''Configure the default home page in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> and prevents users from changing it.

      The user's home page settings are only completely locked down, if you either select the home page to be the new tab page, or set it to be a URL and specify a home page URL. If you don't specify the home page URL, then the user is still able to set the home page to the new tab page by specifying 'chrome://newtab'.''',
      'policies': [
        'HomepageLocation',
        'HomepageIsNewTabPage',
      ],
    },
    {
      'name': 'NewTabPage',
      'type': 'group',
      'caption': '''New Tab Page''',
      'desc': '''Configure the default New Tab page in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.''',
      'policies': [
        'NewTabPageLocation',
      ],
    },
    {
      'name': 'RemoteAccess',
      'type': 'group',
      'caption': '''Configure remote access options''',
      'desc': '''Configure remote access options in Chrome Remote Desktop host.

      Chrome Remote Desktop host is a native service that runs on the target machine that a user can connect to using Chrome Remote Desktop application.  The native service is packaged and executed separately from the <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> browser.

      These policies are ignored unless the
      Chrome Remote Desktop host is installed.''',
      'policies': [
        'RemoteAccessClientFirewallTraversal',
        'RemoteAccessHostClientDomain',
        'RemoteAccessHostClientDomainList',
        'RemoteAccessHostFirewallTraversal',
        'RemoteAccessHostDomain',
        'RemoteAccessHostDomainList',
        'RemoteAccessHostRequireTwoFactor',
        'RemoteAccessHostTalkGadgetPrefix',
        'RemoteAccessHostRequireCurtain',
        'RemoteAccessHostAllowClientPairing',
        'RemoteAccessHostAllowGnubbyAuth',
        'RemoteAccessHostAllowRelayedConnection',
        'RemoteAccessHostUdpPortRange',
        'RemoteAccessHostMatchUsername',
        'RemoteAccessHostTokenUrl',
        'RemoteAccessHostTokenValidationUrl',
        'RemoteAccessHostTokenValidationCertificateIssuer',
        'RemoteAccessHostDebugOverridePolicies',
        'RemoteAccessHostAllowUiAccessForRemoteAssistance',
      ],
    },
    {
      'name': 'PasswordManager',
      'type': 'group',
      'caption': '''Password manager''',
      'desc': '''Configures the password manager.''',
      'policies': [
        'PasswordManagerEnabled',
        'PasswordManagerAllowShowPasswords',
      ],
    },
    {
      'name': 'Proxy',
      'type': 'group',
      'caption': '''Proxy server''',
      'desc': '''Allows you to specify the proxy server used by <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> and prevents users from changing proxy settings.

      If you choose to never use a proxy server and always connect directly, all other options are ignored.

      If you choose to auto detect the proxy server, all other options are ignored.

      For detailed examples, visit:
      <ph name="PROXY_HELP_URL">https://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett<ex>https://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett</ex></ph>.

      If you enable this setting, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> and ARC-apps ignore all proxy-related options specified from the command line.

      Leaving these policies not set will allow the users to choose the proxy settings on their own.''',
      'policies': [
        'ProxyMode',
        'ProxyServerMode',
        'ProxyServer',
        'ProxyPacUrl',
        'ProxyBypassList',
      ],
    },
    {
      'name': 'HTTPAuthentication',
      'type': 'group',
      'caption': '''Policies for HTTP authentication''',
      'desc': '''Policies related to integrated HTTP authentication.''',
      'policies': [
        'AuthSchemes',
        'DisableAuthNegotiateCnameLookup',
        'EnableAuthNegotiatePort',
        'AuthServerWhitelist',
        'AuthNegotiateDelegateWhitelist',
        'GSSAPILibraryName',
        'AuthAndroidNegotiateAccountType',
        'AllowCrossOriginAuthPrompt',
        'NtlmV2Enabled',
      ],
    },
    {
      'name': 'Extensions',
      'type': 'group',
      'caption': '''Extensions''',
      'desc': '''Configures extension-related policies. The user is not allowed to install blacklisted extensions unless they are whitelisted. You can also force <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> to automatically install extensions by specifying them in <ph name="EXTENSION_INSTALL_FORCELIST_POLICY_NAME">ExtensionInstallForcelist</ph>. Force-installed extensions are installed regardless whether they are present in the blacklist.''',
      'policies': [
        'ExtensionInstallBlacklist',
        'ExtensionInstallWhitelist',
        'ExtensionInstallForcelist',
        'ExtensionInstallSources',
        'ExtensionAllowedTypes',
        'ExtensionSettings',
      ],
    },
    {
      'name': 'RestoreOnStartupGroup',
      'type': 'group',
      'caption': '''Startup pages''',
      'desc': '''Allows you to configure the pages that are loaded on startup.

      The contents of the list 'URLs to open at startup' are ignored unless you select 'Open a list of URLs' in 'Action on startup'.''',
      'policies': [
        'RestoreOnStartup',
        'RestoreOnStartupURLs',
      ],
    },
    {
      # TODO(joaodasilva): Flag these policies with 'can_be_recommended'
      # after fixing https://crbug.com/106683
      'name': 'DefaultSearchProvider',
      'type': 'group',
      'caption': '''Default search provider''',
      'desc': '''Configures the default search provider. You can specify the default search provider that the user will use or choose to disable default search.''',
      'policies': [
        'DefaultSearchProviderEnabled',
        'DefaultSearchProviderName',
        'DefaultSearchProviderKeyword',
        'DefaultSearchProviderSearchURL',
        'DefaultSearchProviderSuggestURL',
        'DefaultSearchProviderInstantURL',
        'DefaultSearchProviderIconURL',
        'DefaultSearchProviderEncodings',
        'DefaultSearchProviderAlternateURLs',
        'DefaultSearchProviderSearchTermsReplacementKey',
        'DefaultSearchProviderImageURL',
        'DefaultSearchProviderNewTabURL',
        'DefaultSearchProviderSearchURLPostParams',
        'DefaultSearchProviderSuggestURLPostParams',
        'DefaultSearchProviderInstantURLPostParams',
        'DefaultSearchProviderImageURLPostParams',
      ],
    },
    {
      # TODO(joaodasilva): Flag these policies with 'can_be_recommended'
      # after fixing https://crbug.com/106682
      'name': 'ContentSettings',
      'type': 'group',
      'caption': '''Content Settings''',
      'desc': '''Content Settings allow you to specify how contents of a specific type (for example Cookies, Images or JavaScript) is handled.''',
      'policies': [
        'DefaultCookiesSetting',
        'DefaultImagesSetting',
        'DefaultJavaScriptSetting',
        'DefaultPluginsSetting',
        'DefaultPopupsSetting',
        'DefaultNotificationsSetting',
        'DefaultGeolocationSetting',
        'DefaultMediaStreamSetting',
        'DefaultWebBluetoothGuardSetting',
        'DefaultKeygenSetting',
        'DefaultWebUsbGuardSetting',
        'AutoSelectCertificateForUrls',
        'CookiesAllowedForUrls',
        'CookiesBlockedForUrls',
        'CookiesSessionOnlyForUrls',
        'ImagesAllowedForUrls',
        'ImagesBlockedForUrls',
        'JavaScriptAllowedForUrls',
        'JavaScriptBlockedForUrls',
        'KeygenAllowedForUrls',
        'KeygenBlockedForUrls',
        'PluginsAllowedForUrls',
        'PluginsBlockedForUrls',
        'PopupsAllowedForUrls',
        'RegisteredProtocolHandlers',
        'PopupsBlockedForUrls',
        'NotificationsAllowedForUrls',
        'NotificationsBlockedForUrls',
        'WebUsbAskForUrls',
        'WebUsbBlockedForUrls',
      ],
    },
    {
      'name': 'NativeMessaging',
      'type': 'group',
      'caption': '''Native Messaging''',
      'desc': '''Configures policies for Native Messaging. Blacklisted native messaging hosts won't be allowed unless they are whitelisted.''',
      'policies': [
        'NativeMessagingBlacklist',
        'NativeMessagingWhitelist',
        'NativeMessagingUserLevelHosts',
      ],
    },
    {
      'name': 'ChromeFrameRendererSettings',
      'type': 'group',
      'caption': '''Default HTML renderer for <ph name="PRODUCT_FRAME_NAME">$3<ex>Google Chrome Frame</ex></ph>''',
      'desc': '''Allows you to configure the default HTML renderer when <ph name="PRODUCT_FRAME_NAME">$3<ex>Google Chrome Frame</ex></ph> is installed.
      The default setting is to allow the host browser do the rendering, but you can optionally override this and have <ph name="PRODUCT_FRAME_NAME">$3<ex>Google Chrome Frame</ex></ph> render HTML pages by default.''',
      'policies': [
        'ChromeFrameRendererSettings',
        'RenderInChromeFrameList',
        'RenderInHostList',
        'AdditionalLaunchParameters',
        'SkipMetadataCheck',
      ],
    },
    {
      'name': 'ChromeFrameContentTypes',
      'type': 'group',
      'caption': '''Allow <ph name="PRODUCT_FRAME_NAME">$3<ex>Google Chrome Frame</ex></ph> to handle the following content types''',
      'desc': '''Allow <ph name="PRODUCT_FRAME_NAME">$3<ex>Google Chrome Frame</ex></ph> to handle the following content types.''',
      'policies': [
        'ChromeFrameContentTypes',
      ],
    },
    {
      'name': 'Drive',
      'type': 'group',
      'caption': '''Configure Google Drive options''',
      'desc': '''Configure Google Drive in <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph>.''',
      'policies': [
        'DriveDisabled',
        'DriveDisabledOverCellular',
      ],
    },
    {
      'name': 'PowerManagement',
      'type': 'group',
      'caption': '''Power management''',
      'desc': '''Configure power management in <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph>.

      These policies let you configure how <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> behaves when the user remains idle for some amount of time.''',
      'policies': [
        'ScreenDimDelayAC',
        'ScreenOffDelayAC',
        'ScreenLockDelayAC',
        'IdleWarningDelayAC',
        'IdleDelayAC',
        'ScreenDimDelayBattery',
        'ScreenOffDelayBattery',
        'ScreenLockDelayBattery',
        'IdleWarningDelayBattery',
        'IdleDelayBattery',
        'IdleAction',
        'IdleActionAC',
        'IdleActionBattery',
        'LidCloseAction',
        'PowerManagementUsesAudioActivity',
        'PowerManagementUsesVideoActivity',
        'PresentationIdleDelayScale',
        'PresentationScreenDimDelayScale',
        'AllowScreenWakeLocks',
        'UserActivityScreenDimDelayScale',
        'WaitForInitialUserActivity',
        'PowerManagementIdleSettings',
        'ScreenLockDelays',
        'PowerSmartDimEnabled',
      ],
    },
    {
      'name': 'Accessibility',
      'type': 'group',
      'caption': '''Accessibility settings''',
      'desc': '''Configure <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> accessibility features.''',
      'policies': [
        'ShowAccessibilityOptionsInSystemTrayMenu',
        'LargeCursorEnabled',
        'SpokenFeedbackEnabled',
        'HighContrastEnabled',
        'VirtualKeyboardEnabled',
        'KeyboardDefaultToFunctionKeys',
        'ScreenMagnifierType',
        'DeviceLoginScreenDefaultLargeCursorEnabled',
        'DeviceLoginScreenDefaultSpokenFeedbackEnabled',
        'DeviceLoginScreenDefaultHighContrastEnabled',
        'DeviceLoginScreenDefaultVirtualKeyboardEnabled',
        'DeviceLoginScreenDefaultScreenMagnifierType',
      ],
    },
    {
      'name': 'Attestation',
      'type': 'group',
      'caption': 'Remote Attestation',
      'desc': 'Configure the remote attestation with TPM mechanism.',
      'policies': [
        'AttestationEnabledForDevice',
        'AttestationEnabledForUser',
        'AttestationExtensionWhitelist',
        'AttestationForContentProtectionEnabled',
      ],
    },
    {
      'name': 'LocallyManagedUsers',
      'type': 'group',
      'caption': '''Locally managed users settings''',
      'desc': '''Configure settings for managed users.''',
      'policies': [
        'ContentPackDefaultFilteringBehavior',
        'ContentPackManualBehaviorHosts',
        'ContentPackManualBehaviorURLs',
        'SupervisedUsersEnabled',
        'SupervisedUserCreationEnabled',
        'SupervisedUserContentProviderEnabled',
      ],
    },
    {
      'name': 'GoogleCast',
      'type': 'group',
      'caption': '''<ph name="PRODUCT_NAME">Google Cast</ph>''',
      'desc': '''Configure policies for <ph name="PRODUCT_NAME">Google Cast</ph>, a feature that allows users to send the contents of tabs, sites or the desktop from the browser to remote displays and sound systems.''',
      'policies': [
        'EnableMediaRouter',
        'ShowCastIconInToolbar',
      ],
    },

    {
      'name': 'QuickUnlock',
      'type': 'group',
      'caption': '''Quick unlock policies''',
      'desc': '''Configures quick unlock related policies.''',
      'policies': [
        'QuickUnlockModeWhitelist',
        'QuickUnlockTimeout',
        'PinUnlockMinimumLength',
        'PinUnlockMaximumLength',
        'PinUnlockWeakPinsAllowed',
      ],
    },
    {
      'name': 'CastReceiver',
      'type': 'group',
      'caption': '''Cast Receiver''',
      'desc': '''Configure the Cast Receiver in <ph name="PRODUCT_NAME">$2<ex>Google Chrome OS</ex></ph>.''',
      'policies': [
        'CastReceiverEnabled',
        'CastReceiverName',
      ]
    },
    {
      'name': 'SafeBrowsing',
      'type': 'group',
      'caption': '''Safe Browsing settings''',
      'desc': '''Configure Safe Browsing related policies.''',
      'policies': [
        'SafeBrowsingEnabled',
        'SafeBrowsingExtendedReportingEnabled',
        'SafeBrowsingExtendedReportingOptInAllowed',
        'SafeBrowsingWhitelistDomains',
        'PasswordProtectionWarningTrigger',
        'PasswordProtectionLoginURLs',
        'PasswordProtectionChangePasswordURL',
      ],
    },
    {
      'name': 'NetworkFileShares',
      'type': 'group',
      'caption': '''Network File Shares settings''',
      'desc': '''Configure Network File Share related policies.''',
      'policies': [
        'NetworkFileSharesAllowed',
        'NetBiosShareDiscoveryEnabled',
      ],
    },
    {
      'name': 'ChromeReportingExtension',
      'type': 'group',
      'caption': '''Chrome Reporting Extension''',
      'desc': '''Configure Chrome Reporting Extension related policies.

      These policies are only effective when the Chrome Reporting Extension and Cloud Management are enabled.''',
      'policies': [
        'ReportVersionData',
        'ReportPolicyData',
        'ReportMachineIDData',
        'ReportUserIDData',
      ],
    },
    {
      'name': 'HomepageLocation',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome.*:8-', 'chrome_os:11-'],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 'https://www.chromium.org',
      'id': 1,
      'caption': '''Configure the home page URL''',
      'tags': [],
      'desc': '''Configures the default home page URL in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> and prevents users from changing it.

          The home page is the page opened by the Home button. The pages that open on startup are controlled by the RestoreOnStartup policies.

          The home page type can either be set to a URL you specify here or set to the New Tab Page. If you select the New Tab Page, then this policy does not take effect.

          If you enable this setting, users cannot change their home page URL in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>, but they can still choose the New Tab Page as their home page.

          Leaving this policy not set will allow the user to choose their home page on their own if HomepageIsNewTabPage is not set too.

          This policy is not available on Windows instances that are not joined
          to a <ph name="MS_AD_NAME">Microsoft® Active Directory®</ph> domain.''',
      'label': '''Home page URL''',
    },
    {
      'name': 'HomepageIsNewTabPage',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:8-', 'chrome_os:11-'],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 2,
      'caption': '''Use New Tab Page as homepage''',
      'tags': [],
      'desc': '''Configures the type of the default home page in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> and prevents users from changing home page preferences. The home page can either be set to a URL you specify or set to the New Tab Page.

          If you enable this setting, the New Tab Page is always used for the home page, and the home page URL location is ignored.

          If you disable this setting, the user's homepage will never be the New Tab Page, unless its URL is set to 'chrome://newtab'.

          If you enable or disable this setting, users cannot change their homepage type in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.

          Leaving this policy not set will allow the user to choose whether the new tab page is their home page on their own.

          This policy is not available on Windows instances that are not joined
          to a <ph name="MS_AD_NAME">Microsoft® Active Directory®</ph> domain.''',
    },
    {
      'name': 'NewTabPageLocation',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome.*:58-', 'chrome_os:58-'],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 'https://www.chromium.org',
      'id': 360,
      'caption': '''Configure the New Tab page URL''',
      'tags': [],
      'desc': '''Configures the default New Tab page URL and prevents users from changing it.

          The New Tab page is the page opened when new tabs are created (including the one opened in new windows).

          This policy does not decide which pages are to be opened on start up. Those are controlled by the <ph name="RESTORE_ON_STARTUP_POLICY_NAME">RestoreOnStartup</ph> policies. Yet this policy does affect the Home Page if that is set to open the New Tab page, as well as the startup page if that is set to open the New Tab page.

          If the policy is not set or left empty the default new tab page is used.

          This policy is not available on Windows instances that are not joined to a <ph name="MS_AD_NAME">Microsoft® Active Directory®</ph> domain.''',
      'label': '''New Tab page URL''',
    },
    {
      'name': 'DefaultBrowserSettingEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:11-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': True,
      'id': 3,
      'caption': '''Set <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> as Default Browser''',
      'tags': [],
      'desc': '''Configures the default browser checks in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> and prevents users from changing them.

      If you enable this setting, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will always check on startup whether it is the default browser and automatically register itself if possible.

      If this setting is disabled, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will never check if it is the default browser and will disable user controls for setting this option.

      If this setting is not set, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will allow the user to control whether it is the default browser and whether user notifications should be shown when it isn't.''',
      'label': '''Set <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> as Default Browser''',
    },
    {
      'name': 'ApplicationLocaleValue',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome.win:8-'],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': False,
        'per_profile': False,
      },
      'example_value': 'en',
      'id': 4,
      'caption': '''Application locale''',
      'tags': [],
      'desc': '''Configures the application locale in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> and prevents users from changing the locale.

      If you enable this setting, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> uses the specified locale. If the configured locale is not supported, 'en-US' is used instead.

      If this setting is disabled or not set, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> uses either the user-specified preferred locale (if configured), the system locale or the fallback locale 'en-US'.''',
      'label': '''Application locale''',
    },
    {
      'name': 'AlternateErrorPagesEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': [
        'chrome.*:8-',
        'chrome_os:11-',
        'android:30-',
      ],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 5,
      'caption': '''Enable alternate error pages''',
      'tags': [],
      'desc': '''Enables the use of alternate error pages that are built into <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> (such as 'page not found') and prevents users from changing this setting.

      If you enable this setting, alternate error pages are used.

      If you disable this setting, alternate error pages are never used.

      If you enable or disable this setting, users cannot change or override this setting in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.

      If this policy is left not set, this will be enabled but the user will be able to change it.''',
    },
    {
      'name': 'SearchSuggestEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': [
        'chrome.*:8-',
        'chrome_os:11-',
        'android:30-',
      ],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 6,
      'caption': '''Enable search suggestions''',
      'tags': [],
      'desc': '''Enables search suggestions in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>'s omnibox and prevents users from changing this setting.

      If you enable this setting, search suggestions are used.

      If you disable this setting, search suggestions are never used.

      If you enable or disable this setting, users cannot change or override this setting in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.

      If this policy is left not set, this will be enabled but the user will be able to change it.''',
    },
    {
      'name': 'DnsPrefetchingEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:8-53', 'chrome_os:11-53', 'android:30-53'],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'deprecated': True,
      'example_value': True,
      'id': 7,
      'caption': '''Enable network prediction''',
      'tags': [],
      'desc': '''This policy is deprecated in M48 in favor of <ph name="NETWORK_PREDICTION_OPTIONS_POLICY_NAME">NetworkPredictionOptions</ph>, and removed in M54.

      Enables network prediction in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> and prevents users from changing this setting.

      This controls not only DNS prefetching but also TCP and SSL preconnection and prerendering of web pages. The policy name refers to DNS prefetching for historical reasons.

      If you enable or disable this setting, users cannot change or override this setting in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.

      If this policy is left not set, this will be enabled but the user will be able to change it.''',
    },
    {
      'name': 'NetworkPredictionOptions',
      'type': 'int-enum',
      'schema': {
        'type': 'integer',
        'enum': [ 0, 1, 2 ],
      },
      'items': [
        {
          'name': 'NetworkPredictionAlways',
          'value': 0,
          'caption': '''Predict network actions on any network connection''',
        },
        {
          'name': 'NetworkPredictionWifiOnly',
          'value': 1,
          'caption': '''Predict network actions on any network that is not cellular.
          (Deprecated in 50, removed in 52. After 52, if value 1 is set, it will be treated as 0 - predict network actions on any network connection.)''',
        },
        {
          'name': 'NetworkPredictionNever',
          'value': 2,
          'caption': '''Do not predict network actions on any network connection''',
        },
      ],
      'supported_on': ['chrome.*:38-', 'chrome_os:38-', 'android:38-'],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 1,
      'id': 273,
      'caption': '''Enable network prediction''',
      'tags': [],
      'desc': '''Enables network prediction in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> and prevents users from changing this setting.

      This controls DNS prefetching, TCP and SSL preconnection and prerendering of web pages.

      If you set this policy, users cannot change or override this setting in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.

      If this policy is left not set, network prediction will be enabled but the user will be able to change it.''',
    },
    {
      'name': 'WPADQuickCheckEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': [ 'chrome.*:35-', 'chrome_os:35-' ],
      'features': {
        'dynamic_refresh': False,
        'per_profile': False,
      },
      'example_value': True,
      'id': 261,
      'caption': '''Enable WPAD optimization''',
      'tags': ['system-security'],
      'desc': '''Allows to turn off WPAD (Web Proxy Auto-Discovery) optimization in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.

      If this policy is set to false, WPAD optimization is disabled causing <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> to wait longer for DNS-based WPAD servers.  If the policy is not set or is enabled, WPAD optimization is enabled.

      Independent of whether or how this policy is set, the WPAD optimization setting cannot be changed by users.''',
    },
    {
      'name': 'DisableSpdy',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:8-53', 'chrome_os:11-53', 'android:30-53'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'deprecated': True,
      'example_value': True,
      'id': 8,
      'caption': '''Disable SPDY protocol''',
      'tags': [],
      'desc': '''This policy is deprecated in M53 and removed in M54, because SPDY/3.1 support is removed.

      Disables use of the SPDY protocol in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.

      If this policy is enabled the SPDY protocol will not be available in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.

      Setting this policy to disabled will allow the usage of SPDY.

      If this policy is left not set, SPDY will be available.''',
    },
    {
      'name': 'DisabledSchemes',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome.*:12-', 'chrome_os:12-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'deprecated': True,
      'example_value': ['file', 'https'],
      'id': 85,
      'caption': '''Disable URL protocol schemes''',
      'tags': [],
      'desc': '''This policy is deprecated, please use URLBlacklist instead.

      Disables the listed protocol schemes in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.

      URLs using a scheme from this list will not load and can not be navigated to.

      If this policy is left not set or the list is empty all schemes will be accessible in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.''',
      'label': '''List of disabled protocol schemes''',
    },
    {
      'name': 'Http09OnNonDefaultPortsEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:54-', 'chrome_os:54-'],
      'features': {
        'dynamic_refresh': False,
        'per_profile': False,
      },
      'example_value': False,
      'id': 345,
      'caption': '''Enable HTTP/0.9 support on non-default ports''',
      'tags': [],
      'desc': '''This policy enables HTTP/0.9 on ports other than 80 for HTTP and 443 for HTTPS.

      This policy is disabled by default, and if enabled, leaves users open to the security issue https://crbug.com/600352.

      This policy is intended to give enterprises a chance to migrate exising servers off of HTTP/0.9, and will be removed in the future.

      If this policy is not set, HTTP/0.9 will be disabled on non-default ports.''',
    },
    {
      'name': 'JavascriptEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:8-', 'chrome_os:11-', 'android:30-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'deprecated': True,
      'example_value': True,
      'id': 9,
      'caption': '''Enable JavaScript''',
      'tags': [],
      'desc': '''This policy is deprecated, please use DefaultJavaScriptSetting instead.

      Can be used to disabled JavaScript in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.

      If this setting is disabled, web pages cannot use JavaScript and the user cannot change that setting.

      If this setting is enabled or not set, web pages can use JavaScript but the user can change that setting.''',
    },
    {
      'name': 'IncognitoEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:11-', 'chrome_os:11-', 'android:30-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'deprecated': True,
      'example_value': False,
      'id': 10,
      'caption': '''Enable Incognito mode''',
      'tags': [],
      'desc': '''This policy is deprecated. Please, use IncognitoModeAvailability instead.
      Enables Incognito mode in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.

      If this setting is enabled or not configured, users can open web pages in incognito mode.

      If this setting is disabled, users cannot open web pages in incognito mode.

      If this policy is left not set, this will be enabled and the user will be able to use incognito mode.''',
    },
    {
      'name': 'IncognitoModeAvailability',
      'type': 'int-enum',
      'schema': {
        'type': 'integer',
        'enum': [ 0, 1, 2 ],
      },
      'items': [
        {
          'name': 'Enabled',
          'value': 0,
          'caption': '''Incognito mode available''',
        },
        {
          'name': 'Disabled',
          'value': 1,
          'caption': '''Incognito mode disabled''',
        },
        {
          'name': 'Forced',
          'value': 2,
          'caption': '''Incognito mode forced''',
        },
      ],
      'supported_on': [
        'chrome.*:14-',
        'chrome_os:14-',
        'android:30-',
      ],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 1,
      'id': 93,
      'caption': '''Incognito mode availability''',
      'tags': ['filtering'],
      'desc': '''Specifies whether the user may open pages in Incognito mode in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.

      If 'Enabled' is selected or the policy is left unset, pages may be opened in Incognito mode.

      If 'Disabled' is selected, pages may not be opened in Incognito mode.

      If 'Forced' is selected, pages may be opened ONLY in Incognito mode.''',
    },
    {
      'name': 'SavingBrowserHistoryDisabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:8-', 'chrome_os:11-', 'android:30-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 11,
      'caption': '''Disable saving browser history''',
      'tags': [],
      'desc': '''Disables saving browser history in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> and prevents users from changing this setting.

      If this setting is enabled, browsing history is not saved. This setting also disables tab syncing.

      If this setting is disabled or not set, browsing history is saved.''',
    },
    {
      'name': 'AllowDeletingBrowserHistory',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:57-', 'chrome_os:57-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 187,
      'caption': '''Enable deleting browser and download history''',
      'tags': ['local-data-access', 'admin-sharing'],
      'desc': '''Enables deleting browser history and download history in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> and prevents users from changing this setting.

      Note that even with this policy disabled, the browsing and download history are not guaranteed to be retained: users may be able to edit or delete the history database files directly, and the browser itself may expire or archive any or all history items at any time.

      If this setting is enabled or not set, browsing and download history can be deleted.

      If this setting is disabled, browsing and download history cannot be deleted.''',
    },
    {
      'name': 'AllowDinosaurEasterEgg',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:48-', 'chrome.*:48-'],
      'features': {
        'dynamic_refresh': False,
        'per_profile': True,
      },
      'example_value': False,
      'id': 309,
      'default_for_enterprise_users': False,
      'caption': '''Allow Dinosaur Easter Egg Game''',
      'tags': [],
      'desc': '''Allow users to play dinosaur easter egg game when device is offline.

      If this policy is set to False, users will not be able to play the dinosaur easter egg game when device is offline. If this setting is set to True, users are allowed to play the dinosaur game. If this policy is not set, users are not allowed to play the dinosaur easter egg game on enrolled Chrome OS, but are allowed to play it under other circumstances.''',
    },
    {
      'name': 'RemoteAccessClientFirewallTraversal',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:14-16', 'chrome_os:14-16'],
      'features': {
        'dynamic_refresh': True,
      },
      # Mark this 'removed' when https://crbug.com/100216 is resolved.
      'deprecated': True,
      'example_value': False,
      'id': 94,
      'caption': '''Enable firewall traversal from remote access client''',
      'tags': [],
      'desc': '''This policy is no longer supported.
          Enables usage of STUN and relay servers when connecting to a remote client.

          If this setting is enabled, then this machine can discover and connect to remote host machines even if they are separated by a firewall.

          If this setting is disabled and outgoing UDP connections are filtered by the firewall, then this machine can only connect to host machines within the local network.''',
    },
    {
      'name': 'RemoteAccessHostClientDomain',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome.*:22-', 'chrome_os:41-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'deprecated': True,
      'example_value': 'my-awesome-domain.com',
      'id': 316,
      'caption': '''Configure the required domain name for remote access clients''',
      'tags': [],
      'desc': '''This policy is deprecated. Please use RemoteAccessHostClientDomainList instead.''',
    },
    {
      'name': 'RemoteAccessHostClientDomainList',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome.*:60-', 'chrome_os:60-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': ['my-awesome-domain.com', 'my-auxiliary-domain.com'],
      'id': 369,
      'caption': '''Configure the required domain names for remote access clients''',
      'tags': [],
      'desc': '''Configures the required client domain names that will be imposed on remote access clients and prevents users from changing it.

          If this setting is enabled, then only clients from one of the specified domains can connect to the host.

          If this setting is disabled or not set, then the default policy for the connection type is applied. For remote assistance, this allows clients from any domain to connect to the host; for anytime remote access, only the host owner can connect.

          This setting will override RemoteAccessHostClientDomain, if present.

          See also RemoteAccessHostDomainList.''',
    },
    {
      'name': 'RemoteAccessHostFirewallTraversal',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:14-', 'chrome_os:41-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': False,
      'id': 95,
      'caption': '''Enable firewall traversal from remote access host''',
      'tags': [],
      'desc': '''Enables usage of STUN servers when remote clients are trying to establish a connection to this machine.

          If this setting is enabled, then remote clients can discover and connect to this machines even if they are separated by a firewall.

          If this setting is disabled and outgoing UDP connections are filtered by the firewall, then this machine will only allow connections from client machines within the local network.

          If this policy is left not set the setting will be enabled.''',
    },
    {
      'name': 'RemoteAccessHostDomain',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome.*:22-', 'chrome_os:41-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'deprecated': True,
      'example_value': 'my-awesome-domain.com',
      'id': 154,
      'caption': '''Configure the required domain name for remote access hosts''',
      'tags': [],
      'desc': '''This policy is deprecated. Please use RemoteAccessHostDomainList instead.''',
    },
    {
      'name': 'RemoteAccessHostDomainList',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': {'type': 'string' },
      },
      'supported_on': ['chrome.*:60-', 'chrome_os:60-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': ['my-awesome-domain.com', 'my-auxiliary-domain.com'],
      'id': 368,
      'caption': '''Configure the required domain names for remote access hosts''',
      'tags': [],
      'desc': '''Configures the required host domain names that will be imposed on remote access hosts and prevents users from changing it.

          If this setting is enabled, then hosts can be shared only using accounts registered on one of the specified domain names.

          If this setting is disabled or not set, then hosts can be shared using any account.

          This setting will override RemoteAccessHostDomain, if present.

          See also RemoteAccessHostClientDomainList.''',
    },
    {
      'name': 'RemoteAccessHostRequireTwoFactor',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:22-22'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      # Mark this 'removed' when https://crbug.com/100216 is resolved.
      'deprecated': True,
      'example_value': False,
      'id': 155,
      'caption': '''Enable two-factor authentication for remote access hosts''',
      'tags': [],
      'desc': '''Enables two-factor authentication for remote access hosts instead of a user-specified PIN.

          If this setting is enabled, then users must provide a valid two-factor code when accessing a host.

          If this setting is disabled or not set, then two-factor will not be enabled and the default behavior of having a user-defined PIN will be used.''',
    },
    {
      'name': 'RemoteAccessHostTalkGadgetPrefix',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome.*:22-', 'chrome_os:41-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': 'chromoting-host',
      'id': 156,
      'caption': '''Configure the TalkGadget prefix for remote access hosts''',
      'tags': [],
      'desc': '''Configures the TalkGadget prefix that will be used by remote access hosts and prevents users from changing it.

          If specified, this prefix is prepended to the base TalkGadget name to create a full domain name for the TalkGadget. The base TalkGadget domain name is '.talkgadget.google.com'.

          If this setting is enabled, then hosts will use the custom domain name when accessing the TalkGadget instead of the default domain name.

          If this setting is disabled or not set, then the default TalkGadget domain name ('chromoting-host.talkgadget.google.com') will be used for all hosts.

          Remote access clients are not affected by this policy setting. They will always use 'chromoting-client.talkgadget.google.com' to access the TalkGadget.''',
    },
    {
      'name': 'RemoteAccessHostRequireCurtain',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:23-', 'chrome_os:41-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': False,
      'id': 157,
      'caption': '''Enable curtaining of remote access hosts''',
      'tags': ['system-security'],
      'desc': '''Enables curtaining of remote access hosts while a connection is in progress.

          If this setting is enabled, then hosts' physical input and output devices are disabled while a remote connection is in progress.

          If this setting is disabled or not set, then both local and remote users can interact with the host when it is being shared.''',
    },
    {
      'name': 'RemoteAccessHostAllowClientPairing',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:30-', 'chrome_os:41-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': False,
      'id': 234,
      'caption': '''Enable or disable PIN-less authentication for remote access hosts''',
      'tags': [],
      'desc': '''If this setting is enabled or not configured, then users can opt to pair clients and hosts at connection time, eliminating the need to enter a PIN every time.

          If this setting is disabled, then this feature will not be available.''',
    },
    {
      'name': 'RemoteAccessHostAllowGnubbyAuth',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:35-', 'chrome_os:41-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': True,
      'id': 257,
      'caption': '''Allow gnubby authentication for remote access hosts''',
      'tags': [],
      'desc': '''If this setting is enabled, then gnubby authentication requests will be proxied across a remote host connection.

          If this setting is disabled or not configured, gnubby authentication requests will not be proxied.''',
    },
    {
      'name': 'RemoteAccessHostAllowRelayedConnection',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:36-', 'chrome_os:41-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': False,
      'id': 263,
      'caption': '''Enable the use of relay servers by the remote access host''',
      'tags': [],
      'desc': '''Enables usage of relay servers when remote clients are trying to establish a connection to this machine.

          If this setting is enabled, then remote clients can use relay servers to connect to this machine when a direct connection is not available (e.g. due to firewall restrictions).

          Note that if the policy <ph name="REMOTE_ACCESS_HOST_FIREWALL_TRAVERSAL_POLICY_NAME">RemoteAccessHostFirewallTraversal</ph> is disabled, this policy will be ignored.

          If this policy is left not set the setting will be enabled.''',
    },
    {
      'name': 'RemoteAccessHostUdpPortRange',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome.*:36-', 'chrome_os:41-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': '12400-12409',
      'id': 264,
      'caption': '''Restrict the UDP port range used by the remote access host''',
      'tags': [],
      'desc': '''Restricts the UDP port range used by the remote access host in this machine.

          If this policy is left not set, or if it is set to an empty string, the remote access host will be allowed to use any available port, unless the policy <ph name="REMOTE_ACCESS_HOST_FIREWALL_TRAVERSAL_POLICY_NAME">RemoteAccessHostFirewallTraversal</ph> is disabled, in which case the remote access host will use UDP ports in the 12400-12409 range.''',
    },
    {
      'name': 'RemoteAccessHostMatchUsername',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.linux:25-', 'chrome.mac:25-', 'chrome_os:42-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': False,
      'id': 285,
      'caption': '''Require that the name of the local user and the remote access host owner match''',
      'tags': [],
      'desc': '''If this setting is enabled, then the remote access host compares the name of the local user (that the host is associated with) and the name of the Google account registered as the host owner (i.e. "johndoe" if the host is owned by "johndoe@example.com" Google account).  The remote access host will not start if the name of the host owner is different from the name of the local user that the host is associated with.  RemoteAccessHostMatchUsername policy should be used together with RemoteAccessHostDomain to also enforce that the Google account of the host owner is associated with a specific domain (i.e. "example.com").

          If this setting is disabled or not set, then the remote access host can be associated with any local user.''',
    },
    {
      'name': 'RemoteAccessHostTokenUrl',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome.*:28-','chrome_os:42-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': 'https://example.com/issue',
      'id': 286,
      'caption': '''URL where remote access clients should obtain their authentication token''',
      'tags': ['website-sharing'],
      'desc': '''If this policy is set, the remote access host will require authenticating clients to obtain an authentication token from this URL in order to connect. Must be used in conjunction with RemoteAccessHostTokenValidationUrl.

          This feature is currently disabled server-side.''',
    },
    {
      'name': 'RemoteAccessHostTokenValidationUrl',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome.*:28-','chrome_os:42-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': 'https://example.com/validate',
      'id': 287,
      'caption': '''URL for validating remote access client authentication token''',
      'tags': ['website-sharing'],
      'desc': '''If this policy is set, the remote access host will use this URL to validate authentication tokens from remote access clients, in order to accept connections. Must be used in conjunction with RemoteAccessHostTokenUrl.

          This feature is currently disabled server-side.''',
    },
    {
      'name': 'RemoteAccessHostTokenValidationCertificateIssuer',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome.*:28-','chrome_os:42-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': 'Example Certificate Authority',
      'id': 288,
      'caption': '''Client certificate for connecting to RemoteAccessHostTokenValidationUrl''',
      'tags': [],
      'desc': '''If this policy is set, the host will use a client certificate with the given issuer CN to authenticate to RemoteAccessHostTokenValidationUrl. Set it to "*" to use any available client certificate.

          This feature is currently disabled server-side.''',
    },
    {
      'name': 'RemoteAccessHostDebugOverridePolicies',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome.*:25-47','chrome_os:42-47'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': '{ "RemoteAccessHostMatchUsername": true }',
      'id': 289,
      'caption': '''Policy overrides for Debug builds of the remote access host''',
      'tags': [],
      'desc': '''Overrides policies on Debug builds of the remote access host.

          The value is parsed as a JSON dictionary of policy name to policy value mappings.''',
    },
    {
      'name': 'RemoteAccessHostAllowUiAccessForRemoteAssistance',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.win:55-'],
      'features': {
        'dynamic_refresh': False,
        'per_profile': False,
      },
      'example_value': True,
      'id': 344,
      'caption': '''Allow remote users to interact with elevated windows in remote assistance sessions''',
      'tags': ['system-security'],
      'desc': '''If this setting is enabled, the remote assistance host will be run in a process with <ph name="UIACCESS_PERMISSION_NAME">uiAccess</ph> permissions.  This will allow remote users to interact with elevated windows on the local user's desktop.

          If this setting is disabled or not configured, the remote assistance host will run in the user's context and remote users cannot interact with elevated windows on the desktop.''',
    },
    {
      'name': 'PrintingEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:8-', 'chrome_os:11-', 'android:39-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 12,
      'caption': '''Enable printing''',
      'tags': [],
      'desc': '''Enables printing in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> and prevents users from changing this setting.

      If this setting is enabled or not configured, users can print.

      If this setting is disabled, users cannot print from <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>. Printing is disabled in the wrench menu, extensions, JavaScript applications, etc. It is still possible to print from plugins that bypass <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> while printing. For example, certain Flash applications have the print option in their context menu, which is not covered by this policy.''',
      'arc_support': 'This policy has no effect on Android apps.',
    },
    {
      'name': 'CloudPrintProxyEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:17-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 13,
      'caption': '''Enable <ph name="CLOUD_PRINT_NAME">Google Cloud Print</ph> proxy''',
      'tags': [],
      'desc': '''Enables <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> to act as a proxy between <ph name="CLOUD_PRINT_NAME">Google Cloud Print</ph> and legacy printers connected to the machine.

      If this setting is enabled or not configured, users can enable the cloud print proxy by authentication with their Google account.

      If this setting is disabled, users cannot enable the proxy, and the machine will not be allowed to share it's printers with <ph name="CLOUD_PRINT_NAME">Google Cloud Print</ph>.''',
    },
    {
      'name': 'PrintingAllowedColorModes',
      'type': 'string-enum',
      'schema': {
        'type': 'string',
        'enum': [
          'any',
          'color',
          'monochrome',
        ],
      },
      'items': [
        {
          'name': 'any',
          'value': 'any',
          'caption': '''Allow all color modes''',
        },
        {
          'name': 'color',
          'value': 'color',
          'caption': '''Color printing only''',
        },
        {
          'name': 'monochrome',
          'value': 'monochrome',
          'caption': '''Monochrome printing only''',
        },
      ],
      'supported_on': ['chrome_os:70-'],
      'future': True,
      'features': {
        'can_be_recommended': False,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 'monochrome',
      'id': 474,
      'caption': '''Restrict printing color mode''',
      'tags': [],
      'desc': '''Sets printing to color only, monochrome only or no color mode restriction. Unset policy is treated as no restriction.''',
    },
    {
      'name': 'PrintingAllowedDuplexModes',
      'type': 'string-enum',
      'schema': {
        'type': 'string',
        'enum': [
          'any',
          'simplex',
          'duplex',
        ],
      },
      'items': [
        {
          'name': 'any',
          'value': 'any',
          'caption': '''Allow all duplex modes''',
        },
        {
          'name': 'simplex',
          'value': 'simplex',
          'caption': '''Simplex printing only''',
        },
        {
          'name': 'duplex',
          'value': 'duplex',
          'caption': '''Duplex printing only''',
        },
      ],
      'supported_on': ['chrome_os:70-'],
      'future': True,
      'features': {
        'can_be_recommended': False,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 'duplex',
      'id': 475,
      'caption': '''Restrict printing duplex mode''',
      'tags': [],
      'desc': '''Restricts printing duplex mode. Unset policy and empty set are treated as no restriction.''',
    },
    {
      'name': 'PrintingAllowedPageSizes',
      'type': 'dict',
      'schema': {
        'type': 'array',
        'items': {
          'type': 'object',
          'properties': {
            'WidthUm': {
              'description': '''Width of the page in micrometers''',
              'type': 'integer',
            },
            'HeightUm': {
              'description': '''Height of the page in micrometers''',
              'type': 'integer',
            },
          },
          'required': ['WidthUm', 'HeightUm'],
        },
      },
      'supported_on': ['chrome_os:70-'],
      'future': True,
      'features': {
        'can_be_recommended': False,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': [{'WidthUm': 210000, 'HeightUm': 297000}],
      'id': 476,
      'caption': '''Restrict printing page size''',
      'tags': [],
      'desc': '''Restricts printing page size. Unset policy and empty set are treated as no restriction.''',
    },
    {
      'name': 'PrintingColorDefault',
      'type': 'string-enum',
      'schema': {
        'type': 'string',
        'enum': [
          'color',
          'monochrome',
        ],
      },
      'items': [
        {
          'name': 'color',
          'value': 'color',
          'caption': '''Enable color printing''',
        },
        {
          'name': 'monochrome',
          'value': 'monochrome',
          'caption': '''Enable monochrome printing''',
        },
      ],
      'supported_on': ['chrome_os:70-'],
      'future': True,
      'features': {
        'can_be_recommended': False,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 'monochrome',
      'id': 477,
      'caption': '''Default printing color mode''',
      'tags': [],
      'desc': '''Overrides default printing color mode. If the mode is unavailable this policy is ignored.''',
    },
    {
      'name': 'PrintingDuplexDefault',
      'type': 'string-enum',
      'schema': {
        'type': 'string',
        'enum': [
          'simplex',
          'short-edge',
          'long-edge',
        ],
      },
      'items': [
        {
          'name': 'simplex',
          'value': 'simplex',
          'caption': '''Enable simplex printing''',
        },
        {
          'name': 'short-edge',
          'value': 'short-edge',
          'caption': '''Enable short edge duplex printing''',
        },
        {
          'name': 'long-edge',
          'value': 'long-edge',
          'caption': '''Enable long edge duplex printing''',
        },
      ],
      'supported_on': ['chrome_os:70-'],
      'future': True,
      'features': {
        'can_be_recommended': False,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 'long-edge',
      'id': 478,
      'caption': '''Default printing duplex mode''',
      'tags': [],
      'desc': '''Overrides default printing duplex mode. If the mode is unavailable this policy is ignored.''',
    },
    {
      'name': 'PrintingSizeDefault',
      'type': 'dict',
      'schema': {
        'type': 'object',
        'properties': {
          'WidthUm': {
            'description': '''Width of the page in micrometers''',
            'type': 'integer',
          },
          'HeightUm': {
            'description': '''Height of the page in micrometers''',
            'type': 'integer',
          },
        },
        'required': ['WidthUm', 'HeightUm'],
      },
      'supported_on': ['chrome_os:70-'],
      'future': True,
      'features': {
        'can_be_recommended': False,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': {'WidthUm': 210000, 'HeightUm': 297000},
      'id': 479,
      'caption': '''Default printing page size''',
      'tags': [],
      'desc': '''Overrides default printing page size. If the page size is unavailable this policy is ignored.''',
    },
    {
      'name': 'ForceSafeSearch',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:25-', 'chrome_os:25-', 'android:30-'],
      'features': {
        'can_be_recommended': False,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'deprecated': True,
      'example_value': False,
      'id': 162,
      'caption': '''Force SafeSearch''',
      'tags': ['filtering'],
      'desc': '''This policy is deprecated, please use <ph name="FORCE_GOOGLE_SAFE_SEARCH_POLICY_NAME">ForceGoogleSafeSearch</ph> and <ph name="FORCE_YOUTUBE_RESTRICT_POLICY_NAME">ForceYouTubeRestrict</ph> instead. This policy is ignored if either the <ph name="FORCE_GOOGLE_SAFE_SEARCH_POLICY_NAME">ForceGoogleSafeSearch</ph>, the <ph name="FORCE_YOUTUBE_RESTRICT_POLICY_NAME">ForceYouTubeRestrict</ph> or the (deprecated) <ph name="FORCE_YOUTUBE_SAFETY_MODE_POLICY_NAME">ForceYouTubeSafetyMode</ph> policies are set.

      Forces queries in Google Web Search to be done with SafeSearch set to active and prevents users from changing this setting. This setting also forces Moderate Restricted Mode on YouTube.

      If you enable this setting, SafeSearch in Google Search and Moderate Restricted Mode YouTube is always active.

      If you disable this setting or do not set a value, SafeSearch in Google Search and Restricted Mode in YouTube is not enforced.''',
    },
    {
      'name': 'ForceGoogleSafeSearch',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:41-', 'chrome_os:41-', 'android:41-'],
      'features': {
        'can_be_recommended': False,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': False,
      'id': 282,
      'caption': '''Force Google SafeSearch''',
      'tags': ['filtering'],
      'desc': '''Forces queries in Google Web Search to be done with SafeSearch set to active and prevents users from changing this setting.

      If you enable this setting, SafeSearch in Google Search is always active.

      If you disable this setting or do not set a value, SafeSearch in Google Search is not enforced.''',
    },
    {
      'name': 'ForceYouTubeSafetyMode',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:41-', 'chrome_os:41-', 'android:41-'],
      'features': {
        'can_be_recommended': False,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'deprecated': True,
      'example_value': False,
      'id': 283,
      'caption': '''Force YouTube Safety Mode''',
      'tags': ['filtering'],
      'desc': '''This policy is deprecated. Consider using <ph name="FORCE_YOUTUBE_RESTRICT_POLICY_NAME">ForceYouTubeRestrict</ph>, which overrides this policy and allows more fine-grained tuning.

      Forces YouTube Moderate Restricted Mode and prevents users from changing this setting.

      If this setting is enabled, Restricted Mode on YouTube is always enforced to be at least Moderate.

      If this setting is disabled or no value is set, Restricted Mode on YouTube is not enforced by <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>. External policies such as YouTube policies might still enforce Restricted Mode, though.''',
      'arc_support': 'This policy has no effect on the Android YouTube app. If Safety Mode on YouTube should be enforced, installation of the Android YouTube app should be disallowed.',
    },
    {
      'name': 'ForceYouTubeRestrict',
      'type': 'int-enum',
      'schema': {
        'type': 'integer',
        'enum': [ 0, 1, 2 ],
      },
      'items': [
        {
          'name': 'Off',
          'value': 0,
          'caption': '''Do not enforce Restricted Mode on YouTube''',
        },
        {
          'name': 'Moderate',
          'value': 1,
          'caption': '''Enforce at least Moderate Restricted Mode on YouTube''',
        },
        {
          'name': 'Strict',
          'value': 2,
          'caption': '''Enforce Strict Restricted Mode for YouTube''',
        },
      ],
      'supported_on': ['chrome.*:55-', 'chrome_os:55-', 'android:55-'],
      'features': {
        'can_be_recommended': False,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 0,
      'id': 348,
      'caption': '''Force minimum YouTube Restricted Mode''',
      'tags': ['filtering'],
      'desc': '''Enforces a minimum Restricted Mode on YouTube and prevents users from
      picking a less restricted mode.

      If this setting is set to Strict, Strict Restricted Mode on YouTube is always active.

      If this setting is set to Moderate, the user may only pick Moderate Restricted Mode
      and Strict Restricted Mode on YouTube, but cannot disable Restricted Mode.

      If this setting is set to Off or no value is set, Restricted Mode on YouTube is not enforced by <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>. External policies such as YouTube policies might still enforce Restricted Mode, though.''',
      'arc_support': 'This policy has no effect on the Android YouTube app. If Safety Mode on YouTube should be enforced, installation of the Android YouTube app should be disallowed.',
    },
    {
      'name': 'SafeBrowsingEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:8-', 'chrome_os:11-', 'android:30-'],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 14,
      'caption': '''Enable Safe Browsing''',
      'tags': ['system-security'],
      'desc': '''Enables <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>'s Safe Browsing feature and prevents users from changing this setting.

      If you enable this setting, Safe Browsing is always active.

      If you disable this setting, Safe Browsing is never active.

      If you enable or disable this setting, users cannot change or override the "Enable phishing and malware protection" setting in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.

      If this policy is left not set, this will be enabled but the user will be able to change it.

      See https://developers.google.com/safe-browsing for more info on Safe Browsing.

      This policy is not available on Windows instances that are not joined to a <ph name="MS_AD_NAME">Microsoft® Active Directory®</ph> domain.''',
    },
    {
      'name': 'MetricsReportingEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:8-'],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': False,
        'per_profile': False,
      },
      'example_value': True,
      'id': 15,
      'caption': '''Enable reporting of usage and crash-related data''',
      'tags': ['google-sharing'],
      'desc': '''Enables anonymous reporting of usage and crash-related data about <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> to Google and prevents users from changing this setting.

      If this setting is enabled, anonymous reporting of usage and crash-related
      data is sent to Google.  If it is disabled, this information is not sent
      to Google.  In both cases, users cannot change or override the setting.
      If this policy is left not set, the setting will be what the user chose
      upon installation / first run.

      This policy is not available on Windows instances that are not joined to
      a <ph name="MS_AD_NAME">Microsoft® Active Directory®</ph> domain.  (For Chrome OS, see
      DeviceMetricsReportingEnabled.)''',
    },
    {
      'name': 'PasswordManagerEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': [
        'chrome.*:8-',
        'chrome_os:11-',
        'android:30-',
      ],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 16,
      'caption': '''Enable saving passwords to the password manager''',
      'tags': [],
      'desc': '''If this setting is enabled, users can have <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> memorize passwords and provide them automatically the next time they log in to a site.

          If this settings is disabled, users cannot save new passwords but they
          may still use passwords that have been saved previously.

          If this policy is enabled or disabled, users cannot change or override it in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>. If this policy is unset, password saving is allowed (but can be turned off by the user).''',
      'arc_support': 'This policy has no effect on Android apps.',
    },
    {
      'name': 'PasswordManagerAllowShowPasswords',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:8-50', 'chrome_os:11-50'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'deprecated': True,
      'example_value': False,
      'id': 17,
      'caption': '''Allow users to show passwords in Password Manager (deprecated)''',
      'tags': [],
      'desc': '''The associated setting was used before reauthentication on viewing passwords was introduced. Since then, the setting and hence this policy had no effect on the behavior of Chrome. The current behavior of Chrome is now the same as if the policy was set to disable showing passwords in clear text in the password manager settings page. That means that the settings page contains just a placeholder, and only upon the user clicking "Show" (and reauthenticating, if applicable) Chrome shows the password. Original description of the policy follows below.

          Controls whether the user may show passwords in clear text in the password manager.

          If you disable this setting, the password manager does not allow showing stored passwords in clear text in the password manager window.

          If you enable or do not set this policy, users can view their passwords in clear text in the password manager.''',
    },
    {
      'name': 'AutoFillEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': [
        'chrome.*:8-',
        'chrome_os:11-',
        'android:30-',
      ],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'deprecated': True,
      'example_value': False,
      'id': 18,
      'caption': '''Enable AutoFill''',
      'tags': [],
      'desc': '''This policy is deprecated in M70, please use AutofillAddressEnabled and AutofillCreditCardEnabled instead.

      Enables <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>'s AutoFill feature and allows users to auto complete web forms using previously stored information such as address or credit card information.

      If you disable this setting, AutoFill will be inaccessible to users.

      If you enable this setting or do not set a value, AutoFill will remain under the control of the user. This will allow them to configure AutoFill profiles and to switch AutoFill on or off at their own discretion.''',
    },
    {
      'name': 'AutofillAddressEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': [
        'chrome.*:69-',
        'chrome_os:69-',
        'android:69-',
      ],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': False,
      'id': 459,
      'caption': '''Enable AutoFill for addresses''',
      'tags': [],
      'desc': '''Enables <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>'s AutoFill feature and allows users to auto complete address information in web forms using previously stored information.

      If this setting is disabled, Autofill will never suggest, or fill address information, nor will it save additional address information that the user might submit while browsing the web.

      If this setting is enabled or has no value, the user will be able to control Autofill for addresses in the UI.''',
    },
    {
      'name': 'AutofillCreditCardEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': [
        'chrome.*:63-',
        'chrome_os:63-',
        'android:63-',
      ],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': False,
      'id': 392,
      'caption': '''Enable AutoFill for credit cards''',
      'tags': [],
      'desc': '''Enables <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>'s AutoFill feature and allows users to auto complete credit card information in web forms using previously stored information.

      If this setting is disabled, Autofill will never suggest, or fill credit card information, nor will it save additional credit card information that the user might submit while browsing the web.

      If this setting is enabled or has no value, the user will be able to control Autofill for credit cards in the UI.''',
    },
    {
      'name': 'DisabledPlugins',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome.*:8-', 'chrome_os:11-'],
      'deprecated': True,
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['Java', 'Shockwave Flash', 'Chrome PDF Viewer'],
      'id': 19,
      'caption': '''Specify a list of disabled plugins''',
      'tags': [],
      'desc': '''This policy is deprecated. Please use the <ph name="DEFAULT_PLUGINS_SETTING_POLICY_NAME">DefaultPluginsSetting</ph> to control the avalability of the Flash plugin and <ph name="ALWAYS_OPEN_PDF_EXTERNALLY_POLICY_NAME">AlwaysOpenPdfExternally</ph> to control whether the integrated PDF viewer should be used for opening PDF files.

      Specifies a list of plugins that are disabled in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> and prevents users from changing this setting.

      The wildcard characters '*' and '?' can be used to match sequences of arbitrary characters. '*' matches an arbitrary number of characters while '?' specifies an optional single character, i.e. matches zero or one characters. The escape character is '\\', so to match actual '*', '?', or '\\' characters, you can put a '\\' in front of them.

      If you enable this setting, the specified list of plugins is never used in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>. The plugins are marked as disabled in 'about:plugins' and users cannot enable them.

      Note that this policy can be overridden by EnabledPlugins and DisabledPluginsExceptions.

      If this policy is left not set the user can use any plugin installed on the system except for hard-coded incompatible, outdated or dangerous plugins.''',
      'label': '''List of disabled plugins''',
    },
    {
      'name': 'EnabledPlugins',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome.*:11-', 'chrome_os:11-'],
      'deprecated': True,
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['Java', 'Shockwave Flash', 'Chrome PDF Viewer'],
      'id': 78,
      'caption': '''Specify a list of enabled plugins''',
      'tags': ['system-security'],
      'desc': '''This policy is deprecated. Please use the <ph name="DEFAULT_PLUGINS_SETTING_POLICY_NAME">DefaultPluginsSetting</ph> to control the avalability of the Flash plugin and <ph name="ALWAYS_OPEN_PDF_EXTERNALLY_POLICY_NAME">AlwaysOpenPdfExternally</ph> to control whether the integrated PDF viewer should be used for opening PDF files.

      Specifies a list of plugins that are enabled in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> and prevents users from changing this setting.

      The wildcard characters '*' and '?' can be used to match sequences of arbitrary characters. '*' matches an arbitrary number of characters while '?' specifies an optional single character, i.e. matches zero or one characters. The escape character is '\\', so to match actual '*', '?', or '\\' characters, you can put a '\\' in front of them.

      The specified list of plugins is always used in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> if they are installed. The plugins are marked as enabled in 'about:plugins' and users cannot disable them.

      Note that this policy overrides both DisabledPlugins and DisabledPluginsExceptions.

      If this policy is left not set the user can disable any plugin installed on the system.''',
      'label': '''List of enabled plugins''',
    },
    {
      'name': 'DisabledPluginsExceptions',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome.*:11-', 'chrome_os:11-'],
      'deprecated': True,
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['Java', 'Shockwave Flash', 'Chrome PDF Viewer'],
      'id': 79,
      'caption': '''Specify a list of plugins that the user can enable or disable''',
      'tags': [],
      'desc': '''This policy is deprecated. Please use the <ph name="DEFAULT_PLUGINS_SETTING_POLICY_NAME">DefaultPluginsSetting</ph> to control the avalability of the Flash plugin and <ph name="ALWAYS_OPEN_PDF_EXTERNALLY_POLICY_NAME">AlwaysOpenPdfExternally</ph> to control whether the integrated PDF viewer should be used for opening PDF files.

      Specifies a list of plugins that user can enable or disable in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.

      The wildcard characters '*' and '?' can be used to match sequences of arbitrary characters. '*' matches an arbitrary number of characters while '?' specifies an optional single character, i.e. matches zero or one characters. The escape character is '\\', so to match actual '*', '?', or '\\' characters, you can put a '\\' in front of them.

      If you enable this setting, the specified list of plugins can be used in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>. Users can enable or disable them in 'about:plugins', even if the plugin also matches a pattern in DisabledPlugins. Users can also enable and disable plugins that don't match any patterns in DisabledPlugins, DisabledPluginsExceptions and EnabledPlugins.

      This policy is meant to allow for strict plugin blacklisting where the 'DisabledPlugins' list contains wildcarded entries like disable all plugins '*' or disable all Java plugins '*Java*' but the administrator wishes to enable some particular version like 'IcedTea Java 2.3'. This particular versions can be specified in this policy.

      Note that both the plugin name and the plugin's group name have to be exempted. Each plugin group is shown in a separate section in about:plugins; each section may have one or more plugins. For example, the "Shockwave Flash" plugin belongs to the "Adobe Flash Player" group, and both names have to have a match in the exceptions list if that plugin is to be exempted from the blacklist.

      If this policy is left not set any plugin that matches the patterns in the 'DisabledPlugins' will be locked disabled and the user won't be able to enable them.''',
      'label': '''List of exceptions to the list of disabled plugins''',
    },
    {
      'name': 'AlwaysOpenPdfExternally',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:55-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 347,
      'caption': '''Always Open PDF files externally''',
      'tags': [],
      'desc': '''Disables the internal PDF viewer in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>. Instead it treats it as download and allows the user to open PDF files with the default application.

      If this policy is left not set or disabled the PDF plugin will be used to open PDF files unless the user disables it.''',
    },
    {
      'name': 'DisablePluginFinder',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:11-64', 'chrome_os:11-64'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'deprecated': True,
      'example_value': True,
      'id': 66,
      'caption': '''Specify whether the plugin finder should be disabled (deprecated)''',
      'tags': [],
      'desc': '''This policy has been removed as of <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> 64.

      Automatic search and installation of missing plugins is no longer supported.''',
      'label': '''Disable plugin finder (deprecated)''',
    },
    {
      'name': 'SyncDisabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:8-', 'chrome_os:11-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 20,
      'caption': '''Disable synchronization of data with Google''',
      'tags': ['filtering', 'google-sharing'],
      'desc': '''Disables data synchronization in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> using Google-hosted synchronization services and prevents users from changing this setting.

      If you enable this setting, users cannot change or override this setting in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.

      If this policy is left not set Google Sync will be available for the user to choose whether to use it or not.

      To fully disable Google Sync, it is recommended that you disable the Google Sync service in the Google Admin console.

      This policy should not be enabled when <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME">RoamingProfileSupportEnabled</ph> policy is set to enabled as that feature shares the same client side functionality. The Google-hosted synchronization is disabled in this case completely.''',
      'arc_support': 'Disabling Google Sync will cause Android Backup and Restore to not function properly.',
    },
    {
      'name': 'RoamingProfileSupportEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.win:57-'],
      'features': {
        'dynamic_refresh': False,
        'per_profile': False,
      },
      'example_value': True,
      'id': 358,
      'caption': '''Enable the creation of roaming copies for <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> profile data''',
      'tags': ['local-data-access'],
      'desc': '''If you enable this setting, the settings stored in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> profiles like bookmarks, autofill data, passwords, etc. will also be written to a file stored in the Roaming user profile folder or a location specified by the Administrator through the <ph name="ROAMING_PROFILE_LOCATION_POLICY_NAME">$1<ex>RoamingProfileLocation</ex></ph> policy. Enabling this policy disables cloud sync.

      If this policy is disabled or left not set only the regular local profiles will be used.

      The <ph name="SYNC_DISABLED_POLICY_NAME">SyncDisabled</ph> policy disables all data synchronization, overriding RoamingProfileSupportEnabled.''',
      'label': '''Enable the creation of roaming copies for <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> profile data.''',
    },
    {
      'name': 'RoamingProfileLocation',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome.win:57-'],
      'features': {
        'dynamic_refresh': False,
        'per_profile': False,
      },
      'example_value': '${roaming_app_data}\\chrome-profile',
      'id': 359,
      'caption': '''Set the roaming profile directory''',
      'tags': ['local-data-access'],
      'desc': '''Configures the directory that <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will use for storing the roaming copy of the profiles.

      If you set this policy, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will use the provided directory to store the roaming copy of the profiles if the <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME">$1<ex>RoamingProfileSupportEnabled</ex></ph> policy has been enabled. If the <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME">$1<ex>RoamingProfileSupportEnabled</ex></ph> policy is disabled or left unset the value stored in this policy is not used.

      See https://www.chromium.org/administrators/policy-list-3/user-data-directory-variables for a list of variables that can be used.

      If this policy is left not set the default roaming profile path will be used.''',
      'label': '''Set the roaming profile directory''',
    },
    {
      'name': 'SigninAllowed',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:27-', 'android:38-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'deprecated': True,
      'example_value': True,
      'id': 190,
      'caption': '''Allow sign in to <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>''',
      'tags': [],
      'desc': '''This policy is deprecated, consider using SyncDisabled instead.

      Allows the user to sign in to <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.

      If you set this policy, you can configure whether a user is allowed to sign in to <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>. Setting this policy to 'False' will prevent apps and extensions that use the chrome.identity API from functioning, so you may want to use SyncDisabled instead.''',
    },
    {
      'name': 'EnableDeprecatedWebBasedSignin',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:35-42'],
      'features': {
        'dynamic_refresh': False,
        'per_profile': False,
      },
      'deprecated': True,
      'example_value': False,
      'id': 265,
      'caption': '''Enable the old web-based signin flow''',
      'tags': [],
      'desc': '''This setting was named EnableWebBasedSignin prior to Chrome 42, and support for it will be removed entirely in Chrome 43.

      This setting is useful for enterprise customers who are using SSO solutions that are not compatible with the new inline signin flow yet.
      If you enable this setting, the old web-based signin flow would be used.
      If you disable this setting or leave it not set, the new inline signin flow would be used by default. Users may still enable the old web-based signin flow through the command line flag --enable-web-based-signin.

      The experimental setting will be removed in the future when the inline signin fully supports all SSO signin flows.''',
    },
    {
      'name': 'UserDataDir',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome.win:11-', 'chrome.mac:11-'],
      'features': {
        'dynamic_refresh': False,
        'per_profile': False,
      },
      'example_value': '${users}/${user_name}/Chrome',
      'id': 63,
      'caption': '''Set user data directory''',
      'tags': ['local-data-access'],
      'desc': '''Configures the directory that <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will use for storing user data.

      If you set this policy, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will use the provided directory regardless whether the user has specified the '--user-data-dir' flag or not. To avoid data loss or other unexpected errors this policy should not be set to a volume's root directory or to a directory used for other purposes, because <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> manages its contents.

      See https://www.chromium.org/administrators/policy-list-3/user-data-directory-variables for a list of variables that can be used.

      If this policy is left not set the default profile path will be used and the user will be able to override it with the '--user-data-dir' command line flag.''',
      'label': '''Set user data directory''',
    },
    {
      'name': 'DiskCacheDir',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome.*:13-'],
      'features': {
        'dynamic_refresh': False,
        'per_profile': False,
      },
      'example_value': '${user_home}/Chrome_cache',
      'id': 88,
      'caption': '''Set disk cache directory''',
      'tags': [],
      'desc': '''Configures the directory that <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will use for storing cached files on the disk.

      If you set this policy, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will use the provided directory regardless whether the user has specified the '--disk-cache-dir' flag or not. To avoid data loss or other unexpected errors this policy should not be set to a volume's root directory or to a directory used for other purposes, because <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> manages its contents.

      See https://www.chromium.org/administrators/policy-list-3/user-data-directory-variables for a list of variables that can be used.

      If this policy is left not set the default cache directory will be used and the user will be able to override it with the '--disk-cache-dir' command line flag.''',
      'label': '''Set disk cache directory''',
    },
    {
      'name': 'DiskCacheSize',
      'type': 'int',
      'schema': { 'type': 'integer' },
      'supported_on': ['chrome.*:17-'],
      'features': {
        'dynamic_refresh': False,
        'per_profile': False,
      },
      'example_value': 104857600,
      'id': 110,
      'caption': '''Set disk cache size in bytes''',
      'tags': [],
      'desc': '''Configures the cache size that <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will use for storing cached files on the disk.

      If you set this policy, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will use the provided cache size regardless whether the user has specified the '--disk-cache-size' flag or not. The value specified in this policy is not a hard boundary but rather a suggestion to the caching system, any value below a few megabytes is too small and will be rounded up to a sane minimum.

      If the value of this policy is 0, the default cache size will be used but the user will not be able to change it.

      If this policy is not set the default size will be used and the user will be able to override it with the --disk-cache-size flag.''',
      'label': '''Set disk cache size''',
    },
    {
      'name': 'MediaCacheSize',
      'type': 'int',
      'schema': { 'type': 'integer' },
      'supported_on': ['chrome.*:17-'],
      'features': {
        'dynamic_refresh': False,
        'per_profile': False,
      },
      'example_value': 104857600,
      'id': 111,
      'caption': '''Set media disk cache size in bytes''',
      'tags': [],
      'desc': '''Configures the cache size that <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will use for storing cached media files on the disk.

      If you set this policy, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will use the provided cache size regardless whether the user has specified the '--media-cache-size' flag or not. The value specified in this policy is not a hard boundary but rather a suggestion to the caching system, any value below a few megabytes is too small and will be rounded up to a sane minimum.

      If the value of this policy is 0, the default cache size will be used but the user will not be able to change it.

      If this policy is not set the default size will be used and the user will be able to override it with the --media-cache-size flag.''',
      'label': '''Set media disk cache size''',
    },
    {
      'name': 'DownloadRestrictions',
      'type': 'int-enum',
      'schema': {
        'type': 'integer',
        'enum': [ 0, 1, 2, 3 ],
      },
      'items': [
        {
          'name': 'DefaultDownloadSecurity',
          'value': 0,
          'caption': '''No special restrictions''',
        },
        {
          'name': 'BlockDangerousDownloads',
          'value': 1,
          'caption': '''Block dangerous downloads''',
        },
        {
          'name': 'BlockPotentiallyDangerousDownloads',
          'value': 2,
          'caption': '''Block potentially dangerous downloads''',
        },
        {
          'name': 'BlockAllDownloads',
          'value': 3,
          'caption': '''Block all downloads''',
        },
      ],
      'supported_on': ['chrome.*:61-', 'chrome_os:61-'],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 2,
      'id': 371,
      'caption': '''Allow download restrictions''',
      'tags': ['local-data-access'],
      'desc': '''Configures the type of downloads that <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will completely block, without letting users override the security decision.

      If you set this policy, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will prevent certain types of downloads, and won't let user bypass the security warnings.

      When the 'Block dangerous downloads' option is chosen, all downloads are allowed, except for those that carry Safe Browsing warnings.

      When the 'Block potentially dangerous downloads' option is chosen, all downloads allowed, except for those that carry Safe Browsing warnings of potentially dangerous downloads.

      When the 'Block all downloads' option is chosen, all downloads are blocked.

      When this policy is not set, (or the 'No special restrictions' option is chosen), the downloads will go through the usual security restrictions based on Safe Browsing analysis results.

      Note that these restrictions apply to downloads triggered from web page content, as well as the 'download link...' context menu option. These restrictions do not apply to the save / download of the currently displayed page, nor does it apply to saving as PDF from the printing options.

      See https://developers.google.com/safe-browsing for more info on Safe Browsing.''',
      'label': '''Download restrictions''',
    },
    {
      'name': 'DownloadDirectory',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome.*:11-', 'chrome_os:35-'],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': '/home/${user_name}/Downloads',
      'id': 64,
      'caption': '''Set download directory''',
      'tags': ['local-data-access'],
      'desc': '''Configures the directory that <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will use for downloading files.

      If you set this policy, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will use the provided directory regardless whether the user has specified one or enabled the flag to be prompted for download location every time.

      See https://www.chromium.org/administrators/policy-list-3/user-data-directory-variables for a list of variables that can be used.

      If this policy is left not set the default download directory will be used and the user will be able to change it.''',
      'label': '''Set download directory''',
      'arc_support': 'This policy has no effect on Android apps. Android apps always use the default downloads directory and cannot access any files downloaded by <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> into a non-default downloads directory.',
    },
    {
      'name': 'SafeBrowsingForTrustedSourcesEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.win:61-'],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': False,
      'id': 375,
      'caption': '''Enable Safe Browsing for trusted sources''',
      'tags': ['local-data-access'],
      'desc': '''Identify if <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> can allow download without Safe Browsing checks when it's from a trusted source.

      When False, downloaded files will not be sent to be analyzed by Safe Browsing when it's from a trusted source.

      When not set (or set to True), downloaded files are sent to be analyzed by Safe Browsing, even when it's from a trusted source.

      Note that these restrictions apply to downloads triggered from web page content, as well as the 'download link...' context menu option. These restrictions do not apply to the save / download of the currently displayed page, nor does it apply to saving as PDF from the printing options.

      This policy is not available on Windows instances that are not joined
      to a <ph name="MS_AD_NAME">Microsoft® Active Directory®</ph> domain.''',
      'label': '''Safe Browsing enable state for trusted sources''',
    },
    {
      'name': 'ClearSiteDataOnExit',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:11-28', 'chrome_os:11-28'],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'deprecated': True,
      'example_value': True,
      'id': 65,
      'caption': '''Clear site data on browser shutdown (deprecated)''',
      'tags': [],
      'desc': '''This policy has been retired as of <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> version 29.''',
      'label': '''Clear site data on browser shutdown (deprecated)''',
    },
    {
      'name': 'CaptivePortalAuthenticationIgnoresProxy',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:41-'],
      'features': {
        'can_be_recommended': False,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'default_for_enterprise_users': False,
      'id': 295,
      'caption': '''Captive portal authentication ignores proxy''',
      'tags': [],
      'desc': '''This policy allows <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> to bypass any proxy for captive portal authentication.

      This policy only takes effect if a proxy is configured (for example through policy, by the user in chrome://settings, or by extensions).

      If you enable this setting, any captive portal authentication pages (i.e. all web pages starting from captive portal signin page until <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> detects successful internet connection) will be displayed in a separate window ignoring all policy settings and restrictions for the current user.

      If you disable this setting or leave it unset, any captive portal authentication pages will be shown in a (regular) new browser tab, using the current user's proxy settings.''',
    },
    {
      'name': 'ProxyMode',
      'type': 'string-enum',
      'schema': {
        'type': 'string',
        'enum': [
          'direct',
          'auto_detect',
          'pac_script',
          'fixed_servers',
          'system'
        ],
      },
      'items': [
        {
          'name': 'ProxyDisabled',
          'value': 'direct',
          'caption': '''Never use a proxy''',
        },
        {
          'name': 'ProxyAutoDetect',
          'value': 'auto_detect',
          'caption': '''Auto detect proxy settings''',
        },
        {
          'name': 'ProxyPacScript',
          'value': 'pac_script',
          'caption': '''Use a .pac proxy script''',
        },
        {
          'name': 'ProxyFixedServers',
          'value': 'fixed_servers',
          'caption': '''Use fixed proxy servers''',
        },
        {
          'name': 'ProxyUseSystem',
          'value': 'system',
          'caption': '''Use system proxy settings''',
        },
      ],
      'supported_on': [
        'chrome.*:10-',
        'chrome_os:11-',
        'android:30-',
      ],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 'direct',
      'id': 21,
      'caption': '''Choose how to specify proxy server settings''',
      'tags': [],
      'desc': '''Allows you to specify the proxy server used by <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> and prevents users from changing proxy settings.

          If you choose to never use a proxy server and always connect directly, all other options are ignored.

          If you choose to use system proxy settings, all other options are ignored.

          If you choose to auto detect the proxy server, all other options are ignored.

          If you choose fixed server proxy mode, you can specify further options in 'Address or URL of proxy server' and 'Comma-separated list of proxy bypass rules'. Only the HTTP proxy server with the highest priority is available for ARC-apps.

          If you choose to use a .pac proxy script, you must specify the URL to the script in 'URL to a proxy .pac file'.

          For detailed examples, visit:
          <ph name="PROXY_HELP_URL">https://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett<ex>https://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett</ex></ph>.

          If you enable this setting, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> and ARC-apps ignore all proxy-related options specified from the command line.

          Leaving this policy not set will allow the users to choose the proxy settings on their own.''',
      'arc_support': '''You cannot force Android apps to use a proxy. A subset of proxy settings is made available to Android apps, which they may voluntarily choose to honor:

          If you choose to never use a proxy server, Android apps are informed that no proxy is configured.

          If you choose to use system proxy settings or a fixed server proxy, Android apps are provided with the http proxy server address and port.

          If you choose to auto detect the proxy server, the script URL "http://wpad/wpad.dat" is provided to Android apps. No other part of the proxy auto-detection protocol is used.

          If you choose to use a .pac proxy script, the script URL is provided to Android apps.''',
    },
    {
      'name': 'ProxyServerMode',
      'type': 'int-enum',
      'schema': {
        'type': 'integer',
        'enum': [ 0, 1, 2, 3 ],
        'id': 'ProxyServerMode',
      },
      'items': [
        {
          'name': 'ProxyServerDisabled',
          'value': 0,
          'caption': '''Never use a proxy''',
        },
        {
          'name': 'ProxyServerAutoDetect',
          'value': 1,
          'caption': '''Auto detect proxy settings''',
        },
        {
          'name': 'ProxyServerManual',
          'value': 2,
          'caption': '''Manually specify proxy settings''',
        },
        {
          'name': 'ProxyServerUseSystem',
          'value': 3,
          'caption': '''Use system proxy settings''',
        },
      ],
      'supported_on': [
        'chrome.*:8-',
        'chrome_os:11-',
        'android:30-',
      ],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'deprecated': True,
      'example_value': 2,
      'id': 22,
      'caption': '''Choose how to specify proxy server settings''',
      'tags': [],
      'desc': '''This policy is deprecated, use ProxyMode instead.

          Allows you to specify the proxy server used by <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> and prevents users from changing proxy settings.

          If you choose to never use a proxy server and always connect directly, all other options are ignored.

          If you choose to use system proxy settings or auto detect the proxy server, all other options are ignored.

          If you choose manual proxy settings, you can specify further options in 'Address or URL of proxy server', 'URL to a proxy .pac file' and 'Comma-separated list of proxy bypass rules'. Only the HTTP proxy server with the highest priority is available for ARC-apps.

          For detailed examples, visit:
          <ph name="PROXY_HELP_URL">https://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett<ex>https://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett</ex></ph>.

          If you enable this setting, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> ignores all proxy-related options specified from the command line.

          Leaving this policy not set will allow the users to choose the proxy settings on their own.''',
      'arc_support': 'You cannot force Android apps to use a proxy. A subset of proxy settings is made available to Android apps, which they may voluntarily choose to honor. See the <ph name="PROXY_MODE_POLICY_NAME">ProxyMode</ph> policy for more details.',
    },
    {
      'name': 'ProxyServer',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': [
        'chrome.*:8-',
        'chrome_os:11-',
        'android:30-',
      ],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': '123.123.123.123:8080',
      'id': 23,
      'caption': '''Address or URL of proxy server''',
      'tags': [],
      'desc': '''You can specify the URL of the proxy server here.

          This policy only takes effect if you have selected manual proxy settings at 'Choose how to specify proxy server settings'.

          You should leave this policy not set if you have selected any other mode for setting proxy policies.

          For more options and detailed examples, visit:
          <ph name="PROXY_HELP_URL">https://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett<ex>https://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett</ex></ph>.''',
      'arc_support': 'You cannot force Android apps to use a proxy. A subset of proxy settings is made available to Android apps, which they may voluntarily choose to honor. See the <ph name="PROXY_MODE_POLICY_NAME">ProxyMode</ph> policy for more details.',
    },
    {
      'name': 'ProxyPacUrl',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': [
        'chrome.*:8-',
        'chrome_os:11-',
        'android:30-',
      ],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 'https://internal.site/example.pac',
      'id': 24,
      'caption': '''URL to a proxy .pac file''',
      'tags': [],
      'desc': '''You can specify a URL to a proxy .pac file here.

          This policy only takes effect if you have selected manual proxy settings at 'Choose how to specify proxy server settings'.

          You should leave this policy not set if you have selected any other mode for setting proxy policies.

          For detailed examples, visit:
          <ph name="PROXY_HELP_URL">https://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett<ex>https://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett</ex></ph>.''',
      'arc_support': 'You cannot force Android apps to use a proxy. A subset of proxy settings is made available to Android apps, which they may voluntarily choose to honor. See the <ph name="PROXY_MODE_POLICY_NAME">ProxyMode</ph> policy for more details.',
    },
    {
      'name': 'ProxyBypassList',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': [
        'chrome.*:8-',
        'chrome_os:11-',
        'android:30-',
      ],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 'https://www.example1.com,https://www.example2.com,https://internalsite/',
      'id': 25,
      'caption': '''Proxy bypass rules''',
      'tags': [],
      'desc': '''<ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will bypass any proxy for the list of hosts given here.

          This policy only takes effect if you have selected manual proxy settings at 'Choose how to specify proxy server settings'.

          You should leave this policy not set if you have selected any other mode for setting proxy policies.

          For more detailed examples, visit:
          <ph name="PROXY_HELP_URL">https://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett<ex>https://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett</ex></ph>.''',
      'label': '''Comma-separated list of proxy bypass rules''',
      'arc_support': 'You cannot force Android apps to use a proxy. A subset of proxy settings is made available to Android apps, which they may voluntarily choose to honor. See the <ph name="PROXY_MODE_POLICY_NAME">ProxyMode</ph> policy for more details.',
    },
    {
      'name': 'ProxySettings',
      'type': 'dict',
      'schema': {
        'type': 'object',
        'properties': {
          'ProxyMode': { 'type': 'string' },
          'ProxyPacUrl': { 'type': 'string' },
          'ProxyServer': { 'type': 'string' },
          'ProxyBypassList': { 'type': 'string' },
          'ProxyServerMode': { '$ref': 'ProxyServerMode' },
        },
      },
      'supported_on': [
        'chrome.*:18-',
        'chrome_os:18-',
        'android:30-',
      ],
      'future': True,
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': { "ProxyMode": "direct", "ProxyPacUrl": "https://internal.site/example.pac", "ProxyServer": "123.123.123.123:8080", "ProxyBypassList": "https://www.example1.com,https://www.example2.com,https://internalsite/", "ProxyServerMode": 2 },
      'id': 116,
      'caption': '''Proxy settings''',
      'tags': ['system-security'],
      'desc': '''Configures the proxy settings for <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>. These proxy settings will be available for ARC-apps too.

      This policy isn't ready for usage yet, please don't use it.''',
      'arc_support': 'Only a subset of proxy configuration options are made available to Android apps. Android apps may voluntarily choose to use the proxy. You cannot force them to use a proxy.',
    },
    {
      'name': 'AuthSchemes',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome.*:9-','android:46-','chrome_os:62-'],
      'supported_chrome_os_management': ['active_directory'],
      'features': {
        'dynamic_refresh': False,
        'per_profile': False,
      },
      'example_value': 'basic,digest,ntlm,negotiate',
      'id': 26,
      'caption': '''Supported authentication schemes''',
      'tags': [],
      'desc': '''Specifies which HTTP authentication schemes are supported by <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.

          Possible values are 'basic', 'digest', 'ntlm' and 'negotiate'. Separate multiple values with commas.

          If this policy is left not set, all four schemes will be used.''',
    },
    {
      'name': 'DisableAuthNegotiateCnameLookup',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:9-','android:46-','chrome_os:62-'],
      'supported_chrome_os_management': ['active_directory'],
      'features': {
        'dynamic_refresh': False,
        'per_profile': False,
      },
      'example_value': False,
      'id': 27,
      'caption': '''Disable CNAME lookup when negotiating Kerberos authentication''',
      'tags': [],
      'desc': '''Specifies whether the generated Kerberos SPN is based on the canonical DNS name or the original name entered.

          If you enable this setting, CNAME lookup will be skipped and the server name will be used as entered.

          If you disable this setting or leave it not set, the canonical name of the server will be determined via CNAME lookup.''',
    },
    {
      'name': 'EnableAuthNegotiatePort',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:9-','chrome_os:62-'],
      'supported_chrome_os_management': ['active_directory'],
      'features': {
        'dynamic_refresh': False,
        'per_profile': False,
      },
      'example_value': False,
      'id': 28,
      'caption': '''Include non-standard port in Kerberos SPN''',
      'tags': [],
      'desc': '''Specifies whether the generated Kerberos SPN should include a non-standard port.

          If you enable this setting, and a non-standard port (i.e., a port other than 80 or 443) is entered, it will be included in the generated Kerberos SPN.

          If you disable this setting or leave it not set, the generated Kerberos SPN will not include a port in any case.''',
    },
    {
      'name': 'AuthServerWhitelist',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome.*:9-','android:46-','webview_android:49-','chrome_os:62-'],
      'supported_chrome_os_management': ['active_directory'],
      'features': {
        'dynamic_refresh': False,
        'per_profile': False,
      },
      'example_value': '*example.com,foobar.com,*baz',
      'id': 29,
      'caption': '''Authentication server whitelist''',
      'tags': [],
      'desc': '''Specifies which servers should be whitelisted for integrated authentication. Integrated authentication is only enabled when <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> receives an authentication challenge from a proxy or from a server which is in this permitted list.

          Separate multiple server names with commas. Wildcards (*) are allowed.

          If you leave this policy not set <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will try to detect if a server is on the Intranet and only then will it respond to IWA requests.  If a server is detected as Internet then IWA requests from it will be ignored by <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.''',
    },
    {
      'name': 'AuthNegotiateDelegateWhitelist',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome.*:9-','android:46-','chrome_os:62-'],
      'supported_chrome_os_management': ['active_directory'],
      'features': {
        'dynamic_refresh': False,
        'per_profile': False,
      },
      'example_value': 'foobar.example.com',
      'id': 30,
      'caption': '''Kerberos delegation server whitelist''',
      'tags': [],
      'desc': '''Servers that <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> may delegate to.

          Separate multiple server names with commas. Wildcards (*) are allowed.

          If you leave this policy not set <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will not delegate user credentials even if a server is detected as Intranet.''',
    },
    {
      'name': 'GSSAPILibraryName',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome.linux:9-'],
      'features': {
        'dynamic_refresh': False,
        'per_profile': False,
      },
      'example_value': 'libgssapi_krb5.so.2',
      'id': 31,
      'caption': '''GSSAPI library name''',
      'tags': [],
      'desc': '''Specifies which GSSAPI library to use for HTTP authentication. You can set either just a library name, or a full path.

          If no setting is provided, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will fall back to using a default library name.''',
    },
    {
      'name': 'AuthAndroidNegotiateAccountType',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['android:46-','webview_android:49-'],
      'features': {
        'dynamic_refresh': False,
        'per_profile': False,
      },
      'example_value': 'com.example.spnego',
      'id': 305,
      'caption': '''Account type for <ph name="HTTP_NEGOTIATE">HTTP Negotiate</ph> authentication''',
      'tags': [],
      'desc': '''Specifies the account type of the accounts provided by the Android authentication app that supports <ph name="HTTP_NEGOTIATE">HTTP Negotiate</ph> authentication (e.g. Kerberos authentication). This information should be available from the supplier of the authentication app. For more details see https://goo.gl/hajyfN.

          If no setting is provided, <ph name="HTTP_NEGOTIATE">HTTP Negotiate</ph> authentication is disabled on Android.''',
    },
    {
      'name': 'AllowCrossOriginAuthPrompt',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:13-','chrome_os:62-'],
      'supported_chrome_os_management': ['active_directory'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': False,
      'id': 89,
      'caption': '''Cross-origin HTTP Basic Auth prompts''',
      'tags': ['website-sharing'],
      'desc': '''Controls whether third-party sub-content on a page is allowed to pop-up an HTTP Basic Auth dialog box.

          Typically this is disabled as a phishing defense. If this policy is not set, this is disabled and third-party sub-content will not be allowed to pop up a HTTP Basic Auth dialog box.''',
    },
    {
      'name': 'NtlmV2Enabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.linux:63-','chrome.mac:63-','chrome_os:63-','android:63-','webview_android:63-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': True,
      'id': 393,
      'caption': '''Whether NTLMv2 authentication is enabled.''',
      'tags': ['website-sharing'],
      'desc': '''Controls whether NTLMv2 is enabled.

          All recent versions of Samba and Windows servers support NTLMv2. This should only be disabled for backwards compatibility and reduces the security of authentication.

          If this policy is not set, the default is true and NTLMv2 is enabled.''',
    },
    {
      'name': 'ExtensionInstallBlacklist',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome.*:8-', 'chrome_os:11-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['extension_id1', 'extension_id2'],
      'id': 32,
      'caption': '''Configure extension installation blacklist''',
      'tags': [],
      'desc': '''Allows you to specify which extensions the users can NOT install. Extensions already installed will be disabled if blacklisted, without a way for the user to enable them. Once an extension disabled due to the blacklist is removed from it, it will automatically get re-enabled.

          A blacklist value of '*' means all extensions are blacklisted unless they are explicitly listed in the whitelist.

          If this policy is left not set the user can install any extension in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.''',
      'label': '''Extension IDs the user should be prevented from installing (or * for all)''',
    },
    {
      'name': 'ExtensionInstallWhitelist',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome.*:8-', 'chrome_os:11-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['extension_id1', 'extension_id2'],
      'id': 33,
      'caption': '''Configure extension installation whitelist''',
      'tags': [],
      'desc': '''Allows you to specify which extensions are not subject to the blacklist.

          A blacklist value of * means all extensions are blacklisted and users can only install extensions listed in the whitelist.

          By default, all extensions are whitelisted, but if all extensions have been blacklisted by policy, the whitelist can be used to override that policy.''',
      'label': '''Extension IDs to exempt from the blacklist''',
    },
    {
      'name': 'ExtensionInstallForcelist',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome.*:9-', 'chrome_os:11-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['gbchcmhmhahfdphkhkmpfmihenigjmpp;https://clients2.google.com/service/update2/crx', 'abcdefghijklmnopabcdefghijklmnop'],
      'id': 34,
      'caption': '''Configure the list of force-installed apps and extensions''',
      'tags': ['full-admin-access'],
      'desc': '''Specifies a list of apps and extensions that are installed silently,
          without user interaction, and which cannot be uninstalled nor
          disabled by the user. All permissions requested by the
          apps/extensions are granted implicitly, without user interaction,
          including any additional permissions requested by future versions of
          the app/extension. Furthermore, permissions are granted for the
          enterprise.deviceAttributes and enterprise.platformKeys extension
          APIs. (These two APIs are not available to apps/extensions that are
          not force-installed.)

          This policy takes precedence over a potentially conflicting <ph name="EXTENSION_INSTALL_BLACKLIST_POLICY_NAME">ExtensionInstallBlacklist</ph> policy. If an app or extension that previously had been force-installed is removed from this list, it is automatically uninstalled by <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.

          For Windows instances that are not joined to a <ph name="MS_AD_NAME">Microsoft® Active Directory®</ph> domain, forced installation is limited to apps and extensions listed in the Chrome Web Store.

          Note that the source code of any extension may be altered by users via Developer Tools (potentially rendering the extension dysfunctional). If this is a concern, the <ph name="DEVELOPER_TOOLS_POLICY_NAME">DeveloperToolsDisabled</ph> policy should be set.

          Each list item of the policy is a string that contains an extension ID and, optionally, an "update" URL separated by a semicolon (<ph name="SEMICOLON">;</ph>). The extension ID is the 32-letter string found e.g. on <ph name="CHROME_EXTENSIONS_LINK">chrome://extensions</ph> when in developer mode. The "update" URL, if specified, should point to an Update Manifest XML document as described at <ph name="LINK_TO_EXTENSION_DOC1">https://developer.chrome.com/extensions/autoupdate</ph>. By default, the Chrome Web Store's update URL is used (which currently is "https://clients2.google.com/service/update2/crx"). Note that the "update" URL set in this policy is only used for the initial installation; subsequent updates of the extension employ the update URL indicated in the extension's manifest. Note also that specifying the "update" URL explicitly was mandatory in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> versions up to and including 67.

          For example, <ph name="EXTENSION_POLICY_EXAMPLE">gbchcmhmhahfdphkhkmpfmihenigjmpp;https://clients2.google.com/service/update2/crx</ph> installs the <ph name="EXTENSION_POLICY_EXAMPLE_EXTENSION_NAME">Chrome Remote Desktop</ph> app from the standard Chrome Web Store "update" URL. For more information about hosting extensions, see: <ph name="LINK_TO_EXTENSION_DOC2">https://developer.chrome.com/extensions/hosting</ph>.

          If this policy is left not set, no apps or extensions are installed automatically and the user can uninstall any app or extension in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.''',
      'label': '''Extension/App IDs and update URLs to be silently installed''',
      'arc_support': 'Android apps can be force-installed from the Google Admin console using Google Play. They do not use this policy.',
    },
    {
      'name': 'ExtensionInstallSources',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
        'id': 'ExtensionInstallSources',
      },
      'supported_on': ['chrome.*:21-', 'chrome_os:21-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['https://corp.mycompany.com/*'],
      'id': 148,
      'caption': '''Configure extension, app, and user script install sources''',
      'tags': ['full-admin-access', 'system-security'],
      'desc': '''Allows you to specify which URLs are allowed to install extensions, apps, and themes.

          Starting in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> 21, it is more difficult to install extensions, apps, and user scripts from outside the Chrome Web Store. Previously, users could click on a link to a *.crx file, and <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> would offer to install the file after a few warnings. After <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> 21, such files must be downloaded and dragged onto the <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> settings page. This setting allows specific URLs to have the old, easier installation flow.

          Each item in this list is an extension-style match pattern (see https://developer.chrome.com/extensions/match_patterns). Users will be able to easily install items from any URL that matches an item in this list. Both the location of the *.crx file and the page where the download is started from (i.e. the referrer) must be allowed by these patterns.

          <ph name="EXTENSION_INSTALL_BLACKLIST_POLICY_NAME">ExtensionInstallBlacklist</ph> takes precedence over this policy. That is, an extension on the blacklist won't be installed, even if it happens from a site on this list.''',
      'label': '''URL patterns to allow extension, app, and user script installs from''',
    },
    {
      'name': 'ExtensionAllowedTypes',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': {
          'type': 'string',
          'enum': [
            'extension',
            'theme',
            'user_script',
            'hosted_app',
            'legacy_packaged_app',
            'platform_app'
          ],
        },
        'id': 'ExtensionAllowedTypes',
      },
      'supported_on': ['chrome.*:25-', 'chrome_os:25-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['hosted_app'],
      'id': 168,
      'caption': '''Configure allowed app/extension types''',
      'tags': [],
      'desc': '''Controls which app/extension types are allowed to be installed and limits runtime access.

          This setting white-lists the allowed types of extension/apps that can be installed in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> and which hosts they can interact with. The value is a list of strings, each of which should be one of the following: "extension", "theme", "user_script", "hosted_app", "legacy_packaged_app", "platform_app". See the <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> extensions documentation for more information on these types.

          Note that this policy also affects extensions and apps to be force-installed via ExtensionInstallForcelist.

          If this setting is configured, extensions/apps which have a type that is not on the list will not be installed.

          If this settings is left not-configured, no restrictions on the acceptable extension/app types are enforced.''',
      'label': '''Types of extensions/apps that are allowed to be installed''',
    },
    {
      'name': 'ExtensionSettings',
      'type': 'dict',
      'schema': {
        'type': 'object',
        'patternProperties': {
          '^[a-p]{32}$': {
            'type': 'object',
            'properties': {
              'installation_mode': {
                'type': 'string',
                'enum': ['blocked', 'allowed', 'force_installed', 'normal_installed']
              },
              'update_url': { 'type': 'string' },
              'blocked_permissions': {
                'type': 'array',
                'items': {
                  'type': 'string',
                  'pattern': '^[a-z][a-zA-Z.]*$',
                },
                'id': 'ListOfPermissions',
              },
              'allowed_permissions': {
                '$ref': 'ListOfPermissions',
              },
              'minimum_version_required': {
                'type': 'string',
                'pattern': '^[0-9]+([.][0-9]+)*$',
              },
              'runtime_blocked_hosts': {
                'type': 'array',
                'items': {
                  'type': 'string'
                },
                'id': 'ListOfUrlPatterns'
              },
              'runtime_allowed_hosts': {
                '$ref': 'ListOfUrlPatterns'
              },
              'blocked_install_message': {
                'type': 'string'
              }
            },
          },
          '^update_url:': {
            'type': 'object',
            'properties': {
              'installation_mode': {
                'type': 'string',
                'enum': ['blocked', 'allowed']
              },
              'blocked_permissions': {
                '$ref': 'ListOfPermissions',
              },
              'allowed_permissions': {
                '$ref': 'ListOfPermissions',
              },
            },
          },
        },
        'properties': {
          '*': {
            'type': 'object',
            'properties': {
              'installation_mode': {
                'type': 'string',
                'enum': ['blocked', 'allowed']
              },
              'blocked_permissions': {
                '$ref': 'ListOfPermissions',
              },
              'install_sources': {
                '$ref': 'ExtensionInstallSources',
              },
              'allowed_types': {
                '$ref': 'ExtensionAllowedTypes',
              },
              'runtime_blocked_hosts': {
                '$ref': 'ListOfUrlPatterns'
              },
              'runtime_allowed_hosts': {
                '$ref': 'ListOfUrlPatterns'
              },
              'blocked_install_message': {
                'type': 'string'
              }
            },
          },
        },
      },
      'supported_on': ['chrome.*:62-', 'chrome_os:62-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': {
        'abcdefghijklmnopabcdefghijklmnop' : {
          'installation_mode': 'allowed',
          'blocked_permissions': ['history'],
          'minimum_version_required': '1.0.1',
        },
        'bcdefghijklmnopabcdefghijklmnopa' : {
          'installation_mode': 'force_installed',
          'update_url': 'https://example.com/update_url',
          'allowed_permissions': ['downloads'],
          'runtime_blocked_hosts': ['*://*.example.com'],
          'runtime_allowed_hosts': ['*://good.example.com'],
        },
        'cdefghijklmnopabcdefghijklmnopab' : {
          'installation_mode': 'blocked',
          'blocked_install_message': 'Custom error message.',
        },
        'update_url:https://www.example.com/update.xml': {
          'blocked_permissions': ['wallpaper'],
          'allowed_permissions': ['downloads'],
          'installation_mode': 'allowed',
        },
        '*': {
          'installation_mode': 'blocked',
          'blocked_permissions': ['downloads', 'bookmarks'],
          'install_sources': ['https://company-intranet/chromeapps'],
          'allowed_types': ['hosted_app'],
          'runtime_blocked_hosts': ['*://*.example.com'],
          'runtime_allowed_hosts': ['*://good.example.com'],
          'blocked_install_message': 'Custom error message.',
        },
      },
      'id': 278,
      'caption': 'Extension management settings',
      'tags': [],
      'desc': '''Configures extension management settings for <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.

          This policy controls multiple settings, including settings controlled by any existing extension-related policies. This policy will override any legacy policies if both are set.

          This policy maps an extension ID or an update URL to its configuration. With an extension ID, configuration will be applied to the specified extension only. A default configuration can be set for the special ID <ph name="DEFAULT_SCOPE">"*"</ph>, which will apply to all extensions that don't have a custom configuration set in this policy. With an update URL, configuration will be applied to all extensions with the exact update URL stated in manifest of this extension, as described at <ph name="LINK_TO_EXTENSION_DOC1">https://developer.chrome.com/extensions/autoupdate</ph>.

          For a full description of possible settings and structure of this policy please visit https://www.chromium.org/administrators/policy-list-3/extension-settings-full
          ''',
    },
    {
      'name': 'ShowHomeButton',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:8-', 'chrome_os:11-'],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 35,
      'caption': '''Show Home button on toolbar''',
      'tags': [],
      'desc': '''Shows the Home button on <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>'s toolbar.

      If you enable this setting, the Home button is always shown.

      If you disable this setting, the Home button is never shown.

      If you enable or disable this setting, users cannot change or override this setting in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.

      Leaving this policy not set will allow the user to choose whether to show the home button.''',
    },
    {
      'name': 'DeveloperToolsDisabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:9-', 'chrome_os:11-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'deprecated': True,
      'example_value': False,
      'id': 36,
      'caption': '''Disable Developer Tools''',
      'tags': [],
      'desc': '''This policy is deprecated in M68, please use DeveloperToolsAvailability instead.

      Disables the Developer Tools and the JavaScript console.

      If you enable this setting, the Developer Tools can not be accessed and web-site elements can not be inspected anymore. Any keyboard shortcuts and any menu or context menu entries to open the Developer Tools or the JavaScript Console will be disabled.

      Setting this option to disabled or leaving it not set allows the user to use the Developer Tools and the JavaScript console.

      If the policy DeveloperToolsAvailability is set, the value of the policy DeveloperToolsDisabled is ignored.''',
      'arc_support': 'This policy also controls access to Android Developer Options. If you set this policy to true, users cannot access Developer Options. If you set this policy to false or leave it unset, users can access Developer Options by tapping seven times on the build number in the Android settings app.',
    },
    {
      'name': 'DeveloperToolsAvailability',
      'type': 'int-enum',
      'schema': {
        'type': 'integer',
        'enum': [0, 1, 2],
      },
      'items': [
        {
          'name': 'DeveloperToolsDisallowedForForceInstalledExtensions',
          'value': 0,
          'caption': '''Disallow usage of the Developer Tools on extensions installed by enterprise policy, allow usage of the Developer Tools in other contexts''',
        },
        {
          'name': 'DeveloperToolsAllowed',
          'value': 1,
          'caption': '''Allow usage of the Developer Tools''',
        },
        {
          'name': 'DeveloperToolsDisallowed',
          'value': 2,
          'caption': '''Disallow usage of the Developer Tools''',
        },
      ],
      'supported_on': ['chrome.*:68-', 'chrome_os:68-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 2,
      'id': 443,
      'caption': '''Control where Developer Tools can be used''',
      'tags': [],
      'desc': '''Allows you to control where Developer Tools can be used.

      If this policy is set to 'DeveloperToolsDisallowedForForceInstalledExtensions' (value 0, which is the default value), the Developer Tools and the JavaScript console can be accessed in general, but they can not be accessed in the context of extensions installed by enterprise policy.
      If this policy is set to 'DeveloperToolsAllowed' (value 1), the Developer Tools and the JavaScript console can be accessed and used in all contexts, including the context of extensions installed by enterprise policy.
      If this policy is set to 'DeveloperToolsDisallowed' (value 2), the Developer Tools can not be accessed and web-site elements can not be inspected anymore. Any keyboard shortcuts and any menu or context menu entries to open the Developer Tools or the JavaScript Console will be disabled.''',
      'arc_support': '''This policy also controls access to Android Developer Options. If you set this policy to 'DeveloperToolsDisallowed' (value 2), users cannot access Developer Options. If you set this policy to another value or leave it unset, users can access Developer Options by tapping seven times on the build number in the Android settings app.''',
    },
    {
      'name': 'RestoreOnStartup',
      'type': 'int-enum',
      'schema': {
        'type': 'integer',
        'enum': [ 1, 4, 5 ],
      },
      'items': [
        {
          'name': 'RestoreOnStartupIsNewTabPage',
          'value': 5,
          'caption': '''Open New Tab Page''',
        },
        {
          'name': 'RestoreOnStartupIsLastSession',
          'value': 1,
          'caption': '''Restore the last session''',
        },
        {
          'name': 'RestoreOnStartupIsURLs',
          'value': 4,
          'caption': '''Open a list of URLs''',
        },
      ],
      'supported_on': ['chrome.*:8-', 'chrome_os:11-'],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 4,
      'id': 37,
      'caption': '''Action on startup''',
      'tags': [],
      'desc': '''Allows you to specify the behavior on startup.

          If you choose 'Open New Tab Page' the New Tab Page will always be opened when you start <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.

          If you choose 'Restore the last session', the URLs that were open last time <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> was closed will be reopened and the browsing session will be restored as it was left.
          Choosing this option disables some settings that rely on sessions or that perform actions on exit (such as Clear browsing data on exit or session-only cookies).

          If you choose 'Open a list of URLs', the list of 'URLs to open on startup' will be opened when a user starts <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.

          If you enable this setting, users cannot change or override it in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.

          Disabling this setting is equivalent to leaving it not configured. The user will still be able to change it in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.

          This policy is not available on Windows instances that are not joined
          to a <ph name="MS_AD_NAME">Microsoft® Active Directory®</ph> domain.''',
    },
    {
      'name': 'RestoreOnStartupURLs',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome.*:8-', 'chrome_os:11-'],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['https://example.com', 'https://www.chromium.org'],
      'id': 38,
      'caption': '''URLs to open on startup''',
      'tags': [],
      'desc': '''If 'Open a list of URLs' is selected as the startup action, this allows you to specify the list of URLs that are opened. If left not set no URL will be opened on start up.

          This policy only works if the 'RestoreOnStartup' policy is set to 'RestoreOnStartupIsURLs'.

          This policy is not available on Windows instances that are not joined
          to a <ph name="MS_AD_NAME">Microsoft® Active Directory®</ph> domain.''',
    },
    {
      'name': 'BlockThirdPartyCookies',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:10-', 'chrome_os:11-'],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': False,
      'id': 39,
      'caption': '''Block third party cookies''',
      'tags': [],
      'desc': '''Enabling this setting prevents cookies from being set by web page elements that are not from the domain that is in the browser's address bar.

      Disabling this setting allows cookies to be set by web page elements that are not from the domain that is in the browser's address bar and prevents users from changing this setting.

      If this policy is left not set, third party cookies will be enabled but the user will be able to change that.''',
    },
    {
      'name': 'DefaultSearchProviderEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': [
        'chrome.*:8-',
        'chrome_os:11-',
        'android:30-',
      ],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 40,
      'caption': '''Enable the default search provider''',
      'tags': [],
      'desc': '''Enables the use of a default search provider.

          If you enable this setting, a default search is performed when the user types text in the omnibox that is not a URL.

          You can specify the default search provider to be used by setting the rest of the default search policies. If these are left empty, the user can choose the default provider.

          If you disable this setting, no search is performed when the user enters non-URL text in the omnibox.

          If you enable or disable this setting, users cannot change or override this setting in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.

          If this policy is left not set, the default search provider is enabled, and the user will be able to set the search provider list.

          This policy is not available on Windows instances that are not joined
          to a <ph name="MS_AD_NAME">Microsoft® Active Directory®</ph> domain.''',
    },
    {
      'name': 'DefaultSearchProviderName',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': [
        'chrome.*:8-',
        'chrome_os:11-',
        'android:30-',
      ],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 'My Intranet Search',
      'id': 41,
      'caption': '''Default search provider name''',
      'tags': ['website-sharing'],
      'desc': '''Specifies the name of the default search provider. If left empty or not set, the host name specified by the search URL will be used.

          This policy is only considered if the 'DefaultSearchProviderEnabled' policy is enabled.''',
    },
    {
      'name': 'DefaultSearchProviderKeyword',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': [
        'chrome.*:8-',
        'chrome_os:11-',
        'android:30-',
      ],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 'mis',
      'id': 42,
      'caption': '''Default search provider keyword''',
      'tags': [],
      'desc': '''Specifies the keyword, which is the shortcut used in the omnibox to trigger the search for this provider.

          This policy is optional. If not set, no keyword will activate the search provider.

          This policy is only considered if the 'DefaultSearchProviderEnabled' policy is enabled.''',
    },
    {
      'name': 'DefaultSearchProviderSearchURL',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': [
        'chrome.*:8-',
        'chrome_os:11-',
        'android:30-',
      ],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 'https://search.my.company/search?q={searchTerms}',
      'id': 43,
      'caption': '''Default search provider search URL''',
      'tags': ['website-sharing'],
      'desc': '''Specifies the URL of the search engine used when doing a default search. The URL should contain the string '<ph name="SEARCH_TERM_MARKER">{searchTerms}</ph>', which will be replaced at query time by the terms the user is searching for.

          Google's search URL can be specified as: <ph name="GOOGLE_SEARCH_URL">'{google:baseURL}search?q={searchTerms}&amp;{google:RLZ}{google:originalQueryForSuggestion}{google:assistedQueryStats}{google:searchFieldtrialParameter}{google:searchClient}{google:sourceId}ie={inputEncoding}'</ph>.

          This option must be set when the 'DefaultSearchProviderEnabled' policy is enabled and will only be respected if this is the case.''',
    },
    {
      'name': 'DefaultSearchProviderSuggestURL',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome.*:8-', 'chrome_os:11-', 'android:30-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 'https://search.my.company/suggest?q={searchTerms}',
      'id': 44,
      'caption': '''Default search provider suggest URL''',
      'tags': [],
      'desc': '''Specifies the URL of the search engine used to provide search suggestions. The URL should contain the string '<ph name="SEARCH_TERM_MARKER">{searchTerms}</ph>', which will be replaced at query time by the text the user has entered so far.

          This policy is optional. If not set, no suggest URL will be used.

          Google's suggest URL can be specified as: <ph name="GOOGLE_SUGGEST_SEARCH_URL">'{google:baseURL}complete/search?output=chrome&amp;q={searchTerms}'</ph>.

          This policy is only respected if the 'DefaultSearchProviderEnabled' policy is enabled.''',
    },
    {
      'name': 'DefaultSearchProviderInstantURL',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome.*:10-63', 'chrome_os:11-63', 'android:30-63'],
      'deprecated': True,
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 'https://search.my.company/suggest?q={searchTerms}',
      'id': 45,
      'caption': '''Default search provider instant URL''',
      'tags': [],
      'desc': '''Specifies the URL of the search engine used to provide instant results. The URL should contain the string <ph name="SEARCH_TERM_MARKER">'{searchTerms}'</ph>, which will be replaced at query time by the text the user has entered so far.

          This policy is optional. If not set, no instant search results will be provided.

          Google's instant results URL can be specified as: <ph name="GOOGLE_INSTANT_SEARCH_URL">'{google:baseURL}suggest?q={searchTerms}'</ph>.

          This policy is only respected if the 'DefaultSearchProviderEnabled' policy is enabled.''',
    },
    {
      'name': 'DefaultSearchProviderIconURL',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome.*:8-', 'chrome_os:11-', 'android:30-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 'https://search.my.company/favicon.ico',
      'id': 46,
      'caption': '''Default search provider icon''',
      'tags': [],
      'desc': '''Specifies the favorite icon URL of the default search provider.

          This policy is optional. If not set, no icon will be present for the search provider.

          This policy is only respected if the 'DefaultSearchProviderEnabled' policy is enabled.''',
    },
    {
      'name': 'DefaultSearchProviderEncodings',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome.*:8-', 'chrome_os:11-', 'android:30-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['UTF-8', 'UTF-16', 'GB2312', 'ISO-8859-1'],
      'id': 47,
      'caption': '''Default search provider encodings''',
      'tags': [],
      'desc': '''Specifies the character encodings supported by the search provider. Encodings are code page names like UTF-8, GB2312, and ISO-8859-1. They are tried in the order provided.

          This policy is optional. If not set, the default will be used which is UTF-8.

          This policy is only respected if the 'DefaultSearchProviderEnabled' policy is enabled.''',
    },
    {
      'name': 'DefaultSearchProviderAlternateURLs',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome.*:24-', 'chrome_os:24-', 'android:30-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['https://search.my.company/suggest#q={searchTerms}', 'https://search.my.company/suggest/search#q={searchTerms}'],
      'id': 161,
      'caption': '''List of alternate URLs for the default search provider''',
      'tags': [],
      'desc': '''Specifies a list of alternate URLs that can be used to extract search terms from the search engine. The URLs should contain the string <ph name="SEARCH_TERM_MARKER">'{searchTerms}'</ph>, which will be used to extract the search terms.

          This policy is optional. If not set, no alternate urls will be used to extract search terms.

          This policy is only respected if the 'DefaultSearchProviderEnabled' policy is enabled.''',
    },
    {
      'name': 'DefaultSearchProviderSearchTermsReplacementKey',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome.*:25-63', 'chrome_os:25-63', 'android:30-63'],
      'deprecated': True,
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 'espv',
      'id': 171,
      'caption': '''Parameter controlling search term placement for the default search provider''',
      'tags': [],
      'desc': '''If this policy is set and a search URL suggested from the omnibox contains this parameter in the query string or in the fragment identifier, then the suggestion will show the search terms and search provider instead of the raw search URL.

          This policy is optional. If not set, no search term replacement will be performed.

          This policy is only respected if the 'DefaultSearchProviderEnabled' policy is enabled.''',
    },
    {
      'name': 'DefaultSearchProviderImageURL',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome.*:29-', 'chrome_os:29-', 'android:30-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 'https://search.my.company/searchbyimage/upload',
      'id': 229,
      'caption': '''Parameter providing search-by-image feature for the default search provider''',
      'tags': [],
      'desc': '''Specifies the URL of the search engine used to provide image search. Search requests will be sent using the GET method. If the DefaultSearchProviderImageURLPostParams policy is set then image search requests will use the POST method instead.

          This policy is optional. If not set, no image search will be used.

          This policy is only respected if the 'DefaultSearchProviderEnabled' policy is enabled.''',
    },
    {
      'name': 'DefaultSearchProviderNewTabURL',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome.*:30-', 'chrome_os:30-', 'android:30-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 'https://search.my.company/newtab',
      'id': 237,
      'caption': '''Default search provider new tab page URL''',
      'tags': [],
      'desc': '''Specifies the URL that a search engine uses to provide a new tab page.

          This policy is optional. If not set, no new tab page will be provided.

          This policy is only respected if the 'DefaultSearchProviderEnabled' policy is enabled.''',
    },
    {
      'name': 'DefaultSearchProviderSearchURLPostParams',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome.*:29-', 'chrome_os:29-', 'android:30-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 'q={searchTerms},ie=utf-8,oe=utf-8',
      'id': 230,
      'caption': '''Parameters for search URL which uses POST''',
      'tags': [],
      'desc': '''Specifies the parameters used when searching a URL with POST. It consists of comma-separated name/value pairs. If a value is a template parameter, like {searchTerms} in above example, it will be replaced with real search terms data.

          This policy is optional. If not set, search request will be sent using the GET method.

          This policy is only respected if the 'DefaultSearchProviderEnabled' policy is enabled.''',
    },
    {
      'name': 'DefaultSearchProviderSuggestURLPostParams',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome.*:29-', 'chrome_os:29-', 'android:30-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 'q={searchTerms},ie=utf-8,oe=utf-8',
      'id': 231,
      'caption': '''Parameters for suggest URL which uses POST''',
      'tags': [],
      'desc': '''Specifies the parameters used when doing suggestion search with POST. It consists of comma-separated name/value pairs. If a value is a template parameter, like {searchTerms} in above example, it will be replaced with real search terms data.

          This policy is optional. If not set, suggest search request will be sent using the GET method.

          This policy is only respected if the 'DefaultSearchProviderEnabled' policy is enabled.''',
    },
    {
      'name': 'DefaultSearchProviderInstantURLPostParams',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome.*:29-63', 'chrome_os:29-63', 'android:30-63'],
      'deprecated': True,
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 'q={searchTerms},ie=utf-8,oe=utf-8',
      'id': 232,
      'caption': '''Parameters for instant URL which uses POST''',
      'tags': [],
      'desc': '''Specifies the parameters used when doing instant search with POST. It consists of comma-separated name/value pairs. If a value is a template parameter, like {searchTerms} in above example, it will be replaced with real search terms data.

          This policy is optional. If not set, instant search request will be sent using the GET method.

          This policy is only respected if the 'DefaultSearchProviderEnabled' policy is enabled.''',
    },
    {
      'name': 'DefaultSearchProviderImageURLPostParams',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome.*:29-', 'chrome_os:29-', 'android:30-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 'content={imageThumbnail},url={imageURL},sbisrc={SearchSource}',
      'id': 233,
      'caption': '''Parameters for image URL which uses POST''',
      'tags': [],
      'desc': '''Specifies the parameters used when doing image search with POST. It consists of comma-separated name/value pairs. If a value is a template parameter, like {imageThumbnail} in above example, it will be replaced with real image thumbnail data.

          This policy is optional. If not set, image search request will be sent using the GET method.

          This policy is only respected if the 'DefaultSearchProviderEnabled' policy is enabled.''',
    },
    {
      'name': 'DefaultCookiesSetting',
      'type': 'int-enum',
      'schema': {
        'type': 'integer',
        'enum': [ 1, 2, 4 ],
      },
      'items': [
        {
          'name': 'AllowCookies',
          'value': 1,
          'caption': '''Allow all sites to set local data''',
        },
        {
          'name': 'BlockCookies',
          'value': 2,
          'caption': '''Do not allow any site to set local data''',
        },
        {
          'name': 'SessionOnly',
          'value': 4,
          'caption': '''Keep cookies for the duration of the session''',
        },
      ],
      'supported_on': [
        'chrome.*:10-',
        'chrome_os:11-',
        'android:30-',
      ],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 1,
      'id': 48,
      'caption': '''Default cookies setting''',
      'tags': [],
      'desc': '''Allows you to set whether websites are allowed to set local data. Setting local data can be either allowed for all websites or denied for all websites.

          If this policy is set to 'Keep cookies for the duration of the session' then cookies will be cleared when the session closes. Note that if <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> is running in 'background mode', the session may not close when the last window is closed. Please see the 'BackgroundModeEnabled' policy for more information about configuring this behavior.

          If this policy is left not set, 'AllowCookies' will be used and the user will be able to change it.''',
    },
    {
      'name': 'DefaultImagesSetting',
      'type': 'int-enum',
      'schema': {
        'type': 'integer',
        'enum': [ 1, 2 ],
      },
      'items': [
        {
          'name': 'AllowImages',
          'value': 1,
          'caption': '''Allow all sites to show all images''',
        },
        {
          'name': 'BlockImages',
          'value': 2,
          'caption': '''Do not allow any site to show images''',
        },
      ],
      'supported_on': ['chrome.*:10-', 'chrome_os:11-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 1,
      'id': 49,
      'caption': '''Default images setting''',
      'tags': [],
      'desc': '''Allows you to set whether websites are allowed to display images. Displaying images can be either allowed for all websites or denied for all websites.

          If this policy is left not set, 'AllowImages' will be used and the user will be able to change it.

          Note that previously this policy was erroneously enabled on Android, but this functionality has never been fully supported on Android.''',
    },
    {
      'name': 'DefaultJavaScriptSetting',
      'type': 'int-enum',
      'schema': {
        'type': 'integer',
        'enum': [ 1, 2 ],
      },
      'items': [
        {
          'name': 'AllowJavaScript',
          'value': 1,
          'caption': '''Allow all sites to run JavaScript''',
        },
        {
          'name': 'BlockJavaScript',
          'value': 2,
          'caption': '''Do not allow any site to run JavaScript''',
        },
      ],
      'supported_on': ['chrome.*:10-', 'chrome_os:11-', 'android:30-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 1,
      'id': 50,
      'caption': '''Default JavaScript setting''',
      'tags': [],
      'desc': '''Allows you to set whether websites are allowed to run JavaScript. Running JavaScript can be either allowed for all websites or denied for all websites.

          If this policy is left not set, 'AllowJavaScript' will be used and the user will be able to change it.''',
    },
    {
      'name': 'DefaultPluginsSetting',
      'type': 'int-enum',
      'schema': {
        'type': 'integer',
        'enum': [ 1, 2, 3 ],
      },
      'items': [
        {
          'name': 'AllowPlugins',
          'value': 1,
          'caption': '''Allow all sites to automatically run the <ph name="FLASH_PLUGIN_NAME">Flash</ph> plugin''',
        },
        {
          'name': 'BlockPlugins',
          'value': 2,
          'caption': '''Block the <ph name="FLASH_PLUGIN_NAME">Flash</ph> plugin''',
        },
        {
          'name': 'ClickToPlay',
          'value': 3,
          'caption': '''Click to play''',
        },
      ],
      'supported_on': ['chrome.*:10-', 'chrome_os:11-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 1,
      'id': 51,
      'caption': '''Default <ph name="FLASH_PLUGIN_NAME">Flash</ph> setting''',
      'tags': [],
      'desc': '''Allows you to set whether websites are allowed to automatically run the <ph name="FLASH_PLUGIN_NAME">Flash</ph> plugin. Automatically running the <ph name="FLASH_PLUGIN_NAME">Flash</ph> plugin can be either allowed for all websites or denied for all websites.

          Click to play allows the <ph name="FLASH_PLUGIN_NAME">Flash</ph> plugin to run but the user must click on the placeholder to start its execution.

          Automatic playback is only allowed for domains explictly listed in the <ph name="PLUGINS_ALLOWED_FOR_URLS_POLICY_NAME">PluginsAllowedForUrls</ph> policy. If you want to enabled automatic playback for all sites consider adding http://* and https://* to this list.

          If this policy is left not set, the user will be able to change this setting manually.''',
    },
    {
      'name': 'DefaultPopupsSetting',
      'type': 'int-enum',
      'schema': {
        'type': 'integer',
        'enum': [ 1, 2 ],
      },
      'items': [
        {
          'name': 'AllowPopups',
          'value': 1,
          'caption': '''Allow all sites to show pop-ups''',
        },
        {
          'name': 'BlockPopups',
          'value': 2,
          'caption': '''Do not allow any site to show popups''',
        },
      ],
      'supported_on': [
        'chrome.*:10-',
        'chrome_os:11-',
        'android:33-',
      ],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 1,
      'id': 52,
      'caption': '''Default popups setting''',
      'tags': [],
      'desc': '''Allows you to set whether websites are allowed to show pop-ups. Showing popups can be either allowed for all websites or denied for all websites.

          If this policy is left not set, 'BlockPopups' will be used and the user will be able to change it.''',
    },
    {
      'name': 'DefaultNotificationsSetting',
      'type': 'int-enum',
      'schema': {
        'type': 'integer',
        'enum': [ 1, 2, 3 ],
      },
      'items': [
        {
          'name': 'AllowNotifications',
          'value': 1,
          'caption': '''Allow sites to show desktop notifications''',
        },
        {
          'name': 'BlockNotifications',
          'value': 2,
          'caption': '''Do not allow any site to show desktop notifications''',
        },
        {
          'name': 'AskNotifications',
          'value': 3,
          'caption': '''Ask every time a site wants to show desktop notifications''',
        },
      ],
      'supported_on': ['chrome.*:10-', 'chrome_os:11-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 2,
      'id': 53,
      'caption': '''Default notification setting''',
      'tags': [],
      'desc': '''Allows you to set whether websites are allowed to display desktop notifications. Displaying desktop notifications can be allowed by default, denied by default or the user can be asked every time a website wants to show desktop notifications.

          If this policy is left not set, 'AskNotifications' will be used and the user will be able to change it.''',
    },
    {
      'name': 'DefaultGeolocationSetting',
      'type': 'int-enum',
      'schema': {
        'type': 'integer',
        'enum': [ 1, 2, 3 ],
      },
      'items': [
        {
          'name': 'AllowGeolocation',
          'value': 1,
          'caption': '''Allow sites to track the users' physical location''',
        },
        {
          'name': 'BlockGeolocation',
          'value': 2,
          'caption': '''Do not allow any site to track the users' physical location''',
        },
        {
          'name': 'AskGeolocation',
          'value': 3,
          'caption': '''Ask whenever a site wants to track the users' physical location''',
        },
      ],
      'supported_on': ['chrome.*:10-', 'chrome_os:11-', 'android:30-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 1,
      'id': 54,
      'caption': '''Default geolocation setting''',
      'tags': ['website-sharing'],
      'desc': '''Allows you to set whether websites are allowed to track the users' physical location. Tracking the users' physical location can be allowed by default, denied by default or the user can be asked every time a website requests the physical location.

          If this policy is left not set, 'AskGeolocation' will be used and the user will be able to change it.''',
      'arc_support': 'If this policy is set to <ph name="BLOCK_GEOLOCATION_SETTING">BlockGeolocation</ph>, Android apps cannot access location information. If you set this policy to any other value or leave it unset, the user is asked to consent when an Android app wants to access location information.',
    },
    {
      'name': 'DefaultMediaStreamSetting',
      'type': 'int-enum',
      'schema': {
        'type': 'integer',
        'enum': [ 2, 3 ],
      },
      'items': [
        {
          'name': 'BlockAccess',
          'value': 2,
          'caption': '''Do not allow any site to access the camera and microphone''',
        },
        {
          'name': 'PromptOnAccess',
          'value': 3,
          'caption': '''Ask every time a site wants to access the camera and/or microphone''',
        },
      ],
      'supported_on': ['chrome.*:22-', 'chrome_os:22-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'deprecated': True,
      'example_value': 2,
      'id': 149,
      'caption': '''Default mediastream setting''',
      'tags': ['website-sharing'],
      'desc': '''Allows you to set whether websites are allowed to get access to media capture devices. Access to media capture devices can be allowed by default, or the user can be asked every time a website wants to get access to media capture devices.

          If this policy is left not set, 'PromptOnAccess' will be used and the user will be able to change it.''',
    },
    {
      'name': 'DefaultWebBluetoothGuardSetting',
      'type': 'int-enum',
      'schema': {
        'type': 'integer',
        'enum': [ 2, 3 ],
      },
      'items': [
        {
          'name': 'BlockWebBluetooth',
          'value': 2,
          'caption': '''Do not allow any site to request access to Bluetooth devices via the Web Bluetooth API''',
        },
        {
          'name': 'AskWebBluetooth',
          'value': 3,
          'caption': '''Allow sites to ask the user to grant access to a nearby Bluetooth device''',
        },
      ],
      'supported_on': ['chrome_os:50-', 'android:50-', 'chrome.*:50-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 2,
      'id': 320,
      'caption': '''Control use of the Web Bluetooth API''',
      'tags': ['website-sharing'],
      'desc': '''Allows you to set whether websites are allowed to get access to nearby Bluetooth devices. Access can be completely blocked, or the user can be asked every time a website wants to get access to nearby Bluetooth devices.

          If this policy is left not set, '3' will be used, and the user will be able to change it.''',
    },
    {
      'name': 'DefaultKeygenSetting',
      'type': 'int-enum',
      'schema': {
        'type': 'integer',
        'enum': [ 1, 2 ],
      },
      'items': [
        {
          'name': 'AllowKeygen',
          'value': 1,
          'caption': '''Allow all sites to use key generation''',
        },
        {
          'name': 'BlockKeygen',
          'value': 2,
          'caption': '''Do not allow any site to use key generation''',
        },
      ],
      'supported_on': ['chrome.*:49-56', 'chrome_os:49-56', 'android:49-56'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 2,
      'id': 313,
      'caption': '''Default key generation setting''',
      'tags': ['system-security', 'website-sharing', 'local-data-access'],
      'desc': '''Allows you to set whether websites are allowed to use key generation. Using key generation can be either allowed for all websites or denied for all websites.

          If this policy is left not set, 'BlockKeygen' will be used and the user will be able to change it.''',
    },
    {
      'name': 'DefaultWebUsbGuardSetting',
      'type': 'int-enum',
      'schema': {
        'type': 'integer',
        'enum': [ 2, 3 ],
      },
      'items': [
        {
          'name': 'BlockWebUsb',
          'value': 2,
          'caption': '''Do not allow any site to request access to USB devices via the WebUSB API''',
        },
        {
          'name': 'AskWebUsb',
          'value': 3,
          'caption': '''Allow sites to ask the user to grant access to a connected USB device''',
        },
      ],
      'supported_on': ['chrome_os:67-', 'android:67-', 'chrome.*:67-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 2,
      'id': 434,
      'caption': '''Control use of the WebUSB API''',
      'tags': ['website-sharing'],
      'desc': '''Allows you to set whether websites are allowed to get access to connected USB devices. Access can be completely blocked, or the user can be asked every time a website wants to get access to connected USB devices.

          This policy can be overridden for specific URL patterns using the 'WebUsbAskForUrls' and 'WebUsbBlockedForUrls' policies.

          If this policy is left not set, '3' will be used, and the user will be able to change it.''',
    },
    {
      'name': 'WebUsbAskForUrls',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome_os:68-', 'android:68-', 'chrome.*:68-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['https://www.example.com', '[*.]example.edu'],
      'id': 439,
      'caption': '''Allow WebUSB on these sites''',
      'tags': ['website-sharing'],
      'desc': '''Allows you to set a list of url patterns that specify sites which are allowed to ask the user to grant them access to a USB device.

          If this policy is left not set the global default value will be used for all sites either from the 'DefaultWebUsbGuardSetting' policy if it is set, or the user's personal configuration otherwise.

          URL patterns in this policy should not clash with ones configured via WebUsbBlockedForUrls. It is unspecified which of the two policies takes precedence if a URL matches with both.''',
    },
    {
      'name': 'WebUsbBlockedForUrls',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome_os:68-', 'android:68-', 'chrome.*:68-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['https://www.example.com', '[*.]example.edu'],
      'id': 440,
      'caption': '''Block WebUSB on these sites''',
      'tags': [],
      'desc': '''Allows you to set a list of url patterns that specify sites which are prevented from asking the user to grant them access to a USB device.

          If this policy is left not set the global default value will be used for all sites either from the 'DefaultWebUsbGuardSetting' policy if it is set, or the user's personal configuration otherwise.

          URL patterns in this policy should not clash with ones configured via WebUsbAskForUrls. It is unspecified which of the two policies takes precedence if a URL matches with both.''',
    },
    {
      'name': 'AutoSelectCertificateForUrls',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'validation_schema': {
        'type': 'array',
        'items': {
          'type': 'object',
          'properties': {
            'pattern': { 'type': 'string'},
            'filter': {
              'type': 'object',
              'properties': {
                'ISSUER': {
                  'type': 'object',
                  'properties': {
                    'CN': { 'type': 'string'},
                  }
                }
              }
            }
          }
        }
      },
      'supported_on': ['chrome.*:15-', 'chrome_os:15-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['{"pattern":"https://www.example.com","filter":{"ISSUER":{"CN":"certificate issuer name"}}}'],
      'id': 102,
      'caption': '''Automatically select client certificates for these sites''',
      'tags': ['website-sharing'],
      'desc': '''Allows you to specify a list of url patterns that specify sites for which <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> should automatically select a client certificate, if the site requests a certificate.

          The value must be an array of stringified JSON dictionaries. Each dictionary must have the form { "pattern": "$URL_PATTERN", "filter" : $FILTER }, where $URL_PATTERN is a content setting pattern. $FILTER restricts from which client certificates the browser will automatically select. Independent of the filter, only certificates will be selected that match the server's certificate request. If $FILTER has the form { "ISSUER": { "CN": "$ISSUER_CN" } }, additionally only client certificates are selected that are issued by a certificate with the CommonName $ISSUER_CN. If $FILTER is the empty dictionary {}, the selection of client certificates is not additionally restricted.

          If this policy is left not set, no auto-selection will be done for any site.''',
    },
    {
      'name': 'DeviceLoginScreenAutoSelectCertificateForUrls',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'validation_schema': {
        'type': 'array',
        'items': {
          'type': 'object',
          'properties': {
            'pattern': { 'type': 'string'},
            'filter': {
              'type': 'object',
              'properties': {
                'ISSUER': {
                  'type': 'object',
                  'properties': {
                    'CN': { 'type': 'string'},
                  }
                }
              }
            }
          }
        }
      },
      'supported_on': ['chrome_os:65-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': ['{"pattern":"https://www.example.com","filter":{"ISSUER":{"CN":"certificate issuer name"}}}'],
      'id': 396,
      'caption': '''Automatically select client certificates for these sites on the sign-in screen''',
      'tags': ['website-sharing'],
      'desc': '''Allows you to specify a list of url patterns that specify sites for which a client certificate is automatically selected on the sign-in screen in the frame hosting the SAML flow, if the site requests a certificate. An example usage is to configure a device-wide certificate to be presented to the SAML IdP.

      The value must be an array of stringified JSON dictionaries. Each dictionary must have the form { "pattern": "$URL_PATTERN", "filter" : $FILTER }, where $URL_PATTERN is a content setting pattern. $FILTER restricts from which client certificates the browser will automatically select. Independent of the filter, only certificates will be selected that match the server's certificate request. If $FILTER has the form { "ISSUER": { "CN": "$ISSUER_CN" } }, additionally only client certificates are selected that are issued by a certificate with the CommonName $ISSUER_CN. If $FILTER is the empty dictionary {}, the selection of client certificates is not additionally restricted.

      If this policy is left not set, no auto-selection will be done for any site.''',
    },
    {
      'name': 'CookiesAllowedForUrls',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': [
        'chrome.*:11-',
        'chrome_os:11-',
        'android:30-',
      ],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['https://www.example.com', '[*.]example.edu'],
      'id': 77,
      'caption': '''Allow cookies on these sites''',
      'tags': [],
      'desc': '''Allows you to set a list of url patterns that specify sites which are allowed to set cookies.

          If this policy is left not set the global default value will be used for all sites either from the 'DefaultCookiesSetting' policy if it is set, or the user's personal configuration otherwise.

          See also policies 'CookiesBlockedForUrls' and 'CookiesSessionOnlyForUrls'. Note that there must be no conflicting URL patterns between these three policies - it is unspecified which policy takes precedence.''',
    },
    {
      'name': 'CookiesBlockedForUrls',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': [
        'chrome.*:11-',
        'chrome_os:11-',
        'android:30-',
      ],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['https://www.example.com', '[*.]example.edu'],
      'id': 67,
      'caption': '''Block cookies on these sites''',
      'tags': [],
      'desc': '''Allows you to set a list of url patterns that specify sites which are not allowed to set cookies.

          If this policy is left not set the global default value will be used for all sites either from the 'DefaultCookiesSetting' policy if it is set, or the user's personal configuration otherwise.

          See also policies 'CookiesAllowedForUrls' and 'CookiesSessionOnlyForUrls'. Note that there must be no conflicting URL patterns between these three policies - it is unspecified which policy takes precedence.''',
    },
    {
      'name': 'CookiesSessionOnlyForUrls',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': [
        'chrome.*:11-',
        'chrome_os:11-',
        'android:30-',
      ],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['https://www.example.com', '[*.]example.edu'],
      'id': 68,
      'caption': '''Limit cookies from matching URLs to the current session''',
      'tags': [],
      'desc': '''Cookies set by pages matching these URL patterns will be limited to the current session, i.e. they will be deleted when the browser exits.

          For URLs not covered by the patterns specified here, or for all URLs if this policy is not set, the global default value will be used either from the 'DefaultCookiesSetting' policy, if it is set, or the user's personal configuration otherwise.

          Note that if <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> is running in 'background mode', the session may not be closed when the last browser window is closed, but will instead stay active until the browser exits. Please see the 'BackgroundModeEnabled' policy for more information about configuring this behavior.

          See also policies 'CookiesAllowedForUrls' and 'CookiesBlockedForUrls'. Note that there must be no conflicting URL patterns between these three policies - it is unspecified which policy takes precedence.

          If the "RestoreOnStartup" policy is set to restore URLs from previous sessions this policy will not be respected and cookies will be stored permanently for those sites.''',
    },
    {
      'name': 'ImagesAllowedForUrls',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome.*:11-', 'chrome_os:11-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['https://www.example.com', '[*.]example.edu'],
      'id': 69,
      'caption': '''Allow images on these sites''',
      'tags': [],
      'desc': '''Allows you to set a list of url patterns that specify sites which are allowed to display images.

          If this policy is left not set the global default value will be used for all sites either from the 'DefaultImagesSetting' policy if it is set, or the user's personal configuration otherwise.

          Note that previously this policy was erroneously enabled on Android, but this functionality has never been fully supported on Android.''',
    },
    {
      'name': 'ImagesBlockedForUrls',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome.*:11-', 'chrome_os:11-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['https://www.example.com', '[*.]example.edu'],
      'id': 70,
      'caption': '''Block images on these sites''',
      'tags': [],
      'desc': '''Allows you to set a list of url patterns that specify sites which are not allowed to display images.

          If this policy is left not set the global default value will be used for all sites either from the 'DefaultImagesSetting' policy if it is set, or the user's personal configuration otherwise.

          Note that previously this policy was erroneously enabled on Android, but this functionality has never been fully supported on Android.''',
    },
    {
      'name': 'JavaScriptAllowedForUrls',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome.*:11-', 'chrome_os:11-', 'android:30-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['https://www.example.com', '[*.]example.edu'],
      'id': 71,
      'caption': '''Allow JavaScript on these sites''',
      'tags': [],
      'desc': '''Allows you to set a list of url patterns that specify sites which are allowed to run JavaScript.

          If this policy is left not set the global default value will be used for all sites either from the 'DefaultJavaScriptSetting' policy if it is set, or the user's personal configuration otherwise.''',
    },
    {
      'name': 'JavaScriptBlockedForUrls',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome.*:11-', 'chrome_os:11-', 'android:30-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['https://www.example.com', '[*.]example.edu'],
      'id': 72,
      'caption': '''Block JavaScript on these sites''',
      'tags': [],
      'desc': '''Allows you to set a list of url patterns that specify sites which are not allowed to run JavaScript.

          If this policy is left not set the global default value will be used for all sites either from the 'DefaultJavaScriptSetting' policy if it is set, or the user's personal configuration otherwise.''',
    },
    {
      'name': 'KeygenAllowedForUrls',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome.*:49-56', 'chrome_os:49-56', 'android:49-56'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['https://www.example.com', '[*.]example.edu'],
      'id': 314,
      'caption': '''Allow key generation on these sites''',
      'tags': ['system-security', 'website-sharing', 'local-data-access'],
      'desc': '''Allows you to set a list of url patterns that specify sites which are allowed to use key generation. If a url pattern is in 'KeygenBlockedForUrls', that overrides these exceptions.

          If this policy is left not set the global default value will be used for all sites either from the 'DefaultKeygenSetting' policy if it is set, or the user's personal configuration otherwise.''',
    },
    {
      'name': 'KeygenBlockedForUrls',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome.*:49-56', 'chrome_os:49-56', 'android:49-56'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['https://www.example.com', '[*.]example.edu'],
      'id': 315,
      'caption': '''Block key generation on these sites''',
      'tags': ['system-security', 'website-sharing', 'local-data-access'],
      'desc': '''Allows you to set a list of url patterns that specify sites which are not allowed to use key generation. If a url pattern is in 'KeygenAllowedForUrls', this policy overrides these exceptions.

          If this policy is left not set the global default value will be used for all sites either from the 'DefaultKeygenSetting' policy if it is set, or the user's personal configuration otherwise.''',
    },
    {
      'name': 'PluginsAllowedForUrls',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome.*:11-', 'chrome_os:11-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['https://www.example.com', '[*.]example.edu'],
      'id': 73,
      'caption': '''Allow the <ph name="FLASH_PLUGIN_NAME">Flash</ph> plugin on these sites''',
      'tags': [],
      'desc': '''Allows you to set a list of url patterns that specify sites which are allowed to run the <ph name="FLASH_PLUGIN_NAME">Flash</ph> plugin.

          If this policy is left not set the global default value will be used for all sites either from the 'DefaultPluginsSetting' policy if it is set, or the user's personal configuration otherwise.''',
    },
    {
      'name': 'PluginsBlockedForUrls',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome.*:11-', 'chrome_os:11-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['https://www.example.com', '[*.]example.edu'],
      'id': 74,
      'caption': '''Block the <ph name="FLASH_PLUGIN_NAME">Flash</ph> plugin on these sites''',
      'tags': [],
      'desc': '''Allows you to set a list of url patterns that specify sites which are not allowed to run the <ph name="FLASH_PLUGIN_NAME">Flash</ph> plugin.

          If this policy is left not set the global default value will be used for all sites either from the 'DefaultPluginsSetting' policy if it is set, or the user's personal configuration otherwise.''',
    },
    {
      'name': 'PopupsAllowedForUrls',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': [
        'chrome.*:11-',
        'chrome_os:11-',
        'android:34-',
      ],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['https://www.example.com', '[*.]example.edu'],
      'id': 75,
      'caption': '''Allow popups on these sites''',
      'tags': [],
      'desc': '''Allows you to set a list of url patterns that specify sites which are allowed to open popups.

          If this policy is left not set the global default value will be used for all sites either from the 'DefaultPopupsSetting' policy if it is set, or the user's personal configuration otherwise.''',
    },
    {
      'name': 'RegisteredProtocolHandlers',
      'type': 'dict',
      'schema': {
        'type': 'array',
        'items': {
          'type': 'object',
          'properties': {
            'default': {
              'description': 'A boolean flag indicating if the protocol handler should be set as the default.',
              'type': 'boolean'
            },
            'protocol': {
              'description': 'The protocol for the protocol handler.',
              'type': 'string'
            },
            'url': {
              'description': 'The URL of the protocol handler.',
              'type': 'string'
            }
          },
          'required': ['protocol', 'url']
        }
      },
      'supported_on': ['chrome.*:37-', 'chrome_os:37-'],
      'features': {
        'dynamic_refresh': False,
        'per_profile': True,
        'can_be_recommended': True,
        'can_be_mandatory' : False,
      },
      'example_value': [{'protocol': 'mailto', 'url': 'https://mail.google.com/mail/?extsrc=mailto&url=%s', 'default': True}],
      'id': 268,
      'caption': '''Register protocol handlers''',
      'tags': [],
      'desc': '''Allows you to register a list of protocol handlers. This can only be a recommended policy. The property |protocol| should be set to the scheme such as 'mailto' and the property |url| should be set to the URL pattern of the application that handles the scheme. The pattern can include a '%s', which if present will be replaced by the handled URL.

          The protocol handlers registered by policy are merged with the ones registered by the user and both are available for use. The user can override the protocol handlers installed by policy by installing a new default handler, but cannot remove a protocol handler registered by policy.''',
      'arc_support': 'The protocol handlers set via this policy are not used when handling Android intents.',
    },
    {
      'name': 'PopupsBlockedForUrls',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': [
        'chrome.*:11-',
        'chrome_os:11-',
        'android:34-',
      ],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['https://www.example.com', '[*.]example.edu'],
      'id': 76,
      'caption': '''Block popups on these sites''',
      'tags': [],
      'desc': '''Allows you to set a list of url patterns that specify sites which are not allowed to open popups.

          If this policy is left not set the global default value will be used for all sites either from the 'DefaultPopupsSetting' policy if it is set, or the user's personal configuration otherwise.''',
    },
    {
      'name': 'NotificationsAllowedForUrls',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome.*:16-', 'chrome_os:16-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['https://www.example.com', '[*.]example.edu'],
      'id': 105,
      'caption': '''Allow notifications on these sites''',
      'tags': [],
      'desc': '''Allows you to set a list of url patterns that specify sites which are allowed to display notifications.

          If this policy is left not set the global default value will be used for all sites either from the 'DefaultNotificationsSetting' policy if it is set, or the user's personal configuration otherwise.''',
    },
    {
      'name': 'NotificationsBlockedForUrls',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome.*:16-', 'chrome_os:16-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['https://www.example.com', '[*.]example.edu'],
      'id': 106,
      'caption': '''Block notifications on these sites''',
      'tags': [],
      'desc': '''Allows you to set a list of url patterns that specify sites which are not allowed to display notifications.

          If this policy is left not set the global default value will be used for all sites either from the 'DefaultNotificationsSetting' policy if it is set, or the user's personal configuration otherwise.''',
    },
    {
      'name': 'NativeMessagingBlacklist',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome.*:34-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': [
        'com.native.messaging.host.name1',
        'com.native.messaging.host.name2',
      ],
      'id': 251,
      'caption': '''Configure native messaging blacklist''',
      'tags': [],
      'desc': '''Allows you to specify which native messaging hosts that should not be loaded.

          A blacklist value of '*' means all native messaging hosts are blacklisted unless they are explicitly listed in the whitelist.

          If this policy is left not set <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will load all installed native messaging hosts.''',
      'label': '''Names of the forbidden native messaging hosts (or * for all)''',
    },
    {
      'name': 'NativeMessagingWhitelist',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome.*:34-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': [
        'com.native.messaging.host.name1',
        'com.native.messaging.host.name2',
      ],
      'id': 252,
      'caption': '''Configure native messaging whitelist''',
      'tags': [],
      'desc': '''Allows you to specify which native messaging hosts are not subject to the blacklist.

          A blacklist value of * means all native messaging hosts are blacklisted and only native messaging hosts listed in the whitelist will be loaded.

          By default, all native messaging hosts are whitelisted, but if all native messaging hosts have been blacklisted by policy, the whitelist can be used to override that policy.''',
      'label': '''Names of the native messaging hosts to exempt from the blacklist''',
    },
    {
      'name': 'NativeMessagingUserLevelHosts',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:34-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': False,
      'id': 253,
      'caption': '''Allow user-level Native Messaging hosts (installed without admin permissions)''',
      'tags': [],
      'desc': '''Enables user-level installation of Native Messaging hosts.

          If this setting is enabled then <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> allows usage of Native Messaging hosts installed on user level.

          If this setting is disabled then <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will only use Native Messaging hosts installed on system level.

          If this setting is left not set <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will allow usage of user-level Native Messaging hosts.''',
    },
    {
      'name': 'Disable3DAPIs',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:9-', 'chrome_os:11-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': False,
      'id': 55,
      'caption': '''Disable support for 3D graphics APIs''',
      'tags': [],
      'desc': '''Enabling this setting prevents web pages from accessing the graphics processing unit (GPU). Specifically, web pages can not access the WebGL API and plugins can not use the Pepper 3D API.

      Disabling this setting or leaving it not set potentially allows web pages to use the WebGL API and plugins to use the Pepper 3D API. The default settings of the browser may still require command line arguments to be passed in order to use these APIs.

      If HardwareAccelerationModeEnabled is set to false, Disable3DAPIs is ignored and it is equivalent to Disable3DAPIs being set to true.''',
    },
    {
      'name': 'PolicyRefreshRate',
      'type': 'int',
      'schema': { 'type': 'integer' },
      'supported_on': ['chrome_os:11-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 3600000,
      'id': 56,
      'caption': '''Refresh rate for user policy''',
      'tags': [],
      'desc': '''Specifies the period in milliseconds at which the device management service is queried for user policy information.

      Setting this policy overrides the default value of 3 hours. Valid values for this policy are in the range from 1800000 (30 minutes) to 86400000 (1 day). Any values not in this range will be clamped to the respective boundary. If the platform supports policy notifications, the refresh delay will be set to 24 hours because it is expected that policy notifications will force a refresh automatically whenever policy changes.

      Leaving this policy not set will make <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> use the default value of 3 hours.

      Note that if the platform supports policy notifications, the refresh delay will be set to 24 hours (ignoring all defaults and the value of this policy) because it is expected that policy notifications will force a refresh automatically whenever policy changes, making more frequent refreshes unnecessary.''',
    },
    {
      'name': 'MaxInvalidationFetchDelay',
      'type': 'int',
      'schema': { 'type': 'integer' },
      'supported_on': ['chrome.*:30-', 'chrome_os:30-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 10000,
      'id': 228,
      'caption': '''Maximum fetch delay after a policy invalidation''',
      'tags': [],
      'desc': '''Specifies the maximum delay in milliseconds between receiving a policy invalidation and fetching the new policy from the device management service.

      Setting this policy overrides the default value of 5000 milliseconds. Valid values for this policy are in the range from 1000 (1 second) to 300000 (5 minutes). Any values not in this range will be clamped to the respective boundary.

      Leaving this policy not set will make <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> use the default value of 5000 milliseconds.''',
    },
    {
      'name': 'ChromeFrameRendererSettings',
      'type': 'int-enum',
      'schema': {
        'type': 'integer',
        'enum': [ 0, 1 ],
      },
      'items': [
        {
          'name': 'RenderInHost',
          'value': 0,
          'caption': '''Use the host browser by default''',
        },
        {
          'name': 'RenderInChromeFrame',
          'value': 1,
          'caption': '''Use <ph name="PRODUCT_FRAME_NAME">$3<ex>Google Chrome Frame</ex></ph> by default''',
        },
      ],
      'supported_on': ['chrome_frame:8-32'],
      'features': {
        'dynamic_refresh': False,
      },
      'example_value': 1,
      'id': 57,
      'caption': '''Default HTML renderer for <ph name="PRODUCT_FRAME_NAME">$3<ex>Google Chrome Frame</ex></ph>''',
      'tags': [],
      'desc': '''Allows you to configure the default HTML renderer when <ph name="PRODUCT_FRAME_NAME">$3<ex>Google Chrome Frame</ex></ph> is installed.
          The default setting used when this policy is left not set is to allow the host browser do the rendering, but you can optionally override this and have <ph name="PRODUCT_FRAME_NAME">$3<ex>Google Chrome Frame</ex></ph> render HTML pages by default.''',
    },
    {
      'name': 'RenderInChromeFrameList',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome_frame:8-32'],
      'features': {
        'dynamic_refresh': False,
      },
      'example_value': ['https://www.example.com', 'https://www.example.edu'],
      'id': 58,
      'caption': '''Always render the following URL patterns in <ph name="PRODUCT_FRAME_NAME">$3<ex>Google Chrome Frame</ex></ph>''',
      'tags': [],
      'desc': '''Customize the list of URL patterns that should always be rendered by <ph name="PRODUCT_FRAME_NAME">$3<ex>Google Chrome Frame</ex></ph>.

          If this policy is not set the default renderer will be used for all sites as specified by the 'ChromeFrameRendererSettings' policy.

          For example patterns see https://www.chromium.org/developers/how-tos/chrome-frame-getting-started.''',
    },
    {
      'name': 'RenderInHostList',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome_frame:8-32'],
      'features': {
        'dynamic_refresh': False,
      },
      'example_value': ['https://www.example.com', 'https://www.example.edu'],
      'id': 59,
      'caption': '''Always render the following URL patterns in the host browser''',
      'tags': [],
      'desc': '''Customize the list of URL patterns that should always be rendered by the host browser.

          If this policy is not set the default renderer will be used for all sites as specified by the 'ChromeFrameRendererSettings' policy.

          For example patterns see https://www.chromium.org/developers/how-tos/chrome-frame-getting-started.''',
    },
    {
      'name': 'AdditionalLaunchParameters',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome_frame:19-32'],
      'features': {
        'dynamic_refresh': False,
      },
      'example_value': '--enable-media-stream --enable-media-source',
      'id': 141,
      'caption': '''Additional command line parameters for <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>''',
      'tags': [],
      'desc': '''Allows you to specify additional parameters that are used when <ph name="PRODUCT_FRAME_NAME">$3<ex>Google Chrome Frame</ex></ph> launches <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.

          If this policy is not set the default command line will be used.''',
    },
    {
      'name': 'SkipMetadataCheck',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_frame:31-32'],
      'features': {
        'dynamic_refresh': False,
      },
      'example_value': False,
      'id': 238,
      'caption': '''Skip the meta tag check in <ph name="PRODUCT_FRAME_NAME">$3<ex>Google Chrome Frame</ex></ph>''',
      'tags': [],
      'desc': '''Normally pages with X-UA-Compatible set to chrome=1 will be rendered in <ph name="PRODUCT_FRAME_NAME">$3<ex>Google Chrome Frame</ex></ph> regardless of the 'ChromeFrameRendererSettings' policy.

          If you enable this setting, pages will not be scanned for meta tags.

          If you disable this setting, pages will be scanned for meta tags.

          If this policy is not set, pages will be scanned for meta tags.'''
    },
    {
      'name': 'ChromeFrameContentTypes',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome_frame:8-32'],
      'features': {
        'dynamic_refresh': False,
      },
      'example_value': ['text/xml', 'application/xml'],
      'id': 60,
      'caption': '''Allow <ph name="PRODUCT_FRAME_NAME">$3<ex>Google Chrome Frame</ex></ph> to handle the listed content types''',
      'tags': [],
      'desc': '''If this policy is set, the specified content types are handled by <ph name="PRODUCT_FRAME_NAME">$3<ex>Google Chrome Frame</ex></ph>.

          If this policy is not set, the default renderer is used for all sites. (The <ph name="CHROME_FRAME_RENDERER_SETTINGS_POLICY_NAME">ChromeFrameRendererSettings</ph> policy may be used to configure the default renderer.)''',
    },
    {
      'name': 'ChromeOsLockOnIdleSuspend',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:9-'],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 61,
      'caption': '''Enable lock when the device become idle or suspended''',
      'tags': [],
      'desc': '''Enable lock when <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> devices become idle or suspended.

      If you enable this setting, users will be asked for a password to unlock the device from sleep.

      If you disable this setting, users will not be asked for a password to unlock the device from sleep.

      If you enable or disable this setting, users cannot change or override it.

      If the policy is left not set the user can choose whether they want to be asked for password to unlock the device or not.''',
    },
    {
      'name': 'ChromeOsMultiProfileUserBehavior',
      'type': 'string-enum',
      'schema': {
        'type': 'string',
        'enum': [
          'unrestricted',
          'primary-only',
          'not-allowed',
        ],
      },
      'items': [
        {
          'name': 'MultiProfileUserBehaviorUnrestricted',
          'value': 'unrestricted',
          'caption': '''Allow enterprise user to be both primary and secondary  (Default behavior for non-managed users)''',
        },
        {
          'name': 'MultiProfileUserBehaviorMustBePrimary',
          'value': 'primary-only',
          'caption': '''Allow enterprise user to be primary multiprofile user only (Default behavior for enterprise-managed users)''',
        },
        {
          'name': 'MultiProfileUserBehaviorNotAllowed',
          'value': 'not-allowed',
          'caption': '''Do not allow enterprise user to be part of multiprofile (primary or secondary)''',
        },
      ],
      'supported_on': ['chrome_os:31-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 'unrestricted',
      'default_for_enterprise_users': 'primary-only',
      'id': 244,
      'caption': '''Control the user behavior in a multiprofile session''',
      'tags': [],
      'desc': '''Control the user behavior in a multiprofile session on <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> devices.

      If this policy is set to 'MultiProfileUserBehaviorUnrestricted', the user can be either primary or secondary user in a multiprofile session.

      If this policy is set to 'MultiProfileUserBehaviorMustBePrimary', the user can only be the primary user in a multiprofile session.

      If this policy is set to 'MultiProfileUserBehaviorNotAllowed', the user cannot be part of a multiprofile session.

      If you set this setting, users cannot change or override it.

      If the setting is changed while the user is signed into a multiprofile session, all users in the session will be checked against their corresponding settings. The session will be closed if any one of the users is no longer allowed to be in the session.

      If the policy is left not set, the default value 'MultiProfileUserBehaviorMustBePrimary' applies for enterprise-managed users and 'MultiProfileUserBehaviorUnrestricted' will be used for non-managed users.''',
      'arc_support': 'When multiple users are logged in, only the primary user can use Android apps.',
    },
    {
      'name': 'SecondaryGoogleAccountSigninAllowed',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:65-'],
      'features': {
        # The case where a user is already signed into an unmanaged account from the content area cannot be handled right now and hence this is not dynamic.
        'dynamic_refresh': False,
        'per_profile': True,
      },
      'example_value': False,
      'id': 406,
      'caption': '''Allow Multiple Sign-in Within the Browser''',
      'tags': [],
      'desc': '''This setting allows users to switch between Google accounts within the content area of their browser window after they sign into their <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> device.

      If this policy is set to false, signing in to a different account from non-Incognito browser content area will not be allowed.

      If this policy is unset or set to true, the default behavior will be used: signing in to a different account from the browser content area will be allowed, except for child accounts where it will be blocked for non-Incognito content area.

      In case signing in to a different account shouldn't be allowed via the Incognito mode, consider blocking that mode using the IncognitoModeAvailability policy.

      Note that users will be able to access Google services in an unauthenticated state by blocking their cookies.''',
    },
    {
      'name': 'InstantEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:11-28', 'chrome_os:11-28'],
      'deprecated': True,
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 62,
      'caption': '''Enable Instant''',
      'tags': [],
      'desc': '''Enables <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>'s Instant feature and prevents users from changing this setting.

      If you enable this setting, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> Instant is enabled.

      If you disable this setting, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> Instant is disabled.

      If you enable or disable this setting, users cannot change or override this setting.

      If this setting is left not set the user can decide to use this function or not.

      This setting has been removed from <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> 29 and higher versions.''',
    },
    {
      'name': 'TranslateEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': [
        'chrome.*:12-',
        'chrome_os:12-',
        'android:30-',
      ],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 80,
      'caption': '''Enable Translate''',
      'tags': [],
      'desc': '''Enables the integrated Google Translate service on <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.

      If you enable this setting, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will offer translation functionality to the user by showing an integrated translate toolbar (when appropriate) and a translate option on the right-click context menu.

      If you disable this setting, all built-in translate features will be disabled.

      If you enable or disable this setting, users cannot change or override this setting in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.

      If this setting is left not set the user can decide to use this function or not.''',
    },
    {
      'name': 'AllowOutdatedPlugins',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:12-', 'chrome_os:12-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 81,
      'caption': '''Allow running plugins that are outdated''',
      'tags': ['system-security'],
      'desc': '''If you enable this setting, outdated plugins are used as normal plugins.

      If you disable this setting, outdated plugins will not be used and users will not be asked for permission to run them.

      If this setting is not set, users will be asked for permission to run outdated plugins.''',
    },
    {
      'name': 'AlwaysAuthorizePlugins',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:13-64', 'chrome_os:13-64'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'deprecated': True,
      'example_value': True,
      'id': 86,
      'caption': '''Always runs plugins that require authorization (deprecated)''',
      'tags': ['system-security'],
      'desc': '''If you enable this setting, plugins that are not outdated always run.

      If this setting is disabled or not set, users will be asked for permission to run plugins that require authorization. These are plugins that can compromise security.''',
    },
    {
      'name': 'RunAllFlashInAllowMode',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:63-', 'chrome_os:63-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 391,
      'caption': '''Extend Flash content setting to all content''',
      'tags': ['system-security'],
      'desc': '''If you enable this setting, all Flash content embedded on websites that have been set to allow Flash in content settings -- either by the user or by enterprise policy -- will be run, including content from other origins or small content.

      To control which websites are allowed to run Flash, see the "DefaultPluginsSetting", "PluginsAllowedForUrls", and "PluginsBlockedForUrls" policies.

      If this setting is disabled or not set, Flash content from other origins or small content might be blocked.''',
    },
    {
      'name': 'BookmarkBarEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:12-', 'chrome_os:12-'],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 82,
      'caption': '''Enable Bookmark Bar''',
      'tags': [],
      'desc': '''If you enable this setting, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will show a bookmark bar.

      If you disable this setting, users will never see the bookmark bar.

      If you enable or disable this setting, users cannot change or override it in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.

      If this setting is left not set the user can decide to use this function or not.''',
    },
    {
      'name': 'EditBookmarksEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:12-', 'chrome_os:12-', 'android:30-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': False,
      'id': 83,
      'caption': '''Enable or disable bookmark editing''',
      'tags': [],
      'desc': '''If you enable this setting, bookmarks can be added, removed or modified. This is the default also when this policy is not set.

      If you disable this setting, bookmarks can not be added, removed or modified. Existing bookmarks are still available.''',
    },
    {
      'name': 'ShowAppsShortcutInBookmarkBar',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:37-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': False,
      'id': 267,
      'caption': '''Show the apps shortcut in the bookmark bar''',
      'tags': [],
      'desc': '''Enables or disables the apps shortcut in the bookmark bar.

      If this policy is not set then the user can choose to show or hide the apps shortcut from the bookmark bar context menu.

      If this policy is configured then the user can't change it, and the apps shortcut is always shown or never shown.''',
    },
    {
      'name': 'AllowFileSelectionDialogs',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:12-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': True,
      'id': 84,
      'caption': '''Allow invocation of file selection dialogs''',
      'tags': [],
      'desc': '''Allows access to local files on the machine by allowing <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> to display file selection dialogs.

      If you enable this setting, users can open file selection dialogs as normal.

      If you disable this setting, whenever the user performs an action which would provoke a file selection dialog (like importing bookmarks, uploading files, saving links, etc.) a message is displayed instead and the user is assumed to have clicked Cancel on the file selection dialog.

      If this setting is not set, users can open file selection dialogs as normal.''',
    },
    {
      'name': 'SecurityKeyPermitAttestation',
      'tags': ['website-sharing'],
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome.*:65-', 'chrome_os:65-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['https://example.com'],
      'id': 402,
      'caption': '''URLs/domains automatically permitted direct Security Key attestation''',
      'desc': '''Specifies URLs and domains for which no prompt will be shown when attestation certificates from Security Keys are requested. Additionally, a signal will be sent to the Security Key indicating that individual attestation may be used. Without this, users will be prompted in Chrome 65+ when sites request attestation of Security Keys.

      URLs (like https://example.com/some/path) will only match as U2F appIDs. Domains (like example.com) only match as webauthn RP IDs. Thus, to cover both U2F and webauthn APIs for a given site, both the appID URL and domain would need to be listed.''',
    },
    {
      'name': 'GCFUserDataDir',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome_frame:12-32'],
      'features': {
        'dynamic_refresh': False,
      },
      'example_value': '${user_home}/Chrome Frame',
      'id': 87,
      'caption': '''Set <ph name="PRODUCT_FRAME_NAME">$3<ex>Google Chrome Frame</ex></ph> user data directory''',
      'tags': [],
      'desc': '''Configures the directory that <ph name="PRODUCT_FRAME_NAME">$3<ex>Google Chrome Frame</ex></ph> will use for storing user data.

      If you set this policy, <ph name="PRODUCT_FRAME_NAME">$3<ex>Google Chrome Frame</ex></ph> will use the provided directory.

      See https://www.chromium.org/administrators/policy-list-3/user-data-directory-variables for a list of variables that can be used.

      If this setting is left not set the default profile directory will be used.''',
      'label': '''Set user data directory''',
    },
    {
      'name': 'DevicePolicyRefreshRate',
      'type': 'int',
      'schema': { 'type': 'integer' },
      'supported_on': ['chrome_os:11-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': 3600000,
      'id': 90,
      'caption': '''Refresh rate for Device Policy''',
      'tags': [],
      'desc': '''Specifies the period in milliseconds at which the device management service is queried for device policy information.

      Setting this policy overrides the default value of 3 hours. Valid values for this policy are in the range from 1800000 (30 minutes) to 86400000 (1 day). Any values not in this range will be clamped to the respective boundary.

      Leaving this policy not set will make <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> use the default value of 3 hours.

      Note that if the platform supports policy notifications, the refresh delay will be set to 24 hours (ignoring all defaults and the value of this policy) because it is expected that policy notifications will force a refresh automatically whenever policy changes, making more frequent refreshes unnecessary.''',
    },
    {
      'name': 'ImportBookmarks',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:15-'],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 97,
      'caption': '''Import bookmarks from default browser on first run''',
      'tags': ['local-data-access'],
      'desc': '''This policy forces bookmarks to be imported from the current default browser if enabled. If enabled, this policy also affects the import dialog.

      If disabled, no bookmarks are imported.

      If it is not set, the user may be asked whether to import, or importing may happen automatically.''',
      'label': '''Import bookmarks from default browser on first run''',
    },
    {
      'name': 'ImportHistory',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:15-'],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 98,
      'caption': '''Import browsing history from default browser on first run''',
      'tags': ['local-data-access'],
      'desc': '''This policy forces the browsing history to be imported from the current default browser if enabled. If enabled, this policy also affects the import dialog.

      If disabled, no browsing history is imported.

      If it is not set, the user may be asked whether to import, or importing may happen automatically.''',
      'label': '''Import browsing history from default browser on first run''',
    },
    {
      'name': 'ImportHomepage',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:15-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 99,
      'caption': '''Import of homepage from default browser on first run''',
      'tags': ['local-data-access'],
      'desc': '''This policy forces the home page to be imported from the current default browser if enabled.

      If disabled, the home page is not imported.

      If it is not set, the user may be asked whether to import, or importing may happen automatically.''',
      'label': '''Import of homepage from default browser on first run''',
    },
    {
      'name': 'ImportSearchEngine',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:15-'],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 100,
      'caption': '''Import search engines from default browser on first run''',
      'tags': ['local-data-access'],
      'desc': '''This policy forces search engines to be imported from the current default browser if enabled. If enabled, this policy also affects the import dialog.

      If disabled, the default search engine is not imported.

      If it is not set, the user may be asked whether to import, or importing may happen automatically.''',
      'label': '''Import search engines from default browser on first run''',
    },
    {
      'name': 'ImportSavedPasswords',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:15-'],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 101,
      'caption': '''Import saved passwords from default browser on first run''',
      'tags': ['local-data-access'],
      'desc': '''This policy forces the saved passwords to be imported from the previous default browser if enabled. If enabled, this policy also affects the import dialog.

      If disabled, the saved passwords are not imported.

      If it is not set, the user may be asked whether to import, or importing may happen automatically.''',
      'label': '''Import saved passwords from default browser on first run''',
    },
    {
      'name': 'ImportAutofillFormData',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:39-'],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 277,
      'caption': '''Import autofill form data from default browser on first run''',
      'tags': ['local-data-access'],
      'desc': '''This policy forces the autofill form data to be imported from the previous default browser if enabled. If enabled, this policy also affects the import dialog.

      If disabled, the autofill form data is not imported.

      If it is not set, the user may be asked whether to import, or importing may happen automatically.''',
      'label': '''Import autofill form data from default browser on first run''',
    },
    {
      'name': 'MaxConnectionsPerProxy',
      'type': 'int',
      'schema': { 'type': 'integer' },
      'supported_on': ['chrome.*:14-'],
      'features': {
        'dynamic_refresh': False,
        'per_profile': False,
      },
      'example_value': 32,
      'id': 92,
      'caption': '''Maximal number of concurrent connections to the proxy server''',
      'tags': [],
      'desc': '''Specifies the maximal number of simultaneous connections to the proxy server.

      Some proxy servers can not handle high number of concurrent connections per client and this can be solved by setting this policy to a lower value.

      The value of this policy should be lower than 100 and higher than 6 and the default value is 32.

      Some web apps are known to consume many connections with hanging GETs, so lowering below 32 may lead to browser networking hangs if too many such web apps are open. Lower below the default at your own risk.

      If this policy is left not set the default value will be used which is 32.''',
    },
    {
      'name': 'HideWebStorePromo',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:15-21', 'chrome_os:15-21'],
      'deprecated': True,
      'features': {
        'dynamic_refresh': False,
      },
      'example_value': False,
      'id': 96,
      'caption': '''Prevent app promotions from appearing on the new tab page''',
      'tags': [],
      'desc': '''When set to True, promotions for Chrome Web Store apps will not appear on the new tab page.

      Setting this option to False or leaving it not set will make the promotions for Chrome Web Store apps appear on the new tab page''',
    },
    {
      'name': 'URLBlacklist',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': [
        'chrome.*:15-',
        'chrome_os:15-',
        'android:30-',
        'webview_android:47-',
      ],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['example.com', 'https://ssl.server.com', 'hosting.com/bad_path', 'https://server:8080/path', '.exact.hostname.com', 'file://*', 'custom_scheme:*', '*'],
      'id': 103,
      'caption': '''Block access to a list of URLs''',
      'tags': ['filtering'],
      'desc': '''This policy prevents the user from loading web pages from blacklisted URLs. The blacklist provides a list of URL patterns that specify which URLs will be blacklisted.

      A URL pattern has to be formatted according to https://www.chromium.org/administrators/url-blacklist-filter-format.

      Exceptions can be defined in the URL whitelist policy. These policies are limited to 1000 entries; subsequent entries will be ignored.

      Note that it is not recommended to block internal 'chrome://*' URLs since this may lead to unexpected errors.

      If this policy is not set no URL will be blacklisted in the browser.''',
      'arc_support': 'Android apps may voluntarily choose to honor this list. You cannot force them to honor it.',
    },
    {
      'name': 'URLWhitelist',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': [
        'chrome.*:15-',
        'chrome_os:15-',
        'android:30-',
        'webview_android:47-',
      ],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['example.com', 'https://ssl.server.com', 'hosting.com/good_path', 'https://server:8080/path', '.exact.hostname.com'],
      'id': 104,
      'caption': '''Allow access to a list of URLs''',
      'tags': [],
      'desc': '''Allows access to the listed URLs, as exceptions to the URL blacklist.

      See the description of the URL blacklist policy for the format of entries of this list.

      This policy can be used to open exceptions to restrictive blacklists. For example, '*' can be blacklisted to block all requests, and this policy can be used to allow access to a limited list of URLs. It can be used to open exceptions to certain schemes, subdomains of other domains, ports, or specific paths.

      The most specific filter will determine if a URL is blocked or allowed. The whitelist takes precedence over the blacklist.

      This policy is limited to 1000 entries; subsequent entries will be ignored.

      If this policy is not set there will be no exceptions to the blacklist from the 'URLBlacklist' policy.''',
      'arc_support': 'Android apps may voluntarily choose to honor this list. You cannot force them to honor it.',
    },
    {
      'name': 'OpenNetworkConfiguration',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome_os:16-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': '{ "NetworkConfigurations": [ { "GUID": "{4b224dfd-6849-7a63-5e394343244ae9c9}", "Name": "my WiFi", "Type": "WiFi", "WiFi": { "SSID": "my WiFi", "HiddenSSID": false, "Security": "None", "AutoConnect": true } } ] }',
      'id': 107,
      'caption': '''User-level network configuration''',
      'tags': ['full-admin-access'],
      'desc': '''Allows pushing network configuration to be applied per-user to a <ph name="PRODUCT_OS_NAME">$2<ex>Chromium OS</ex></ph> device. The network configuration is a JSON-formatted string as defined by the Open Network Configuration format described at <ph name="ONC_SPEC_URL">https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/open-network-configuration</ph>''',
      'arc_support': 'Android apps can use the network configurations and CA certificates set via this policy, but do not have access to some configuration options.',
    },
    {
      'name': 'DeviceOpenNetworkConfiguration',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome_os:16-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': '{ "NetworkConfigurations": [ { "GUID": "{4b224dfd-6849-7a63-5e394343244ae9c9}", "Name": "my WiFi", "Type": "WiFi", "WiFi": { "SSID": "my WiFi", "HiddenSSID": false, "Security": "None", "AutoConnect": true } } ] }',
      'id': 108,
      'caption': '''Device-level network configuration''',
      'tags': ['full-admin-access'],
      'desc': '''Allows pushing network configuration to be applied for all users of a <ph name="PRODUCT_OS_NAME">$2<ex>Chromium OS</ex></ph> device. The network configuration is a JSON-formatted string as defined by the Open Network Configuration format described at <ph name="ONC_SPEC_URL">https://sites.google.com/a/chromium.org/dev/chromium-os/chromiumos-design-docs/open-network-configuration</ph>''',
      'arc_support': 'Android apps can use the network configurations and CA certificates set via this policy, but do not have access to some configuration options.',
    },
    {
      'name': 'DeviceKerberosEncryptionTypes',
      'type': 'int-enum',
      'schema': {
        'type': 'integer',
        'enum': [ 0, 1, 2 ],
      },
      'items': [
        {
          'name': 'All',
          'value': 0,
          'caption': '''All (insecure)''',
        },
        {
          'name': 'Strong',
          'value': 1,
          'caption': '''Strong''',
        },
        {
          'name': 'Legacy',
          'value': 2,
          'caption': '''Legacy (insecure)''',
        },
      ],
      'supported_on': ['chrome_os:66-'],
      'supported_chrome_os_management': ['active_directory'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': 1,
      'id': 415,
      'caption': '''Allowed Kerberos encryption types''',
      'tags': ['system-security'],
      'desc': '''Sets encryption types that are allowed when requesting Kerberos tickets from an <ph name="MS_AD_NAME">Microsoft® Active Directory®</ph> server.

      If the policy is set to 'All', both the AES encryption types 'aes256-cts-hmac-sha1-96' and 'aes128-cts-hmac-sha1-96' as well as the RC4 encryption type 'rc4-hmac' are allowed. AES encryption takes preference if the server supports both types. Note that RC4 is insecure and the server should be reconfigured if possible to support AES encryption.

      If the policy is set to 'Strong' or if it is unset, only the AES encryption types are allowed.

      If the policy is set to 'Legacy', only the RC4 encryption type is allowed. This option is insecure and should only be needed in very specific circumstances.

      See also https://wiki.samba.org/index.php/Samba_4.6_Features_added/changed#Kerberos_client_encryption_types.''',
    },
    {
      'name': 'DeviceUserPolicyLoopbackProcessingMode',
      'type': 'int-enum',
      'schema': {
        'type': 'integer',
        'enum': [ 0, 1, 2 ],
      },
      'items': [
        {
          'name': 'Default',
          'value': 0,
          'caption': '''Default''',
        },
        {
          'name': 'Merge',
          'value': 1,
          'caption': '''Merge''',
        },
        {
          'name': 'Replace',
          'value': 2,
          'caption': '''Replace''',
        },
      ],
      'supported_on': ['chrome_os:66-'],
      'supported_chrome_os_management': ['active_directory'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': 0,
      'id': 416,
      'caption': '''User policy loopback processing mode''',
      'tags': [],
      'desc': '''Specifies whether and how user policy from computer GPO is processed.

      If the policy is set to 'Default' or if it is unset, user policy is read only from user GPOs (computer GPOs are ignored).

      If the policy is set to 'Merge', user policy in user GPOs is merged with user policy in computer GPOs (computer GPOs take preference).

      If the policy is set to 'Replace', user policy in user GPOs is replaced by user policy in computer GPOs (user GPOs are ignored).''',
    },
    {
      'name': 'DeviceMachinePasswordChangeRate',
      'type': 'int',
      'schema': { 'type': 'integer', 'minimum': 0, 'maximum': 9999 },
      'supported_on': ['chrome_os:66-'],
      'supported_chrome_os_management': ['active_directory'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': 0,
      'id': 425,
      'caption': '''Machine password change rate''',
      'tags': ['system-security'],
      'desc': '''Specifies the rate (in days) at which a client changes their machine account password. The password is randomly generated by the client and not visible to the user.

      Just like user passwords, machine passwords should be changed regularly. Disabling this policy or setting a high number of days can have a negative impact on security since it gives potential attackers more time to find the machine account password and use it.

      If the policy is unset, the machine account password is changed every 30 days.

      If the policy is set to 0, machine account password change is disabled.

      Note that passwords might get older than the specified number of days if the client has been offline for a longer period of time.''',
    },
    {
      'name': 'CloudPrintSubmitEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:17-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 109,
      'caption': '''Enable submission of documents to <ph name="CLOUD_PRINT_NAME">Google Cloud Print</ph>''',
      'tags': [],
      'desc': '''Enables <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> to submit documents to <ph name="CLOUD_PRINT_NAME">Google Cloud Print</ph> for printing.  NOTE: This only affects <ph name="CLOUD_PRINT_NAME">Google Cloud Print</ph> support in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.  It does not prevent users from submitting print jobs on web sites.

      If this setting is enabled or not configured, users can print to <ph name="CLOUD_PRINT_NAME">Google Cloud Print</ph> from the <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> print dialog.

      If this setting is disabled, users cannot print to <ph name="CLOUD_PRINT_NAME">Google Cloud Print</ph> from the <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> print dialog''',
    },
    {
      'name': 'EnterpriseWebStoreURL',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome.*:17-28', 'chrome_os:17-28'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'deprecated': True,
      'example_value': 'https://company-intranet/chromeapps',
      'id': 112,
      'caption': '''Enterprise web store URL (deprecated)''',
      'tags': [],
      'desc': '''This setting has been retired as of <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> version 29. The recommended way to set up organization-hosted extension/app collections is to include the site hosting the CRX packages in ExtensionInstallSources and put direct download links to the packages on a web page. A launcher for that web page can be created using the ExtensionInstallForcelist policy.''',
    },
    {
      'name': 'EnterpriseWebStoreName',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome.*:17-28', 'chrome_os:17-28'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'deprecated': True,
      'example_value': 'WidgCo Chrome Apps',
      'id': 113,
      'caption': '''Enterprise web store name (deprecated)''',
      'tags': [],
      'desc': '''This setting has been retired as of <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> version 29. The recommended way to set up organization-hosted extension/app collections is to include the site hosting the CRX packages in ExtensionInstallSources and put direct download links to the packages on a web page. A launcher for that web page can be created using the ExtensionInstallForcelist policy.''',
    },
    {
      'name': 'EnableOriginBoundCerts',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:17-35'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'deprecated': True,
      'future': True,
      'example_value': True,
      'id': 114,
      'caption': '''Enable TLS domain-bound certificates extension (deprecated)''',
      'tags': [],
      'desc': '''This policy has been retired as of <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> version 36.

      Specifies whether the TLS domain-bound certificates extension should be enabled.

      This setting is used to enable the TLS domain-bound certificates extension for testing.  This experimental setting will be removed in the future.''',
    },
    {
      'name': 'EnableMemoryInfo',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:17-34', 'chrome_os:18-34'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'deprecated': True,
      'future': True,
      'example_value': False,
      'id': 115,
      'caption': '''Enable reporting memory info (JS heap size) to page (deprecated)''',
      'tags': [],
      'desc': '''This policy has been retired as of <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> version 35.

      Memory info is anyway reported to page, regardless of the option value, but the sizes reported are
      quantized and the rate of updates is limited for security reasons. To obtain real-time precise data,
      please use tools like Telemetry.''',
    },
    {
      'name': 'DisablePrintPreview',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:18-'],
      'features': {
        'dynamic_refresh': False,
        'per_profile': True,
      },
      'example_value': False,
      'id': 117,
      'caption': '''Disable Print Preview''',
      'tags': [],
      'desc': '''Show the system print dialog instead of print preview.

      When this setting is enabled, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will open the system print dialog instead of the built-in print preview when a user requests a page to be printed.

      If this policy is not set or is set to false, print commands trigger the print preview screen.''',
    },
    {
      'name': 'PrintHeaderFooter',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:70-', 'chrome.*:70-'],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': False,
      'id': 480,
      'caption': '''Print Headers and Footers''',
      'tags': [],
      'desc': '''Force 'headers and footers' to be on or off in the printing dialog.

      If the policy is unset, the user can decide whether to print headers and footers.

      If the policy is set to false, 'Headers and footers' is not selected in the print preview dialog, and the user cannot change it.

      If the policy is set to true, 'Headers and footers' is selected in the print preview dialog, and the user cannot change it.''',
    },
    {
      'name': 'DefaultPrinterSelection',
      'type': 'string',
      'schema': { 'type': 'string' },
      'validation_schema': {
        'type': 'object',
        'properties': {
          'kind': {
            'description': 'Whether to limit the search of the matching printer to a specific set of printers.',
            'type': 'string',
            'enum': [ 'local', 'cloud' ]
          },
          'idPattern': {
            'description': 'Regular expression to match printer id.',
            'type': 'string'
          },
          'namePattern': {
            'description': 'Regular expression to match printer display name.',
            'type': 'string'
          }
        }
      },
      'supported_on': ['chrome.*:48-', 'chrome_os:48-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': '{ "kind": "cloud", "idPattern": ".*public", "namePattern": ".*Color" }',
      'id': 308,
      'caption': '''Default printer selection rules''',
      'tags': [],
      'desc': '''Overrides <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> default printer selection rules.

      This policy determines the rules for selecting the default printer in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> which happens the first time the print function is used with a profile.

      When this policy is set, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will attempt to find a printer matching all of the specified attributes, and select it as default printer. The first printer found matching the policy is selected, in case of non-unique match any matching printer can be selected, depending on the order printers are discovered.

      If this policy is not set or matching printer is not found within the timeout, the printer defaults to built-in PDF printer or no printer selected, when PDF printer is not available.

      The value is parsed as JSON object, conforming to the following schema:
      {
        "type": "object",
        "properties": {
          "kind": {
            "description": "Whether to limit the search of the matching printer to a specific set of printers.",
            "type": "string",
            "enum": [ "local", "cloud" ]
          },
          "idPattern": {
            "description": "Regular expression to match printer id.",
            "type": "string"
          },
          "namePattern": {
            "description": "Regular expression to match printer display name.",
            "type": "string"
          }
        }
      }

      Printers connected to <ph name="CLOUD_PRINT_NAME">Google Cloud Print</ph> are considered <ph name="PRINTER_TYPE_CLOUD">"cloud"</ph>, the rest of the printers are classified as <ph name="PRINTER_TYPE_LOCAL">"local"</ph>.
      Omitting a field means all values match, for example, not specifying connectivity will cause Print Preview to initiate the discovery of all kinds of printers, local and cloud.
      Regular expression patterns must follow the JavaScript RegExp syntax and matches are case sensistive.''',
      'arc_support': 'This policy has no effect on Android apps.',
    },
    {
      'name': 'DisableSSLRecordSplitting',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:18-46', 'chrome_os:18-46'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': True,
      'id': 118,
      'caption': '''Disable TLS False Start''',
      'tags': [],
      'desc': '''Specifies whether the <ph name="TLS_FALSE_START">TLS False Start</ph> optimization should be disabled. For historical reasons, this policy is named DisableSSLRecordSplitting.

      If the policy is not set, or is set to false, then <ph name="TLS_FALSE_START">TLS False Start</ph> will be enabled. If it is set to true, <ph name="TLS_FALSE_START">TLS False Start</ph> will be disabled.''',
    },
    {
      'name': 'EnableOnlineRevocationChecks',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:19-', 'chrome_os:19-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': False,
      'id': 129,
      'caption': '''Whether online OCSP/CRL checks are performed''',
      'tags': ['website-sharing'],
      'desc': '''In light of the fact that soft-fail, online revocation checks provide no effective security benefit, they are disabled by default in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> version 19 and later. By setting this policy to true, the previous behavior is restored and online OCSP/CRL checks will be performed.

      If the policy is not set, or is set to false, then <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will not perform online revocation checks in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> 19 and later.''',
    },
    {
      'name': 'RequireOnlineRevocationChecksForLocalAnchors',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:30-', 'chrome.linux:30-', 'chrome.win:30-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': False,
      'id': 235,
      'caption': '''Whether online OCSP/CRL checks are required for local trust anchors''',
      'tags': [],
      'desc': '''When this setting is enabled, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will always perform revocation checking for server certificates that successfully validate and are signed by locally-installed CA certificates.

      If <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> is unable to obtain revocation status information, such certificates will be treated as revoked ('hard-fail').

      If this policy is not set, or it is set to false, then <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will use the existing online revocation checking settings.''',
    },
    {
      'name': 'EnableSha1ForLocalAnchors',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:54-', 'chrome_os:54-', 'android:54-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': False,
      'id': 340,
      'caption': '''Whether SHA-1 signed certificates issued by local trust anchors are allowed''',
      'tags': ['system-security'],
      'desc': '''When this setting is enabled, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> allows SHA-1 signed certificates as long as they successfully validate and chain to a locally-installed CA certificates.

      Note that this policy depends on the operating system certificate verification stack allowing SHA-1 signatures. If an OS update changes the OS handling of SHA-1 certificates, this policy may no longer have effect.  Further, this policy is intended as a temporary workaround to give enterprises more time to move away from SHA-1.  This policy will be removed on or around January 1st 2019.

      If this policy is not set, or it is set to false, then <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> follows the publicly announced SHA-1 deprecation schedule.''',
    },
    {
      'name': 'EnableCommonNameFallbackForLocalAnchors',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:58-65', 'chrome_os:58-65', 'android:58-65'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'deprecated': True,
      'example_value': False,
      'id': 366,
      'caption': '''Whether to allow certificates issued by local trust anchors that are missing the subjectAlternativeName extension''',
      'tags': ['system-security'],
      'desc': '''When this setting is enabled, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will use the commonName of a server certificate to match a hostname if the certificate is missing a subjectAlternativeName extension, as long as it successfully validates and chains to a locally-installed CA certificates.

      Note that this is not recommended, as this may allow bypassing the nameConstraints extension that restricts the hostnames that a given certificate can be authorized for.

      If this policy is not set, or is set to false, server certificates that lack a subjectAlternativeName extension containing either a DNS name or IP address will not be trusted.''',
    },
    {
      'name': 'EnableSymantecLegacyInfrastructure',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:66-', 'chrome_os:66-', 'android:66-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': False,
      'id': 413,
      'caption': '''Whether to enable trust in Symantec Corporation's Legacy PKI Infrastructure''',
      'tags': ['system-security'],
      'desc': '''When this setting is enabled, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> allows certificates issued by Symantec Corporation's Legacy PKI operations to be trusted if they otherwise successfully validate and chain to a recognized CA certificate.

      Note that this policy depends on the operating system still recognizing certificates from Symantec's legacy infrastructure. If an OS update changes the OS handling of such certificates, this policy no longer has effect.  Further, this policy is intended as a temporary workaround to give enterprises more time to transition away from legacy Symantec certificates.  This policy will be removed on or around January 1st 2019.

      If this policy is not set, or it is set to false, then <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> follows the publicly announced deprecation schedule.

      See https://g.co/chrome/symantecpkicerts for more details on this deprecation.''',
    },
    {
      'name': 'ForceEphemeralProfiles',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:32-'],
      'features': {
        'dynamic_refresh': False,
        'per_profile': True,
      },
      'example_value': True,
      'id': 245,
      'caption': '''Ephemeral profile''',
      'tags': [],
      'desc': '''If set to enabled this policy forces the profile to be switched to ephemeral mode. If this policy is specified as an OS policy (e.g. GPO on Windows) it will apply to every profile on the system; if the policy is set as a Cloud policy it will apply only to a profile signed in with a managed account.

      In this mode the profile data is persisted on disk only for the length of the user session. Features like browser history, extensions and their data, web data like cookies and web databases are not preserved after the browser is closed. However this does not prevent the user from downloading any data to disk manually, save pages or print them.

      If the user has enabled sync all this data is preserved in their sync profile just like with regular profiles. Incognito mode is also available if not explicitly disabled by policy.

      If the policy is set to disabled or left not set signing in leads to regular profiles.'''
    },
    {
      'name': 'SAMLOfflineSigninTimeLimit',
      'type': 'int',
      'schema': { 'type': 'integer', 'minimum': -1 },
      'supported_on': ['chrome_os:34-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 32,
      'id': 254,
      'caption': '''Limit the time for which a user authenticated via SAML can log in offline''',
      'tags': [],
      'desc': '''During login, <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> can authenticate against a server (online) or using a cached password (offline).

      When this policy is set to a value of -1, the user can authenticate offline indefinitely. When this policy is set to any other value, it specifies the length of time since the last online authentication after which the user must use online authentication again.

      Leaving this policy not set will make <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> use a default time limit of 14 days after which the user must use online authentication again.

      This policy affects only users who authenticated using SAML.

      The policy value should be specified in seconds.''',
    },
    {
      'name': 'AutoCleanUpStrategy',
      'type': 'string-enum',
      'schema': {
        'type': 'string',
        'enum': [ 'remove-lru', 'remove-lru-if-dormant' ],
      },
      'items': [
        {
          'name': 'RemoveLRU',
          'value': 'remove-lru',
          'caption': '''Least recently used users are removed until there is enough free space''',
        },
        {
          'name': 'RemoveLRUIfDormant',
          'value': 'remove-lru-if-dormant',
          'caption': '''Least recently used users who have not logged in within last 3 months are removed until there is enough free space''',
        },
      ],
      'supported_on': ['chrome_os:32-35'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'deprecated': True,
      'example_value': 'remove-lru',
      'id': 246,
      'caption': '''Select the strategy used to free up disk space during automatic clean-up (deprecated)''',
      'tags': [],
      'desc': '''This policy is deprecated. <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> will always use the 'RemoveLRU' clean-up strategy.

      Controls the automatic clean-up behavior on <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> devices. Automatic clean-up is triggered when the amount of free disk space reaches a critical level to recover some disk space.

      If this policy is set to 'RemoveLRU', the automatic clean-up will keep removing users from the device in least-recently-logged-in order until there is enough free space.

      If this policy is set to 'RemoveLRUIfDormant', the automatic clean-up will keep removing users who have not logged in for at least 3 months in least-recently-logged-in order until there is enough free space.

      If this policy is not set, automatic clean-up uses the default built-in strategy. Currently, it is the 'RemoveLRUIfDormant' strategy.'''
    },
    {
      'name': 'ReportDeviceVersionInfo',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:18-'],
      'supported_chrome_os_management': ['google_cloud'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': False,
      'id': 119,
      'caption': '''Report OS and firmware version''',
      'tags': ['admin-sharing'],
      'desc': '''Report OS and firmware version of enrolled devices.

      If this setting is not set or set to True, enrolled devices will report the OS and firmware version periodically. If this setting is set to False, version info will not be reported.''',
      'arc_support': 'This policy has no effect on the logging done by Android.',
    },
    {
      'name': 'ReportDeviceActivityTimes',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:18-'],
      'supported_chrome_os_management': ['google_cloud'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': False,
      'id': 120,
      'caption': '''Report device activity times''',
      'tags': ['admin-sharing'],
      'desc': '''Report device activity times.

      If this setting is not set or set to True, enrolled devices will report time periods when a user is active on the device. If this setting is set to False, device activity times will not be recorded or reported.''',
      'arc_support': 'This policy has no effect on the logging done by Android.',
    },
    {
      'name': 'ReportDeviceBootMode',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:18-'],
      'supported_chrome_os_management': ['google_cloud'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': False,
      'id': 121,
      'caption': '''Report device boot mode''',
      'tags': ['admin-sharing'],
      'desc': '''Report the state of the device's dev switch at boot.

      If the policy is set to false, the state of the dev switch will not be reported.''',
      'arc_support': 'This policy has no effect on the logging done by Android.',
    },
    {
      'name': 'ReportDeviceLocation',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:20-'],
      'supported_chrome_os_management': ['google_cloud'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'future': True,
      'example_value': False,
      'id': 143,
      'caption': '''Report device location''',
      'tags': ['admin-sharing'],
      'desc': '''Report the geographic location of the device.

      If the policy is not set, or set to false, the location will not be reported.''',
      'arc_support': 'This policy has no effect on the logging done by Android.',
    },
    {
      'name': 'ReportDeviceNetworkInterfaces',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:29-'],
      'supported_chrome_os_management': ['google_cloud'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': False,
      'id': 224,
      'caption': '''Report device network interfaces''',
      'tags': ['admin-sharing'],
      'desc': '''Report list of network interfaces with their types and hardware addresses to the server.

      If the policy is set to false, the interface list will not be reported.''',
      'arc_support': 'This policy has no effect on the logging done by Android.',
    },
    {
      'name': 'ReportDeviceUsers',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:32-'],
      'supported_chrome_os_management': ['google_cloud'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': False,
      'id': 248,
      'caption': '''Report device users''',
      'tags': ['admin-sharing'],
      'desc': '''Report list of device users that have recently logged in.

      If the policy is set to false, the users will not be reported.''',
      'arc_support': 'This policy has no effect on the logging done by Android.',
    },
    {
      'name': 'ReportDeviceHardwareStatus',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:42-'],
      'supported_chrome_os_management': ['google_cloud'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': False,
      'id': 290,
      'caption': '''Report hardware status''',
      'tags': ['admin-sharing'],
      'desc': '''Report hardware statistics such as CPU/RAM usage.

      If the policy is set to false, the statistics will not be reported.
      If set to true or left unset, statistics will be reported.''',
      'arc_support': 'This policy has no effect on the logging done by Android.',
    },
    {
      'name': 'ReportDeviceSessionStatus',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:42-'],
      'supported_chrome_os_management': ['google_cloud'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': False,
      'id': 291,
      'caption': '''Report information about active kiosk sessions''',
      'tags': ['admin-sharing'],
      'desc': '''Report information about the active kiosk session, such as
      application ID and version.

      If the policy is set to false, the kiosk session information will not be
      reported. If set to true or left unset, kiosk session information will be
      reported.''',
      'arc_support': 'This policy has no effect on the logging done by Android.',
    },
    {
      'name': 'ReportUploadFrequency',
      'type': 'int',
      'schema': { 'type': 'integer', 'minimum': 60000 },
      'supported_on': ['chrome_os:42-'],
      'supported_chrome_os_management': ['google_cloud'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': 10800000,
      'id': 292,
      'caption': '''Frequency of device status report uploads''',
      'tags': ['admin-sharing'],
      'desc': '''How frequently device status uploads are sent, in milliseconds.

      If this policy is unset, the default frequency is 3 hours. The minimum
      allowed frequency is 60 seconds.''',
      'arc_support': 'This policy has no effect on the logging done by Android.',
    },
    {
      'name': 'ReportArcStatusEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:55-'],
      'supported_chrome_os_management': ['google_cloud'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 349,
      'caption': '''Report information about status of Android''',
      'tags': ['admin-sharing'],
      'desc': '''Information about the status of Android is sent back to the
      server.

      If the policy is set to false or left unset, no status information is reported.
      If set to true, status information is reported.

      This policy only applies if Android apps are enabled.''',
    },
    {
      'name': 'HeartbeatEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:43-'],
      'supported_chrome_os_management': ['google_cloud'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': False,
      'id': 293,
      'caption': '''Send network packets to the management server to monitor online status''',
      'tags': ['admin-sharing'],
      'desc': '''Send network packets to the management server to monitor online status, to allow
      the server to detect if the device is offline.

      If this policy is set to true, monitoring network packets (so-called <ph name="HEARTBEATS_TERM">heartbeats</ph>) will be sent.
      If set to false or unset, no packets will be sent.''',
      'arc_support': 'This policy has no effect on the logging done by Android.',
    },
    {
      'name': 'HeartbeatFrequency',
      'type': 'int',
      'schema': { 'type': 'integer', 'minimum': 30000 },
      'supported_on': ['chrome_os:43-'],
      'supported_chrome_os_management': ['google_cloud'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': 180000,
      'id': 294,
      'caption': '''Frequency of monitoring network packets''',
      'tags': [],
      'desc': '''How frequently monitoring network packets are sent, in milliseconds.

      If this policy is unset, the default interval is 3 minutes. The minimum
      interval is 30 seconds and the maximum interval is 24 hours - values
      outside of this range will be clamped to this range.''',
      'arc_support': 'This policy has no effect on the logging done by Android.',
    },
    {
      'name': 'LogUploadEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:46-'],
      'supported_chrome_os_management': ['google_cloud'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': False,
      'id': 306,
      'caption': '''Send system logs to the management server''',
      'tags': [],
      'desc': '''Send system logs to the management server, to allow
      admins to monitor system logs.

      If this policy is set to true, system logs will be sent. If set
      to false or unset, then no system logs will be sent.''',
      'arc_support': 'This policy has no effect on the logging done by Android.',
    },
    {
      'name': 'DeviceUserWhitelist',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome_os:12-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': [ 'madmax@managedchrome.com' ],
      'id': 122,
      'caption': '''Login user white list''',
      'tags': [],
      'desc': '''Defines the list of users that are allowed to login to the device. Entries are of the form <ph name="USER_WHITELIST_ENTRY_FORMAT">user@domain</ph>, such as <ph name="USER_WHITELIST_ENTRY_EXAMPLE">madmax@managedchrome.com</ph>. To allow arbitrary users on a domain, use entries of the form <ph name="USER_WHITELIST_ENTRY_WILDCARD">*@domain</ph>.

      If this policy is not configured, there are no restrictions on which users are allowed to sign in. Note that creating new users still requires the <ph name="DEVICE_ALLOW_NEW_USERS_POLICY_NAME">DeviceAllowNewUsers</ph> policy to be configured appropriately.''',
      'arc_support': 'This policy controls who may start a <ph name="PRODUCT_OS_NAME">$2<ex>Chromium OS</ex></ph> session. It does not prevent users from signing in to additional Google accounts within Android. If you want to prevent this, configure the Android-specific <ph name="ACCOUNT_TYPES_WITH_MANAGEMENT_DISABLED_CLOUDDPC_POLICY_NAME">accountTypesWithManagementDisabled</ph> policy as part of <ph name="ARC_POLICY_POLICY_NAME">ArcPolicy</ph>.',
    },
    {
      'name': 'DeviceAllowNewUsers',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:12-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': True,
      'id': 123,
      'caption': '''Allow creation of new user accounts''',
      'tags': [],
      'desc': '''Controls whether <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> allows new user accounts to be created. If this policy is set to false, users that do not have an account already will not be able to login.

      If this policy is set to true or not configured, new user accounts will be allowed to be created provided that <ph name="DEVICE_USER_WHITELIST_POLICY_NAME">DeviceUserWhitelist</ph> does not prevent the user from logging in.''',
      'arc_support': 'This policy controls whether new users can be added to <ph name="PRODUCT_OS_NAME">$2<ex>Chromium OS</ex></ph>. It does not prevent users from signing in to additional Google accounts within Android. If you want to prevent this, configure the Android-specific <ph name="ACCOUNT_TYPES_WITH_MANAGEMENT_DISABLED_CLOUDDPC_POLICY_NAME">accountTypesWithManagementDisabled</ph> policy as part of <ph name="ARC_POLICY_POLICY_NAME">ArcPolicy</ph>.',
    },
    {
      'name': 'DeviceGuestModeEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:12-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': True,
      'id': 124,
      'caption': '''Enable guest mode''',
      'tags': [],
      'desc': '''If this policy is set to true or not configured, <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> will enable guest logins. Guest logins are anonymous user sessions and do not require a password.

      If this policy is set to false, <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> will not allow guest sessions to be started.''',
    },
    {
      'name': 'DeviceShowUserNamesOnSignin',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:12-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': True,
      'id': 125,
      'caption': '''Show usernames on login screen''',
      'tags': [],
      'desc': '''If this policy is set to true or not configured, <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> will show existing users on the login screen and allow to pick one.

      If this policy is set to false, <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> will not show existing users on the login screen. The normal sign-in screen (prompting for the user email and password or phone) or the SAML interstital screen (if enabled via the <ph name="LOGIN_AUTHENTICATION_BEHAVIOR_POLICY_NAME">LoginAuthenticationBehavior</ph> policy) will be shown, unless a Public Session is configured. When a Public Session is configured, only the Public Session accounts will be shown, allowing to pick one of them.

      Note that this policy does not affect whether the device keeps or discards the local user data.''',
    },
    {
      'name': 'DeviceDataRoamingEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:12-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': True,
      'id': 126,
      'caption': '''Enable data roaming''',
      'tags': [],
      'desc': '''Determines whether data roaming should be enabled for the device. If set to true, data roaming is allowed. If left unconfigured or set to false, data roaming will be not available.''',
    },
    {
      'name': 'DeviceMetricsReportingEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:14-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': True,
      'id': 127,
      'caption': '''Enable metrics reporting''',
      'tags': ['admin-sharing'],
      'desc': '''Controls whether usage metrics and diagnostic data, including crash reports, are reported back to Google.

      If set to true, <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> will report usage metrics and diagnostic data.

      If set to false, metrics and diagnostic data reporting will be disabled.

      If not configured, metrics and diagnostic data reporting will be disabled on unmanaged devices and enabled on managed devices.''',

      'arc_support': 'This policy also controls Android usage and diagnostic data collection.',
    },
    {
      'name': 'ChromeOsReleaseChannel',
      'type': 'string-enum',
      'schema': {
        'type': 'string',
        'enum': [ 'stable-channel', 'beta-channel', 'dev-channel' ],
      },
      'items': [
        {
          'name': 'StableChannel',
          'value': 'stable-channel',
          'caption': '''Stable channel''',
        },
        {
          'name': 'BetaChannel',
          'value': 'beta-channel',
          'caption': '''Beta channel''',
        },
        {
          'name': 'DevChannel',
          'value': 'dev-channel',
          'caption': '''Dev channel (may be unstable)''',
        },
      ],
      'supported_on': ['chrome_os:11-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': 'stable-channel',
      'id': 91,
      'caption': '''Release channel''',
      'tags': [],
      'desc': '''Specifies the release channel that this device should be locked to.''',
    },
    {
      'name': 'ChromeOsReleaseChannelDelegated',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:19-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': False,
      'id': 134,
      'caption': '''Whether the release channel should be configurable by the user''',
      'tags': [],
      'desc': '''If this policy is set to True and the ChromeOsReleaseChannel policy is not specified then users of the enrolling domain will be allowed to change the release channel of the device. If this policy is set to false the device will be locked in whatever channel it was last set.

      The user selected channel will be overridden by the ChromeOsReleaseChannel policy, but if the policy channel is more stable than the one that was installed on the device, then the channel will only switch after the version of the more stable channel reaches a higher version number than the one installed on the device.''',
    },
    {
      'name': 'DeviceEphemeralUsersEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:19-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': True,
      'id': 128,
      'caption': '''Wipe user data on sign-out''',
      'tags': [],
      'desc': '''Determines whether <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> keeps local account data after logout. If set to true, no persistent accounts are kept by <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> and all data from the user session will be discarded after logout. If this policy is set to false or not configured, the device may keep (encrypted) local user data.''',
    },
    {
      'name': 'DeviceStartUpUrls',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome_os:19-40'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': [ 'https://google.com', 'chrome-extension://aaaaaaaaaaaaaaaaaaaaaaaa/' ],
      'id': 137,
      'caption': '''Load specified urls on demo login''',
      'tags': [],
      'desc': '''This policy is active in retail mode only.

      Determines the set of URLs to be loaded when the demo session is started. This policy will override any other mechanisms for setting the initial URL and thus can only be applied to a session not associated with a particular user.''',
    },
    {
      'name': 'DeviceIdleLogoutTimeout',
      'type': 'int',
      'schema': { 'type': 'integer' },
      'supported_on': ['chrome_os:19-40'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': 60000,
      'id': 130,
      'caption': '''Timeout until idle user log-out is executed''',
      'tags': [],
      'desc': '''This policy is active in retail mode only.

      When the value of this policy is set and is not 0 then the currently logged in demo user will be logged out automatically after an inactivity time of the specified duration has elapsed.

      The policy value should be specified in milliseconds.''',
    },
    {
      'name': 'DeviceIdleLogoutWarningDuration',
      'type': 'int',
      'schema': { 'type': 'integer' },
      'supported_on': ['chrome_os:19-40'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': 15000,
      'id': 131,
      'caption': '''Duration of the idle log-out warning message''',
      'tags': [],
      'desc': '''This policy is active in retail mode only.

      When DeviceIdleLogoutTimeout is specified this policy defines the duration of the warning box with a count down timer that is shown to the user before the logout is executed.

      The policy value should be specified in milliseconds.''',
    },
    {
      'name': 'DeviceLoginScreenSaverId',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome_os:19-40'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': 'fhblcfnmnbehmifidkddcenilbpddlfk',
      'id': 132,
      'caption': '''Screen saver to be used on the sign-in screen in retail mode''',
      'tags': [],
      'desc': '''This policy is active in retail mode only.

      Determines the id of the extension to be used as a screen saver on the sign-in screen. The extension must be part of the AppPack that is configured for this domain through the DeviceAppPack policy.''',
    },
    {
      'name': 'DeviceLoginScreenSaverTimeout',
      'type': 'int',
      'schema': { 'type': 'integer' },
      'supported_on': ['chrome_os:19-40'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': 120000,
      'id': 133,
      'caption': '''Duration of inactivity before the screen saver is shown on the sign-in screen in retail mode''',
      'tags': [],
      'desc': '''This policy is active in retail mode only.

      Determines the duration before the screen saver is shown on the sign-in screen for devices in retail mode.

      The policy value should be specified in milliseconds.''',
    },
    {
      'name': 'DeviceAppPack',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome_os:19-40'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': [ '{ "extension-id": "khgabmflimjjbclkmljlpmgaleanedem", "update-url": "https://clients2.google.com/service/update2/crx" }' ],
      'id': 135,
      'caption': '''List of AppPack extensions''',
      'tags': [],
      'desc': '''This policy is active in retail mode only.

      Lists extensions that are automatically installed for the Demo user, for devices in retail mode. These extensions are saved in the device and can be installed while offline, after the installation.

      Each list entry contains a dictionary that must include the extension ID in the 'extension-id' field, and its update URL in the 'update-url' field.''',
    },
    {
      'name': 'DeviceAutoUpdateDisabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:19-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': True,
      'id': 136,
      'caption': '''Disable Auto Update''',
      'tags': ['system-security'],
      'desc': '''Disables automatic updates when set to True.

      <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> devices automatically check for updates when this setting is not configured or set to False.

      Warning: It is recommended to keep auto-updates enabled so that users receive software updates and critical security fixes. Turning off auto-updates might leave users at risk.''',
    },
    {
      'name': 'DeviceAutoUpdateP2PEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:31-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': False,
      'id': 242,
      'caption': '''Auto update p2p enabled''',
      'tags': [],
      'desc': '''Specifies whether p2p is to be used for OS update payloads. If set to True, devices will share and attempt to consume update payloads on the LAN, potentially reducing Internet bandwidth usage and congestion. If the update payload is not available on the LAN, the device will fall back to downloading from an update server. If set to False or not configured, p2p will not be used.''',
    },
    {
      'name': 'DeviceRollbackAllowedMilestones',
      'type': 'int',
      'schema': {
        'type': 'integer',
        'minimum': 0,
        'maximum': 4,
      },
      'supported_on': ['chrome_os:67-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': 4,
      'id': 426,
      'caption': '''Number of milestones rollback is allowed''',
      'tags': ['system-security'],
      'desc': '''Specifies the minimum number of <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> milestones rollback should be allowed starting from the stable version at any time.

      Default is 0 for consumer, 4 (approx. half a year) for enterprise enrolled devices.

      Setting this policy prevents rollback protection to apply for at least this number of milestones.

      Setting this policy to a lower value has a permanent effect: the device MAY not be able to roll back to earlier versions even after the policy is reset to a larger value.

      Actual rollback possibilities may also depend on the board and critical vulnerability patches.''',
    },
    {
      'name': 'DeviceRollbackToTargetVersion',
      'type': 'int-enum',
      'schema': {
        'type': 'integer',
        'enum': [ 1, 2, 3, 4 ],
      },
      'items': [
        {
          'name': 'RollbackDisabled',
          'value': 1,
          'caption': '''Do not roll back to target version if OS version is newer than target. Updates are also disabled.''',
        },
        {
          'name': 'RollbackAndPowerwash',
          'value': 2,
          'caption': '''Roll back and stay on target version if OS version is newer than target. Do a powerwash during the process.''',
        },
        {
          'name': 'RollbackAndRestoreIfPossible',
          'value': 3,
          'caption': '''Roll back and stay on target version if OS version is newer than target. Try to carry over device-level configuration (including network credentials) through the rollback process, if possible, but do the rollback with full powerwash even if restoring the data is not possible (because the target version doesn't support restoring data or because of a backward-incompatible change).
          Supported on <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> version 70 and higher. For older clients, this value means that rollback is disabled.''',
        },
        {
          'name': 'RollbackOnlyIfRestorePossible',
          'value': 4,
          'caption': '''Roll back and stay on target version if OS version is newer than target and it's possible to carry over device-level configuration (including network credentials) through rollback, also skipping OOBE after rollback. Don't do or abort rollback if that's not possible (because the target version doesn't support restoring data or because of a backward-incompatible change).
          Supported on <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> version 70 and higher. For older clients, this value means that rollback is disabled.''',
        },
      ],
      'supported_on': ['chrome_os:67-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': 1,
      'id': 427,
      'caption': '''Rollback to target version''',
      'tags': ['system-security'],
      'desc': '''Specifies whether the device should roll back to the version set by <ph name="DEVICE_TARGET_VERSION_PREFIX_POLICY_NAME">DeviceTargetVersionPrefix</ph> if it's already running a later version.

      Default is RollbackDisabled.''',
    },
    {
      'name': 'DeviceTargetVersionPrefix',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome_os:19-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': '1412.',
      'id': 142,
      'caption': '''Target Auto Update Version''',
      'tags': ['system-security'],
      'desc': '''Sets a target version for Auto Updates.

      Specifies the prefix of a target version <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> should update to. If the device is running a version that's before the specified prefix, it will update to the latest version with the given prefix. If the device is already on a later version, effects depend on the value of <ph name="DEVICE_ROLLBACK_TO_TARGET_VERSION_POLICY_NAME">DeviceRollbackToTargetVersion</ph>. The prefix format works component-wise as is demonstrated in the following example:

      "" (or not configured): update to latest version available.
      "1412.": update to any minor version of 1412 (e.g. 1412.24.34 or 1412.60.2)
      "1412.2.": update to any minor version of 1412.2 (e.g. 1412.2.34 or 1412.2.2)
      "1412.24.34": update to this specific version only

      Warning: It is not recommended to configure version restrictions as they may prevent users from receiving software updates and critical security fixes. Restricting updates to a specific version prefix might leave users at risk.''',
    },
    {
      'name': 'DeviceUpdateScatterFactor',
      'type': 'int',
      'schema': { 'type': 'integer' },
      'supported_on': ['chrome_os:20-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': 7200,
      'id': 145,
      'caption': '''Auto update scatter factor''',
      'tags': ['system-security'],
      'desc': '''Specifies the number of seconds up to which a device may randomly delay its download of an update from the time the update was first pushed out to the server. The device may wait a portion of this time in terms of wall-clock-time and the remaining portion in terms of the number of update checks. In any case, the scatter is upper bounded to a constant amount of time so that a device does not ever get stuck waiting to download an update forever.''',
    },
    {
      'name': 'DeviceUpdateAllowedConnectionTypes',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome_os:21-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': [ 'ethernet' ],
      'id': 146,
      'caption': '''Connection types allowed for updates''',
      'tags': [],
      'desc': ''' The types of connections that are allowed to use for OS updates. OS updates potentially put heavy strain on the connection due to their size and may incur additional cost. Therefore, they are by default not enabled for connection types that are considered expensive, which include WiMax, Bluetooth and Cellular at the moment.

      The recognized connection type identifiers are "ethernet", "wifi", "wimax", "bluetooth" and "cellular".''',
    },
    {
      'name': 'DeviceUpdateHttpDownloadsEnabled',
      'type': 'main',
      'schema': {
        'type': 'boolean',
      },
      'supported_on': ['chrome_os:29-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': True,
      'id': 243,
      'caption': '''Allow autoupdate downloads via HTTP''',
      'tags': [],
      'desc': '''Auto-update payloads on <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> can be downloaded via HTTP instead of HTTPS. This allows transparent HTTP caching of HTTP downloads.

      If this policy is set to true, <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> will attempt to download auto-update payloads via HTTP. If the policy is set to false or not set, HTTPS will be used for downloading auto-update payloads.''',
    },
    {
      'name': 'DeviceLocalAccounts',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome_os:25-'],
      'supported_chrome_os_management': ['google_cloud'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': [ "demo@example.com" ],
      'id': 163,
      'caption': '''Device-local accounts''',
      'tags': [],
      'desc': '''Specifies the list of device-local accounts to be shown on the login screen.

      Every list entry specifies an identifier, which is used internally to tell the different device-local accounts apart.''',
    },
    {
      'name': 'DeviceLocalAccountAutoLoginId',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome_os:26-'],
      'supported_chrome_os_management': ['google_cloud'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': "public@example.com",
      'id': 194,
      'caption': '''Public session for auto-login''',
      'tags': [],
      'desc': '''A public session to auto-login after a delay.

      If this policy is set, the specified session will be automatically logged in after a period of time has elapsed at the login screen without user interaction. The public session must already be configured (see |DeviceLocalAccounts|).

      If this policy is unset, there will be no auto-login.''',
    },
    {
      'name': 'DeviceLocalAccountAutoLoginDelay',
      'type': 'int',
      'schema': { 'type': 'integer' },
      'supported_on': ['chrome_os:26-'],
      'supported_chrome_os_management': ['google_cloud'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': 180000,
      'id': 195,
      'caption': '''Public session auto-login timer''',
      'tags': [],
      'desc': '''The public session auto-login delay.

      If the |DeviceLocalAccountAutoLoginId| policy is unset, this policy has no effect. Otherwise:

      If this policy is set, it determines the amount of time without user activity that should elapse before automatically logging into the public session specified by the |DeviceLocalAccountAutoLoginId| policy.

      If this policy is unset, 0 milliseconds will be used as the timeout.

      This policy is specified in milliseconds.'''
    },
    {
      'name': 'DeviceLocalAccountAutoLoginBailoutEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:28-'],
      'supported_chrome_os_management': ['google_cloud'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': True,
      'id': 202,
      'caption': '''Enable bailout keyboard shortcut for auto-login''',
      'tags': [],
      'desc': '''Enable bailout keyboard shortcut for auto-login.

      If this policy is unset or set to True and a device-local account is configured for zero-delay auto-login, <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> will honor the keyboard shortcut Ctrl+Alt+S for bypassing auto-login and showing the login screen.

      If this policy is set to False, zero-delay auto-login (if configured) cannot be bypassed.'''
    },
    {
      'name': 'DeviceLocalAccountPromptForNetworkWhenOffline',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:33-'],
      'supported_chrome_os_management': ['google_cloud'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': True,
      'id': 250,
      'caption': '''Enable network configuration prompt when offline''',
      'tags': [],
      'desc': '''Enable network configuration prompt when offline.

      If this policy is unset or set to True and a device-local account is configured for zero-delay auto-login and the device does not have access to the Internet, <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> will show a network configuration prompt.

      If this policy is set to False, an error message will be displayed instead of the network configuration prompt.'''
    },
    {
      'name': 'DeviceLocalAccountManagedSessionEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:70-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': True,
      'id': 463,
      'caption': '''Allow managed session on device''',
      'tags': [],
      'desc': '''If this policy is set to false or left unset, managed guest session will behave as documented in https://support.google.com/chrome/a/answer/3017014 - the standard "Public Session".

      If this policy is set to true, managed guest session will take on "Managed Session" behaviour which lifts many of the restrictions that are in place for regular "Public Sessions".

      If this policy is set, the user cannot change or override it.''',
    },
    {
      'name': 'DeviceBlockDevmode',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:37-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': True,
      'id': 266,
      'caption': '''Block developer mode''',
      'tags': [],
      'desc': '''Block developer mode.

      If this policy is set to True, <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> will prevent the device from booting into developer mode. The system will refuse to boot and show an error screen when the developer switch is turned on.

      If this policy is unset or set to False, developer mode will remain available for the device.''',
      'arc_support': 'This policy controls <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> developer mode only. If you want to prevent access to Android Developer Options, you need to set the <ph name="DEVELOPER_TOOLS_DISABLED_POLICY_NAME">DeveloperToolsDisabled</ph> policy.',
    },
    {
      'name': 'BackgroundModeEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.win:19-', 'chrome.linux:19-'],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': True,
      'id': 138,
      'caption': '''Continue running background apps when <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> is closed''',
      'tags': ['system-security'],
      'desc': '''Determines whether a <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> process is started on OS login and keeps running when the last browser window is closed, allowing background apps and the current browsing session to remain active, including any session cookies. The background process displays an icon in the system tray and can always be closed from there.

      If this policy is set to True, background mode is enabled and cannot be controlled by the user in the browser settings.

      If this policy is set to False, background mode is disabled and cannot be controlled by the user in the browser settings.

      If this policy is left unset, background mode is initially disabled and can be controlled by the user in the browser settings.''',
    },
    {
      'name': 'DriveDisabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:19-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 139,
      'caption': '''Disable Drive in the <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> Files app''',
      'tags': [],
      'desc': '''Disables Google Drive syncing in the <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> Files app when set to True. In that case, no data is uploaded to Google Drive.

          If not set or set to False, then users will be able to transfer files to Google Drive.''',
      'arc_support': 'This policy does not prevent the user from using the Android Google Drive app. If you want to prevent access to Google Drive, you should disallow installation of the Android Google Drive app as well.',
    },
    {
      'name': 'DriveDisabledOverCellular',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:19-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 140,
      'caption': '''Disable Google Drive over cellular connections in the <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> Files app''',
      'tags': [],
      'desc': '''Disables Google Drive syncing in the <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> Files app when using a cellular connection when set to True. In that case, data is only synced to Google Drive when connected via WiFi or Ethernet.

          If not set or set to False, then users will be able to transfer files to Google Drive via cellular connections.''',
      'arc_support': 'This policy has no effect on the Android Google Drive app. If you want to prevent use of Google Drive over cellular connections, you should disallow installation of the Android Google Drive app.',
    },
    {
      'name': 'PinnedLauncherApps',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome_os:20-' ],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['pjkljhegncpnkpknbcohdijeoejaedia', 'com.google.android.gm'],
      'id': 144,
      'caption': '''List of pinned apps to show in the launcher''',
      'tags': [],
      'desc': '''Lists the application identifiers <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> shows as pinned apps in the launcher bar.

      If this policy is configured, the set of applications is fixed and can't be changed by the user.

      If this policy is left unset, the user may change the list of pinned apps in the launcher.''',
      'arc_support': 'This policy can also be used to pin Android apps.',
    },
    {
      'name': 'RestrictSigninToPattern',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome.*:21-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': '.*@example.com',
      'id': 147,
      'caption': '''Restrict which users are allowed to sign in to <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>''',
      'tags': [],
      'desc': '''Contains a regular expression which is used to determine which users can sign in to <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.

      An appropriate error is displayed if a user tries to log in with a username that does not match this pattern.

      If this policy is left not set or blank, then any user can sign in to <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.''',
    },
    {
      'name': 'DisableSafeBrowsingProceedAnyway',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:22-', 'chrome_os:22-', 'android:30-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 150,
      'caption': '''Disable proceeding from the Safe Browsing warning page''',
      'tags': [],
      'desc': '''The Safe Browsing service shows a warning page when users navigate to sites that are flagged as potentially malicious. Enabling this setting prevents users from proceeding anyway from the warning page to the malicious site.

      If this setting is disabled or not configured then users can choose to proceed to the flagged site after being shown the warning.

      See https://developers.google.com/safe-browsing for more info on Safe Browsing.''',
    },
    {
      'name': 'SafeBrowsingExtendedReportingOptInAllowed',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:44-', 'chrome_os:44-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 299,
      'caption': '''Allow users to opt in to Safe Browsing extended reporting''',
      'tags': [],
      'deprecated': True,
      'desc': '''This setting is deprecated, use SafeBrowsingExtendedReportingEnabled instead. Enabling or disabling SafeBrowsingExtendedReportingEnabled is equivalent to setting SafeBrowsingExtendedReportingOptInAllowed to False.

      Setting this policy to false stops users from choosing to send some system information and page content to Google servers. If this setting is true or not configured, then users will be allowed to send some system information and page content to Safe Browsing to help detect dangerous apps and sites.

      See https://developers.google.com/safe-browsing for more info on Safe Browsing.''',
    },
    {
      'name': 'SpellCheckServiceEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:22-', 'chrome_os:22-'],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': False,
      'id': 151,
      'caption': '''Enable or disable spell checking web service''',
      'tags': [],
      'desc': '''<ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> can use a Google web service to help resolve spelling errors. If this setting is enabled, then this service is always used. If this setting is disabled, then this service is never used.

      Spell checking can still be performed using a downloaded dictionary; this policy only controls the usage of the online service.

      If this setting is not configured then users can choose whether the spell checking service should be used or not.''',
    },
    {
      'name': 'ExternalStorageDisabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:22-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 152,
      'caption': '''Disable mounting of external storage''',
      'tags': [],
      'desc': '''When this policy is set to true, external storage will not be available in the file browser.

      This policy affects all types of storage media. For example: USB flash drives, external hard drives, SD and other memory cards, optical storage etc. Internal storage is not affected, therefore files saved in the Download folder can still be accessed. Google Drive is also not affected by this policy.

      If this setting is disabled or not configured then users can use all supported types of external storage on their device.''',
    },
    {
      'name': 'ExternalStorageReadOnly',
      'id': 343,
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'tags': [],
      'supported_on': ['chrome_os:54-'],
      'caption': '''Treat external storage devices as read-only''',
      'desc': '''When this policy is set to true, users cannot write anything to external storage devices.

      If this setting is set to false or not configured, then users can create and modify files of external storage devices which are physically writable.

      The ExternalStorageDisabled policy takes precedence over this policy - if ExternalStorageDisabled is set to true, then all access to external storage is disabled and this policy is consequently ignored.

      Dynamic refresh of this policy is supported in M56 and later.''',
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True
    },
    {
      'name': 'AudioOutputAllowed',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:23-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': False,
      'id': 159,
      'caption': '''Allow playing audio''',
      'tags': [],
      'desc': '''When this policy is set to false, audio output will not be available on the device while the user is logged in.

      This policy affects all types of audio output and not only the built-in speakers. Audio accessibility features are also inhibited by this policy. Do not enable this policy if a screen reader is required for the user.

      If this setting is set to true or not configured then users can use all supported audio outputs on their device.''',
    },
    {
      'name': 'AudioCaptureAllowed',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:25-', 'chrome_os:23-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': False,
      'id': 160,
      'caption': '''Allow or deny audio capture''',
      'tags': [],
      'desc': '''If enabled or not configured (default), the user will be prompted for
      audio capture access except for URLs configured in the
      AudioCaptureAllowedUrls list which will be granted access without prompting.

      When this policy is disabled, the user will never be prompted and audio
      capture only be available to URLs configured in AudioCaptureAllowedUrls.

      This policy affects all types of audio inputs and not only the built-in microphone.''',
      'arc_support': 'For Android apps, this policy affects the microphone only. When this policy is set to true, the microphone is muted for all Android apps, with no exceptions.',
    },
    {
      'name': 'AudioCaptureAllowedUrls',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome.*:29-', 'chrome_os:29-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['https://www.example.com/', 'https://[*.]example.edu/'],
      'id': 208,
      'caption': '''URLs that will be granted access to audio capture devices without prompt''',
      'tags': ['website-sharing'],
      'desc': '''Patterns in this list will be matched against the security
      origin of the requesting URL.  If a match is found, access to audio
      capture devices will be granted without prompt.

      NOTE: Until version 45, this policy was only supported in Kiosk mode.''',
    },
    {
      'name': 'VideoCaptureAllowed',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:25-', 'chrome_os:25-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': False,
      'id': 167,
      'caption': '''Allow or deny video capture''',
      'tags': [],
      'desc': '''If enabled or not configured (default), the user will be prompted for
      video capture access except for URLs configured in the
      VideoCaptureAllowedUrls list which will be granted access without prompting.

      When this policy is disabled, the user will never be prompted and video
      capture only be available to URLs configured in VideoCaptureAllowedUrls.

      This policy affects all types of video inputs and not only the built-in camera.''',
      'arc_support': 'For Android apps, this policy affects the built-in camera only. When this policy is set to true, the camera is disabled for all Android apps, with no exceptions.',
    },
    {
      'name': 'VideoCaptureAllowedUrls',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome.*:29-', 'chrome_os:29-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['https://www.example.com/', 'https://[*.]example.edu/'],
      'id': 209,
      'caption': '''URLs that will be granted access to video capture devices without prompt''',
      'tags': ['website-sharing'],
      'desc': '''Patterns in this list will be matched against the security
      origin of the requesting URL.  If a match is found, access to video
      capture devices will be granted without prompt.

      NOTE: Until version 45, this policy was only supported in Kiosk mode.''',
    },
    {
      'name': 'DisableScreenshots',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:22-', 'chrome.*:22-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': True,
      'id': 153,
      'caption': '''Disable taking screenshots''',
      'tags': [],
      'desc': '''If enabled, screenshots cannot be taken using keyboard shortcuts or extension APIs.

      If disabled or not specified, taking screenshots is allowed.'''
    },
    {
      'name': 'SystemTimezone',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome_os:22-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': 'America/Los_Angeles',
      'id': 158,
      'caption': '''Timezone''',
      'tags': [],
      'desc': '''Specifies the timezone to be used for the device. Users can override the specified timezone for the current session. However, on logout it is set back to the specified timezone. If an invalid value is provided, the policy is still activated using "GMT" instead. If an empty string is provided, the policy is ignored.

      If this policy is not used, the currently active timezone will remain in use however users can change the timezone and the change is persistent. Thus a change by one user affects the login-screen and all other users.

      New devices start out with the timezone set to "US/Pacific".

      The format of the value follows the names of timezones in the "IANA Time Zone Database" (see "https://en.wikipedia.org/wiki/Tz_database"). In particular, most timezones can be referred to by "continent/large_city" or "ocean/large_city".

      Setting this policy completely disables automatic timezone resolve by device location. It also overrides SystemTimezoneAutomaticDetection policy.''',
    },
    {
      'name': 'SystemUse24HourClock',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:30-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': True,
      'id': 236,
      'caption': '''Use 24 hour clock by default''',
      'tags': [],
      'desc': '''Specifies the clock format be used for the device.

      This policy configures the clock format to use on the login screen and as a default for user sessions. Users can still override the clock format for their account.

      If the policy is set to true, the device will use a 24 hour clock format. If the policy is set to false, the device will use 12 hour clock format.

      If this policy is not set, the device will default to a 24 hour clock format.''',
    },
    {
      'name': 'TouchVirtualKeyboardEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:37-' ],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True
      },
      'example_value': False,
      'id': 269,
      'caption': '''Enable virtual keyboard''',
      'tags': [],
      'desc': '''This policy configures enabling the virtual keyboard as an input device on ChromeOS. Users cannot override this policy.

      If the policy is set to true, the on-screen virtual keyboard will always be enabled.

      If set to false, the on-screen virtual keyboard will always be disabled.

      If you set this policy, users cannot change or override it. However, users will still be able to enable/disable an accessibility on-screen keyboard which takes precedence over the virtual keyboard controlled by this policy. See the |VirtualKeyboardEnabled| policy for controlling the accessibility on-screen keyboard.

      If this policy is left unset, the on-screen keyboard is disabled initially but can be enabled by the user anytime. Heuristic rules may also be used to decide when to display the keyboard.''',
    },
    {
      'name': 'ShowLogoutButtonInTray',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:25-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 164,
      'caption': '''Add a logout button to the system tray''',
      'tags': [],
      'desc': '''If enabled, a big, red logout button is shown in the system tray while a session is active and the screen is not locked.

      If disabled or not specified, no big, red logout button is shown in the system tray.''',
    },
    {
      'name': 'BuiltInDnsClientEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:25-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': True,
      'id': 165,
      'caption': '''Use built-in DNS client''',
      'tags': [],
      'desc': '''Controls whether the built-in DNS client is used in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.

      If this policy is set to true, the built-in DNS client will be used, if available.

      If this policy is set to false, the built-in DNS client will never be used.

      If this policy is left not set, the users will be able to change whether the built-in DNS client is used by editing chrome://flags or specifying a command-line flag.''',
    },
    {
      'name': 'ShelfAutoHideBehavior',
      'type': 'string-enum',
      'schema': {
        'type': 'string',
        'enum': [
          'Always',
          'Never'
        ],
      },
      'items': [
        {
          'name': 'AlwaysAutoHideShelf',
          'value': 'Always',
          'caption': '''Always auto-hide the shelf''',
        },
        {
          'name': 'NeverAutoHideShelf',
          'value': 'Never',
          'caption': '''Never auto-hide the shelf''',
        },
      ],
      'supported_on': ['chrome_os:25-'],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': 'Always',
      'id': 166,
      'caption': '''Control shelf auto-hiding''',
      'tags': [],
      'desc': '''Control auto-hiding of the <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> shelf.

      If this policy is set to 'AlwaysAutoHideShelf', the shelf will always auto-hide.

      If this policy is set to 'NeverAutoHideShelf', the shelf never auto-hide.

      If you set this policy, users cannot change or override it.

      If the policy is left not set, users can choose whether the shelf should auto-hide.''',
    },
    {
      'name': 'UserDisplayName',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome_os:25-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': 'Policy User',
      'id': 169,
      'caption': '''Set the display name for device-local accounts''',
      'tags': [],
      'desc': '''Controls the account name <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> shows on the login screen for the corresponding device-local account.

      If this policy is set, the login screen will use the specified string in the picture-based login chooser for the corresponding device-local account.

      If the policy is left not set, <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> will use the device-local account's email account ID as the display name on the login screen.

      This policy is ignored for regular user accounts.''',
    },
    {
      'name': 'SessionLengthLimit',
      'type': 'int',
      'schema': { 'type': 'integer' },
      'supported_on': ['chrome_os:25-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': 3600000,
      'id': 170,
      'caption': '''Limit the length of a user session''',
      'tags': [],
      'desc': '''When this policy is set, it specifies the length of time after which a user is automatically logged out, terminating the session. The user is informed about the remaining time by a countdown timer shown in the system tray.

      When this policy is not set, the session length is not limited.

      If you set this policy, users cannot change or override it.

      The policy value should be specified in milliseconds. Values are clamped to a range of 30 seconds to 24 hours.''',
    },
    {
      'name': 'FullscreenAllowed',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.win:31-', 'chrome.linux:31-', 'chrome_os:31-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 240,
      'caption': '''Allow fullscreen mode''',
      'tags': [],
      'desc': '''This policy controls the availability of fullscreen mode in which all <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> UI is hidden and only web content is visible.

      If this policy is set to true or not not configured, the user, apps and extensions with appropriate permissions can enter fullscreen mode.

      If this policy is set to false, neither the user nor any apps or extensions can enter fullscreen mode.

      On all platforms except <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph>, kiosk mode is unavailable when fullscreen mode is disabled.''',
      'arc_support': 'This policy has no effect on the Android apps. They will be able to enter fullscreen mode even if this policy is set to <ph name="FALSE">False</ph>.',
    },
    {
      'name': 'ScreenDimDelayAC',
      'type': 'int',
      'schema': {
        'type': 'integer',
        'minimum': 0
      },
      'supported_on': ['chrome_os:26-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'deprecated': True,
      'example_value': 420000,
      'id': 172,
      'caption': '''Screen dim delay when running on AC power''',
      'tags': [],
      'desc': '''Specifies the length of time without user input after which the screen is dimmed when running on AC power.

          When this policy is set to a value greater than zero, it specifies the length of time that the user must remain idle before <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> dims the screen.

          When this policy is set to zero, <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> does not dim the screen when the user becomes idle.

          When this policy is unset, a default length of time is used.

          The policy value should be specified in milliseconds. Values are clamped to be less than or equal the screen off delay (if set) and the idle delay.''',
    },
    {
      'name': 'ScreenOffDelayAC',
      'type': 'int',
      'schema': {
        'type': 'integer',
        'minimum': 0
      },
      'supported_on': ['chrome_os:26-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'deprecated': True,
      'example_value': 480000,
      'id': 173,
      'caption': '''Screen off delay when running on AC power''',
      'tags': [],
      'desc': '''Specifies the length of time without user input after which the screen is turned off when running on AC power.

          When this policy is set to a value greater than zero, it specifies the length of time that the user must remain idle before <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> turns off the screen.

          When this policy is set to zero, <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> does not turn off the screen when the user becomes idle.

          When this policy is unset, a default length of time is used.

          The policy value should be specified in milliseconds. Values are clamped to be less than or equal the idle delay.''',
    },
    {
      'name': 'ScreenLockDelayAC',
      'type': 'int',
      'schema': {
        'type': 'integer',
        'minimum': 0
      },
      'supported_on': ['chrome_os:26-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'deprecated': True,
      'example_value': 600000,
      'id': 174,
      'caption': '''Screen lock delay when running on AC power''',
      'tags': [],
      'desc': '''Specifies the length of time without user input after which the screen is locked when running on AC power.

          When this policy is set to a value greater than zero, it specifies the length of time that the user must remain idle before <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> locks the screen.

          When this policy is set to zero, <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> does not lock the screen when the user becomes idle.

          When this policy is unset, a default length of time is used.

          The recommended way to lock the screen on idle is to enable screen locking on suspend and have <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> suspend after the idle delay. This policy should only be used when screen locking should occur a significant amount of time sooner than suspend or when suspend on idle is not desired at all.

          The policy value should be specified in milliseconds. Values are clamped to be less than the idle delay.''',
    },
    {
      'name': 'IdleWarningDelayAC',
      'type': 'int',
      'schema': {
        'type': 'integer',
        'minimum': 0
      },
      'supported_on': ['chrome_os:27-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'deprecated': True,
      'example_value': 545000,
      'id': 197,
      'caption': '''Idle warning delay when running on AC power''',
      'tags': [],
      'desc': '''Specifies the length of time without user input after which a warning dialog is shown when running on AC power.

          When this policy is set, it specifies the length of time that the user must remain idle before <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> shows a warning dialog telling the user that the idle action is about to be taken.

          When this policy is unset, no warning dialog is shown.

          The policy value should be specified in milliseconds. Values are clamped to be less than or equal the idle delay.''',
    },
    {
      'name': 'IdleDelayAC',
      'type': 'int',
      'schema': {
        'type': 'integer',
        'minimum': 0
      },
      'supported_on': ['chrome_os:26-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'deprecated': True,
      'example_value': 1800000,
      'id': 175,
      'caption': '''Idle delay when running on AC power''',
      'tags': [],
      'desc': '''Specifies the length of time without user input after which the idle action is taken when running on AC power.

          When this policy is set, it specifies the length of time that the user must remain idle before <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> takes the idle action, which can be configured separately.

          When this policy is unset, a default length of time is used.

          The policy value should be specified in milliseconds.''',
    },
    {
      'name': 'ScreenDimDelayBattery',
      'type': 'int',
      'schema': {
        'type': 'integer',
        'minimum': 0
      },
      'supported_on': ['chrome_os:26-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'deprecated': True,
      'example_value': 300000,
      'id': 176,
      'caption': '''Screen dim delay when running on battery power''',
      'tags': [],
      'desc': '''Specifies the length of time without user input after which the screen is dimmed when running on battery power.

          When this policy is set to a value greater than zero, it specifies the length of time that the user must remain idle before <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> dims the screen.

          When this policy is set to zero, <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> does not dim the screen when the user becomes idle.

          When this policy is unset, a default length of time is used.

          The policy value should be specified in milliseconds. Values are clamped to be less than or equal the screen off delay (if set) and the idle delay.''',
    },
    {
      'name': 'ScreenOffDelayBattery',
      'type': 'int',
      'schema': {
        'type': 'integer',
        'minimum': 0
      },
      'supported_on': ['chrome_os:26-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'deprecated': True,
      'example_value': 360000,
      'id': 177,
      'caption': '''Screen off delay when running on battery power''',
      'tags': [],
      'desc': '''Specifies the length of time without user input after which the screen is turned off when running on battery power.

          When this policy is set to a value greater than zero, it specifies the length of time that the user must remain idle before <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> turns off the screen.

          When this policy is set to zero, <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> does not turn off the screen when the user becomes idle.

          When this policy is unset, a default length of time is used.

          The policy value should be specified in milliseconds. Values are clamped to be less than or equal the idle delay.''',
    },
    {
      'name': 'ScreenLockDelayBattery',
      'type': 'int',
      'schema': {
        'type': 'integer',
        'minimum': 0
      },
      'supported_on': ['chrome_os:26-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'deprecated': True,
      'example_value': 600000,
      'id': 178,
      'caption': '''Screen lock delay when running on battery power''',
      'tags': [],
      'desc': '''Specifies the length of time without user input after which the screen is locked when running on battery power.

          When this policy is set to a value greater than zero, it specifies the length of time that the user must remain idle before <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> locks the screen.

          When this policy is set to zero, <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> does not lock the screen when the user becomes idle.

          When this policy is unset, a default length of time is used.

          The recommended way to lock the screen on idle is to enable screen locking on suspend and have <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> suspend after the idle delay. This policy should only be used when screen locking should occur a significant amount of time sooner than suspend or when suspend on idle is not desired at all.

          The policy value should be specified in milliseconds. Values are clamped to be less than the idle delay.''',
    },
    {
      'name': 'IdleWarningDelayBattery',
      'type': 'int',
      'schema': {
        'type': 'integer',
        'minimum': 0
      },
      'supported_on': ['chrome_os:27-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'deprecated': True,
      'example_value': 545000,
      'id': 198,
      'caption': '''Idle warning delay when running on battery power''',
      'tags': [],
      'desc': '''Specifies the length of time without user input after which a warning dialog is shown when running on battery power.

          When this policy is set, it specifies the length of time that the user must remain idle before <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> shows a warning dialog telling the user that the idle action is about to be taken.

          When this policy is unset, no warning dialog is shown.

          The policy value should be specified in milliseconds. Values are clamped to be less than or equal the idle delay.''',
    },
    {
      'name': 'IdleDelayBattery',
      'type': 'int',
      'schema': {
        'type': 'integer',
        'minimum': 0
      },
      'supported_on': ['chrome_os:26-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'deprecated': True,
      'example_value': 600000,
      'id': 179,
      'caption': '''Idle delay when running on battery power''',
      'tags': [],
      'desc': '''Specifies the length of time without user input after which the idle action is taken when running on battery power.

          When this policy is set, it specifies the length of time that the user must remain idle before <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> takes the idle action, which can be configured separately.

          When this policy is unset, a default length of time is used.

          The policy value should be specified in milliseconds.''',
    },
    {
      'name': 'IdleAction',
      'type': 'int-enum',
      'schema': {
        'type': 'integer',
        'enum': [ 0, 1, 2, 3 ],
      },
      'items': [
        {
          'name': 'IdleActionSuspend',
          'value': 0,
          'caption': '''Suspend''',
        },
        {
          'name': 'IdleActionLogout',
          'value': 1,
          'caption': '''Log the user out''',
        },
        {
          'name': 'IdleActionShutdown',
          'value': 2,
          'caption': '''Shut down''',
        },
        {
          'name': 'IdleActionDoNothing',
          'value': 3,
          'caption': '''Do nothing''',
        },
      ],
      'supported_on': ['chrome_os:26-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'deprecated': True,
      'example_value': 0,
      'id': 180,
      'caption': '''Action to take when the idle delay is reached''',
      'tags': [],
      'desc': '''Note that this policy is deprecated and will be removed in the future.

          This policy provides a fallback value for the more-specific <ph name="IDLE_ACTION_AC_POLICY_NAME">IdleActionAC</ph> and <ph name="IDLE_ACTION_BATTERY_POLICY_NAME">IdleActionBattery</ph> policies. If this policy is set, its value gets used if the respective more-specific policy is not set.

          When this policy is unset, behavior of the more-specific policies remains unaffected.''',
    },
    {
      'name': 'IdleActionAC',
      'type': 'int-enum',
      'schema': {
        'type': 'integer',
        'enum': [ 0, 1, 2, 3 ],
      },
      'items': [
        {
          'name': 'IdleActionSuspend',
          'value': 0,
          'caption': '''Suspend''',
        },
        {
          'name': 'IdleActionLogout',
          'value': 1,
          'caption': '''Log the user out''',
        },
        {
          'name': 'IdleActionShutdown',
          'value': 2,
          'caption': '''Shut down''',
        },
        {
          'name': 'IdleActionDoNothing',
          'value': 3,
          'caption': '''Do nothing''',
        },
      ],
      'supported_on': ['chrome_os:30-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'deprecated': True,
      'example_value': 0,
      'id': 226,
      'caption': '''Action to take when the idle delay is reached while running on AC power''',
      'tags': [],
      'desc': '''When this policy is set, it specifies the action that <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> takes when the user remains idle for the length of time given by the idle delay, which can be configured separately.

          When this policy is unset, the default action is taken, which is suspend.

          If the action is suspend, <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> can separately be configured to either lock or not lock the screen before suspending.''',
    },
    {
      'name': 'IdleActionBattery',
      'type': 'int-enum',
      'schema': {
        'type': 'integer',
        'enum': [ 0, 1, 2, 3 ],
      },
      'items': [
        {
          'name': 'IdleActionSuspend',
          'value': 0,
          'caption': '''Suspend''',
        },
        {
          'name': 'IdleActionLogout',
          'value': 1,
          'caption': '''Log the user out''',
        },
        {
          'name': 'IdleActionShutdown',
          'value': 2,
          'caption': '''Shut down''',
        },
        {
          'name': 'IdleActionDoNothing',
          'value': 3,
          'caption': '''Do nothing''',
        },
      ],
      'supported_on': ['chrome_os:30-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'deprecated': True,
      'example_value': 0,
      'id': 222,
      'caption': '''Action to take when the idle delay is reached while running on battery power''',
      'tags': [],
      'desc': '''When this policy is set, it specifies the action that <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> takes when the user remains idle for the length of time given by the idle delay, which can be configured separately.

          When this policy is unset, the default action is taken, which is suspend.

          If the action is suspend, <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> can separately be configured to either lock or not lock the screen before suspending.''',
    },
    {
      'name': 'LidCloseAction',
      'type': 'int-enum',
      'schema': {
        'type': 'integer',
        'enum': [ 0, 1, 2, 3 ],
      },
      'items': [
        {
          'name': 'LidCloseActionSuspend',
          'value': 0,
          'caption': '''Suspend''',
        },
        {
          'name': 'LidCloseActionLogout',
          'value': 1,
          'caption': '''Log the user out''',
        },
        {
          'name': 'LidCloseActionShutdown',
          'value': 2,
          'caption': '''Shut down''',
        },
        {
          'name': 'LidCloseActionDoNothing',
          'value': 3,
          'caption': '''Do nothing''',
        },
      ],
      'supported_on': ['chrome_os:26-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': 0,
      'id': 181,
      'caption': '''Action to take when the user closes the lid''',
      'tags': [],
      'desc': '''When this policy is set, it specifies the action that <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> takes when the user closes the device's lid.

          When this policy is unset, the default action is taken, which is suspend.

          If the action is suspend, <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> can separately be configured to either lock or not lock the screen before suspending.''',
    },
    {
      'name': 'PowerManagementUsesAudioActivity',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:26-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': True,
      'id': 182,
      'caption': '''Specify whether audio activity affects power management''',
      'tags': [],
      'desc': '''If this policy is set to True or is unset, the user is not considered to be idle while audio is playing. This prevents the idle timeout from being reached and the idle action from being taken. However, screen dimming, screen off and screen lock will be performed after the configured timeouts, irrespective of audio activity.

          If this policy is set to False, audio activity does not prevent the user from being considered idle.''',
    },
    {
      'name': 'PowerManagementUsesVideoActivity',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:26-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': True,
      'id': 183,
      'caption': '''Specify whether video activity affects power management''',
      'tags': [],
      'desc': '''If this policy is set to True or is unset, the user is not considered to be idle while video is playing. This prevents the idle delay, screen dim delay, screen off delay and screen lock delay from being reached and the corresponding actions from being taken.

          If this policy is set to False, video activity does not prevent the user from being considered idle.''',
      'arc_support': 'Video playing in Android apps is not taken into consideration, even if this policy is set to <ph name="TRUE">True</ph>.',
    },
    {
      'name': 'PresentationIdleDelayScale',
      'type': 'int',
      'schema': { 'type': 'integer' },
      'supported_on': ['chrome_os:26-28'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'deprecated': True,
      'example_value': 200,
      'id': 184,
      'caption': '''Percentage by which to scale the idle delay in presentation mode (deprecated)''',
      'tags': [],
      'desc': '''This policy has been retired as of <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> version 29. Please use the PresentationScreenDimDelayScale policy instead.''',
    },
    {
      'name': 'PresentationScreenDimDelayScale',
      'type': 'int',
      'schema': { 'type': 'integer' },
      'supported_on': ['chrome_os:29-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': 200,
      'id': 220,
      'caption': '''Percentage by which to scale the screen dim delay in presentation mode''',
      'tags': [],
      'desc': '''Specifies the percentage by which the screen dim delay is scaled when the device is in presentation mode.

          If this policy is set, it specifies the percentage by which the screen dim delay is scaled when the device is in presentation mode. When the screen dim delay is scaled, the screen off, screen lock and idle delays get adjusted to maintain the same distances from the screen dim delay as originally configured.

          If this policy is unset, a default scale factor is used.

          The scale factor must be 100% or more. Values that would make the screen dim delay in presentation mode shorter than the regular screen dim delay are not allowed.''',
    },
    {
      'name': 'AllowScreenWakeLocks',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:28-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': False,
      'id': 203,
      'caption': '''Allow screen wake locks''',
      'tags': [],
      'desc': '''Specifies whether screen wake locks are allowed. Screen wake locks can be requested by extensions via the power management extension API.

          If this policy is set to true or left not set, screen wake locks will be honored for power management.

          If this policy is set to false, screen wake lock requests will get ignored.''',
    },
    {
      'name': 'UserActivityScreenDimDelayScale',
      'type': 'int',
      'schema': { 'type': 'integer' },
      'supported_on': ['chrome_os:29-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': 200,
      'id': 210,
      'caption': '''Percentage by which to scale the screen dim delay if the user becomes active after dimming''',
      'tags': [],
      'desc': '''Specifies the percentage by which the screen dim delay is scaled when user activity is observed while the screen is dimmed or soon after the screen has been turned off.

          If this policy is set, it specifies the percentage by which the screen dim delay is scaled when user activity is observed while the screen is dimmed or soon after the screen has been turned off. When the dim delay is scaled, the screen off, screen lock and idle delays get adjusted to maintain the same distances from the screen dim delay as originally configured.

          If this policy is unset, a default scale factor is used.

          The scale factor must be 100% or more.''',
    },
    {
      'name': 'WaitForInitialUserActivity',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:32-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': True,
      'id': 247,
      'caption': '''Wait for initial user activity''',
      'tags': [],
      'desc': '''Specifies whether power management delays and the session length limit should only start running after the first user activity has been observed in a session.

          If this policy is set to True, power management delays and the session length limit do not start running until after the first user activity has been observed in a session.

          If this policy is set to False or left unset, power management delays and the session length limit start running immediately on session start.''',
    },
    {
      'name': 'PowerManagementIdleSettings',
      'type': 'dict',
      'schema': {
        'type': 'object',
        'properties': {
          'AC': {
            'description': 'Delays and actions to take when the device is idle and running on AC power',
            'type': 'object',
            'id': 'PowerManagementDelays',
            'properties': {
              'Delays': {
                'type': 'object',
                'properties': {
                  'ScreenDim': {
                    'description': 'The length of time without user input after which the screen is dimmed, in milliseconds',
                    'type': 'integer',
                    'minimum': 0
                  },
                  'ScreenOff': {
                    'description': 'The length of time without user input after which the screen is turned off, in milliseconds',
                    'type': 'integer',
                    'minimum': 0
                  },
                  'IdleWarning': {
                    'description': 'The length of time without user input after which a warning dialog is shown, in milliseconds',
                    'type': 'integer',
                    'minimum': 0
                  },
                  'Idle': {
                    'description': 'The length of time without user input after which the idle action is taken, in milliseconds',
                    'type': 'integer',
                    'minimum': 0
                  }
                }
              },
              'IdleAction': {
                'description': 'Action to take when the idle delay is reached',
                'type': 'string',
                'enum': [ 'Suspend', 'Logout', 'Shutdown', 'DoNothing' ]
              }
            }
          },
          'Battery': {
            'description': 'Delays and actions to take when the device is idle and running on battery',
            '$ref': 'PowerManagementDelays'
          }
        }
      },
      'supported_on': ['chrome_os:35-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': {
        'AC': {
          'IdleAction': 'DoNothing'
        },
        'Battery': {
          'IdleAction': 'DoNothing',
          'Delays': {
            'ScreenDim': 10000,
            'ScreenOff': 20000,
            'IdleWarning': 5000,
            'Idle': 30000
          }
        }
      },
      'id': 258,
      'caption': '''Power management settings when the user becomes idle''',
      'tags': [],
      'desc': '''This policy controls multiple settings for the power management strategy when the user becomes idle.

          There are four types of action:
          * The screen will be dimmed if the user remains idle for the time specified by |ScreenDim|.
          * The screen will be turned off if the user remains idle for the time specified by |ScreenOff|.
          * A warning dialog will be shown if the user remains idle for the time specified by |IdleWarning|, telling the user that the idle action is about to be taken.
          * The action specified by |IdleAction| will be taken if the user remains idle for the time specified by |Idle|.

          For each of above actions, the delay should be specified in milliseconds, and needs to be set to a value greater than zero to trigger the corresponding action. In case the delay is set to zero, <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> will not take the corresponding action.

          For each of the above delays, when the length of time is unset, a default value will be used.

          Note that |ScreenDim| values will be clamped to be less than or equal to |ScreenOff|, |ScreenOff| and |IdleWarning| will be clamped to be less than or equal to |Idle|.

          |IdleAction| can be one of four possible actions:
          * |Suspend|
          * |Logout|
          * |Shutdown|
          * |DoNothing|

          When the |IdleAction| is unset, the default action is taken, which is suspend.

          There are also separate settings for AC power and battery.
          '''
    },
    {
      'name': 'ScreenLockDelays',
      'type': 'dict',
      'schema': {
        'type': 'object',
        'properties': {
          'AC': {
            'description': 'The length of time without user input after which the screen is locked when running on AC power, in milliseconds',
            'type': 'integer',
            'minimum': 0
          },
          'Battery': {
            'description': 'The length of time without user input after which the screen is locked when running on battery, in milliseconds',
            'type': 'integer',
            'minimum': 0
          }
        }
      },
      'supported_on': ['chrome_os:35-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': {
        'AC': 600000,
        'Battery': 300000
      },
      'id': 259,
      'caption': '''Screen lock delays''',
      'tags': [],
      'desc': '''Specifies the length of time without user input after which the screen is locked when running on AC power or battery.

          When the length of time is set to a value greater than zero, it represents the length of time that the user must remain idle before <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> locks the screen.

          When the length of time is set to zero, <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> does not lock the screen when the user becomes idle.

          When the length of time is unset, a default length of time is used.

          The recommended way to lock the screen on idle is to enable screen locking on suspend and have <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> suspend after the idle delay. This policy should only be used when screen locking should occur a significant amount of time sooner than suspend or when suspend on idle is not desired at all.

          The policy value should be specified in milliseconds. Values are clamped to be less than the idle delay.''',
    },
    {
      'name': 'DeviceLoginScreenPowerManagement',
      'type': 'dict',
      'schema': {
        'type': 'object',
        'properties': {
          'AC': {
            'description': 'Power management settings applicable only when running on AC power',
            'type': 'object',
            'id': 'DeviceLoginScreenPowerSettings',
            'properties': {
              'Delays': {
                'type': 'object',
                'properties': {
                  'ScreenDim': {
                    'description': 'The length of time without user input after which the screen is dimmed, in milliseconds',
                    'type': 'integer',
                    'minimum': 0
                  },
                  'ScreenOff': {
                    'description': 'The length of time without user input after which the screen is turned off, in milliseconds',
                    'type': 'integer',
                    'minimum': 0
                  },
                  'Idle': {
                    'description': 'The length of time without user input after which the idle action is taken, in milliseconds',
                    'type': 'integer',
                    'minimum': 0
                  }
                }
              },
              'IdleAction': {
                'description': 'Action to take when the idle delay is reached',
                'type': 'string',
                'enum': [ 'Suspend', 'Shutdown', 'DoNothing' ]
              }
            }
          },
          'Battery': {
            'description': 'Power management settings applicable only when running on battery power',
            '$ref': 'DeviceLoginScreenPowerSettings'
          },
          'LidCloseAction': {
            'description': 'Action to take when the lid is closed',
            'type': 'string',
            'enum': [ 'Suspend', 'Shutdown', 'DoNothing' ]
          },
          'UserActivityScreenDimDelayScale': {
            'description': 'Percentage by which the screen dim delay is scaled when user activity is observed while the screen is dimmed or soon after the screen has been turned off',
            'type': 'integer',
            'minimum': 100
          }
        }
      },
      'supported_on': ['chrome_os:30-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': {
        'AC': {
          'IdleAction': 'DoNothing'
        },
        'Battery': {
          'IdleAction': 'DoNothing',
          'Delays': {
            'ScreenDim': 10000,
            'ScreenOff': 20000,
            'Idle': 30000
          }
        },
        'LidCloseAction': 'Suspend',
        'UserActivityScreenDimDelayScale': 110
      },
      'id': 225,
      'caption': '''Power management on the login screen''',
      'tags': [],
      'desc': '''Configure power management on the login screen in <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph>.

      This policy lets you configure how <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> behaves when there is no user activity for some amount of time while the login screen is being shown. The policy controls multiple settings. For their individual semantics and value ranges, see the corresponding policies that control power management within a session. The only deviations from these policies are:
      * The actions to take on idle or lid close cannot be to end the session.
      * The default action taken on idle when running on AC power is to shut down.

      If a setting is left unspecified, a default value is used.

      If this policy is unset, defaults are used for all settings.''',
    },
    {
      'name': 'DeviceAllowRedeemChromeOsRegistrationOffers',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:26-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': True,
      'id': 185,
      'caption': '''Allow users to redeem offers through Chrome OS Registration''',
      'tags': [],
      'desc': '''IT admins for enterprise devices can use this flag to control whether to allow users to redeem offers through Chrome OS Registration.

      If this policy is set to true or left not set, users will be able to redeem offers through Chrome OS Registration.

      If this policy is set to false, user will not be able to redeem offers.''',
    },
    {
      'name': 'TermsOfServiceURL',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome_os:26-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': 'https://www.example.com/terms_of_service.txt',
      'id': 186,
      'caption': '''Set the Terms of Service for a device-local account''',
      'tags': [],
      'desc': '''Sets the Terms of Service that the user must accept before starting a device-local account session.

      If this policy is set, <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> will download the Terms of Service and present them to the user whenever a device-local account session is starting. The user will only be allowed into the session after accepting the Terms of Service.

      If this policy is not set, no Terms of Service are shown.

      The policy should be set to a URL from which <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> can download the Terms of Service. The Terms of Service must be plain text, served as MIME type text/plain. No markup is allowed.''',
    },
    {
      'name': 'ShowAccessibilityOptionsInSystemTrayMenu',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:27-'],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 188,
      'caption': '''Show accessibility options in system tray menu''',
      'tags': [],
      'desc': '''If this policy is set to true, Accessibility options always appear in system tray menu.

          If this policy is set to false, Accessibility options never appear in system tray menu.

          If you set this policy, users cannot change or override it.

          If this policy is left unset, Accessibility options will not appear in the system tray menu, but the user can cause the Accessibility options to appear via the Settings page.'''
    },
    {
      'name': 'LargeCursorEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:29-'],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 211,
      'caption': '''Enable large cursor''',
      'tags': [],
      'desc': '''Enable the large cursor accessibility feature.

          If this policy is set to true, the large cursor will always be enabled.

          If this policy is set to false, the large cursor will always be disabled.

          If you set this policy, users cannot change or override it.

          If this policy is left unset, the large cursor is disabled initially but can be enabled by the user anytime.'''
    },
    {
      'name': 'SpokenFeedbackEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:29-'],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 212,
      'caption': '''Enable spoken feedback''',
      'tags': [],
      'desc': '''Enable the spoken feedback accessibility feature.

          If this policy is set to true, spoken feedback will always be enabled.

          If this policy is set to false, spoken feedback will always be disabled.

          If you set this policy, users cannot change or override it.

          If this policy is left unset, spoken feedback is disabled initially but can be enabled by the user anytime.'''
    },
    {
      'name': 'HighContrastEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:29-'],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 213,
      'caption': '''Enable high contrast mode''',
      'tags': [],
      'desc': '''Enable the high contrast mode accessibility feature.

          If this policy is set to true, high contrast mode will always be enabled.

          If this policy is set to false, high contrast mode will always be disabled.

          If you set this policy, users cannot change or override it.

          If this policy is left unset, high contrast mode is disabled initially but can be enabled by the user anytime.'''
    },
    {
      'name': 'VirtualKeyboardEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:34-'],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 255,
      'caption': '''Enable on-screen keyboard''',
      'tags': [],
      'desc': '''Enable the on-screen keyboard accessibility feature.

          If this policy is set to true, the on-screen keyboard will always be enabled.

          If this policy is set to false, the on-screen keyboard will always be disabled.

          If you set this policy, users cannot change or override it.

          If this policy is left unset, the on-screen keyboard is disabled initially but can be enabled by the user anytime.'''
    },
    {
      'name': 'KeyboardDefaultToFunctionKeys',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:35-'],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 260,
      'caption': '''Media keys default to function keys''',
      'tags': [],
      'desc': '''Changes the default behaviour of the top row keys to function keys.

          If this policy is set to true, the keyboard's top row of keys will produce function key commands per default. The search key has to be pressed to revert their behavior back to media keys.

          If this policy is set to false or left unset, the keyboard will produce media key commands per default and function key commands when the search key is held.'''
    },
    {
      'name': 'ScreenMagnifierType',
      'type': 'int-enum',
      'schema': {
        'type': 'integer',
        'enum': [ 0, 1 ],
      },
      'items': [
        {
          'name': 'None',
          'value': 0,
          'caption': '''Screen magnifier disabled''',
        },
        {
          'name': 'Full-screen',
          'value': 1,
          'caption': '''Full-screen magnifier enabled''',
        },
      ],
      'supported_on': ['chrome_os:29-'],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 1,
      'id': 214,
      'caption': '''Set screen magnifier type''',
      'tags': [],
      'desc': '''If this policy is set, it controls the type of screen magnifier that is enabled. Setting the policy to "None" disables the screen magnifier.

          If you set this policy, users cannot change or override it.

          If this policy is left unset, the screen magnifier is disabled initially but can be enabled by the user anytime.''',
    },
    {
      'name': 'DeviceLoginScreenDefaultLargeCursorEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:29-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': True,
      'id': 215,
      'caption': '''Set default state of the large cursor on the login screen''',
      'tags': [],
      'desc': '''Set the default state of the large cursor accessibility feature on the login screen.

          If this policy is set to true, the large cursor will be enabled when the login screen is shown.

          If this policy is set to false, the large cursor will be disabled when the login screen is shown.

          If you set this policy, users can temporarily override it by enabling or disabling the large cursor. However, the user's choice is not persistent and the default is restored whenever the login screen is shown anew or the user remains idle on the login screen for a minute.

          If this policy is left unset, the large cursor is disabled when the login screen is first shown. Users can enable or disable the large cursor anytime and its status on the login screen is persisted between users.''',
    },
    {
      'name': 'DeviceLoginScreenDefaultSpokenFeedbackEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:29-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': True,
      'id': 216,
      'caption': '''Set the default state of spoken feedback on the login screen''',
      'tags': [],
      'desc': '''Set the default state of the spoken feedback accessibility feature on the login screen.

          If this policy is set to true, spoken feedback will be enabled when the login screen is shown.

          If this policy is set to false, spoken feedback will be disabled when the login screen is shown.

          If you set this policy, users can temporarily override it by enabling or disabling spoken feedback. However, the user's choice is not persistent and the default is restored whenever the login screen is shown anew or the user remains idle on the login screen for a minute.

          If this policy is left unset, spoken feedback is disabled when the login screen is first shown. Users can enable or disable spoken feedback anytime and its status on the login screen is persisted between users.''',
    },
    {
      'name': 'DeviceLoginScreenDefaultHighContrastEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:29-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': True,
      'id': 217,
      'caption': '''Set the default state of high contrast mode on the login screen''',
      'tags': [],
      'desc': '''Set the default state of the high contrast mode accessibility feature on the login screen.

          If this policy is set to true, high contrast mode will be enabled when the login screen is shown.

          If this policy is set to false, high contrast mode will be disabled when the login screen is shown.

          If you set this policy, users can temporarily override it by enabling or disabling high contrast mode. However, the user's choice is not persistent and the default is restored whenever the login screen is shown anew or the user remains idle on the login screen for a minute.

          If this policy is left unset, high contrast mode is disabled when the login screen is first shown. Users can enable or disable high contrast mode anytime and its status on the login screen is persisted between users.''',
    },
    {
      'name': 'DeviceLoginScreenDefaultVirtualKeyboardEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:34-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': True,
      'id': 256,
      'caption': '''Set default state of the on-screen keyboard on the login screen''',
      'tags': [],
      'desc': '''Set the default state of the on-screen keyboard accessibility feature on the login screen.

          If this policy is set to true, the on-screen keyboard will be enabled when the login screen is shown.

          If this policy is set to false, the on-screen keyboard will be disabled when the login screen is shown.

          If you set this policy, users can temporarily override it by enabling or disabling the on-screen keyboard. However, the user's choice is not persistent and the default is restored whenever the login screen is shown anew or the user remains idle on the login screen for a minute.

          If this policy is left unset, the on-screen keyboard is disabled when the login screen is first shown. Users can enable or disable the on-screen keyboard anytime and its status on the login screen is persisted between users.''',
    },
    {
      'name': 'DeviceLoginScreenDefaultScreenMagnifierType',
      'type': 'int-enum',
      'schema': {
        'type': 'integer',
        'enum': [ 0, 1 ],
      },
      'items': [
        {
          'name': 'None',
          'value': 0,
          'caption': '''Screen magnifier disabled''',
        },
        {
          'name': 'Full-screen',
          'value': 1,
          'caption': '''Full-screen magnifier enabled''',
        },
      ],
      'supported_on': ['chrome_os:29-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': 1,
      'id': 218,
      'caption': '''Set the default screen magnifier type enabled on the login screen''',
      'tags': [],
      'desc': '''Set the default type of screen magnifier that is enabled on the login screen.

          If this policy is set, it controls the type of screen magnifier that is enabled when the login screen is shown. Setting the policy to "None" disables the screen magnifier.

          If you set this policy, users can temporarily override it by enabling or disabling the screen magnifier. However, the user's choice is not persistent and the default is restored whenever the login screen is shown anew or the user remains idle on the login screen for a minute.

          If this policy is left unset, the screen magnifier is disabled when the login screen is first shown. Users can enable or disable the screen magnifier anytime and its status on the login screen is persisted between users.''',
    },
    {
      'name': 'HideWebStoreIcon',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:26-', 'chrome_os:68-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 189,
      'caption': '''Hide the web store from the New Tab Page and app launcher''',
      'tags': [],
      'desc': '''Hide the Chrome Web Store app and footer link from the New Tab Page and <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> app launcher.

      When this policy is set to true, the icons are hidden.

      When this policy is set to false or is not configured, the icons are visible.''',
    },
    {
      'name': 'DeviceStartUpFlags',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome_os:27-65'],
      'device_only': True,
      'features': {
        'dynamic_refresh': False,
      },
      'deprecated': True,
      'example_value': [ "enable-managed-mode", "my-cool-flag" ],
      'id': 191,
      'caption': '''System wide flags to be applied on <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> start-up''',
      'tags': [],
      'desc': '''This policy is deprecated and removed in M66, because it was used only for internal testing and it is a security liability.

      Specifies the flags that should be applied to <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> when it starts. The specified flags are applied on the login screen only. Flags set via this policy do not propagate into user sessions.''',
    },
    {
      'name': 'UptimeLimit',
      'type': 'int',
      'schema': { 'type': 'integer' },
      'supported_on': ['chrome_os:29-'],
      'supported_chrome_os_management': ['google_cloud'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': 86400,
      'id': 192,
      'caption': '''Limit device uptime by automatically rebooting''',
      'tags': [],
      'desc': '''Limit the device uptime by scheduling automatic reboots.

      When this policy is set, it specifies the length of device uptime after which an automatic reboot is scheduled.

      When this policy is not set, the device uptime is not limited.

      If you set this policy, users cannot change or override it.

      An automatic reboot is scheduled at the selected time but may be delayed on the device by up to 24 hours if a user is currently using the device.

      Note: Currently, automatic reboots are only enabled while the login screen is being shown or a kiosk app session is in progress. This will change in the future and the policy will always apply, regardless of whether a session of any particular type is in progress or not.

      The policy value should be specified in seconds. Values are clamped to be at least 3600 (one hour).''',
    },
    {
      'name': 'RebootAfterUpdate',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:29-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': True,
      'id': 193,
      'caption': '''Automatically reboot after update''',
      'tags': [],
      'desc': '''Schedule an automatic reboot after a <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> update has been applied.

      When this policy is set to true, an automatic reboot is scheduled when a <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> update has been applied and a reboot is required to complete the update process. The reboot is scheduled immediately but may be delayed on the device by up to 24 hours if a user is currently using the device.

      When this policy is set to false, no automatic reboot is scheduled after applying a <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> update. The update process is completed when the user next reboots the device.

      If you set this policy, users cannot change or override it.

      Note: Currently, automatic reboots are only enabled while the login screen is being shown or a kiosk app session is in progress. This will change in the future and the policy will always apply, regardless of whether a session of any particular type is in progress or not.''',
    },
    {
      'name': 'VariationsRestrictParameter',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome.*:27-', 'android:34-'],
      'features': {
        'dynamic_refresh': False,
        'per_profile': False,
      },
      'example_value': 'restricted',
      'id': 196,
      'future': True,
      'caption': '''Set the restriction on the fetching of the Variations seed''',
      'tags': [],
      'desc': '''Add a parameter to the fetching of the Variations seed in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.

      If specified, will add a query parameter called 'restrict' to the URL used to fetch the Variations seed. The value of the parameter will be the value specified in this policy.

      If not specified, will not modify the Variations seed URL.''',
    },
    {
      'name': 'DeviceVariationsRestrictParameter',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome_os:28-'],
      'features': {
        'dynamic_refresh': False,
      },
      'device_only': True,
      'example_value': 'restricted',
      'id': 199,
      'future': True,
      'caption': '''Set the restriction on the fetching of the Variations seed''',
      'tags': [],
      'desc': '''Add a parameter to the fetching of the Variations seed in <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph>.

      If specified, will add a query parameter called 'restrict' to the URL used to fetch the Variations seed. The value of the parameter will be the value specified in this policy.

      If not specified, will not modify the Variations seed URL.''',
    },
    {
      'name': 'AttestationEnabledForDevice',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:28-'],
      'supported_chrome_os_management': ['google_cloud'],
      'features': {
        'dynamic_refresh': True,
      },
      'device_only': True,
      'example_value': True,
      'id': 207,
      'caption': '''Enable remote attestation for the device''',
      'tags': [],
      'desc': '''If true, remote attestation is allowed for the device and a certificate will automatically be generated and uploaded to the Device Management Server.

          If it is set to false, or if it is not set, no certificate will be generated and calls to the enterprise.platformKeys extension API will fail.''',
    },
    {
      'name': 'AttestationEnabledForUser',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:28-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 200,
      'caption': '''Enable remote attestation for the user''',
      'tags': [],
      'desc': '''If true, the user can use the hardware on Chrome devices to remote attest its identity to the privacy CA via the <ph name="ENTERPRISE_PLATFORM_KEYS_API">Enterprise Platform Keys API</ph> using <ph name="CHALLENGE_USER_KEY_FUNCTION">chrome.enterprise.platformKeys.challengeUserKey()</ph>.

          If it is set to false, or if it is not set, calls to the API will fail with an error code.''',
    },
    {
      'name': 'AttestationExtensionWhitelist',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome_os:28-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['ghdilpkmfbfdnomkmaiogjhjnggaggoi'],
      'id': 201,
      'caption': '''Extensions allowed to to use the remote attestation API''',
      'tags': [],
      'desc': '''This policy specifies the allowed extensions to use the <ph name="ENTERPRISE_PLATFORM_KEYS_API">Enterprise Platform Keys API</ph> function <ph name="CHALLENGE_USER_KEY_FUNCTION">chrome.enterprise.platformKeys.challengeUserKey()</ph> for remote attestation. Extensions must be added to this list to use the API.

          If an extension is not in the list, or the list is not set, the call to the API will fail with an error code.''',
    },
    {
      'name': 'AttestationForContentProtectionEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:31-'],
      'supported_chrome_os_management': ['google_cloud'],
      'features': {
        'dynamic_refresh': True,
      },
      'device_only': True,
      'example_value': True,
      'id': 239,
      'caption': '''Enable the use of remote attestation for content protection for the device''',
      'tags': [],
      'desc': '''Chrome OS devices can use remote attestation (Verified Access) to get a certificate issued by the Chrome OS CA that asserts the device is eligible to play protected content.  This process involves sending hardware endorsement information to the Chrome OS CA which uniquely identifies the device.

          If this setting is false, the device will not use remote attestation for content protection and the device may be unable to play protected content.

          If this setting is true, or if it is not set, remote attestation may be used for content protection.''',
    },
    {
      'name': 'SuppressChromeFrameTurndownPrompt',
      'caption': '''Suppress the <ph name="PRODUCT_FRAME_NAME">$3<ex>Google Chrome Frame</ex></ph> turndown prompt''',
      'tags': [],
      'desc': '''Suppresses the turndown prompt that appears when a site is rendered by <ph name="PRODUCT_FRAME_NAME">$3<ex>Google Chrome Frame</ex></ph>.''',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_frame:29-32'],
      'features': {
        'dynamic_refresh': False,
      },
      'example_value': True,
      'id': 221,
    },
    {
      'name': 'ContentPackDefaultFilteringBehavior',
      'future': True,
      'deprecated': True,
      'type': 'int-enum',
      'schema': {
        'type': 'integer',
        'enum': [ 0, 1, 2 ],
      },
      'items': [
        {
          'name': 'Allow',
          'value': 0,
          'caption': '''Allow access to sites outside of content packs''',
        },
        {
          'name': 'Warn',
          'value': 1,
          'caption': '''Warn when visiting sites outside of content packs''',
        },
        {
          'name': 'Block',
          'value': 2,
          'caption': '''Block access to sites outside of content packs''',
        },
      ],
      'supported_on': ['chrome.*:28-', 'chrome_os:28-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True
      },
      'example_value': 2,
      'id': 204,
      'caption': '''Default behavior for sites not in any content pack''',
      'tags': [],
      'desc': '''This policy is for internal use by <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> itself.''',
    },
    {
      'name': 'ContentPackManualBehaviorHosts',
      'future': True,
      'deprecated': True,
      'type': 'dict',
      'schema': {
        'type': 'object',
        'additionalProperties': {
          'type': 'boolean'
        }
      },
      'supported_on': ['chrome.*:28-', 'chrome_os:28-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True
      },
      'example_value': {
        'www.example.com': True,
        'moose.org': False
      },
      'id': 205,
      'caption': '''Managed user manual exception hosts''',
      'tags': [],
      'desc': '''A dictionary mapping hostnames to a boolean flag specifying whether access to the host should be allowed (true) or blocked (false).

          This policy is for internal use by <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> itself.''',
    },
    {
      'name': 'ContentPackManualBehaviorURLs',
      'future': True,
      'deprecated': True,
      'type': 'dict',
      'schema': {
        'type': 'object',
        'additionalProperties': {
          'type': 'boolean'
        }
      },
      'supported_on': ['chrome.*:28-', 'chrome_os:28-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True
      },
      'example_value': {
        'https://www.example.com': True,
        'https://moose.org': False
      },
      'id': 206,
      'caption': '''Managed user manual exception URLs''',
      'tags': [],
      'desc': '''A dictionary mapping URLs to a boolean flag specifying whether access to the host should be allowed (true) or blocked (false).

          This policy is for internal use by <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> itself.''',
    },
    {
      'name': 'SupervisedUsersEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:29-'],
      'supported_chrome_os_management': ['google_cloud'],
      'device_only': True,
      'features': {
        'dynamic_refresh': False,
      },
      'example_value': True,
      'default_for_managed_devices_doc_only': False,
      'id': 219,
      'caption': '''Enable supervised users''',
      'tags': [],
      'desc': '''If set to true, supervised users can be created and used.

          If set to false or not configured, supervised-user creation and login will be disabled. All existing supervised users will be hidden.

          NOTE: The default behavior for consumer and enterprise devices differs: on consumer devices supervised users are enabled by default, but on enterprise devices they are disabled by default.'''
    },
    {
      'name': 'SupervisedUserCreationEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:29-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 223,
      'caption': '''Enable creation of supervised users''',
      'tags': [],
      'desc': '''If set to false, supervised-user creation by this user will be disabled. Any existing supervised users will still be available.

          If set to true or not configured, supervised users can be created and managed by this user.'''
    },
    {
      # SupervisedUserContentProviderEnabled is never accessed through the policy framework, but is
      # instead directly accessed as an Android App Restriction (see SupervisedUserContentProvider.java).
      # It, however, needs to be here both because this is the source of the list of Chrome's App
      # Restrictions on Android, and to avoid possible future naming conflicts with policies.
      'name': 'SupervisedUserContentProviderEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['android:49-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile' : True,
      },
      'example_value': True,
      'id': 312,
      'caption': '''Enable the supervised user content provider''',
      'tags': [],
      'desc': '''If true and the user is a supervised user then other Android apps can query the user's web restrictions through a content provider.

          If false or unset then the content provider returns no information.'''
    },
    {
      'name': 'ManagedBookmarks',
      'type': 'dict',
      'schema': {
        'type': 'array',
        'items': {
          'type': 'object',
          'id': 'BookmarkType',
          'properties': {
            'name': { 'type': 'string' },
            'url': { 'type': 'string' },
            'toplevel_name': { 'type': 'string' },
            'children': {
              'type': 'array',
              'items': { '$ref': 'BookmarkType' },
            },
          },
        },
      },
      'supported_on': [
        'android:30-',
        'chrome.*:37-',
        'chrome_os:37-',
      ],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': [
        {
          "toplevel_name": "My managed bookmarks folder"
        }, {
          "name": "Google",
          "url": "google.com"
        }, {
          "name": "Youtube",
          "url": "youtube.com"
        }, {
          "name": "Chrome links",
          "children": [
            {
              "name": "Chromium",
              "url": "chromium.org"
            },
            {
              "name": "Chromium Developers",
              "url": "dev.chromium.org"
            }
          ]
        }
      ],
      'id': 227,
      'caption': '''Managed Bookmarks''',
      'tags': [],
      'desc': '''Configures a list of managed bookmarks.

      The policy consists of a list of bookmarks whereas each bookmark is a dictionary containing the keys "<ph name="NAME">name</ph>" and "<ph name="URL_LABEL">url</ph>" which hold the bookmark's name and its target. A subfolder may be configured by defining a bookmark without an "<ph name="URL_LABEL">url</ph>" key but with an additional "<ph name="CHILDREN">children</ph>" key which itself contains a list of bookmarks as defined above (some of which may be folders again). <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> amends incomplete URLs as if they were submitted via the Omnibox, for example "<ph name="GOOGLE_COM">google.com</ph>" becomes "<ph name="HTTPS_GOOGLE_COM">https://google.com/</ph>".

      These bookmarks are placed in a folder that can't be modified by the user (but the user can choose to hide it from the bookmark bar). By default the folder name is "Managed bookmarks" but it can be customized by adding to the list of bookmarks a dictionary containing the key "<ph name="TOPLEVEL_NAME">toplevel_name</ph>" with the desired folder name as the value.

      Managed bookmarks are not synced to the user account and can't be modified by extensions.''',
    },
    {
      'name': 'DataCompressionProxyEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['android:31-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 241,
      'caption': '''Enable the data compression proxy feature''',
      'tags': [],
      'desc': '''Enable or disable the data compression proxy and prevents users from changing this setting.

      If you enable or disable this setting, users cannot change or override this setting.

      If this policy is left not set, the data compression proxy feature will be available for the user to choose whether to use it or not.''',
    },
    {
      'name': 'UserAvatarImage',
      'type': 'external',
      'schema': {
        'type': 'object',
        'properties': {
          'url': { "type": "string" },
          'hash': { "type": "string" }
        },
      },
      'supported_on': ['chrome_os:34-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': { "url": "https://example.com/avatar.jpg", "hash": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef" },
      'max_size': 524288,
      'id': 249,
      'caption': '''User avatar image''',
      'tags': [],
      'desc': '''This policy allows you to configure the avatar image representing the user on the login screen. The policy is set by specifying the URL from which <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> can download the avatar image and a cryptographic hash used to verify the integrity of the download. The image must be in JPEG format, its size must not exceed 512kB. The URL must be accessible without any authentication.

      The avatar image is downloaded and cached. It will be re-downloaded whenever the URL or the hash changes.

      The policy should be specified as a string that expresses the URL and hash in JSON format, conforming to the following schema:
      {
        "type": "object",
        "properties": {
          "url": {
            "description": "The URL from which the avatar image can be downloaded.",
            "type": "string"
          },
          "hash": {
            "description": "The SHA-256 hash of the avatar image.",
            "type": "string"
          }
        }
      }

      If this policy is set, <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> will download and use the avatar image.

      If you set this policy, users cannot change or override it.

      If the policy is left not set, the user can choose the avatar image representing them on the login screen.''',
    },
    {
      'name': 'WallpaperImage',
      'type': 'external',
      'schema': {
        'type': 'object',
        'properties': {
          'url': { "type": "string" },
          'hash': { "type": "string" }
        },
      },
      'supported_on': ['chrome_os:35-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': { "url": "https://example.com/wallpaper.jpg", "hash": "baddecafbaddecafbaddecafbaddecafbaddecafbaddecafbaddecafbaddecaf" },
      'max_size': 16777216,
      'id': 262,
      'caption': '''Wallpaper image''',
      'tags': [],
      'desc': '''This policy allows you to configure the wallpaper image that is shown on the desktop and on the login screen background for the user. The policy is set by specifying the URL from which <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> can download the wallpaper image and a cryptographic hash used to verify the integrity of the download. The image must be in JPEG format, its file size must not exceed 16MB. The URL must be accessible without any authentication.

      The wallpaper image is downloaded and cached. It will be re-downloaded whenever the URL or the hash changes.

      The policy should be specified as a string that expresses the URL and hash in JSON format, conforming to the following schema:
      {
        "type": "object",
        "properties": {
          "url": {
            "description": "The URL from which the wallpaper image can be downloaded.",
            "type": "string"
          },
          "hash": {
            "description": "The SHA-256 hash of the wallpaper image.",
            "type": "string"
          }
        }
      }

      If this policy is set, <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> will download and use the wallpaper image.

      If you set this policy, users cannot change or override it.

      If the policy is left not set, the user can choose an image to be shown on the desktop and on the login screen background.''',
    },
    {
      'name': 'EnableDeprecatedWebPlatformFeatures',
      'type': 'string-enum-list',
      'schema': {
        'type': 'array',
        'items': {
          'type': 'string',
          'enum': [
            'ExampleDeprecatedFeature_EffectiveUntil20080902'
          ],
        },
      },
      'items': [
        {
          'name': 'ExampleDeprecatedFeature',
          'value': 'ExampleDeprecatedFeature_EffectiveUntil20080902',
          'caption': '''Enable ExampleDeprecatedFeature API through 2008/09/02''',
        }
      ],
      'supported_on': ['chrome.*:37-', 'chrome_os:37-', 'android:37-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['ExampleDeprecatedFeature_EffectiveUntil20080902'],
      'id': 270,
      'caption': '''Enable deprecated web platform features for a limited time''',
      'tags': ['system-security'],
      'desc': '''Specify a list of deprecated web platform features to re-enable temporarily.

      This policy gives administrators the ability to re-enable deprecated web platform features for a limited time. Features are identified by a string tag and the features corresponding to the tags included in the list specified by this policy will get re-enabled.

      If this policy is left not set, or the list is empty or does not match one of the supported string tags, all deprecated web platform features will remain disabled.

      While the policy itself is supported on the above platforms, the feature it is enabling may be available on fewer platforms. Not all deprecated Web Platform features can be re-enabled. Only the ones explicitly listed below can be for a limited period of time, which is different per feature. The general format of the string tag will be [DeprecatedFeatureName]_EffectiveUntil[yyyymmdd]. As reference, you can find the intent behind the Web Platform feature changes at https://bit.ly/blinkintents.
      ''',
    },
    {
      'name': 'DeviceTransferSAMLCookies',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:38-'],
      'supported_chrome_os_management': ['google_cloud'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': True,
      'id': 271,
      'caption': '''Transfer SAML IdP cookies during login''',
      'tags': [],
      'desc': '''Specifies whether authentication cookies set by a SAML IdP during login should be transferred to the user's profile.

      When a user authenticates via a SAML IdP during login, cookies set by the IdP are written to a temporary profile at first. These cookies can be transferred to the user's profile to carry forward the authentication state.

      When this policy is set to true, cookies set by the IdP are transferred to the user's profile every time they authenticate against the SAML IdP during login.

      When this policy is set to false or unset, cookies set by the IdP are transferred to the user's profile during their first login on a device only.

      This policy affects users whose domain matches the device's enrollment domain only. For all other users, cookies set by the IdP are transferred to the user's profile during their first login on the device only.''',
      'arc_support': 'Cookies transferred to the user\'s profile are not accessible to Android apps.',
    },
    {
      'name': 'EasyUnlockAllowed',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:38-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'default_for_enterprise_users': False,
      'id': 272,
      'caption': '''Allow Smart Lock to be used''',
      'tags': [],
      'desc': '''If you enable this setting, users will be allowed to use Smart Lock if the requirements for the feature are satisfied.

      If you disable this setting, users will not be allowed to use Smart Lock.

      If this policy is left not set, the default is not allowed for enterprise-managed users and allowed for non-managed users.''',
    },
    {
      'name': 'SessionLocales',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome_os:38-'],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['de', 'fr'],
      'id': 274,
      'caption': '''Set the recommended locales for a public session''',
      'tags': [],
      'desc': '''Sets one or more recommended locales for a public session, allowing users to easily choose one of these locales.

      The user can choose a locale and a keyboard layout before starting a public session. By default, all locales supported by <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> are listed in alphabetic order. You can use this policy to move a set of recommended locales to the top of the list.

      If this policy is not set, the current UI locale will be pre-selected.

      If this policy is set, the recommended locales will be moved to the top of the list and will be visually separated from all other locales. The recommended locales will be listed in the order in which they appear in the policy. The first recommended locale will be pre-selected.

      If there is more than one recommended locale, it is assumed that users will want to select among these locales. Locale and keyboard layout selection will be prominently offered when starting a public session. Otherwise, it is assumed that most users will want to use the pre-selected locale. Locale and keyboard layout selection will be less prominently offered when starting a public session.

      When this policy is set and automatic login is enabled (see the |DeviceLocalAccountAutoLoginId| and |DeviceLocalAccountAutoLoginDelay| policies), the automatically started public session will use the first recommended locale and the most popular keyboard layout matching this locale.

      The pre-selected keyboard layout will always be the most popular layout matching the pre-selected locale.

      This policy can only be set as recommended. You can use this policy to move a set of recommended locales to the top but users are always allowed to choose any locale supported by <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> for their session.
      ''',
    },
    {
      'name': 'BrowserGuestModeEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:38-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': True,
      'id': 275,
      'caption': '''Enable guest mode in browser''',
      'tags': [],
      'desc': '''If this policy is set to true or not configured, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will enable guest logins. Guest logins are <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> profiles where all windows are in incognito mode.

      If this policy is set to false, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will not allow guest profiles to be started.''',
    },
    {
      'name': 'BrowserAddPersonEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:39-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': True,
      'id': 276,
      'caption': '''Enable add person in user manager''',
      'tags': [],
      'desc': '''If this policy is set to true or not configured, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will allow Add Person from the user manager.

      If this policy is set to false, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will not allow creation of new profiles from the user manager.''',
    },
    {
      'name': 'ForceBrowserSignin',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.win:64-', 'chrome.mac:66-', 'android:65-'],
      'features': {
        'dynamic_refresh': False,
        'per_profile': False,
      },
      'example_value': False,
      'id': 346,
      'caption': '''Enable force sign in for <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>''',
      'tags': [],
      'desc': '''If this policy is set to true, user has to sign in to <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> with their profile before using the browser. And the default value of BrowserGuestModeEnabled will be set to false. Note that existing unsigned profiles will be locked and inaccessible after enabling this policy. For more information, see help center article.

      If this policy is set to false or not configured, user can use the browser without sign in to <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.''',
    },
    {
      'name': 'SSLVersionMin',
      'type': 'string-enum',
      'schema': {
        'type': 'string',
        'enum': [
          'tls1',
          'tls1.1',
          'tls1.2',
        ],
      },
      'items': [
        {
          'name': 'TLSv1',
          'value': 'tls1',
          'caption': 'TLS 1.0',
        },
        {
          'name': 'TLSv1.1',
          'value': 'tls1.1',
          'caption': 'TLS 1.1',
        },
        {
          'name': 'TLSv1.2',
          'value': 'tls1.2',
          'caption': 'TLS 1.2',
        },
      ],
      'supported_on': [
        'chrome.*:66-',
        'chrome_os:66-',
        'android:66-',
      ],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': 'tls1',
      'id': 279,
      'caption': '''Minimum SSL version enabled''',
      'tags': [],
      'desc': '''If this policy is not configured then <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> uses a default minimum version which is TLS 1.0.

      Otherwise it may be set to one of the following values: "tls1", "tls1.1" or "tls1.2". When set, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will not use SSL/TLS versions less than the specified version. An unrecognized value will be ignored.''',
    },
    {
      'name': 'SSLVersionFallbackMin',
      'type': 'string-enum',
      'schema': {
        'type': 'string',
        'enum': [
          'tls1.1',
          'tls1.2',
        ],
      },
      'items': [
        {
          'name': 'TLSv1.1',
          'value': 'tls1.1',
          'caption': 'TLS 1.1',
        },
        {
          'name': 'TLSv1.2',
          'value': 'tls1.2',
          'caption': 'TLS 1.2',
        },
      ],
      'supported_on': [
        'chrome.*:50-52',
        'chrome_os:50-52',
        'android:50-52',
      ],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'deprecated': True,
      'example_value': 'tls1.1',
      'id': 280,
      'caption': '''Minimum TLS version to fallback to''',
      'tags': ['system-security'],
      'desc': '''Warning: The TLS version fallback will be removed from <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> after version 52 (around September 2016) and this policy will stop working then.

      When a TLS handshake fails, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> would previously retry the connection with a lesser version of TLS in order to work around bugs in HTTPS servers. This setting configures the version at which this fallback process will stop. If a server performs version negotiation correctly (i.e. without breaking the connection) then this setting doesn't apply. Regardless, the resulting connection must still comply with SSLVersionMin.

      If this policy is not configured or if it is set to "tls1.2" then <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> no longer performs this fallback. Note this does not disable support for older TLS versions, only whether <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will work around buggy servers which cannot negotiate versions correctly.

      Otherwise, if compatibility with a buggy server must be maintained, this policy may be set to "tls1.1". This is a stopgap measure and the server should be rapidly fixed.''',
    },
    {
      'name': 'SSLVersionMax',
      'type': 'string-enum',
      'schema': {
        'type': 'string',
        'enum': [
          'tls1.2',
          'tls1.3',
        ],
      },
      'items': [
        {
          'name': 'TLSv1.2',
          'value': 'tls1.2',
          'caption': 'TLS 1.2',
        },
        {
          'name': 'TLSv1.3',
          'value': 'tls1.3',
          'caption': 'TLS 1.3',
        },
      ],
      'supported_on': [
        'chrome.*:58-',
        'chrome_os:58-',
        'android:58-',
      ],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': 'tls1.2',
      'id': 361,
      'caption': '''Maximum SSL version enabled''',
      'tags': ['system-security'],
      'desc': '''Warning: The max TLS version policy will be entirely removed from <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> around version 72 (around January 2019).

      If this policy is not configured then <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> uses the default maximum version.

      Otherwise it may be set to one of the following values: "tls1.2" or "tls1.3". When set, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will not use SSL/TLS versions greater than the specified version. An unrecognized value will be ignored.''',
    },
    {
      'name': 'CertificateTransparencyEnforcementDisabledForUrls',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': [
        'chrome.*:53-',
        'chrome_os:53-',
        'android:53-',
      ],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': ['example.com', '.example.com'],
      'id': 335,
      'caption': '''Disable Certificate Transparency enforcement for a list of URLs''',
      'tags': ['system-security'],
      'desc': '''Disables enforcing Certificate Transparency requirements to the listed URLs.

      This policy allows certificates for the hostnames in the specified URLs to not be disclosed via Certificate Transparency. This allows certificates that would otherwise be untrusted, because they were not properly publicly disclosed, to continue to be used, but makes it harder to detect misissued certificates for those hosts.

      A URL pattern is formatted according to https://www.chromium.org/administrators/url-blacklist-filter-format. However, because certificates are valid for a given hostname independent of the scheme, port, or path, only the hostname portion of the URL is considered. Wildcard hosts are not supported.

      If this policy is not set, any certificate that is required to be disclosed via Certificate Transparency will be treated as untrusted if it is not disclosed according to the Certificate Transparency policy.''',
    },
    {
      'name': 'CertificateTransparencyEnforcementDisabledForCas',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': [
        'chrome.*:67-',
        'chrome_os:67-',
        'android:67-',
      ],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['sha256/AAAAAAAAAAAAAAAAAAAAAA==', 'sha256//////////////////////w=='],
      'id': 435,
      'caption': '''Disable Certificate Transparency enforcement for a list of subjectPublicKeyInfo hashes''',
      'tags': ['system-security'],
      'desc': '''Disables enforcing Certificate Transparency requirements for a list of subjectPublicKeyInfo hashes.

      This policy allows disabling Certificate Transparency disclosure requirements for certificate chains that contain certificates with one of the specified subjectPublicKeyInfo hashes. This allows certificates that would otherwise be untrusted, because they were not properly publicly disclosed, to continue to be used for Enterprise hosts.

      In order for Certificate Transparency enforcement to be disabled when this policy is set, one of the following conditions must be met:
      1. The hash is of the server certificate's subjectPublicKeyInfo.
      2. The hash is of a subjectPublicKeyInfo that appears in a CA certificate in the certificate chain, that CA certificate is constrained via the X.509v3 nameConstraints extension, one or more directoryName nameConstraints are present in the permittedSubtrees, and the directoryName contains an organizationName attribute.
      3. The hash is of a subjectPublicKeyInfo that appears in a CA certificate in the certificate chain, the CA certificate has one or more organizationName attributes in the certificate Subject, and the server's certificate contains the same number of organizationName attributes, in the same order, and with byte-for-byte identical values.

      A subjectPublicKeyInfo hash is specified by concatenating the hash algorithm name, the "/" character, and the Base64 encoding of that hash algorithm applied to the DER-encoded subjectPublicKeyInfo of the specified certificate. This Base64 encoding is the same format as an SPKI Fingerprint, as defined in RFC 7469, Section 2.4. Unrecognized hash algorithms are ignored. The only supported hash algorithm at this time is "sha256".

      If this policy is not set, any certificate that is required to be disclosed via Certificate Transparency will be treated as untrusted if it is not disclosed according to the Certificate Transparency policy.''',
    },
    {
      'name': 'CertificateTransparencyEnforcementDisabledForLegacyCas',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': [
        'chrome.*:67-',
        'chrome_os:67-',
        'android:67-',
      ],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['sha256/AAAAAAAAAAAAAAAAAAAAAA==', 'sha256//////////////////////w=='],
      'id': 436,
      'caption': '''Disable Certificate Transparency enforcement for a list of Legacy Certificate Authorities''',
      'tags': ['system-security'],
      'desc': '''Disables enforcing Certificate Transparency requirements for a list of Legacy Certificate Authorities.

      This policy allows disabling Certificate Transparency disclosure requirements for certificate chains that contain certificates with one of the specified subjectPublicKeyInfo hashes. This allows certificates that would otherwise be untrusted, because they were not properly publicly disclosed, to continue to be used for Enterprise hosts.

      In order for Certificate Transparency enforcement to be disabled when this policy is set, the hash must be of a subjectPublicKeyInfo appearing in a CA certificate that is recognized as a Legacy Certificate Authority (CA). A Legacy CA is a CA that has been publicly trusted by default one or more operating systems supported by <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>, but is not trusted by the Android Open Source Project or <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph>.

      A subjectPublicKeyInfo hash is specified by concatenating the hash algorithm name, the "/" character, and the Base64 encoding of that hash algorithm applied to the DER-encoded subjectPublicKeyInfo of the specified certificate. This Base64 encoding is the same format as an SPKI Fingerprint, as defined in RFC 7469, Section 2.4. Unrecognized hash algorithms are ignored. The only supported hash algorithm at this time is "sha256".

      If this policy is not set, any certificate that is required to be disclosed via Certificate Transparency will be treated as untrusted if it is not disclosed according to the Certificate Transparency policy.''',
    },
    {
      'name': 'RC4Enabled',
      'type': 'main',
      'schema': {
        'type': 'boolean',
      },
      'supported_on': [
        'chrome.*:48-52',
        'chrome_os:48-52',
        'android:48-52',
      ],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'deprecated': True,
      'example_value': False,
      'id': 310,
      'caption': '''Whether RC4 cipher suites in TLS are enabled''',
      'tags': ['system-security'],
      'desc': '''Warning: RC4 will be completely removed from <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> after version 52 (around September 2016) and this policy will stop working then.

      If the policy is not set, or is set to false, then RC4 cipher suites in TLS will not be enabled. Otherwise it may be set to true to retain compatibility with an outdated server. This is a stopgap measure and the server should be reconfigured.''',
    },
    {
      'name': 'DHEEnabled',
      'type': 'main',
      'schema': {
        'type': 'boolean',
      },
      'supported_on': [
        'chrome.*:53-57',
        'chrome_os:53-57',
        'android:53-57',
      ],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'deprecated': True,
      'example_value': False,
      'id': 334,
      'caption': '''Whether DHE cipher suites in TLS are enabled''',
      'tags': ['system-security'],
      'desc': '''Warning: DHE will be completely removed from <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> after version 57 (around March 2017) and this policy will stop working then.

      If the policy is not set, or is set to false, then DHE cipher suites in TLS will not be enabled. Otherwise it may be set to true to enable DHE cipher suites and retain compatibility with an outdated server. This is a stopgap measure and the server should be reconfigured.

      Servers are encouraged to migrated to ECDHE cipher suites. If these are unavailable, ensure a cipher suite using RSA key exchange is enabled.''',
    },
    {
      'name': 'ContextualSearchEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': [
        'android:40-',
      ],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 281,
      'caption': '''Enable Tap to Search''',
      'tags': [],
      'desc': '''Enables the availability of Tap to Search in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>'s content view.

      If you enable this setting, Tap to Search will be available to the user and they can choose to turn the feature on or off.

      If you disable this setting, Tap to Search will be disabled completely.

      If this policy is left not set, it is equivalent to being enabled, see description above.''',
    },
    {
      'name': 'DeviceRebootOnShutdown',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:41-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': True,
      'id': 284,
      'caption': '''Automatic reboot on device shutdown''',
      'tags': [],
      'desc': '''If this policy is set to false or not configured, <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> will allow the user to shut down the device.
      If this policy is set to true, <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> will trigger a reboot when the user shuts down the device. <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> replaces all occurrences of shutdown buttons in the UI by reboot buttons. If the user shuts down the device using the power button, it will not automatically reboot, even if the policy is enabled.''',
    },
    {
      'name': 'ExtensionCacheSize',
      'type': 'int',
      'schema': { 'type': 'integer' },
      'supported_on': ['chrome_os:43-'],
      'supported_chrome_os_management': ['google_cloud'],
      'device_only': True,
      'features': {
        'dynamic_refresh': False,
      },
      'example_value': 104857600,
      'id': 296,
      'caption': '''Set Apps and Extensions cache size (in bytes)''',
      'tags': [],
      'desc': '''<ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> caches Apps and Extensions for installation by multiple users of a single device to avoid re-downloading them for each user.
      If this policy is not configured or the value is lower than 1 MB, <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> will use the default cache size.''',
      'arc_support': 'The cache is not used for Android apps. If multiple users install the same Android app, it will be downloaded anew for each user.',
    },
    {
      'name': 'DeviceLoginScreenDomainAutoComplete',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': [ 'chrome_os:44-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': 'students.school.edu',
      'id': 297,
      'caption': '''Enable domain name autocomplete during user sign in''',
      'tags': [],
      'desc': '''If this policy is set to a blank string or not configured, <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> will not show an autocomplete option during user sign-in flow.
      If this policy is set to a string representing a domain name, <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> will show an autocomplete option during user sign-in allowing the user to type in only their user name without the domain name extension.  The user will be able to overwrite this domain name extension.''',
    },
    {
      'name': 'ForceMaximizeOnFirstRun',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:43-'],
      'features': {
        'dynamic_refresh': False,
        'per_profile': True,
      },
      'example_value': True,
      'id': 298,
      'caption': '''Maximize the first browser window on first run''',
      'tags': [],
      'desc': '''If this policy is set to true, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will unconditionally maximize the first window shown on first run.
      If this policy is set to false or not configured, the decision whether to maximize the first window shown will be based on the screen size.''',
    },
    {
      'name': 'SSLErrorOverrideAllowed',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:44-', 'chrome_os:44-', 'android:44-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 300,
      'caption': '''Allow proceeding from the SSL warning page''',
      'tags': [],
      'desc': '''Chrome shows a warning page when users navigate to sites that have SSL errors. By default or when this policy is set to true, users are allowed to click through these warning pages.
      Setting this policy to false disallows users to click through any warning page.''',
    },
    {
      'name': 'QuicAllowed',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:43-', 'chrome_os:43-'],
      'features': {
        'dynamic_refresh': False,
        'per_profile': False,
      },
      'example_value': True,
      'id': 301,
      'caption': '''Allow QUIC protocol''',
      'tags': [],
      'desc': '''If this policy is set to true or not set usage of QUIC protocol in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> is allowed.
      If this policy is set to false usage of QUIC protocol is disallowed.''',
    },
    {
      'name': 'KeyPermissions',
      'type': 'dict',
      'schema': {
        'type': 'object',
        'additionalProperties': {
          'type': 'object',
          'properties': {
            'allowCorporateKeyUsage': {
              'description': '''If set to true, this extension can use all keys that are designated for corporate usage to sign arbitrary data. If set to false, it cannot access any such keys and the user cannot grant such permission either.''',
              'type': 'boolean',
            },
          },
        },
      },
      'supported_on': ['chrome_os:45-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': {
        'extension1': {
          'allowCorporateKeyUsage': True
        },
        'extension2': {
          'allowCorporateKeyUsage': False
        }
      },
      'id': 302,
      'caption': 'Key Permissions',
      'tags': [],
      'desc': '''Grants access to corporate keys to extensions.

      Keys are designated for corporate usage if they're generated using the chrome.enterprise.platformKeys API on a managed account. Keys imported or generated in another way are not designated for corporate usage.

      Access to keys designated for corporate usage is solely controlled by this policy. The user can neither grant nor withdraw access to corporate keys to or from extensions.

      By default an extension cannot use a key designated for corporate usage, which is equivalent to setting allowCorporateKeyUsage to false for that extension.

      Only if allowCorporateKeyUsage is set to true for an extension, it can use any platform key marked for corporate usage to sign arbitrary data. This permission should only be granted if the extension is trusted to secure access to the key against attackers.''',
      'arc_support': 'Android apps cannot get access to corporate keys. This policy has no effect on them.',
    },
    {
      'name': 'WelcomePageOnOSUpgradeEnabled',
      'supported_on': ['chrome.win:45-'],
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'id': 303,
      'caption': 'Enable showing the welcome page on the first browser launch following OS upgrade',
      'tags': [],
      'desc': '''If this policy is set to true or not configured, the browser will re-show the welcome page on the first launch following an OS upgrade.

      If this policy is set to false, the browser will not re-show the welcome page on the first launch following an OS upgrade.''',
      'features': {
        'dynamic_refresh': False,
        'per_profile': False
      },
      'example_value': False
    },
    {
      'name': 'HardwareAccelerationModeEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:46-'],
      'features': {
        'dynamic_refresh': False,
        'per_profile': False,
      },
      'example_value': True,
      'id': 304,
      'caption': '''Use hardware acceleration when available''',
      'tags': [],
      'desc': '''If this policy is set to true or left unset, hardware acceleration will be enabled unless a certain GPU feature is blacklisted.

      If this policy is set to false, hardware acceleration will be disabled.''',
    },
    {
      'name': 'UnifiedDesktopEnabledByDefault',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:47-'],
      'features': {
        'can_be_recommended': False,
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': True,
      'id': 307,
      'caption': '''Make Unified Desktop available and turn on by default''',
      'tags': [],
      'desc': '''If this policy is set to true, Unified Desktop is allowed and
      enabled by default, which allows applications to span multiple displays.
      The user may disable Unified Desktop for individual displays by unchecking
      it in the display settings.

      If this policy is set to false or unset, Unified Desktop will be
      disabled. In this case, the user cannot enable the feature.''',
    },
    {
      'name': 'DisplayRotationDefault',
      'type': 'int-enum',
      'schema': {
        'type': 'integer',
        'enum': [ 0, 1, 2, 3 ],
      },
      'items': [
        {
          'name': 'ROTATE_0',
          'value': 0,
          'caption': '''Rotate screen by 0 degrees''',
        },
        {
          'name': 'ROTATE_90',
          'value': 1,
          'caption': '''Rotate screen clockwise by 90 degrees''',
        },
        {
          'name': 'ROTATE_180',
          'value': 2,
          'caption': '''Rotate screen by 180 degrees''',
        },
        {
          'name': 'ROTATE_270',
          'value': 3,
          'caption': '''Rotate screen clockwise by 270 degrees''',
        },
      ],
      'supported_on': ['chrome_os:48-'],
      'device_only': True,
      'features': {
        'can_be_recommended': False,
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': 1,
      'id': 311,
      'caption': '''Set default display rotation, reapplied on every reboot''',
      'tags': [],
      'desc': '''If this policy is set, each display is rotated to the
      specified orientation on every reboot, and the first time it is connected
      after the policy value has changed. Users may change the display
      rotation via the settings page after logging in, but their
      setting will be overridden by the policy value at the next reboot.

      This policy applies to both the primary and all secondary displays.

      If the policy is not set, the default value is 0 degrees and the user is
      free to change it. In this case, the default value is not reapplied at
      restart.''',
    },
    {
      'name': 'ArcEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:50-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': False,
      'id': 317,
      'default_for_enterprise_users': False,
      'caption': '''Enable ARC''',
      'tags': [],
      'desc':
      '''When this policy is set to true, ARC will be enabled for the user
      (subject to additional policy settings checks - ARC will still be
      unavailable if either ephemeral mode or multiple sign-in is enabled
      in the current user session).

      If this setting is disabled or not configured then enterprise users are
      unable to use ARC.''',
    },
    {
      'name': 'ArcPolicy',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome_os:50-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': '{"applications":[{"packageName":"com.google.android.gm","installType":"FORCE_INSTALLED"},{"packageName":"com.google.android.apps.docs","installType":"PRELOAD"}]}',
      'id': 318,
      'caption': '''Configure ARC''',
      'tags': [],
      'desc':
      '''Specifies a set of policies that will be handed over to the ARC runtime. The value must be valid JSON.

      This policy can be used to configure which Android apps are automatically installed on the device:

      {
        "type": "object",
        "properties": {
          "applications": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "packageName": {
                  "description": "Android app identifier, e.g. \"com.google.android.gm\" for Gmail",
                  "type": "string"
                },
                "installType": {
                  "description": "Specifies how an app is installed. OPTIONAL: The app is not installed automatically, but the user can install it. This is the default if this policy is not specified. PRELOAD: The app is installed automatically, but the user can uninstall it. FORCE_INSTALLED: The app is installed automatically and the user cannot uninstall it. BLOCKED: The app is blocked and cannot be installed. If the app was installed under a previous policy it will be uninstalled.",
                  "type": "string",
                  "enum": [
                    "OPTIONAL",
                    "PRELOAD",
                    "FORCE_INSTALLED",
                    "BLOCKED"
                  ]
                },
                "defaultPermissionPolicy": {
                  "description": "Policy for granting permission requests to apps. PERMISSION_POLICY_UNSPECIFIED: Policy not specified. If no policy is specified for a permission at any level, then the `PROMPT` behavior is used by default. PROMPT: Prompt the user to grant a permission. GRANT: Automatically grant a permission. DENY: Automatically deny a permission.",
                  "type": "string",
                  "enum": [
                    "PERMISSION_POLICY_UNSPECIFIED",
                    "PROMPT",
                    "GRANT",
                    "DENY"
                  ]
                },
                "managedConfiguration": {
                  "description": "App-specific JSON configuration object with a set of key-value pairs, e.g. '\"managedConfiguration\": { \"key1\": value1, \"key2\": value2 }'. The keys are defined in the app manifest.",
                  "type": "object"
                }
              }
            }
          }
        }
      }

      To pin apps to the launcher, see PinnedLauncherApps.'''
    },
    {
      'name': 'AllowKioskAppControlChromeVersion',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:51-'],
      'supported_chrome_os_management': ['google_cloud'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': True,
      'id': 319,
      'caption': '''Allow the auto launched with zero delay kiosk app to control <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> version''',
      'tags': ['system-security'],
      'desc': '''Whether to allow the auto launched with zero delay kiosk app to control <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> version.

      This policy controls whether to allow the auto launched with zero delay kiosk app to control <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> version by declaring a required_platform_version in its manifest and use it as the auto update target version prefix.

      If the policy is set to true, the value of required_platform_version manifest key of the auto launched with zero delay kiosk app is used as auto update target version prefix.

      If the policy is not configured or set to false, the required_platform_version manifest key is ignored and auto update proceeds as normal.

      Warning: It is not recommended to delegate control of the <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> version to a kiosk app as it may prevent the device from receiving software updates and critical security fixes. Delegating control of the <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> version might leave users at risk.''',
      'arc_support': 'If the kiosk app is an Android app, it will have no control over the <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> version, even if this policy is set to <ph name="TRUE">True</ph>.',
    },
    {
      'name': 'LoginAuthenticationBehavior',
      'type': 'int-enum',
      'schema': {
        'type': 'integer',
        'enum': [ 0, 1, 2 ],
      },
      'items': [
        {
          'name': 'GAIA',
          'value': 0,
          'caption': '''Authentication via the default GAIA flow''',
        },
        {
          'name': 'SAML_INTERSTITIAL',
          'value': 1,
          'caption': '''Redirect to SAML IdP after user confirmation''',
        },
      ],
      'supported_on': ['chrome_os:51-'],
      'supported_chrome_os_management': ['google_cloud'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': 0,
      'id': 321,
      'caption': '''Configure the login authentication behavior''',
      'tags': [],
      'desc': '''When this policy is set, the login authentication flow will be in one of the following ways depending on the value of the setting:

      If set to GAIA, login will be done via the normal GAIA authentication flow.

      If set to SAML_INTERSTITIAL, login will show an interstitial screen offering the user to go forward with authentication via the SAML IdP of the device's enrollment domain, or go back to the normal GAIA login flow.'''
    },
    {
      'name': 'UsbDetachableWhitelist',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': {
          'type': 'object',
          'id': 'UsbDeviceId',
          'properties': {
            'vendor_id': { 'type': 'integer' },
            'product_id': { 'type': 'integer' },
          },
        },
      },
      'supported_on': ['chrome_os:51-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': False,
      },
      'example_value': [
        {
          'vendor_id' : 1027,
          'product_id' : 24577,
        },
        {
          'vendor_id' : 16700,
          'product_id' : 8453,
        }
      ],
      'id': 322,
      'caption': '''Whitelist of USB detachable devices''',
      'tags': ['system-security'],
      'desc': '''Defines the list of USB devices that are allowed to be detached from their kernel driver in order to be used through the chrome.usb API directly inside a web application. Entries are pairs of USB Vendor Identifier and Product Identifier to identify a specific hardware.

      If this policy is not configured, the list of a detachable USB devices is empty.''',
    },
    {
      'name': 'DeviceAllowBluetooth',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:52-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': False,
      },
      'example_value': True,
      'id': 323,
      'caption': '''Allow bluetooth on device''',
      'tags': [],
      'desc': '''If this policy is set to false, <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> will disable Bluetooth and the user cannot enable it back.

      If this policy is set to true or left unset, the user will be able to enable or disable Bluetooth as they wish.

      If this policy is set, the user cannot change or override it.

      After enabling Bluetooth, the user must log out and log back in for the changes to take effect (no need for this when disabling Bluetooth).''',
    },
    {
      'name': 'SuppressUnsupportedOSWarning',
      'caption': '''Suppress the unsupported OS warning''',
      'desc': '''Suppresses the warning that appears when <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> is running on a computer or operating system that is no longer supported.''',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:49-','chrome_os:49-'],
      'features': {
        'dynamic_refresh': False,
        'per_profile': False,
      },
      'example_value': True,
      'tags': ['system-security'],
      'id': 324,
    },
    {
      'name': 'DeviceQuirksDownloadEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:51-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': True,
      'id': 325,
      'caption': '''Enable queries to Quirks Server for hardware profiles''',
      'tags': [],
      'desc':
      '''The Quirks Server provides hardware-specific configuration files, like
      ICC display profiles to adjust monitor calibration.

      When this policy is set to false, the device will not attempt to
      contact the Quirks Server to download configuration files.

      If this policy is true or not configured then <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> will automatically contact the Quirks Server and download configuration files, if available, and store them on the device.  Such files might, for example, be used to improve display quality of attached monitors.''',
    },
    {
      'name': 'SystemTimezoneAutomaticDetection',
      'type': 'int-enum',
      'schema': {
        'type': 'integer',
        'enum': [ 0, 1, 2, 3, 4 ],
      },
      'items': [
        {
          'name': 'TimezoneAutomaticDetectionUsersDecide',
          'value': 0,
          'caption': '''Let users decide''',
        },
        {
          'name': 'TimezoneAutomaticDetectionDisabled',
          'value': 1,
          'caption': '''Never auto-detect timezone''',
        },
        {
          'name': 'TimezoneAutomaticDetectionIPOnly',
          'value': 2,
          'caption': '''Always use coarse timezone detection''',
        },
        {
          'name': 'TimezoneAutomaticDetectionSendWiFiAccessPoints',
          'value': 3,
          'caption': '''Always send WiFi access-points to server while resolving timezone''',
        },
        {
          'name': 'TimezoneAutomaticDetectionSendAllLocationInfo',
          'value': 4,
          'caption': '''Always send any available location signals to the server while resolving timezone''',
        },
      ],
      'supported_on': ['chrome_os:53-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': 0,
      'id': 326,
      'caption': '''Configure the automatic timezone detection method''',
      'tags': ['google-sharing'],
      'desc': '''When this policy is set, automatic timezone detection flow will be in one of the following ways depending on the value of the setting:

      If set to TimezoneAutomaticDetectionUsersDecide, users would be able to control automatic timezone detection using normal controls in chrome://settings.

      If set to TimezoneAutomaticDetectionDisabled, automatic timezone controls in chrome://settings will be disabled. Automatic timezone detection will be always off.

      If set to TimezoneAutomaticDetectionIPOnly, timezone controls in chrome://settings will be disabled. Automatic timezone detection will be always on. Timezone detection will use IP-only method to resolve location.

      If set to TimezoneAutomaticDetectionSendWiFiAccessPoints, timezone controls in chrome://settings will be disabled. Automatic timezone detection will be always on. The list of visible WiFi access-points will be always sent to Geolocation API server for fine-grained timezone detection.

      If set to TimezoneAutomaticDetectionSendAllLocationInfo, timezone controls in chrome://settings will be disabled. Automatic timezone detection will be always on. Location information (such as WiFi access-points, reachable Cell Towers, GPS) will be sent to a server for fine-grained timezone detection.

      If this policy is not set, it will behave as if TimezoneAutomaticDetectionUsersDecide is set.

      If SystemTimezone policy is set, it overrides this policy. In this case automatic timezone detection is completely disabled.''',
    },
    {
      'name': 'TaskManagerEndProcessEnabled',
      'caption': '''Enable ending processes in Task Manager''',
      'desc': '''If set to false, the 'End process' button is disabled in the Task Manager.

      If set to true or not configured, the user can end processes in the Task Manager.''',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:52-','chrome_os:52-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': True,
      'tags': [],
      'id': 327,
    },
    {
      'name': 'NetworkThrottlingEnabled',
      'device_only': True,
      'caption': '''Enable throttling network bandwidth''',
      'desc': '''Allows enabling or disabling network throttling.
      This applies to all users, and to all interfaces on the device. Once set,
      the throttling persists until the policy is changed to disable it.

      If set to false, there is no throttling.
      If set to true, the system is throttled to achieve the provided upload and download rates (in kbits/s).''',
      'type': 'dict',
      'schema': {
        'type': 'object',
        'properties': {
          'enabled': {
            'description': 'A boolean flag indicating if throttling is enabled.',
            'type': 'boolean'
          },
          'upload_rate_kbits': {
            'description': 'Desired upload rate in kbits/s.',
            'type': 'integer'
          },
          'download_rate_kbits': {
            'description': 'Desired download rate in kbits/s.',
            'type': 'integer'
          }
        },
        'required': ['enabled', 'upload_rate_kbits', 'download_rate_kbits']
      },
      'supported_on': ['chrome_os:56-'],
      'supported_chrome_os_management': ['google_cloud'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': {'enabled': True, 'upload_rate_kbits': 5600, 'download_rate_kbits': 5600},
      'tags': [],
      'id': 351,
    },
    {
      'name': 'LoginVideoCaptureAllowedUrls',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome_os:52-'],
      'supported_chrome_os_management': ['google_cloud'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': [ "https://example.com" ],
      'id': 328,
      'caption': '''URLs that will be granted access to video capture devices on SAML login pages''',
      'tags': ['website-sharing'],
      'desc': '''Patterns in this list will be matched against the security
      origin of the requesting URL.  If a match is found, access to video
      capture devices will be granted on SAML login pages.  If no match is
      found, access will be automatically denied.  Wildcard patterns are not
      allowed.'''
    },
    {
      'name': 'DeviceLoginScreenAppInstallList',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome_os:60-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': ['gbchcmhmhahfdphkhkmpfmihenigjmpp;https://clients2.google.com/service/update2/crx'],
      'id': 336,
      'caption': '''Configure the list of installed apps on the login screen''',
      'tags': ['full-admin-access'],
      'desc': '''
      Specifies a list of apps that are installed silently on the login screen,
      without user interaction, and which cannot be uninstalled.
      All permissions requested by the apps are granted
      implicitly, without user interaction, including any additional
      permissions requested by future versions of the app.

      Note that, for security and privacy reasons, extensions are not allowed to be installed using this policy. Moreover, the devices on the Stable channel will only install the apps that belong to the whitelist bundled into <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>. Any items that don't conform to these conditions will be ignored.

      If an app that previously had been force-installed is removed from this list, it is automatically uninstalled by <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.

      Each list item of the policy is a string that contains an extension ID and an "update" URL separated by a semicolon (<ph name="SEMICOLON">;</ph>). The extension ID is the 32-letter string found e.g. on <ph name="CHROME_EXTENSIONS_LINK">chrome://extensions</ph> when in developer mode. The "update" URL should point to an Update Manifest XML document as described at <ph name="LINK_TO_EXTENSION_DOC1">https://developer.chrome.com/extensions/autoupdate</ph>. Note that the "update" URL set in this policy is only used for the initial installation; subsequent updates of the extension employ the update URL indicated in the extension's manifest.

      For example, <ph name="EXTENSION_POLICY_EXAMPLE">gbchcmhmhahfdphkhkmpfmihenigjmpp;https://clients2.google.com/service/update2/crx</ph> installs the <ph name="EXTENSION_POLICY_EXAMPLE_EXTENSION_NAME">Chrome Remote Desktop</ph> app from the standard Chrome Web Store "update" URL. For more information about hosting extensions, see: <ph name="LINK_TO_EXTENSION_DOC2">https://developer.chrome.com/extensions/hosting</ph>.''',
    },
    {
      'name': 'AllowScreenLock',
      'caption': '''Permit locking the screen''',
      'desc': '''If this policy is set to false, users will not be able to lock the screen (only signing out from the user session will be possible). If this setting is set to true or not set, users who authenticated with a password can lock the screen.''',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:52-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': False,
      'tags': [],
      'id': 329,
    },
    {
      'name': 'ArcCertificatesSyncMode',
      'type': 'int-enum',
      'schema': {
        'type': 'integer',
        'enum': [ 0, 1 ],
      },
      'items': [
        {
          'name': 'SyncDisabled',
          'value': 0,
          'caption': '''Disable usage of <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> certificates to ARC-apps''',
        },
        {
          'name': 'CopyCaCerts',
          'value': 1,
          'caption': '''Enable <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> CA certificates to ARC-apps'''
        },
      ],
      'supported_on': ['chrome_os:52-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': 0,
      'id': 330,
      'caption': '''Set certificate availability for ARC-apps''',
      'tags': ['system-security'],
      'desc': '''If set to SyncDisabled or not configured, <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> certificates are not available for ARC-apps.

      If set to CopyCaCerts, all ONC-installed CA certificates with <ph name="WEB_TRUSTED_BIT">Web TrustBit</ph> are available for ARC-apps.''',
    },
    {
      'name': 'AllowedDomainsForApps',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome.*:51-', 'chrome_os:51-', 'android:51-'],
      'features': {
        'can_be_recommended': False,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 'managedchrome.com,example.com',
      'id': 331,
      'caption': '''Define domains allowed to access G Suite''',
      'tags': ['filtering'],
      'desc': '''Enables <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>'s restricted log in feature in G Suite and prevents users from changing this setting.

      If you define this setting, the user will only be able to access Google
      Apps using accounts from the specified domains (note that this does not
      work for gmail.com/googlemail.com).

      This setting will NOT prevent the user from loging in on a managed device
      that requires Google authentication. The user will still be allowed to
      sign in to accounts from other domains, but they will receive an error
      when trying to use G Suite with those accounts.

      If you leave this setting empty/not-configured, the user will be able to
      access G Suite with any account.

      This policy causes the X-GoogApps-Allowed-Domains header to be appended to
      all HTTP and HTTPS requests to all google.com domains, as described in
      https://support.google.com/a/answer/1668854.

      Users cannot change or override this setting.''',
    },
    {
      'name': 'PacHttpsUrlStrippingEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': [ 'chrome.*:52-', 'chrome_os:52-' ],
      'features': {
        'dynamic_refresh': False,
        'per_profile': False,
      },
      'example_value': False,
      'id': 332,
      'default_for_enterprise_users': False,
      'caption': '''Enable PAC URL stripping (for https://)''',
      'tags': ['system-security'],
      'desc': '''Strips privacy and security sensitive parts of https:// URLs before passing them on to PAC scripts (Proxy Auto Config) used by <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> during proxy resolution.

      When True, the security feature is enabled, and https:// URLs are
      stripped before submitting them to a PAC script. In this manner the PAC
      script is not able to view data that is ordinarily protected by an
      encrypted channel (such as the URL's path and query).

      When False, the security feature is disabled, and PAC scripts are
      implicitly granted the ability to view all components of an https://
      URL. This applies to all PAC scripts regardless of origin (including
      those fetched over an insecure transport, or discovered insecurely
      through WPAD).

      This defaults to True (security feature enabled), except for Chrome OS
      enterprise users for which this currently defaults to False.

      It is recommended that this be set to True. The only reason to set it to
      False is if it causes a compatibility problem with existing PAC scripts.

      The desire is to remove this override in the future.''',
    },
    {
      'name': 'EnableMediaRouter',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:52-', 'chrome_os:52-', 'android:52-'],
      'features': {
        'dynamic_refresh': False,
        'per_profile': True,
      },
      'example_value': True,
      'id': 333,
      'caption': '''Enable <ph name="PRODUCT_NAME">Google Cast</ph>''',
      'tags': [],
      'desc': '''If this policy is set to true or is not set, <ph name="PRODUCT_NAME">Google Cast</ph> will be enabled, and users will be able to launch it from the app menu, page context menus, media controls on Cast-enabled websites, and (if shown) the Cast toolbar icon.

          If this policy set to false, <ph name="PRODUCT_NAME">Google Cast</ph> will be disabled.'''
    },
    {
      'name': 'ShowCastIconInToolbar',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:58-', 'chrome_os:58-'],
      'features': {
        'dynamic_refresh': False,
        'per_profile': True,
      },
      'example_value': False,
      'id': 362,
      'caption': '''Show the <ph name="PRODUCT_NAME">Google Cast</ph> toolbar icon''',
      'tags': [],
      'desc': '''If this policy is set to true, the Cast toolbar icon will always be shown on the toolbar or the overflow menu, and users will not be able to remove it.

          If this policy is set to false or is not set, users will be able to pin or remove the icon via its contextual menu.

          If the policy "EnableMediaRouter" is set to false, then this policy's value would have no effect, and the toolbar icon would not be shown.'''
    },
    {
      'name': 'MediaRouterCastAllowAllIPs',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:67-', 'chrome_os:67-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': False,
      'id': 437,
      'caption': '''Allow <ph name="PRODUCT_NAME">Google Cast</ph> to connect to Cast devices on all IP addresses.''',
      'tags': [],
      'desc': '''If this policy is set to true, <ph name="PRODUCT_NAME">Google Cast</ph> will connect to Cast devices on all IP addresses, not just RFC1918/RFC4193 private addresses.

          If this policy is set to false, <ph name="PRODUCT_NAME">Google Cast</ph> will connect to Cast devices on RFC1918/RFC4193 private addresses only.

          If this policy is not set, <ph name="PRODUCT_NAME">Google Cast</ph> will connect to Cast devices on RFC1918/RFC4193 private addresses only, unless the CastAllowAllIPs feature is enabled.

          If the policy "EnableMediaRouter" is set to false, then this policy's value would have no effect.'''
    },
    {
      'name': 'ArcBackupRestoreEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:53-67'],
      'features': {
        'dynamic_refresh': False,
        'per_profile': False,
      },
      'example_value': False,
      'id': 337,
      'caption': '''Enable Android Backup Service''',
      'tags': ['google-sharing'],
      'desc':
      '''This policy was removed in <ph name="PRODUCT_NAME">$2<ex>Google Chrome OS</ex></ph> 68 and replaced by <ph name="ARC_BR_POLICY_NAME">ArcBackupRestoreServiceEnabled</ph>.''',
    },
    {
      'name': 'ArcLocationServiceEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:57-67'],
      'features': {
        'dynamic_refresh': False,
        'per_profile': False,
      },
      'example_value': False,
      'id': 363,
      'caption': '''Enable Android Google Location Service''',
      'tags': ['google-sharing'],
      'desc':
      '''This policy was removed in <ph name="PRODUCT_NAME">$2<ex>Google Chrome OS</ex></ph> 68 and replaced by <ph name="ARC_GLS_POLICY_NAME">ArcGoogleLocationServicesEnabled</ph>.''',
    },
    {
      'name': 'NTPContentSuggestionsEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['android:54-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 338,
      'default_for_enterprise_users': False,
      'caption': '''Show content suggestions on the New Tab page''',
      'tags': [],
      'desc':
      '''If this is set to true or not set, the New Tab page may show content suggestions based on the user's browsing history, interests, or location.

      If this is set to false, automatically-generated content suggestions are not shown on the New Tab page.''',
    },
    {
      'name': 'WebRtcUdpPortRange',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome.*:54-', 'chrome_os:54-', 'android:54-'],
      'features': {
        'dynamic_refresh': False,
        'per_profile': True,
      },
      'example_value': '10000-11999',
      'id': 339,
      'caption': '''Restrict the range of local UDP ports used by WebRTC''',
      'tags': [],
      'desc': '''If the policy is set, the UDP port range used by WebRTC is restricted to the specified port interval (endpoints included).

      If the policy is not set, or if it is set to the empty string or an invalid port range, WebRTC is allowed to use any available local UDP port.''',
    },
    {
      'name': 'WebRestrictionsAuthority',
      'id': 341,
      'type': 'string',
      'schema' : { 'type': 'string' },
      'tags': ['filtering', 'admin-sharing'],
      'supported_on': ['webview_android:54-'],
      'future': True,
      'caption': '''Set an external source of URL restrictions''',
      'desc' : '''When this policy is set to a non-empty string the WebView will read URL restrictions from the content provider with the given authority name.''',
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': 'com.android.chrome.SupervisedUserProvider'
    },
    {
      'name': 'ComponentUpdatesEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:54-', 'chrome_os:54-'],
      'features': {
        'dynamic_refresh': False,
        'per_profile': False,
      },
      'example_value': True,
      'id': 342,
      'caption': '''Enable component updates in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>''',
      'tags': [],
      'desc': '''Enables component updates for all components in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> when not set or set to True.

      If set to False, updates to components are disabled. However, some components are exempt from this policy: updates to any component that does not contain executable code, or does not significantly alter the behavior of the browser, or is critical for its security will not be disabled.
      Examples of such components include the certificate revocation lists and Safe Browsing data.
      See https://developers.google.com/safe-browsing for more info on Safe Browsing.''',
    },
    {
      'name': 'NativePrinters',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'validation_schema': {
        'type': 'array',
        'items': {
          'type': 'object',
          'id': 'PrinterType',
          'properties': {
            'display_name': { 'type': 'string' },
            'description': { 'type': 'string' },
            'manufacturer': { 'type': 'string' },
            'model': { 'type': 'string' },
            'uri': { 'type': 'string' },
            'uuid': { 'type': 'string' },
            'ppd_resource': {
              'type': 'object',
              'id': 'PpdResource',
              'properties': {
                'effective_model': { 'type': 'string' }
              }
            }
          }
        }
      },
      'supported_on': [ 'chrome_os:57-' ],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      # example_value is split onto multiple lines here for readability, but the
      # 'type': 'list' above means that each element has to fit inside a single-
      # line textbox in the GPO UI - so the example string is a single line.
      'example_value': [
        '{ '
        '"display_name": "Color Laser", '
        '"description": "The printer next to the water cooler.", '
        '"manufacturer": "Printer Manufacturer", '
        '"model": "Color Laser 2004", '
        '"uri": "ipps://print-server.intranet.example.com:443/ipp/cl2k4", '
        '"uuid": "1c395fdb-5d93-4904-b246-b2c046e79d12", '
        '"ppd_resource": { "effective_model": "Printer Manufacturer ColorLaser2k4" } '
        '}'
      ],
      'id': 350,
      'caption': '''Native Printing''',
      'tags': [],
      'desc': '''Configures a list of printers.

      This policy allows administrators to provide printer configurations for
      their users.

      <ph name="PRINTER_DISPLAY_NAME">display_name</ph> and <ph name="PRINTER_DESCRIPTION">description</ph> are free-form strings that can be customized for ease of printer selection. <ph name="PRINTER_MANUFACTURER">manufacturer</ph> and <ph name="PRINTER_MODEL">model</ph> serve to ease printer identification by end users. They represent the manufacturer and model of the printer. <ph name="PRINTER_URI">uri</ph> should be an address reachable from a client computer including the <ph name="URI_SCHEME">scheme</ph>, <ph name="URI_PORT">port</ph>, and <ph name="URI_QUEUE">queue</ph>. <ph name="PRINTER_UUID">uuid</ph> is optional. If provided, it is used to help deduplicate <ph name="ZEROCONF_DISCOVERY">zeroconf</ph> printers.

      <ph name="PRINTER_EFFECTIVE_MODEL">effective_model</ph> must match one of the strings which represent a <ph name="PRODUCT_NAME">$2<ex>Google Chrome OS</ex></ph> supported printer. The string will be used to identify and install the appropriate PPD for the printer. More information can be found at https://support.google.com/chrome?p=noncloudprint.

      Printer setup is completed upon the first use of a printer.  PPDs are not downloaded until the printer is used.  After that time, frequently used PPDs are cached.

      This policy has no effect on whether users can configure printers on individual devices.  It is intended to be supplementary to the configuration of printers by individual users.

      For Active Directory managed devices this policy supports expansion of <ph name="MACHINE_NAME_VARIABLE">${machine_name[,pos[,count]]}</ph> to the Active Directory machine name or a substring of it. For example, if the machine name is <ph name="MACHINE_NAME_EXAMPLE">CHROMEBOOK</ph>, then <ph name="MACHINE_NAME_VARIABLE_EXAMPLE">${machine_name,6,4}</ph> would be replaced by the 4 characters starting after the 6th position, i.e. <ph name="MACHINE_NAME_PART_EXAMPLE">BOOK</ph>. Note that the position is zero-based.
      ''',
    },
    {
      'name': 'NativePrintersBulkConfiguration',
      'id': 382,
      'type': 'external',
      'schema': {
        'type': 'object',
        'properties': {
          'url': { 'type': 'string' },
          'hash': { 'type': 'string' }
        },
      },
      'supported_on': ['chrome_os:65-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': {
        "url": "https://example.com/printerpolicy",
        "hash": "deadbeefdeadbeefdeadbeefdeadbeefdeafdeadbeefdeadbeef"
      },
      'max_size': 5242880,
      'caption': '''Enterprise printer configuration file''',
      'tags': [],
      'desc': '''Provides configurations for enterprise printers.

      This policy allows you to provide printer configurations to <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> devices.  The format is the same as the NativePrinters dictionary, with an additional required "id" or "guid" field per printer for whitelisting or blacklisting.

      The size of the file must not exceed 5MB and must be encoded in JSON.  It is estimated that a file containing approximately 21,000 printers will encode as a 5MB file.  The cryptographic hash is used to verify the integrity of the download.

      The file is downloaded and cached. It will be re-downloaded whenever the URL or the hash changes.

      If this policy is set, <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> will download the file for printer configurations and make printers available in accordance with <ph name="BULK_PRINTERS_ACCESS_MODE">NativePrintersBulkAccessMode</ph>, <ph name="BULK_PRINTERS_WHITELIST">NativePrintersBulkWhitelist</ph>, and <ph name="BULK_PRINTERS_BLACKLIST">NativePrintersBulkBlacklist</ph>.

      If you set this policy, users cannot change or override it.

      This policy has no effect on whether users can configure printers on individual devices.  It is intended to be supplementary to the configuration of printers by individual users.
      ''',
    },
    {
      'name': 'NativePrintersBulkAccessMode',
      'id': 383,
      'supported_on': ['chrome_os:65-'],
      'type': 'int-enum',
      'schema': {
        'type': 'integer',
        'enum': [ 0, 1, 2 ],
      },
      'items': [
        {
          'name': 'BlacklistRestriction',
          'value': 0,
          'caption': '''All printers are shown except those in the blacklist.''',
        },
        {
          'name': 'WhitelistPrintersOnly',
          'value': 1,
          'caption': '''Only printers in the whitelist are shown to users''',
        },
        {
          'name': 'AllowAll',
          'value': 2,
          'caption': '''Allow all printers from the configuration file.''',
        },
      ],
      'features' : {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 1,
      'caption': '''Printer configuration access policy.''',
      'tags': [],
      'desc': '''Controls which printers from the <ph name="BULK_PRINTERS_POLICY">NativePrintersBulkConfiguration</ph> are available to users.

      Designates which access policy is used for bulk printer configuration. If <ph name="PRINTERS_ALLOW_ALL">AllowAll</ph> is selected, all printers are shown. If <ph name="PRINTERS_BLACKLIST">BlacklistRestriction</ph> is selected, <ph name="BULK_PRINTERS_BLACKLIST">NativePrintersBulkBlacklist</ph> is used to restrict access to the specified printers.  If <ph name="PRINTERS_WHITELIST">WhitelistPrintersOnly</ph> is selected, <ph name="BULK_PRINTERS_WHITELIST">NativePrintersBulkWhitelist</ph> designates only those printers which are selectable.

      If this policy is not set, <ph name="PRINTERS_ALLOW_ALL">AllowAll</ph> is assumed.
      ''',
    },
    {
      'name': 'NativePrintersBulkBlacklist',
      'supported_on': ['chrome_os:65-'],
      'id': 384,
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value':  ["id1", "id2", "id3"],
      'caption': '''Disabled enterprise printers''',
      'tags': [],
      'desc': '''Specifies the printers which a user cannot use.

      This policy is only used if <ph name="PRINTERS_BLACKLIST">BlacklistRestriction</ph> is chosen for <ph name="BULK_PRINTERS_ACCESS_MODE">NativePrintersBulkAccessMode</ph>.

      If this policy is used, all printers are provided to the user except for the ids listed in this policy. The ids must correspond to the "id" or "guid" fields in the file specified in <ph name="BULK_PRINTERS_POLICY">NativePrintersBulkConfiguration</ph>.
      ''',
    },
    {
      'name': 'NativePrintersBulkWhitelist',
      'supported_on': ['chrome_os:65-'],
      'id': 385,
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value':  ["id1", "id2", "id3"],
      'caption': '''Enabled enterprise printers''',
      'tags': [],
      'desc': '''Specifies the printers which a user can use.

      This policy is only used if <ph name="PRINTERS_WHITELIST">WhitelistPrintersOnly</ph> is chosen for <ph name="BULK_PRINTERS_ACCESS_MODE">NativePrintersBulkAccessMode</ph>.

      If this policy is used, only the printers with ids matching the values in this policy are available to the user. The ids must correspond to the "id" or "guid" fields in the file specified in <ph name="BULK_PRINTERS_POLICY">NativePrintersBulkConfiguration</ph>.
      ''',
    },
    {
      'name': 'DeviceNativePrinters',
      'id': 386,
      'device_only': True,
      'type': 'external',
      'schema': {
        'type': 'object',
        'properties': {
          'url': { 'type': 'string' },
          'hash': { 'type': 'string' }
        },
      },
      'supported_on': ['chrome_os:66-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': {
        "url": "https://example.com/printerpolicy",
        "hash": "deadbeefdeadbeefdeadbeefdeadbeefdeafdeadbeefdeadbeef"
      },
      'max_size': 5242880,
      'caption': '''Enterprise printer configuration file for devices''',
      'tags': [],
      'desc': '''Provides configurations for enterprise printers bound to devices.

      This policy allows you to provide printer configurations to <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> devices.  The format is the same as the NativePrinters dictionary, with an additional required "id" or "guid" field per printer for whitelisting or blacklisting.

      The size of the file must not exceed 5MB and must be encoded in JSON.  It is estimated that a file containing approximately 21,000 printers will encode as a 5MB file.  The cryptographic hash is used to verify the integrity of the download.

      The file is downloaded and cached. It will be re-downloaded whenever the URL or the hash changes.

      If this policy is set, <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> will download the file for printer configurations and make printers available in accordance with <ph name="DEVICE_PRINTERS_ACCESS_MODE">DeviceNativePrintersAccessMode</ph>, <ph name="DEVICE_PRINTERS_WHITELIST">DeviceNativePrintersWhitelist</ph>, and <ph name="DEVICE_PRINTERS_BLACKLIST">DeviceNativePrintersBlacklist</ph>.

      This policy has no effect on whether users can configure printers on individual devices.  It is intended to be supplementary to the configuration of printers by individual users.

      This policy is additive to the <ph name="BULK_PRINTERS_POLICY">NativePrintersBulkConfiguration</ph>.

      If this policy is unset, there will be no device printers and the other <ph name="DEVICE_PRINTERS_POLICY_PATTERN">DeviceNativePrinter*</ph> policies will be ignored.
      ''',
    },
    {
      'name': 'DeviceNativePrintersAccessMode',
      'id': 387,
      'device_only': True,
      'supported_on': ['chrome_os:66-'],
      'type': 'int-enum',
      'schema': {
        'type': 'integer',
        'enum': [ 0, 1, 2 ],
      },
      'items': [
        {
          'name': 'BlacklistRestriction',
          'value': 0,
          'caption': '''All printers are shown except those in the blacklist.''',
        },
        {
          'name': 'WhitelistPrintersOnly',
          'value': 1,
          'caption': '''Only printers in the whitelist are shown to users''',
        },
        {
          'name': 'AllowAll',
          'value': 2,
          'caption': '''Allow all printers from the configuration file.''',
        },
      ],
      'features' : {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': 1,
      'caption': '''Device printers configuration access policy.''',
      'tags': [],
      'desc': '''Controls which printers from the <ph name="DEVICE_PRINTERS_POLICY">DeviceNativePrinters</ph> are available to users.

      Designates which access policy is used for bulk printer configuration. If <ph name="PRINTERS_ALLOW_ALL">AllowAll</ph> is selected, all printers are shown. If <ph name="PRINTERS_BLACKLIST">BlacklistRestriction</ph> is selected, <ph name="DEVICE_PRINTERS_BLACKLIST">DeviceNativePrintersBlacklist</ph> is used to restrict access to the specified printers.  If <ph name="PRINTERS_WHITELIST">WhitelistPrintersOnly</ph> is selected, <ph name="DEVICE_PRINTERS_WHITELIST">DeviceNativePrintersWhitelist</ph> designates only those printers which are selectable.

      If this policy is not set, <ph name="PRINTERS_ALLOW_ALL">AllowAll</ph> is assumed.
      ''',
    },
    {
      'name': 'DeviceNativePrintersBlacklist',
      'supported_on': ['chrome_os:66-'],
      'device_only': True,
      'id': 388,
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'features': {
        'dynamic_refresh': True,
      },
      'example_value':  ["id1", "id2", "id3"],
      'caption': '''Disabled enterprise device printers''',
      'tags': [],
      'desc': '''Specifies the printers which a user cannot use.

      This policy is only used if <ph name="PRINTERS_BLACKLIST">BlacklistRestriction</ph> is chosen for <ph name="DEVICE_PRINTERS_ACCESS_MODE">DeviceNativePrintersAccessMode</ph>.

      If this policy is used, all printers are provided to the user except for the ids listed in this policy. The ids must correspond to the "id" or "guid" fields in the file specified in <ph name="DEVICE_PRINTERS_POLICY">DeviceNativePrinters</ph>.
      ''',
    },
    {
      'name': 'DeviceNativePrintersWhitelist',
      'supported_on': ['chrome_os:66-'],
      'device_only': True,
      'id': 389,
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value':  ["id1", "id2", "id3"],
      'caption': '''Enabled enterprise device printers''',
      'tags': [],
      'desc': '''Specifies the printers which a user can use.

      This policy is only used if <ph name="PRINTERS_WHITELIST">WhitelistPrintersOnly</ph> is chosen for <ph name="DEVICE_PRINTERS_ACCESS_MODE">DeviceNativePrintersAccessMode</ph>

      If this policy is used, only the printers with ids matching the values in this policy are available to the user. The ids must correspond to the "id" or "guid" fields in the file specified in <ph name="DEVICE_PRINTERS_POLICY">DeviceNativePrinters</ph>.
      ''',
    },
    {
      'name': 'TPMFirmwareUpdateSettings',
      'supported_on': ['chrome_os:63-'],
      'device_only': True,
      'id': 390,
      'type': 'dict',
      'schema': {
        'type': 'object',
        'properties': {
          'allow-user-initiated-powerwash': {
            'type': 'boolean',
          },
          'allow-user-initiated-preserve-device-state': {
            'type': 'boolean',
          },
        },
      },
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': {
        'allow-user-initiated-powerwash': True,
        'allow-user-initiated-preserve-device-state': True,
      },
      'caption': '''Configure <ph name="TPM_FIRMWARE_UPDATE_TPM">TPM</ph> firmware update behavior''',
      'tags': [],
      'desc': '''Configures availability and behavior of <ph name="TPM_FIRMWARE_UPDATE_TPM">TPM</ph> firmware update functionality.

      Individual settings can be specified in JSON properties:

      <ph name="TPM_FIRMWARE_UPDATE_SETTINGS_ALLOW_USER_INITIATED_POWERWASH">allow-user-initiated-powerwash</ph>: If set to <ph name="TPM_FIRMWARE_UPDATE_SETTINGS_ALLOW_USER_INITIATED_POWERWASH_TRUE">true</ph>, users will be able to trigger the powerwash flow to install a <ph name="TPM_FIRMWARE_UPDATE_TPM">TPM</ph> firmware update.

      <ph name="TPM_FIRMWARE_UPDATE_SETTINGS_ALLOW_USER_INITIATED_PRESERVE_DEVICE_STATE">allow-user-initiated-preserve-device-state</ph>: If set to <ph name="TPM_FIRMWARE_UPDATE_SETTINGS_ALLOW_USER_INITIATED_PRESERVE_DEVICE_STATE_TRUE">true</ph>, users will be able to invoke the <ph name="TPM_FIRMWARE_UPDATE_TPM">TPM</ph> firmware update flow that preserves device-wide state (including enterprise enrollment), but loses user data. This update flow is available starting from version 68.

      If the policy is not set, <ph name="TPM_FIRMWARE_UPDATE_TPM">TPM</ph> firmware update functionality will not be available.''',
    },
    {
      'name': 'MinimumRequiredChromeVersion',
      'supported_on': ['chrome_os:64-'],
      'device_only': True,
      'type': 'string',
      'schema': { 'type': 'string' },
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': '61.0.3163.120',
      'id': 394,
      'caption': '''Configure minimum allowed Chrome version for the device.''',
      'tags': [],
      'desc': '''Configures the requirement of the minimum allowed version of <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>. Versions below given are treated as obsolete and device would not allow user sign in before OS is updated.
      If current version becomes obsolete during user session, user will be forcefully signed out.

      If this policy is not set, no restrictions are applied, and user can sign regardless of <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> version.

      Here "Version" can be either an exact version like '61.0.3163.120' or a version prefix, like '61.0'  ''',
    },
    {
      'name': 'QuickUnlockModeWhitelist',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': {
          'type': 'string',
          'enum': [
            'all',
            'PIN'
          ],
        },
        'id': 'QuickUnlockModeWhitelist',
      },
      'supported_on': ['chrome_os:56-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['PIN'],
      'default_for_enterprise_users': [],
      'id': 352,
      'caption': '''Configure allowed quick unlock modes''',
      'tags': [],
      'desc': '''A whitelist controlling which quick unlock modes the user can configure and use to unlock the lock screen.

          This value is a list of strings; valid list entries are: "all", "PIN". Adding "all" to the list means that every quick unlock mode is available to the user, including ones implemented in the future. Otherwise, only the quick unlock modes present in the list will be available.

          For example, to allow every quick unlock mode, use ["all"]. To allow only PIN unlock, use ["PIN"]. To disable all quick unlock modes, use [].

          By default, no quick unlock modes are available for managed devices.''',
    },
    {
      'name': 'QuickUnlockTimeout',
      'type': 'int-enum',
      'schema': {
        'type': 'integer',
        'enum': [ 0, 1, 2, 3 ],
      },
      'items': [
        {
          'name': 'SixHours',
          'value': 0,
          'caption': '''Password entry is required every six hours''',
        },
        {
          'name': 'TweleveHours',
          'value': 1,
          'caption': '''Password entry is required every twelve hours''',
        },
        {
          'name': 'Day',
          'value': 2,
          'caption': '''Password entry is required every day (24 hours)''',
        },
        {
          'name': 'Week',
          'value': 3,
          'caption': '''Password entry is required every week (168 hours)''',
        },
      ],
      'supported_on': ['chrome_os:57-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 2,
      'id': 353,
      'caption': '''Set how often user has to enter password to use quick unlock''',
      'tags': [],
      'desc': '''This setting controls how often the lock screen will request the password to be entered in order to continue using quick unlock. Each time the lock screen is entered, if the last password entry was more than this setting, the quick unlock will not be available on entering the lock screen. Should the user stay on the lock screen past this period of time, a password will be requested next time the user enters the wrong code, or re-enters the lock screen, whichever comes first.

          If this setting is configured, users using quick unlock will be requested to enter their passwords on the lock screen depending on this setting.

          If this setting is not configured, users using quick unlock will be requested to enter their password on the lock screen every day.''',
    },
    {
      'name': 'PinUnlockMinimumLength',
      'type': 'int',
      'schema': { 'type': 'integer' },
      'supported_on': ['chrome_os:57-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 6,
      'id': 354,
      'caption': '''Set the minimum length of the lock screen PIN''',
      'tags': [],
      'desc': '''If the policy is set, the configured minimal PIN length is
          enforced. (The absolute minimum PIN length is 1; values less than 1
          are treated as 1.)

          If the policy is not set, a minimal PIN length of 6 digits is
          enforced. This is the recommended minimum.''',
    },
    {
      'name': 'PinUnlockMaximumLength',
      'type': 'int',
      'schema': { 'type': 'integer' },
      'supported_on': ['chrome_os:57-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 0,
      'id': 355,
      'caption': '''Set the maximum length of the lock screen PIN''',
      'tags': [],
      'desc': '''If the policy is set, the configured maximal PIN length is enforced. A value of 0 or less means no maximum length; in that case the user may set a PIN as long as they want. If this setting is less than <ph name="PIN_UNLOCK_MINIMUM_LENGTH_POLICY_NAME">PinUnlockMinimumLength</ph> but greater than 0, the maximum length is the same as the minimum length.

          If the policy is not set, no maximum length is enforced.''',
    },
    {
      'name': 'PinUnlockWeakPinsAllowed',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:57-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': False,
      'id': 356,
      'caption': '''Enable users to set weak PINs for the lock screen PIN''',
      'tags': [],
      'desc': '''If false, users will be unable to set PINs which are weak and easy to guess.

          Some example weak PINs: PINs containing only one digit (1111), PINs whose digits are increasing by 1 (1234), PINs whose digits are decreasing by 1 (4321), and PINs which are commonly used.

          By default, users will get a warning, not error, if the PIN is considered weak.''',
    },
    {
      'name': 'DeviceWallpaperImage',
      'type': 'external',
      'schema': {
        'type': 'object',
        'properties': {
          'url': { "type": "string" },
          'hash': { "type": "string" }
        },
      },
      'supported_on': ['chrome_os:61-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': { "url": "https://example.com/device_wallpaper.jpg", "hash": "examplewallpaperexamplewallpaperexamplewallpaperexamplewallpaper" },
      'max_size': 16777216,
      'id': 357,
      'caption': '''Device wallpaper image''',
      'tags': [],
      'desc': '''Configure device-level wallpaper image that is shown on the login screen if no user has yet signed in to the device. The policy is set by specifying the URL from which the Chrome OS device can download the wallpaper image and a cryptographic hash used to verify the integrity of the download. The image must be in JPEG format, its file size must not exceed 16MB. The URL must be accessible without any authentication. The wallpaper image is downloaded and cached. It will be re-downloaded whenever the URL or the hash changes.

      The policy should be speicified as a string that expresses the URL and hash in JSON format, e.g.,
      {
        "url": "https://example.com/device_wallpaper.jpg",
        "hash": "examplewallpaperhash"
      }

      If the device wallpaper policy is set, the Chrome OS device will download and use the wallpaper image on the login screen if no user has yet signed in to the device. Once the user logs in, the user's wallpaper policy kicks in.

      If the device wallpaper policy is left not set, it's the user's wallpaper policy to decide what to show if the user's wallpaper policy is set.''',
    },
    {
      'name': 'DeviceLoginScreenLocales',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome_os:58-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': False,
      },
      'example_value': [ "en-US" ],
      'max_size': 16777216,
      'id': 364,
      'caption': '''Device sign-in screen locale''',
      'tags': [],
      'desc': '''Configures the locale which is enforced on the <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> sign-in screen.

      If this policy is set, the sign-in screen will always be displayed in the locale which is given by the first value of this policy (the policy is defined as a list for forward compatibility).  If this policy is not set or is set to an empty list, the sign-in screen will be displayed in the locale of the last user session.  If this policy is set to a value which is not a valid locale, the sign-in screen will be displayed in a fallback locale (currently, en-US).'''
    },
    {
      'name': 'DeviceLoginScreenInputMethods',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome_os:58-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': [ "xkb:us::en", "xkb:ch::ger" ],
      'max_size': 16777216,
      'id': 365,
      'caption': '''Device sign-in screen keyboard layouts''',
      'tags': [],
      'desc': '''Configures which keyboard layouts are allowed on the <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> sign-in screen.

      If this policy is set to a list of input method identifiers, the given input methods will be available on the sign-in screen. The first given input method will be preselected. While a user pod is focused on the sign-in screen, the user's last used input method will be available in addition to the input methods given by this policy. If this policy is not set, the input methods on the sign-in screen will be derived from the locale in which the sign-in screen is displayed. Values which are not valid input method identifiers will be ignored.''',
    },
    {
      'name': 'SmsMessagesAllowed',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:70-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'default_for_enterprise_users': False,
      'id': 469,
      'caption': '''Allow SMS Messages to be synced from phone to Chromebook.''',
      'tags': ['local-data-access', 'google-sharing'],
      'desc': '''If this setting is enabled, users will be allowed to set up their devices to sync SMS messages between their phones and Chromebooks. Note that if this policy is allowed, users must explicitly opt into this feature by completing a setup flow. Once the setup flow is complete, users will be able to send and receive SMS messages on their Chromebooks.

      If this setting is disabled, users will not be allowed to set up SMS syncing.

      If this policy is left not set, the default is not allowed for managed users and allowed for non-managed users.''',
    },
    {
      'name': 'InstantTetheringAllowed',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:60-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'default_for_enterprise_users': False,
      'id': 367,
      'caption': '''Allow Instant Tethering to be used.''',
      'tags': ['local-data-access', 'google-sharing'],
      'desc': '''If this setting is enabled, users will be allowed to use Instant Tethering, which allows their Google phone to share its mobile data with their device.

      If this setting is disabled, users will not be allowed to use Instant Tethering.

      If this policy is left not set, the default is not allowed for enterprise-managed users and allowed for non-managed users.''',
    },
    {
      'name': 'BrowserNetworkTimeQueriesEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:60-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 370,
      'caption': '''Allow queries to a Google time service''',
      'tags': [],
      'desc': '''Setting this policy to false stops <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> from occasionally sending queries to a Google server to retrieve an accurate timestamp. These queries will be enabled if this policy is set to True or is not set.''',
    },
    {
      'name': 'DeviceSecondFactorAuthentication',
      'type': 'int-enum',
      'schema': {
        'type': 'integer',
        'enum': [ 0, 1, 2, 3 ],
      },
      'items': [
        {
          'name': 'Disabled',
          'value': 1,
          'caption': '''Second factor disabled''',
        },
        {
          'name': 'U2F',
          'value': 2,
          'caption': '''U2F (Universal Second Factor)''',
        },
        {
          'name': 'U2F_EXTENDED',
          'value': 3,
          'caption': '''U2F plus extensions for individual attestation''',
        },
      ],
      'supported_on': ['chrome_os:61-'],
      'supported_chrome_os_management': ['google_cloud'],
      'device_only': True,
      'features': {
        'dynamic_refresh': False,
      },
      'example_value': 2,
      'id': 372,
      'caption': '''Integrated second factor authentication mode''',
      'tags': ['system-security'],
      'desc': '''Specifies how the on-board secure element hardware can be used to provide a second-factor authentication if it is compatible with this feature. The machine power button is used to detect the user physical presence.

      If 'Disabled' is selected, no second factor is provided.

      If 'U2F' is selected, the integrated second factor will behave according the FIDO U2F specification.

      If 'U2F_EXTENDED' is selected, the integrated second factor will provide the U2F functions plus some extensions for individual attestation.''',
    },
    {
      'name': 'PrintPreviewUseSystemDefaultPrinter',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': [
        'chrome.*:61-',
      ],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': False,
      'id': 373,
      'caption': '''Use System Default Printer as Default''',
      'tags': [],
      'desc': '''Causes <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> to use the system default printer as the default choice in Print Preview instead of the most recently used printer.

      If you disable this setting or do not set a value, Print Preview will use the most recently used printer as the default destination choice.

      If you enable this setting, Print Preview will use the OS system default printer as the default destination choice.''',
    },
    {
      'name': 'DeviceEcryptfsMigrationStrategy',
      'type': 'int-enum',
      'schema': {
        'type': 'integer',
        'enum': [ 0, 1, 2 ],
      },
      'items': [
        {
          'name': 'Unset',
          'value': 0,
          'caption': '''Policy unset, disallow data migration and ARC''',
        },
        {
          'name': 'DisallowArc',
          'value': 1,
          'caption': '''Disallow data migration and ARC''',
        },
        {
          'name': 'AllowMigration',
          'value': 2,
          'caption': '''Allow data migration''',
        },
      ],
      'supported_on': ['chrome_os:60-60'],
      'supported_chrome_os_management': ['google_cloud'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'deprecated': True,
      'example_value': 1,
      'id': 374,
      'caption': '''Migration strategy for ecryptfs''',
      'tags': [],
      'desc': '''This policy is deprecated in M61, please use EcryptfsMigrationStrategy instead.

      Specifies how a device should behave that shipped with ecryptfs and needs to transition to ext4 encryption.

      If you set this policy to 'DisallowArc', Android apps will be disabled for all users on the device (including those that have ext4 encryption already) and no migration from ecryptfs to ext4 encryption will be offered to any users.

      If you set this policy to 'AllowMigration', users with ecryptfs home directories will be offered to migrate these to ext4 encryption as necessary (currently when Android N becomes available on the device).

      This policy does not apply to kiosk apps - these are migrated automatically. If this policy is left not set, the device will behave as if 'DisallowArc' was chosen.''',
    },
    {
      'name': 'EcryptfsMigrationStrategy',
      'type': 'int-enum',
      'schema': {
        'type': 'integer',
        'enum': [ 0, 1, 2, 3, 4, 5],
      },
      'items': [
        {
          'name': 'DisallowArc',
          'value': 0,
          'caption': '''Disallow data migration and ARC.''',
        },
        {
          'name': 'Migrate',
          'value': 1,
          'caption': '''Migrate automatically, don’t ask for user consent.''',
        },
        {
          'name': 'Wipe',
          'value': 2,
          'caption': '''Wipe the user’s ecryptfs home directory and start with a fresh ext4-encrypted home directory.''',
        },
        {
          'name': 'AskUser',
          'value': 3,
          'caption': '''Ask the user if they would like to migrate or skip migration and disallow ARC.''',
        },
        {
          'name': 'MinimalMigrate',
          'value': 4,
          'caption': '''Similar to Wipe (value 2), but tries to preserve login tokens so the user does not have to sign in again.''',
        },
        {
          'name': 'AskForEcryptfsArcUsers',
          'value': 5,
          'caption': '''If the client device model already supported ARC before migration to ext4 was necessary to run ARC and if the ArcEnabled policy is set to true, this option will behave as AskUser (value 3). In all other cases (if the device model did not support ARC before, or if ArcEnabled policy is set to false), this value is equivalent to DisallowArc (value 0).''',
        }
      ],
      'supported_on': ['chrome_os:61-'],
      'device_only': False,
      'features': {
        'dynamic_refresh': False,
        'per_profile': False,
      },
      'example_value': 3,
      'id': 376,
      'caption': '''Migration strategy for ecryptfs''',
      'tags': [],
      'desc': '''Specifies the action that should be taken when the user's home directory was created with ecryptfs encryption and needs to transition to ext4 encryption.

      If you set this policy to 'DisallowArc', Android apps will be disabled for the user and no migration from ecryptfs to ext4 encryption will be performed. Android apps will not be prevented from running when the home directory is already ext4-encrypted.

      If you set this policy to 'Migrate', ecryptfs-encrypted home directories will be automatically migrated to ext4 encryption on sign-in without asking for user consent.

      If you set this policy to 'Wipe', ecryptfs-encrypted home directories will be deleted on sign-in and new ext4-encrypted home directories will be created instead. Warning: This removes the user's local data.

      If you set this policy to 'AskUser', users with ecryptfs-encrypted home directories will be offered to migrate.

      This policy does not apply to kiosk users. If this policy is left not set, the device will behave as if 'DisallowArc' was chosen.''',
    },
    {
      'name': 'NoteTakingAppsLockScreenWhitelist',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': [
        'chrome_os:61-',
      ],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True
      },
      'example_value': ['abcdefghabcdefghabcdefghabcdefgh'],
      'id': 377,
      'caption': '''Whitelist note-taking apps allowed on the <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> lock screen''',
      'tags': [],
      'desc': '''Specifies list of apps that can be enabled as a note-taking app on the <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> lock screen.

      If the preferred note-taking app is enabled on the lock screen, the lock screen will contain UI element for launching the preferred note taking app.
      When launched, the app will be able to create an app window on top of the lock screen, and create data items (notes) in the lock screen context. The app will be able to import created notes to the primary user session, when the session is unlocked. Currently, only Chrome note-taking apps are supported on the lock screen.

      If the policy is set, the user will be allowed to enable an app on the lock screen only if the app's extension ID is contained in the policy list value.
      As a consequence, setting this policy to an empty list will disable note-taking on the lock screen entirely.
      Note that the policy containing an app ID does not necessarily mean that the user will be able to enable the app as a note-taking app on the lock screen - for example, on Chrome 61, the set of available apps is additionally restricted by the platform.

      If the policy is left unset, there will be no restrictions on the set of apps the user can enable on the lock screen imposed by the policy.'''
    },
    {
      'name': 'CastReceiverEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:62-'],
      'future': True,
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': False,
      'id': 378,
      'default_for_enterprise_users': False,
      'caption': '''Enable casting content to the device''',
      'tags': [],
      'desc': '''Allow content to be cast to the device using <ph name="PRODUCT_NAME">Google Cast</ph>.

          If this policy is set to False, users will not be able to cast content to their device. If this policy is set to True, users are allowed to cast content. If this policy is not set, users are not allowed to cast content to enrolled Chrome OS devices, but can cast to non enrolled devices.''',
    },
    {
      'name': 'CastReceiverName',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome_os:62-'],
      'device_only': True,
      'future': True,
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': 'My Chromebook',
      'id': 379,
      'caption': '''Name of the <ph name="PRODUCT_NAME">Google Cast</ph> destination''',
      'tags': [],
      'desc': '''Determine the name advertised as a <ph name="PRODUCT_NAME">Google Cast</ph> destination.

          If this policy is set to a non empty string, that string will be used as the name of the <ph name="PRODUCT_NAME">Google Cast</ph> destination. Otherwise, the destination name will be the device name. If this policy is not set, the destination name will be the device name, and the owner of the device (or a user from the domain managing the device) will be allowed to change it. The name is limited to 24 characters.'''
    },
    {
      'name': 'DeviceOffHours',
      'type': 'dict',
      'schema': {
        'type': 'object',
        'properties': {
          'intervals': {
            'type': 'array',
            'items': {
              'type': 'object',
              'id': 'WeeklyTimeIntervals',
              'properties': {
                'start': {
                  'type': 'object',
                  'id': 'WeeklyTime',
                  'properties': {
                    'day_of_week': {
                      'type': 'string',
                      'enum': [
                        'MONDAY',
                        'TUESDAY',
                        'WEDNESDAY',
                        'THURSDAY',
                        'FRIDAY',
                        'SATURDAY',
                        'SUNDAY'
                      ]
                    },
                    'time': { 'type': 'integer'}
                  }
                },
                'end': {
                  '$ref': 'WeeklyTime'
                }
              }
            }
          },
          'timezone': { 'type': 'string' },
          'ignored_policy_proto_tags': {
            'type': 'array',
            'items': { 'type':'integer' }
          }
        }
      },
      'supported_on': ['chrome_os:62-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True
      },
      'example_value': {
        'intervals':
        [
          {
            'start': {
              'day_of_week': 'MONDAY',
              'time': 12840000
            },
            'end': {
              'day_of_week': 'MONDAY',
              'time': 21720000
            }
          },
          {
            'start': {
              'day_of_week': 'FRIDAY',
              'time': 38640000
            },
            'end': {
              'day_of_week': 'FRIDAY',
              'time': 57600000
            }
          }
        ],
        'timezone': 'GMT',
        'ignored_policy_proto_tags': [3, 8]
      },
      'id': 380,
      'caption': '''Off hours intervals when the specified device policies are released''',
      'tags': [],
      'desc': '''If "OffHours" policy is set, then the specified device policies are ignored (use the default settings of these policies) during the defined time intervals. Device policies are re-applied by Chrome on every event when "OffHours" period starts or ends. User will be notified and forced to sign out when "OffHours" time end and device policy settings are changed (e.g. when user is logged in not with an allowed account).''',
    },
    {
      'name': 'CloudPolicyOverridesMachinePolicy',
      'type': 'main',
      'schema': { 'type': 'boolean'},
      'supported_on': ['chrome.*:62-'],
      'features': {
        'dynamic_refresh': False,
        'per_profile': False,
      },
      'example_value': False,
      'id': 381,
      'caption': '''<ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> cloud policy overrides Machine policy.''',
      'tags': [],
      'future': True,
      'desc': '''
      If the policy is set to true, cloud  policy takes precedence if it conflicts with machine policy.
      If the policy is set to false or not configured, machine policy takes precedence if it conflicts with cloud policy.
      For more details about policy priority, please visit: https://support.google.com/chrome?p=set_chrome_policies_for_devices

      This policy is not available on Windows instances that are not joined to a <ph name="MS_AD_NAME">Microsoft® Active Directory®</ph> domain.
      '''
    },
    {
      'name': 'PromptForDownloadLocation',
      'type': 'main',
      'schema': { 'type': 'boolean'},
      'supported_on': ['chrome.*:64-', 'chrome_os:64-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': False,
      'id': 395,
      'caption': '''Ask where to save each file before downloading''',
      'tags': [],
      'desc': '''
      If the policy is enabled, the user will be asked where to save each file before downloading.
      If the policy is disabled, downloads will start immediately, and the user will not be asked where to save the file.
      If the policy is not configured, the user will be able to change this setting.
      '''
    },
    {
      'name': 'UnaffiliatedArcAllowed',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:64-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': False,
      },
      'example_value': False,
      'id': 397,
      'caption': '''Allow unaffiliated users to use ARC''',
      'tags': [],
      'desc': '''If the policy is set to false, unaffiliated users will not be allowed to use ARC.

      If the policy is unset or set to true, all users are allowed to use ARC (unless ARC is disabled by other means).

      Changes to the policy will only be applied while ARC is not running, e.g. while Chrome OS is starting.''',
    },
    {
      'name': 'IsolateOrigins',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome.*:63-', 'chrome_os:63-'],
      'device_only': False,
      'features': {
        'dynamic_refresh': False,
        'per_profile': False,
      },
      'example_value': 'https://example.com/,https://othersite.org/',
      'id': 398,
      'caption': '''Enable Site Isolation for specified origins''',
      'tags': ['system-security'],
      'desc': '''
      If the policy is enabled, each of the named origins in a
      comma-separated list will run in its own process. This will also isolate
      origins named by subdomains; e.g. specifying https://example.com/ will
      also cause https://foo.example.com/ to be isolated as part of the
      https://example.com/ site.
      If the policy is disabled, no explicit Site Isolation will happen and field trials of IsolateOrigins and SitePerProcess will be disabled. Users will still be able to enable IsolateOrigins manually.
      If the policy is not configured, the user will be able to change this setting.
      On <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph>, it is recommended to also set the <ph name="DEVICE_LOGIN_SCREEN_ISOLATE_ORIGINS_POLICY_NAME">DeviceLoginScreenIsolateOrigins</ph> device policy to the same value. If the values specified by the two policies don't match, a delay may be incurred when entering a user session while the value specified by user policy is being applied.

      NOTE: This policy does not apply on Android. To enable IsolateOrigins on Android, use the IsolateOriginsAndroid policy setting.
      ''',
    },
    {
      'name': 'SitePerProcess',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:63-', 'chrome_os:63-'],
      'device_only': False,
      'features': {
        'dynamic_refresh': False,
        'per_profile': False,
      },
      'example_value': True,
      'id': 399,
      'caption': '''Enable Site Isolation for every site''',
      'tags': ['system-security'],
      'desc': '''
      You might want to look at the IsolateOrigins policy setting to get the best of both worlds, isolation and limited impact for users, by using IsolateOrigins with a list of the sites you want to isolate. This setting, SitePerProcess, isolates all sites.
      If the policy is enabled, each site will run in its own process.
      If the policy is disabled, no explicit Site Isolation will happen and field trials of IsolateOrigins and SitePerProcess will be disabled. Users will still be able to enable SitePerProcess manually.
      If the policy is not configured, the user will be able to change this setting.
      On <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph>, it is recommended to also set the <ph name="DEVICE_LOGIN_SCREEN_SITE_PER_PROCESS_POLICY_NAME">DeviceLoginScreenSitePerProcess</ph> device policy to the same value. If the values specified by the two policies don't match, a delay may be incurred when entering a user session while the value specified by user policy is being applied.

      NOTE: This policy does not apply on Android. To enable SitePerProcess on Android, use the SitePerProcessAndroid policy setting.
      ''',
    },
    {
      'name': 'DeviceLoginScreenIsolateOrigins',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome_os:66-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': False,
        'per_profile': False,
      },
      'example_value': 'https://example.com/,https://othersite.org/',
      'id': 417,
      'caption': '''Enable Site Isolation for specified origins''',
      'tags': ['system-security'],
      'desc': '''
      This policy applies to the sign-in screen. Please see also the <ph name="ISOLATE_ORIGINS_POLICY_NAME">IsolateOrigins</ph> policy which applies to the user session. It is recommended to set both policies to the same value. If the values don't match, a delay may be incurred when entering a user session while the value specified by user policy is being applied.
      If the policy is enabled, each of the named origins in a comma-separated list will run in its own process. This will also isolate origins named by subdomains; e.g. specifying https://example.com/ will also cause https://foo.example.com/ to be isolated as part of the https://example.com/ site.
      If the policy is disabled, no explicit Site Isolation will happen and field trials of IsolateOrigins and SitePerProcess will be disabled. Users will still be able to enable IsolateOrigins manually.
      If the policy is not configured, the platform default site isolation settings will be used for the sign-in screen.
      ''',
    },
    {
      'name': 'DeviceLoginScreenSitePerProcess',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:66-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': False,
        'per_profile': False,
      },
      'example_value': True,
      'id': 418,
      'caption': '''Enable Site Isolation for every site''',
      'tags': ['system-security'],
      'desc': '''
      This policy applies to the sign-in screen. Please see also the <ph name="SITE_PER_PROCESS_POLICY_NAME">SitePerProcess</ph> policy which applies to the user session. It is recommended to set both policies to the same value. If the values don't match, a delay may be incurred when entering a user session while the value specified by user policy is being applied.
      You might want to look at the IsolateOrigins policy setting to get the best of both worlds, isolation and limited impact for users, by using IsolateOrigins with a list of the sites you want to isolate. This setting, SitePerProcess, isolates all sites.
      If the policy is enabled, each site will run in its own process.
      If the policy is disabled, no explicit Site Isolation will happen and field trials of IsolateOrigins and SitePerProcess will be disabled. Users will still be able to enable SitePerProcess manually.
      If the policy is not configured, the user will be able to change this setting.
      ''',
    },
    {
      'name': 'IsolateOriginsAndroid',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['android:68-'],
      'device_only': False,
      'features': {
        'dynamic_refresh': False,
        'per_profile': False,
      },
      'example_value': 'https://example.com/,https://othersite.org/',
      'id': 445,
      'caption': '''Enable Site Isolation for specified origins on Android devices''',
      'tags': ['system-security'],
      'desc': '''
      If the policy is enabled, each of the named origins in a
      comma-separated list will run in its own process. This will also isolate
      origins named by subdomains; e.g. specifying https://example.com/ will
      also cause https://foo.example.com/ to be isolated as part of the
      https://example.com/ site.
      If the policy is disabled, no explicit Site Isolation will happen and field trials of IsolateOriginsAndroid and SitePerProcessAndroid will be disabled. Users will still be able to enable IsolateOrigins manually.
      If the policy is not configured, the user will be able to change this setting.

      NOTE: On Android, Site Isolation is experimental. Support will improve over time, but currently it may cause performance problems.

      NOTE: This policy applies only to Chrome on Android running on devices with strictly more than 1GB of RAM. To apply the policy on non-Android platforms, use IsolateOrigins.
      ''',
    },
    {
      'name': 'SitePerProcessAndroid',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['android:68-'],
      'device_only': False,
      'features': {
        'dynamic_refresh': False,
        'per_profile': False,
      },
      'example_value': True,
      'id': 446,
      'caption': '''Enable Site Isolation for every site''',
      'tags': ['system-security'],
      'desc': '''
      You might want to look at the IsolateOriginsAndroid policy setting to get the best of both worlds, isolation and limited impact for users, by using IsolateOriginsAndroid with a list of the sites you want to isolate. This setting, SitePerProcessAndroid, isolates all sites.
      If the policy is enabled, each site will run in its own process.
      If the policy is disabled, no explicit Site Isolation will happen and field trials of IsolateOriginsAndroid and SitePerProcessAndroid will be disabled. Users will still be able to enable SitePerProcess manually.
      If the policy is not configured, the user will be able to change this setting.

      NOTE: On Android, Site Isolation is experimental. Support will improve over time, but currently it may cause performance problems.

      NOTE: This policy applies only to Chrome on Android running on devices with strictly more than 1GB of RAM. To apply the policy on non-Android platforms, use SitePerProcess.
      ''',
    },
    {
      'name': 'WebDriverOverridesIncompatiblePolicies',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:65-'],
      'device_only': False,
      'features': {
        'dynamic_refresh': False,
        'per_profile': False,
      },
      'example_value': True,
      'id': 414,
      'caption': '''Allow WebDriver to Override Incompatible Policies''',
      'tags': ['system-security'],
      'desc': '''This policy allows users of the WebDriver feature to override
      policies which can interfere with its operation.

      Currently this policy disables SitePerProcess and IsolateOrigins policies.

      If the policy is enabled, WebDriver will be able to override incomaptible
      policies.
      If the policy is disabled or not configured, WebDriver will not be allowed
      to override incompatible policies.''',
    },
    {
      'name': 'UnsafelyTreatInsecureOriginAsSecure',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'deprecated': True,
      'supported_on': ['chrome.*:65-'],
      'features': {
        'dynamic_refresh': False,
        'per_profile': True,
      },
      'example_value': ['http://testserver.example.com/','*.example.org'],
      'id': 400,
      'caption': '''Origins or hostname patterns for which restrictions on
      insecure origins should not apply''',
      'tags': ['system-security'],
      'desc': '''Deprecated in M69. Use
      OverrideSecurityRestrictionsOnInsecureOrigin instead.

      The policy specifies a list of origins (URLs) or hostname patterns (such
      as "*.example.com") for which security restrictions on insecure origins
      will not apply.

      The intent is to allow organizations to whitelist origins for legacy
      applications that cannot deploy TLS, or to set up a staging server for
      internal web development so that their developers can test out features
      requiring secure contexts without having to deploy TLS on the staging
      server. This policy will also prevent the origin from being labeled
      "Not Secure" in the omnibox.

      Setting a list of URLs in this policy has the same effect as setting the
      command-line flag '--unsafely-treat-insecure-origin-as-secure' to a
      comma-separated list of the same URLs. If the policy is set, it will
      override the command-line flag.

      This policy is deprecated in M69 in favor of
      OverrideSecurityRestrictionsOnInsecureOrigin. If both policies are
      present, OverrideSecurityRestrictionsOnInsecureOrigin will override this
      policy.

      For more information on secure contexts, see
      https://www.w3.org/TR/secure-contexts/
      '''
    },
    {
      'name': 'DefaultDownloadDirectory',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome.*:64-', 'chrome_os:64-'],
      'features': {
        'can_be_mandatory': False,
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': '/home/${user_name}/Downloads',
      'id': 401,
      'caption': '''Set default download directory''',
      'tags': ['local-data-access'],
      'desc': '''Configures the default directory that <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will use for downloading files.

      If you set this policy, it will change the default directory that <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> downloads files to. This policy is not mandatory, so the user will be able to change the directory.

      If you do not set this policy, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will use its usual default directory (platform-specific).

      See https://www.chromium.org/administrators/policy-list-3/user-data-directory-variables for a list of variables that can be used.''',
    },
    {
      'name': 'DeviceHostnameTemplate',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome_os:65-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': 'chromebook-${ASSET_ID}',
      'id': 403,
      'caption': '''Device network hostname template''',
      'tags': [],
      'desc': '''Determine the hostname of the device used in DHCP requests.

      If this policy is set to a non empty string, that string will be used as the device hostname during DHCP request.

      The string can contain variables ${ASSET_ID}, ${SERIAL_NUM}, ${MAC_ADDR} that would be replaced with values on the device before using as a hostname. Resulting substitution should be a valid hostname (per RFC 1035, section 3.1).

      If this policy is not set, or the value after substitution is not a valid hostname, no hostname will be set in DHCP request. '''
    },
    {
      'name': 'AbusiveExperienceInterventionEnforce',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:65-', 'chrome_os:65-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 404,
      'caption': '''Abusive Experience Intervention Enforce''',
      'tags': [],
      'desc': '''Allows you to set whether sites with abusive experiences should be prevented from opening new windows or tabs.

      If this policy is set to True, sites with abusive experiences will be prevented from opening new windows or tabs.
      However this behavior will not trigger if SafeBrowsingEnabled policy is set to False.
      If this policy is set to False, sites with abusive experiences will be allowed to open new windows or tabs.
      If this policy is left not set, True will be used.''',
    },
    {
      'name': 'SpellcheckLanguage',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' }
      },
      # Spell checking is provided by macOS, so can't be controlled on Mac.
      'supported_on': ['chrome.win:65-', 'chrome.linux:65-', 'chrome_os:65-'],
      'features': {
        'can_be_recommended': False,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['fr', 'es'],
      'id': 405,
      'caption': '''Force enable spellcheck languages''',
      'tags': [],
      'desc': '''Force-enables spellcheck languages. Unrecognized languages in that list will be ignored.

      If you enable this policy, spellcheck will be enabled for the languages specified, in addition to the languages for which the user has enabled spellcheck.

      If you do not set this policy, or disable it, there will be no change to the user's spellcheck preferences.

      If the SpellcheckEnabled policy is set to disabled, this policy will have no effect.

      The currently supported languages are: af, bg, ca, cs, da, de, el, en-AU, en-CA, en-GB, en-US, es, es-419, es-AR, es-ES, es-MX, es-US, et, fa, fo, fr, he, hi, hr, hu, id, it, ko, lt, lv, nb, nl, pl, pt-BR, pt-PT, ro, ru, sh, sk, sl, sq, sr, sv, ta, tg, tr, uk, vi.'''
    },
    {
      'name': 'ThirdPartyBlockingEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.win:65-'],
      'features': {
        'dynamic_refresh': False,
        'per_profile': False,
      },
      'example_value': False,
      'id': 407,
      'caption': '''Enable third party software injection blocking''',
      'tags': [],
      'desc': '''If the policy is set to false then third party software will be allowed to inject executable code into Chrome's processes. If the policy is unset or set to true then third party software will be prevented from injecting executable code into Chrome's processes.''',
    },
    {
      'name': 'SpellcheckEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:65-', 'chrome_os:65-'],
      'features': {
        'can_be_recommended': False,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': False,
      'id': 408,
      'caption': '''Enable spellcheck''',
      'tags': [],
      'desc': '''If this policy is not set or enabled, the user is allowed to use spellcheck.

      If this policy is disabled, the user is not allowed to use spellcheck. The SpellcheckLanguage policy will also be ignored when this policy is disabled.
      '''
    },
    {
      'name': 'AdsSettingForIntrusiveAdsSites',
      'type': 'int-enum',
      'schema': {
        'type': 'integer',
        'enum': [ 1, 2 ],
      },
      'items': [
        {
          'name': 'AllowAds',
          'value': 1,
          'caption': '''Allow ads on all sites''',
        },
        {
          'name': 'BlockAds',
          'value': 2,
          'caption': '''Do not allow ads on sites with intrusive ads''',
        },
      ],
      'supported_on': ['chrome.*:65-', 'chrome_os:65-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 1,
      'id': 409,
      'caption': '''Ads setting for sites with intrusive ads''',
      'tags': [],
      'desc': '''Allows you to set whether ads should be blocked on sites with intrusive ads.

      If this policy is set to 2, ads will be blocked on sites with intrusive ads.
      However this behavior will not trigger if SafeBrowsingEnabled policy is set to False.
      If this policy is set to 1, ads will not be blocked on sites with intrusive ads.
      If this policy is left not set, 2 will be used.''',
    },
    {
      'name': 'RestrictAccountsToPatterns',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' }
      },
      'supported_on': ['android:65-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': ['*@example.com', 'user@managedchrome.com'],
      'id': 410,
      'caption': '''Restrict accounts that are visible in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>''',
      'tags': [],
      'desc': '''Contains a list of patterns which are used to control the visiblity of accounts in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.

      Each Google account on the device will be compared to patterns stored in this policy to determine the account visibility in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>. The account will be visible if its name matches any pattern on the list. Otherwise, the account will be hidden.

      Use the wildcard character '*' to match zero or more arbitrary characters. The escape character is '\\', so to match actual '*' or '\\' characters, put a '\\' in front of them.

      If this policy is not set, all Google accounts on the device will be visible in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.''',
    },
    {
      'name': 'PasswordProtectionWarningTrigger',
      'type': 'int-enum',
      'schema': {
        'type': 'integer',
        'enum': [ 0, 1, 2 ],
      },
      'items': [
        {
          'name': 'PasswordProtectionWarningOff',
          'value': 0,
          'caption': '''Password protection warning is off''',
        },
        {
          'name': 'PasswordProtectionWarningOnPasswordReuse',
          'value': 1,
          'caption': '''Password protection warning is triggered by password reuse''',
        },
        {
          'name': 'PasswordProtectionWarningOnPhishingReuse',
          'value': 2,
          'caption': '''Password protection warning is triggered by password reuse on phishing page''',
        },
      ],
      'supported_on': ['chrome.*:69-', 'chrome_os:69-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 1,
      'id': 411,
      'caption': '''Password protection warning trigger''',
      'tags': [],
      'desc': '''Allows you to control the triggering of passwore protection warning. Password protection alerts users when they reuse their protected password on potentially suspicious sites.

      You can use 'PasswordProtectionLoginURLs' and 'PasswordProtectionChangePasswordURL' policies to configure which password to protect.

      If this policy is set to 'PasswordProtectionWarningOff', no password protection warning will be shown.
      If this policy is set to 'PasswordProtectionWarningOnPasswordReuse', password protection warning will be shown when the user reuses their protected password on a non-whitelisted site.
      If this policy is set to 'PasswordProtectionWarningOnPhishingReuse', password protection warning will be shown when the user reuses their protected password on a phishing site.
      If this policy is left unset, password protection service will only protect Google passwords but the user will be able to change this setting.''',
    },
    {
      'id': 419,
      'name': 'RelaunchNotification',
      'tags': [],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'supported_on': ['chrome.*:66-', 'chrome_os:70-'],
      'type': 'int-enum',
      'schema': {
        'type': 'integer',
        'enum': [ 1, 2 ],
      },
      'caption': '''Notify a user that a browser relaunch or device restart is recommended or required''',
      'items': [
        {
          'name': 'Recommended',
          'value': 1,
          'caption': '''Show a recurring prompt to the user indicating that a relaunch is recommended''',
        },
        {
          'name': 'Required',
          'value': 2,
          'caption': '''Show a recurring prompt to the user indicating that a relaunch is required''',
        },
      ],
      'example_value': 1,
      'desc': '''Notify users that <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> must be relaunched or <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> must be restarted to apply a pending update.

      This policy setting enables notifications to inform the user that a browser relaunch or device restart is recommended or required. If not set, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> indicates to the user that a relaunch is needed via subtle changes to its menu, while <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> indicates such via a notification in the system tray. If set to 'Recommended', a recurring warning will be shown to the user that a relaunch is recommended. The user can dismiss this warning to defer the relaunch. If set to 'Required', a recurring warning will be shown to the user indicating that a browser relaunch will be forced once the notification period passes. The default period is seven days for <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> and four days for <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph>, and may be configured via the <ph name="RELAUNCH_NOTIFICATION_PERIOD_POLICY_NAME">RelaunchNotificationPeriod</ph> policy setting.

      The user's session is restored following the relaunch/restart.''',
    },
    {
      'id': 420,
      'name': 'RelaunchNotificationPeriod',
      'tags': [],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'supported_on': ['chrome.*:67-', 'chrome_os:67-'],
      'type': 'int',
      'schema': { 'type': 'integer', 'minimum': 3600000 },
      'caption': '''Set the time period for update notifications''',
      'label': '''Time period (milliseconds)''',
      'example_value': 604800000,
      'desc': '''Allows you to set the time period, in milliseconds, over which users are notified that <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> must be relaunched or that a <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> device must be restarted to apply a pending update.

      Over this time period, the user will be repeatedly informed of the need for an update. For <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> devices, a restart notification appears in the system tray when an upgrade is detected. For <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> browsers, the app menu changes to indicate that a relaunch is needed once one third of the notification period passes. This notification changes color once two thirds of the notification period passes, and again once the full notification period has passed. The additional notifications enabled by the <ph name="RELAUNCH_NOTIFICATION_POLICY_NAME">RelaunchNotification</ph> policy follow this same schedule.

      If not set, the default period of 345600000 milliseconds (four days) is used for <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> devices and 604800000 milliseconds (one week) for <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.''',
    },
    {
      'name': 'VirtualMachinesAllowed',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:66-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': True,
      'default_for_managed_devices_doc_only': False,
      'id': 421,
      'caption': '''Allow devices to run virtual machines on Chrome OS''',
      'tags': ['system-security'],
      'desc': '''Allows you to control whether virtual machines are allowed to run on Chrome OS.

      If the policy is set to True, the device is allowed to run virtual machines.
      If the policy is set to False, the device will not be allowed to run virtual machines.
      When this policy is changed to False, it applies to starting new virtual machines but does not shut down virtual machines which are already running.
      When this policy is not set on a managed device, the device is not allowed to run virtual machines.
      Unmanaged devices are allowed to run virtual machines.''',
    },
    {
      'name': 'SafeBrowsingWhitelistDomains',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome.*:68-', 'chrome_os:68-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['mydomain.com', 'myuniversity.edu'],
      'id': 422,
      'caption': '''Configure the list of domains on which Safe Browsing will not trigger warnings.''',
      'tags': [],
      'desc': '''Configure the list of domains which Safe Browsing will trust. This means:
      Safe Browsing will not check for dangerous resources (e.g. phishing, malware, or unwanted software) if their URLs match these domains.
      Safe Browsing's download protection service will not check downloads hosted on these domains.
      Safe Browsing's password protection service will not check for password reuse if the page URL matches these domains.

      If this setting is enabled, then Safe Browsing will trust these domains.
      If this setting is disabled or not set, then default Safe Browsing protection is applied to all resources.
      This policy is not available on Windows instances that are not joined to a <ph name="MS_AD_NAME">Microsoft® Active Directory®</ph> domain.''',
    },
    {
      'name': 'PasswordProtectionLoginURLs',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome.*:69-', 'chrome_os:69-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['https://mydomain.com/login.html', 'https://login.mydomain.com'],
      'id': 423,
      'caption': '''Configure the list of enterprise login URLs where password protection service should capture fingerprint of password.''',
      'tags': [],
      'desc': '''Configure the list of enterprise login URLs (HTTP and HTTPS schemes only). Fingerprint of password will be captured on these URLs and used for password reuse detection.
      In order for <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> to correctly capture password fingerprints, please make sure your login pages follow the guidelines on https://www.chromium.org/developers/design-documents/create-amazing-password-forms.

      If this setting is enabled, then password protection service will capture fingerprint of password on these URLs for password reuse detection purpose.
      If this setting is disabled or not set, then password protection service will only capture password fingerprint on https://accounts.google.com.
      This policy is not available on Windows instances that are not joined to a <ph name="MS_AD_NAME">Microsoft® Active Directory®</ph> domain.''',
    },
    {
      'name': 'PasswordProtectionChangePasswordURL',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome.*:69-', 'chrome_os:69-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 'https://mydomain.com/change_password.html',
      'id': 424,
      'caption': '''Configure the change password URL.''',
      'tags': [],
      'desc': '''Configure the change password URL (HTTP and HTTPS schemes only). Password protection service will send users to this URL to change their password after seeing a warning in the browser.
      In order for <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> to correctly capture the new password fingerprint on this change password page, please make sure your change password page follows the guidelines on https://www.chromium.org/developers/design-documents/create-amazing-password-forms.

      If this setting is enabled, then password protection service will send users to this URL to change their password after seeing a warning in the browser.
      If this setting is disabled or not set, then password protection service will send users to https://myaccounts.google.com to change their password.
      This policy is not available on Windows instances that are not joined to a <ph name="MS_AD_NAME">Microsoft® Active Directory®</ph> domain.''',
    },
    {
      'name': 'SafeBrowsingExtendedReportingEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:66-', 'chrome_os:66-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 429,
      'tags': ['google-sharing'],
      'caption': '''Enable Safe Browsing Extended Reporting''',
      'desc': '''Enables <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>'s Safe Browsing Extended Reporting and prevents users from changing this setting.

      Extended Reporting sends some system information and page content to Google servers to help detect dangerous apps and sites.

      If the setting is set to true, then reports will be created and sent whenever necessary (such as when a security interstitial is shown).

      If the setting is set to false, reports will never be sent.

      If this policy is set to true or false, the user will not be able to modify the setting.

      If this policy is left unset, the user will be able to change the setting and decide whether to send reports or not.

      See https://developers.google.com/safe-browsing for more info on Safe Browsing.''',
    },
    {
      'name': 'MachineLevelUserCloudPolicyEnrollmentToken',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome.*:66-'],
      'features': {
        'dynamic_refresh': False,
        'per_profile': False,
      },
      'example_value': '37185d02-e055-11e7-80c1-9a214cf093ae',
      'id': 428,
      'caption': '''The enrollment token of cloud policy on desktop''',
      'tags': [],
      'desc': '''
        If this policy is set, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will try to register itself and apply associated cloud policy for all profiles.

        The value of this policy is an Enrollment token that can be retrieved from the Google Admin console.''',
    },
    {
      'name': 'AutoplayAllowed',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.win:66-', 'chrome.linux:66-', 'chrome.mac:66-', 'chrome_os:66-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 430,
      'caption': '''Allow media autoplay''',
      'tags': [],
      'desc': '''Allows you to control if videos can play automatically (without user consent) with audio content in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.

      If the policy is set to True, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> is allowed to autoplay media.
      If the policy is set to False, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> is not allowed to autoplay media. The AutoplayWhitelist policy can be used to override this for certain URL patterns.
      By default, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> is not allowed to autoplay media. The AutoplayWhitelist policy can be used to override this for certain URL patterns.

      Note that if <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> is running and this policy changes, it will be applied only to new opened tabs. Therefore some tabs might still observe the previous behavior.
      ''',
    },
    {
      'name': 'AutoplayWhitelist',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome.*:66-', 'chrome_os:66-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['https://example.com', 'https://www.chromium.org'],
      'id': 431,
      'caption': '''Allow media autoplay on a whitelist of URL patterns''',
      'tags': [],
      'desc': '''Controls the whitelist of URL patterns that autoplay will always be enabled on.

      If autoplay is enabled then videos can play automatically (without user consent) with audio content in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.

      A URL pattern has to be formatted according to https://www.chromium.org/administrators/url-blacklist-filter-format.

      If the AutoplayAllowed policy is set to True then this policy will have no effect.

      If the AutoplayAllowed policy is set to False then any URL patterns set in this policy will still be allowed to play.

      Note that if <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> is running and this policy changes, it will be applied only to new opened tabs. Therefore some tabs might still observe the previous behavior.''',
    },
    {
      'name': 'TabUnderAllowed',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:67-67', 'chrome_os:67-67'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'deprecated': True,
      'id': 432,
      'caption': '''Allow sites to simultaneously navigate and open pop-ups''',
      'tags': [],
      'desc': '''Deprecated in M68. Use DefaultPopupsSetting instead.

      For a full explanation, see https://www.chromestatus.com/features/5675755719622656.
      If this policy is enabled, sites will be allowed to simultaneously navigate and open new windows/tabs.
      If this policy is disabled or not set, sites will be disallowed from simultaneously navigating and opening a new window/tab.''',
    },
    {
      'name': 'UserNativePrintersAllowed',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:67-'],
      'future': True,
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': False,
      'id': 433,
      'caption': '''Allow access to native CUPS printers''',
      'tags': [],
      'desc': '''Allows you to control if users can access non-enterprise printers

      If the policy is set to True, or not set at all, users will be able to add, configure, and print using their own native printers.

      If the policy is set to False, users will not be able to add and configure their own native printers. They will also not be able to print using any previously configured native printers.
      ''',
    },
    {
      'name': 'DeviceSamlLoginAuthenticationType',
      'type': 'int-enum',
      'schema': {
        'type': 'integer',
        'enum': [ 0, 1 ],
      },
      'items': [
        {
          'name': 'Default',
          'value': 0,
          'caption': '''Default configuration''',
        },
        {
          'name': 'ClientCertificate',
          'value': 1,
          'caption': '''Authentication based on client certificates''',
        },
      ],
      'supported_on': ['chrome_os:68-'],
      'device_only': True,
      'future': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': 0,
      'id': 438,
      'caption': '''SAML login authentication type''',
      'tags': ['system-security'],
      'desc': '''Configures the type of authentication for SAML logins.

      When this policy is unset or set to Default (value 0), the behavior of SAML logins is determined by the browser depending on other factors. In the most basic scenario, the user authentication and the protection of the cached user data are based on passwords manually entered by users.

      When this policy is set to ClientCertificate (value 1), client certificate authentication is used for newly added users which log in via SAML. No passwords are used for such users, and their cached local data is protected using corresponding cryptographic keys. For instance, this setting allows configuring smart card based user authentication (note that smart card middleware apps have to be installed via the DeviceLoginScreenAppInstallList policy).

      This policy affects only users who authenticate using SAML.''',
    },
    {
      'name': 'ChromeCleanupEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.win:68-'],
      'features': {
        'dynamic_refresh': False,
        'per_profile': False,
      },
      'example_value': True,
      'id': 441,
      'caption': '''Enable Chrome Cleanup on Windows''',
      'tags': ['system-security'],
      'desc': '''If disabled, prevents Chrome Cleanup from scanning the system for unwanted software and performing cleanups. Manually triggering Chrome Cleanup from chrome://settings/cleanup is disabled.

      If enabled or unset, Chrome Cleanup periodically scans the system for unwanted software and should any be found, will ask the user if they wish to remove it. Manually triggering Chrome Cleanup from chrome://settings is enabled.

      This policy is not available on Windows instances that are not joined to a <ph name="MS_AD_NAME">Microsoft® Active Directory®</ph> domain.''',
    },
    {
      'name': 'ChromeCleanupReportingEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.win:68-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': True,
      'id': 442,
      'caption': '''Control how Chrome Cleanup reports data to Google''',
      'tags': ['system-security'],
      'desc': '''If unset, should Chrome Cleanup detect unwanted software, it may report metadata about the scan to Google in accordance with policy set by SafeBrowsingExtendedReportingEnabled. Chrome Cleanup will then ask the user if they wish to clean up the unwanted software. The user can choose to share results of the cleanup with Google to assist with future unwanted software detection. These results contain file metadata, automatically installed extensions and registry keys as described by the Chrome Privacy Whitepaper.

      If disabled, should Chrome Cleanup detect unwanted software, it will not report metadata about the scan to Google, overriding any policy set by SafeBrowsingExtendedReportingEnabled. Chrome Cleanup will ask the user if they wish to clean up the unwanted software.  Results of the cleanup will not be reported to Google and the user will not have the option to do so.

      If enabled, should Chrome Cleanup detect unwanted software, it may report metadata about the scan to Google in accordance with policy set by SafeBrowsingExtendedReportingEnabled. Chrome Cleanup will ask the user if they wish to clean up the unwanted software.  Results of the cleanup will be reported to Google and the user will not have the option to prevent it.

      This policy is not available on Windows instances that are not joined to a <ph name="MS_AD_NAME">Microsoft® Active Directory®</ph> domain.''',
    },
    {
      'name': 'AllowedUILocales',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome_os:68-'],
      'device_only': False,
      'features': {
        'dynamic_refresh': False,
        'per_profile': True
      },
      'example_value': [ 'en-US' ],
      'max_size': 16777216,
      'id': 444,
      'caption': '''Configure the allowed UI locales in a user session''',
      'tags': [],
      'desc': '''Configures the locales <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> may be displayed in.

      If this policy is set, the user can only configure <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> to be displayed in one of the locales specified by this policy. If this policy is not set or set to an empty list, <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> can be displayed in all supported UI locales. If this policy is set to a list with invalid values, all invalid values will be ignored. If a user previously configured <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> to be displayed in a locale that is not allowed by this policy, the display locale will be switched to an allowed UI locale the next time the user signs in. If the user had configured preferred locales and one of the preferred locales is allowed by this policy, <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> will switch to this locale. Otherwise, <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> will switch to the first valid value specified by this policy, or to a fallback locale (currently en-US), if this policy only contains invalid entries.'''
    },
    {
      'name': 'AllowedInputMethods',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome_os:69-'],
      'device_only': False,
      'features': {
        'dynamic_refresh': True,
        'per_profile': True
      },
      'example_value': [ 'xkb:us::eng' ],
      'max_size': 16777216,
      'id': 456,
      'caption': '''Configure the allowed input methods in a user session''',
      'tags': [],
      'desc': '''Configures which keyboard layouts are allowed for <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> user sessions.

      If this policy is set, the user can only select one of the input methods specified by this policy. If this policy is not set or set to an empty list, the user can select all supported input methods. If the current input method is not allowed by this policy, the input method will be switched to the hardware keyboard layout (if allowed) or the first valid entry in this list. All invalid or unsupported input methods in this list will be ignored.'''
    },
    {
      'name': 'ArcAppInstallEventLoggingEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:67-'],
      'supported_chrome_os_management': ['google_cloud'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 447,
      'caption': '''Log events for Android app installs''',
      'tags': ['google-sharing'],
      'desc': '''Enables reporting of key events during Android app installation to Google. Events are captured only for apps whose installation was triggered via policy.

      If the policy is set to true, events will be logged.
      If the policy is set to false or unset, events will not be logged.''',
    },
    {
      'name': 'UsageTimeLimit',
      'type': 'dict',
      'schema': {
        'type': 'object',
        'properties': {
          'time_window_limit': {
            'type': 'object',
            'properties': {
              'entries': {
                'type': 'array',
                'items': {
                  'type': 'object',
                  'properties': {
                    'effective_day': {
                      'type': 'string',
                      'enum': [
                        'MONDAY',
                        'TUESDAY',
                        'WEDNESDAY',
                        'THURSDAY',
                        'FRIDAY',
                        'SATURDAY',
                        'SUNDAY'
                      ]
                    },
                    'starts_at': {
                      'type': 'object',
                      'id': 'Time',
                      'properties': {
                        'hour': {
                          'type': 'integer',
                          'minimum': 0,
                          'maximum': 23
                        },
                        'minute': {
                          'type': 'integer',
                          'minimum': 0,
                          'maximum': 59
                        },
                      }
                    },
                    'ends_at': { '$ref': 'Time' },
                    'last_updated_millis': { 'type': 'string' }
                  }
                }
              }
            }
          },
          'time_usage_limit': {
            'type': 'object',
            'properties': {
              'monday': {
                'type': 'object',
                'id': 'TimeUsageLimitEntry',
                'properties': {
                  'usage_quota_mins': {
                    'type': 'integer',
                    'minimum': 0
                  },
                  'last_updated_millis': { 'type': 'string' }
                }
              },
              'tuesday': { '$ref': 'TimeUsageLimitEntry' },
              'wednesday': { '$ref': 'TimeUsageLimitEntry' },
              'thursday': { '$ref': 'TimeUsageLimitEntry' },
              'friday': { '$ref': 'TimeUsageLimitEntry' },
              'saturday': { '$ref': 'TimeUsageLimitEntry' },
              'sunday': { '$ref': 'TimeUsageLimitEntry' },
              'reset_at': { '$ref': 'Time' }
            }
          },
          'overrides': {
            'type': 'array',
            'items': {
              'type': 'object',
              'properties': {
                'action': {
                  'type': 'string',
                  'enum': [
                    'LOCK',
                    'UNLOCK'
                  ]
                },
                'created_at_millis': { 'type': 'string' },
                'action_specific_data': {
                  'type': 'object',
                  'properties': {
                    'duration_mins': {
                      'type': 'integer',
                      'minimum': 0
                    }
                  }
                }
              }
            }
          }
        }
      },
      'supported_on': ['chrome_os:69-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True
      },
      'example_value': {
        'time_window_limit': {
          'entries': [{
            'effective_day': 'WEDNESDAY',
            'starts_at': {
              'hour': 21,
              'minute': 0
            },
            'ends_at': {
              'hour': 7,
              'minute': 30
            },
            'last_updated_millis': '1000000'
          }]
        },
        'time_usage_limit': {
          'monday': {
            'usage_quota_mins': 120,
            'last_updated_millis': '1200000'
          },
          'tuesday': {
            'usage_quota_mins': 120,
            'last_updated_millis': '1200000'
          },
          'wednesday': {
            'usage_quota_mins': 120,
            'last_updated_millis': '1200000'
          },
          'thursday': {
            'usage_quota_mins': 120,
            'last_updated_millis': '1200000'
          },
          'friday': {
            'usage_quota_mins': 120,
            'last_updated_millis': '1200000'
          },
          'saturday': {
            'usage_quota_mins': 120,
            'last_updated_millis': '1200000'
          },
          'sunday': {
            'usage_quota_mins': 120,
            'last_updated_millis': '1200000'
          },
          'reset_at': {
            'hour': 6,
            'minute': 0
          }
        },
        'overrides': [{
          'action': 'UNLOCK',
          'created_at_millis': '1250000',
          'action_specific_data': {
            'duration_mins': 30
          }
        }]
      },
      'id': 448,
      'caption': '''Time Limit''',
      'tags': [],
      'desc': '''Allows you to lock the user's session based on the client time or the usage quota of the day.

          The |time_window_limit| specifies a daily window in which the user's session should be locked. We only support one rule for each day of the week, therefore the |entries| array may vary from 0-7 in size. |starts_at| and |ends_at| are the beginning and the end of the window limit, when |ends_at| is smaller than |starts_at| it means that the |time_limit_window| ends on the following day. |last_updated_millis| is the UTC timestamp for the last time this entry was updated, it is sent as a string because the timestamp wouldn't fit in an integer.

          The |time_usage_limit| specifies a daily screen quota, so when the user reaches it, the user's session is locked. There is a property for each day of the week, and it should be set only if there is an active quota for that day. |usage_quota_mins| is the amount of time that the managed device can be use in a day and |reset_at| is the time when the usage quota is renewed. The default value for |reset_at| is midnight ({'hour': 0, 'minute': 0}). |last_updated_millis| is the UTC timestamp for the last time this entry was updated, it is sent as a string because the timestamp wouldn't fit in an integer.

          |overrides| is provided to invalidate temporarily one or more of the previous rules.
          * If neither time_window_limit nor time_usage_limit is active |LOCK| can be used to lock the device.
          * |LOCK| temporarily locks a user session until the next time_window_limit or time_usage_limit starts.
          * |UNLOCK| unlocks a user's session locked by time_window_limit or time_usage_limit.
          |created_time_millis| is the UTC timestamp for the override creation, it is sent as a String because the timestamp wouldn't fit in an integer It is used to determine whether this override should still be applied. If the current active time limit feature (time usage limit or time window limit) started after the override was created, it should not take action. Also if the override was created before the last change of the active time_window_limit or time_usage_window it should not be applied.

          Multiple overrides may be sent, the newest valid entry is the one that is going to be applied.'''
    },
    {
      'name': 'ArcBackupRestoreServiceEnabled',
      'type': 'int-enum',
      'schema': {
        'type': 'integer',
        'enum': [ 0, 1 ],
      },
      'items': [
        {
          'name': 'BackupAndRestoreDisabled',
          'value': 0,
          'caption': '''Backup and restore disabled''',
        },
        {
          'name': 'BackupAndRestoreUnderUserControl',
          'value': 1,
          'caption': '''User decides whether to enable backup and restore''',
        },
      ],
      'supported_on': ['chrome_os:68-'],
      'features': {
        'dynamic_refresh': False,
        'per_profile': False,
      },
      'example_value': 1,
      'id': 449,
      'default_for_enterprise_users': 0,
      'caption': '''Control Android backup and restore service''',
      'tags': ['google-sharing'],
      'desc':
      '''This policy controls the availability of Android backup and restore.

      When this policy is not configured or set to <ph name="BR_DISABLED">BackupAndRestoreDisabled</ph>, Android backup and restore is disabled and cannot be enabled by the user.

      When this policy is set to <ph name="BR_UNDER_USER_CONTROL">BackupAndRestoreUnderUserControl</ph>, the user is asked to choose whether to use Android backup and restore. If the user enables backup and restore, Android app data is uploaded to Android backup servers and restored from them upon app re-installations for compatible apps.''',
    },
    {
      'name': 'ArcGoogleLocationServicesEnabled',
      'type': 'int-enum',
      'schema': {
        'type': 'integer',
        'enum': [ 0, 1 ],
      },
      'items': [
        {
          'name': 'GoogleLocationServicesDisabled',
          'value': 0,
          'caption': '''Google location services disabled''',
        },
        {
          'name': 'GoogleLocationServicesUnderUserControl',
          'value': 1,
          'caption': '''User decides whether to enable Google location services''',
        },
      ],
      'supported_on': ['chrome_os:68-'],
      'features': {
        'dynamic_refresh': False,
        'per_profile': False,
      },
      'example_value': 1,
      'id': 450,
      'default_for_enterprise_users': 0,
      'caption': '''Control Android Google location services''',
      'tags': ['google-sharing'],
      'desc':
      '''This policy controls the availability of Google location services.

      When this policy is not configured or set to <ph name="GLS_DISABLED">GoogleLocationServicesDisabled</ph>, Google location services are disabled and cannot be enabled by the user.

      When this policy is set to <ph name="GLS_UNDER_USER_CONTROL">GoogleLocationServicesUnderUserControl</ph>, the user is asked to choose whether to use Google location services. This will allow Android apps to use the services to query the device location, and also will enable submitting of anonymous location data to Google.

      Note that this policy is ignored and Google location services are always disabled when the <ph name="DEFAULT_GEOLOCATION_SETTING_POLICY_NAME">DefaultGeolocationSetting</ph> policy is set to <ph name="BLOCK_GEOLOCATION_SETTING">BlockGeolocation</ph>.''',
    },
    {
      'name': 'EnableSyncConsent',
      'type': 'main',
      'schema': { 'type': 'boolean'},
      'supported_on': ['chrome_os:66-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': False,
      'id': 451,
      'caption': '''Enable displaying Sync Consent during sign-in''',
      'tags': [],
      'desc': '''This policy controls if Sync Consent can be shown to the user during first sign-in. It should be set to false if Sync Consent is never needed for the user.
      If set to false, Sync Consent will not be displayed.
      If set to true or unset, Sync Consent can be displayed.''',
    },
    {
      'name': 'ContextualSuggestionsEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['android:69-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 452,
      'caption': '''Enable contextual suggestions of related web pages''',
      'tags': ['google-sharing'],
      'desc':
      '''If this is set to true or unset, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will suggest pages related to the current page.
      These suggestions are fetched remotely from Google servers.

      If this setting is set to false, suggestions will not be fetched or displayed.''',
    },
    {
      'name': 'DeviceAutoUpdateTimeRestrictions',
      'type': 'dict',
      'schema': {
        'type': 'array',
        'items': {
          'type': 'object',
          'description': 'Time interval that spans at most one week. If the start time is later than the end time, then the interval will wrap around.',
          'properties': {
            'start': {
              'description': 'Start time of the interval, inclusive.',
              'type': 'object',
              'id': 'DisallowedTimeInterval',
              'properties': {
                'day_of_week': {
                  'description': 'Day of the week for the interval.',
                  'type': 'string',
                  'enum': ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
                },
                'minutes': {
                  'description': 'Minutes elapsed in the current hour.',
                  'type': 'integer',
                  'minimum': 0,
                  'maximum': 59
                },
                'hours': {
                  'description': 'Hours elapsed since the start of the day in (24 hour format).',
                  'type': 'integer',
                  'minimum': 0,
                  'maximum': 23
                }
              },
              'required': ['day_of_week', 'minutes', 'hours']
            },
            'end': {
              'description': 'End of the interval, exclusive.',
              '$ref': 'DisallowedTimeInterval'
            }
          },
          'required': ['start', 'end']
        }
      },
      'supported_on': ['chrome_os:69-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': [
        {
          'start': {
            'day_of_week': 'Monday',
            'minutes': 50,
            'hours': 3,
          },
          'end': {
            'day_of_week': 'Thursday',
            'minutes': 30,
            'hours': 2,
          }
        },
        {
          'start': {
            'day_of_week': 'Thursday',
            'minutes': 30,
            'hours': 3
          },
          'end': {
            'day_of_week': 'Sunday',
            'minutes': 10,
            'hours': 15,
          }
        }
      ],
      'id': 453,
      'caption': '''Update Time Restrictions''',
      'tags': [],
      'desc': '''This policy controls the time frames during which the <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> device is not allowed to check for updates automatically.
      When this policy is set to a non-empty list of time intervals:
      Devices will not be able to check for updates automatically during the specified time intervals. Devices that require a rollback or are below the minimum <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> version will not be affected by this policy due to potential security issues. Furthermore, this policy will not block update checks requested by users or administrators.
      When this policy is unset or contains no time intervals:
      No automatic update checks will be blocked by this policy, but they may be blocked by other policies.''',
    },
    {
      'id': 454,
      'name': 'PromotionalTabsEnabled',
      'tags': [],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'supported_on': ['chrome.*:69-'],
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'caption': '''Enable showing full-tab promotional content''',
      'example_value': False,
      'desc': '''Allows you to control the presentation of full-tab promotional and/or educational content in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.

      If not configured or enabled (set to true), <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> may show full-tab content to users to provide product information.

      If disabled (set to false), <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will not show full-tab content to users to provide product information.

      This setting controls the presentation of the welcome pages that help users sign into <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>, choose it as their default browser, or otherwise inform them of product features.'''
    },
    {
      'name': 'SafeSitesFilterBehavior',
      'type': 'int-enum',
      'schema': {
        'type': 'integer',
        'enum': [ 0, 1 ],
      },
      'items': [
        {
          'name': 'SafeSitesFilterDisabled',
          'value': 0,
          'caption': '''Do not filter sites for adult content''',
        },
        {
          'name': 'SafeSitesFilterEnabled',
          'value': 1,
          'caption': '''Filter top level sites (but not embedded iframes) for adult content''',
        },
      ],
      'supported_on': ['chrome.*:69-', 'chrome_os:69-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 0,
      'id': 455,
      'caption': '''Control SafeSites adult content filtering.''',
      'tags': ['filtering', 'google-sharing'],
      'desc':
      '''This policy controls the application of the SafeSites URL filter.
      This filter uses the Google Safe Search API to classify URLs as pornographic or not.

      When this policy is not configured or set to "Do not filter sites for adult content", sites will not be filtered.

      When this policy is set to "Filter top level sites for adult content", sites classified as pornographic will be filtered.''',
    },
    {
      'name': 'OverrideSecurityRestrictionsOnInsecureOrigin',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' }
      },
      'supported_on': ['chrome.*:69-', 'chrome_os:69-', 'android:69-'],
      'features': {
        'dynamic_refresh': False,
        'per_profile': True,
      },
      'example_value': ['http://testserver.example.com/','*.example.org'],
      'id': 457,
      'caption': '''Origins or hostname patterns for which restrictions on
      insecure origins should not apply''',
      'tags': ['system-security'],
      'desc': '''
      The policy specifies a list of origins (URLs) or hostname patterns (such
      as "*.example.com") for which security restrictions on insecure origins
      will not apply.

      The intent is to allow organizations to set whitelist origins for legacy
      applications that cannot deploy TLS, or to set up a staging server for
      internal web development so that their developers can test out features
      requiring secure contexts without having to deploy TLS on the staging
      server. This policy will also prevent the origin from being labeled
      "Not Secure" in the omnibox.

      Setting a list of URLs in this policy has the same effect as setting the
      command-line flag '--unsafely-treat-insecure-origin-as-secure' to a
      comma-separated list of the same URLs. If the policy is set, it will
      override the command-line flag.

      This policy will override UnsafelyTreatInsecureOriginAsSecure, if present.

      For more information on secure contexts, see
      https://www.w3.org/TR/secure-contexts/.
      '''
    },
    {
      'name': 'DeviceUpdateStagingSchedule',
      'type': 'dict',
      'schema': {
        'type': 'array',
        'items': {
          'type': 'object',
          'description': 'Contains the number of days and the percentage of the fleet that should be updated after those days have passed.',
          'id': 'DayPercentagePair',
          'properties': {
            'days': {
              'description': 'Days from update discovery.',
              'type': 'integer',
              'minimum': 1,
              'maximum': 28,
            },
            'percentage': {
              'description': 'Percentage of the fleet that should be updated after the given days.',
              'type': 'integer',
              'minimum': 0,
              'maximum': 100,
            }
          }
        },
      },
      'supported_on': ['chrome_os:69-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': [{'days': 7, 'percentage': 50}, {'days': 10, 'percentage': 100}],
      'id': 458,
      'caption': '''The staging schedule for applying a new update''',
      'tags': ['system-security'],
      'desc': '''This policy defines a list of percentages that will define the fraction of <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> devices in the OU to update per day starting from the day the update is first discovered. The discovery time is later than the update published time, since it could be a while after the update publishing until the device checks for updates.

      Each (day, percentage) pair contains which percentage of the fleet has to be updated by the given number of days since the update has been discovered. For example, if we have the pairs [(4, 40), (10, 70), (15, 100)], then 40% of the fleet should have been updated 4 days after seeing the update. 70% should be updated after 10 days, and so on.

      If there is a value defined for this policy, updates will ignore the <ph name="DEVICE_UPDATE_SCATTER_FACTOR_POLICY_NAME">DeviceUpdateScatterFactor</ph> policy and follow this policy instead.

      If this list is empty, there will be no staging and updates will be applied according to other device policies.

      This policy does not apply for channel switches.''',
    },
    {
      'name': 'TabLifecyclesEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.win:69-'],
      'features': {
        'dynamic_refresh': False,
        'per_profile': False,
      },
      'example_value': False,
      'id': 460,
      'caption': '''Enables or disables tab lifecycles''',
      'tags': [],
      'desc': '''The tab lifecyles feature reclaims CPU and eventually memory associated with running tabs that have not been used in a long period of time, by first throttling them, then freezing them and finally discarding them.

      If the policy is set to false then tab lifecycles are disabled, and all tabs will be left running normally.

      If the policy is set to true or left unspecified then tab lifecycles are enabled.''',
    },
    {
      'name': 'UrlKeyedAnonymizedDataCollectionEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:69-', 'chrome_os:69-', 'android:70-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 461,
      'caption': '''Enable URL-keyed anonymized data collection''',
      'tags': ['google-sharing'],
      'desc': '''Enable URL-keyed anonymized data collection in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> and prevents users from changing this setting.

      URL-keyed anonymized data collection sends URLs of pages the user visits to Google to make searches and browsing better.

      If you enable this policy, URL-keyed anonymized data collection is always active.

      If you disable this policy, URL-keyed anonymized data collection is never active.

      If this policy is left not set, URL-keyed anonymized data collection will be enabled but the user will be able to change it.''',
    },
    {
      'id': 462,
      'name': 'NetworkFileSharesAllowed',
      'type': 'main',
      'schema': {'type': 'boolean', },
      'tags': [],
      'features': {
        'dynamic_refresh': False,
        'per_profile': True,
      },
      'supported_on': ['chrome_os:70-'],
      'caption': '''Contorls Network File Shares for ChromeOS availability''',
      'example_value': True,
      'desc': '''This policy controls whether the Network File Shares feature for <ph name="PRODUCT_NAME">$2<ex>Google Chrome OS</ex></ph> is allowed for a user.

      When this policy is not configured or set to True, users will be able to use Network File Shares.

      When this policy is set to False, users will be unable to use Network File Shares.''',
    },
    {
      'name': 'WebRtcEventLogCollectionAllowed',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:70-', 'chrome_os:70-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 464,
      'caption': '''Allow collection of WebRTC event logs from Google services''',
      'tags': ['google-sharing'],
      'desc': '''
      If the policy is set to true, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> is allowed to collect WebRTC event logs from Google services (e.g. Google Meet), and upload those logs to Google.

      If the policy is set to false, or is unset, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> may not collect nor upload such logs.

      These logs contain diagnostic information helpful when debugging issues with audio or video calls in Chrome, such as the time and size of sent and received RTP packets, feedback about congestion on the network, and metadata about time and quality of audio and video frames. These logs do not contain audio or video contents from the call.

      This data collection by Chrome can only be triggered by Google's web services, such as Google Hangouts or Google Meet.

      Google may associate these logs, by means of a session ID, with other logs collected by the Google service itself; this is intended to make debugging easier.
      ''',
    },
    {
      'name': 'PowerSmartDimEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:70-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': False,
      'id': 465,
      'caption': '''Enable smart dim model to extend the time until the screen is dimmed''',
      'tags': [],
      'desc': '''Specifies whether a smart dim model is allowed to extend the time until the screen is dimmed.

      When the screen is about to be dimmed, the smart dim model evaluates if dimming the screen should be deferred. If the smart dim model defers dimming the screen, it effectively extends the time until the screen is dimmed. In this case, the screen off, screen lock and idle delays get adjusted to maintain the same distances from the screen dim delay as originally configured.
      If this policy is set to True or left not set, the smart dim model will be enabled and allowed to extend the time until the screen is dimmed. If this policy is set to False, the smart dim model will not influence screen dimming.''',
    },
    {
      'name': 'CoalesceH2ConnectionsWithClientCertificatesForHosts',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome.*:70-','android:70-','chrome_os:70-'],
      'future': True,
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['example.com'],
      'id': 466,
      'caption': '''Allow coalescing of HTTP/2 connections for these hosts even when client certificates are used''',
      'tags': [],
      'desc': '''This policy allows HTTP/2 connection coalescing when client certificates are in use. In order to coalesce, both the hostname of the potential new connection and the hostname of an existing connection must match one or more patterns described by this policy. The policy is a list of hosts using the URLBlacklist filter format: "example.com" matches "example.com" and all subdomains (e.g. "sub.example.com"), while ".example.net" matches exactly "example.net".

      Coalescing requests to different hosts over connections that use client certificates can create security and privacy issues, as the ambient authority will be conveyed to all requests, even if the user did not explicitly authorize this. This policy is temporary and will be removed in a future release. See https://crbug.com/855690.

      If this policy is left unset, then the default behavior of not allowing any HTTP/2 connection coalescing on connections using client certificates will be used.''',
    },
    {
      'id': 467,
      'name': 'NetBiosShareDiscoveryEnabled',
      'type': 'main',
      'schema': {'type': 'boolean', },
      'tags': [],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'supported_on': ['chrome_os:70-'],
      'caption': '''Controls Network File Share discovery via <ph name="NETBIOS_NAME">NetBIOS</ph>''',
      'example_value': True,
      'default_for_enterprise_users': False,
      'desc': '''This policy controls whether the Network File Shares feature for <ph name="PRODUCT_NAME">$2<ex>Google Chrome OS</ex></ph> should use the <ph name="NETBIOS_PROTOCOL">NetBIOS Name Query Request protocol</ph> to discover shares on the network.
      When this policy is set to True, share discovery will use the <ph name="NETBIOS_PROTOCOL">NetBIOS Name Query Request protocol</ph> protocol to discover shares on the network.
      When this policy is set to False, share discovery will not use the <ph name="NETBIOS_PROTOCOL">NetBIOS Name Query Request protocol</ph> protocol to discover shares.
      If the policy is left not set, the default is disabled for enterprise-managed users and enabled for non-managed users.''',
    },
    {
      'name': 'WebAppInstallForceList',
      'type': 'dict',
      'schema': {
        'type': 'array',
        'items': {
          'type': 'object',
          'properties': {
            'url': { 'type': 'string' },
            'launch_container': {
              'type': 'string',
              'enum': [
                'tab',
                'window'
              ]
            }
          },
          'required': ['url']
        }
      },
      'supported_on': ['chrome.*:70-', 'chrome_os:70-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': [{
        'url': 'https://www.google.com/maps',
        'launch_container': 'window'
      }, {
        'url': 'https://docs.google.com',
        'launch_container': 'tab'
      }],
      'id': 468,
      'caption': '''Configure list of force-installed Web Apps''',
      'tags': [],
      'desc': '''Specifies a list of websites that are installed silently, without user interaction, and which cannot be uninstalled nor disabled by the user.

      Each list item of the policy is an object with two members: "url" and "launch_container". "url" should be the URL of the web app to install and "launch_container" should be either "window" or "tab" to indicate how the Web App will be opened once installed. If "launch_container" is omitted, the app will launch in a window if Chrome considers it a Progressive Web App and in a tab otherwise.''',
      'label': '''URLs for Web Apps to be silently installed.''',
    },
    {
      'id': 470,
      'name': 'ReportVersionData',
      'type': 'main',
      'schema': {'type': 'boolean' },
      'tags': ['admin-sharing'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'supported_on': ['chrome.*:70-'],
      'caption': '''Report OS and <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> Version Information''',
      'example_value': False,
      'default_for_enterprise_users': True,
      'desc': '''This policy controls whether to report version information, such as OS version, OS platform, OS architecture, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> version and <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> channel.

      When this policy is left unset or set to True, version information is gathered.
      When this policy is set to False, version information is not gathered.

      This policy is only effective when the Chrome Reporting Extension and Cloud Management are enabled.'''
    },
    {
      'id': 471,
      'name': 'ReportPolicyData',
      'type': 'main',
      'schema': {'type': 'boolean' },
      'tags': ['admin-sharing'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'supported_on': ['chrome.*:70-'],
      'caption': '''Report <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> Policy Information''',
      'example_value': False,
      'default_for_enterprise_users': True,
      'desc': '''This policy controls whether to report policy data and time of policy fetch.

      When this policy is left unset or set to True, policy data and time of policy fetch are gathered.
      When this policy is set to False, policy data and time of policy fetch are not gathered.

      This policy is only effective when the Chrome Reporting Extension and Cloud Management are enabled.'''
    },
    {
      'id': 472,
      'name': 'ReportMachineIDData',
      'type': 'main',
      'schema': {'type': 'boolean' },
      'tags': ['admin-sharing'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'supported_on': ['chrome.*:70-'],
      'caption': '''Report Machine Identification information''',
      'example_value': False,
      'default_for_enterprise_users': True,
      'desc': '''This policy controls whether to report information that can be used to identify machines, such as machine name and network addresses.

      When this policy is left unset or set to True, information that can be used to identify machines is gathered.
      When this policy is set to False, information that can be used to identify machines is not gathered.

      This policy is only effective when the Chrome Reporting Extension and Cloud Management are enabled.'''
    },
    {
      'id': 473,
      'name': 'ReportUserIDData',
      'type': 'main',
      'schema': {'type': 'boolean' },
      'tags': ['admin-sharing'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'supported_on': ['chrome.*:70-'],
      'caption': '''Report User Identification information''',
      'example_value': False,
      'default_for_enterprise_users': True,
      'desc': '''This policy controls whether to report information that can be used to identify users, such as OS login, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> Profile login, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> Profile name, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> Profile path and <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> executable path.

      When this policy is left unset or set to True, information that can be used to identify users is gathered.
      When this policy is set to False, information that can be used to identify users is not gathered.

      This policy is only effective when the Chrome Reporting Extension and Cloud Management are enabled.'''
    },
  ],

  'messages': {
    # Messages that are not associated to any policies.
    'win_supported_win7': {
      'desc': '''A label specifying the oldest possible compatible version of Windows. This text will appear right next to a label containing the text 'Supported on:'.''',
      'text': '''Microsoft Windows 7 or later'''
    },
    'mac_chrome_preferences': {
      'desc': '''A text indicating in Mac OS X Workgroup Manager, that currently the preferences of Chromium are being edited''',
      'text': '''<ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> preferences'''
    },
    'doc_data_type': {
      'desc': '''Caption text of the field 'data type' in the summary chart of a policy in the generated documentation''',
      'text': '''Data type:'''
    },
    'doc_win_reg_loc': {
      'desc': '''Caption text of the field 'windows registry location' in the summary chart of a policy in the generated documentation''',
      'text': '''Windows registry location for Windows clients:'''
    },
    'doc_chrome_os_reg_loc': {
      'desc': '''Caption text of the field '<ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> registry location' in the summary chart of a policy in the generated documentation''',
      'text': '''Windows registry location for <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> clients:'''
    },
    'doc_mac_linux_pref_name': {
      'desc': '''Caption text of the field 'mac/linux preference name' in the summary chart of a policy in the generated documentation''',
      'text': '''Mac/Linux preference name:'''
    },
    'doc_android_restriction_name': {
      'desc': '''Caption text of the field 'android restriction name' in the summary chart of a policy in the generated documentation''',
      'text': '''Android restriction name:'''
    },
    'doc_android_webview_restriction_name': {
      'desc': '''Caption text of the field 'android webview restriction name' in the summary chart of a policy in the generated documentation''',
      'text': '''Android WebView restriction name:'''
    },
    'doc_supported_on': {
      'desc': '''Caption text of the list of 'products, platforms and versions where this policy is supported' in the summary chart of a policy in the generated documentation''',
      'text': '''Supported on:'''
    },
    'doc_since_version': {
      'desc': '''Text in the summary chart of a policy that specifies the version number in which the policy was introduced.''',
      'text': '''since version <ph name="SINCE_VERSION">$6<ex>8</ex></ph>'''
    },
    'doc_until_version': {
      'desc': '''Text in the summary chart of a policy that specifies the version number after which the policy was dropped.''',
      'text': '''until version <ph name="UNTIL_VERSION">$6<ex>10</ex></ph>'''
    },
    'doc_supported_features': {
      'desc': '''Caption text of the list of 'policy features that this policy supports' in the summary chart of a policy in the generated documentation''',
      'text': '''Supported features:'''
    },
    'doc_description': {
      'desc': '''Caption text of the 'description text' in the summary chart of a policy in the generated documentation''',
      'text': '''Description:'''
    },
    'doc_arc_support': {
      'desc': '''Caption text of the field in the generated documentation that describes how a policy affects Android applications on Chrome OS''',
      'text': '''Note for <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> devices supporting Android apps:'''
    },
    'doc_example_value': {
      'desc': '''Caption text of the field 'example value' in the summary chart of a policy in the generated documentation''',
      'text': '''Example value:'''
    },
    'doc_win_example_value': {
      'desc': '''Caption text of the field 'windows (windows clients)' in the summary chart of a policy in the generated documentation''',
      'text': '''Windows (Windows clients):'''
    },
    'doc_chrome_os_example_value': {
      'desc': '''Caption text of the field 'windows (Chrome OS clients)' in the summary chart of a policy in the generated documentation''',
      'text': '''Windows (<ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> clients):'''
    },
    'doc_intro': {
      'desc': '''Introduction text for the generated policy documentation''',
      'text': '''Both Chromium and Google Chrome support the same set of policies. Please note that this document may include unreleased policies (i.e. their 'Supported on' entry refers to a not-yet released version of <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>) which are subject to change or removal without notice and for which no guarantees of any kind are provided, including no guarantees with respect to their security and privacy properties.

These policies are strictly intended to be used to configure instances of <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> internal to your organization. Use of these policies outside of your organization (for example, in a publicly distributed program) is considered malware and will likely be labeled as malware by Google and anti-virus vendors.

These settings don't need to be configured manually! Easy-to-use templates for Windows, Mac and Linux are available for download from <ph name="POLICY_TEMPLATE_DOWNLOAD_URL">https://www.chromium.org/administrators/policy-templates<ex> https://www.chromium.org/administrators/policy-templates</ex></ph>.

The recommended way to configure policy on Windows is via GPO, although provisioning policy via registry is still supported for Windows instances that are joined to a <ph name="MS_AD_NAME">Microsoft® Active Directory®</ph> domain.'''
    },
    'doc_back_to_top': {
      'desc': '''Text of a link in the generated policy documentation, that takes the user to the top of the page''',
      'text': '''Back to top'''
    },
    'doc_supported': {
      'desc': '''Appears next to the name of each supported feature in the 'list of supported policy features' in the generated policy documentation''',
      'text': '''Yes'''
    },
    'doc_not_supported': {
      'desc': '''Appears next to the name of each unsupported feature in the 'list of supported policy features' in the generated policy documentation''',
      'text': '''No'''
    },
    'doc_name_column_title': {
      'desc': '''Appears at the top of the policy summary table, over the column of policy names, in the generated policy documentation''',
      'text': '''Policy Name'''
    },
    'doc_description_column_title': {
      'desc': '''Appears at the top of the policy summary table, over the column of short policy descriptions, in the generated policy documentation''',
      'text': '''Description'''
    },
    'doc_feature_dynamic_refresh': {
      'desc': '''The name of the feature that indicates for a given policy that changes to it are respected by Chromium without a browser restart''',
      'text': '''Dynamic Policy Refresh'''
    },
    'doc_feature_can_be_recommended': {
      'desc': '''The name of the feature that indicates for a given policy that it can be recommended, instead of mandatory''',
      'text': '''Can Be Recommended'''
    },
    'doc_feature_can_be_mandatory': {
      'desc': '''The name of the feature that indicates for a given policy that it can be mandatory, instead of recommended''',
      'text': '''Can Be Mandatory'''
    },
    'doc_feature_per_profile': {
      'desc': '''The name of the feature that indicates whether a policy is applicable to browser Profiles individually or whether it affects the entire browser.''',
      'text': '''Per Profile'''
    },
    'doc_deprecated': {
      'desc': '''Text appended in parentheses to the policy name to indicate that it has been deprecated''',
      'text': 'deprecated',
    },
    'doc_recommended': {
      'desc': '''Text appended in parentheses next to the policies top-level container to indicate that those policies are of the Recommended level''',
      'text': 'Default Settings (users can override)',
    },
    'doc_complex_policies_on_windows': {
      'desc': '''Text pointing the user to a help article for complex policies on Windows''',
      'text': '''encoded as a JSON string, for details see <ph name="COMPLEX_POLICIES_URL">https://www.chromium.org/administrators/complex-policies-on-windows<ex>https://www.chromium.org/administrators/complex-policies-on-windows</ex></ph>''',
    },
    'doc_reference_link': {
      'desc': '''Text pointing the user to the reference page for this policy, which may have more info (since it doesn't have a size limit)''',
      'text': '''Reference: <ph name="REFERENCE_URL">$6<ex>https://www.chromium.org/administrators/policy-list-3#WallpaperImage</ex></ph>''',
    },
    'doc_legacy_single_line_label': {
      'desc': '''A label for the legacy single-line textbox for a policy also has a more user-friendly multi-line textbox. See http://crbug/829328''',
      'text': '''<ph name="POLICY_NAME">$6<ex>Wallpaper Image</ex></ph> (The single-line field is deprecated and will be removed in the future. Please start using the multi-line textbox below.)''',
    },
  },
  'placeholders': [],
  'deleted_policy_ids': [412],
  'highest_id_currently_used': 480
}
