{
# 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
#   'dict' - a dictionary value, containing other values indexed by strings
#     NOTE: This type is not supported yet. https://crbug.com/108992
#   'external' - a policy that references external data.
#     NOTE: This type is currently supported on Chrome OS only.
#
# 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.
#   - 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.
#
# Non-translateable strings should be tagged using <ph name="..."></ph> as
# described in 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', 'ios', '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. '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' can be set to False to exclude that policy in the
#   mandatory policies template. This only affects the template generation;
#   The default is True.
#   'can_be_recommended' can be set to True to include that policy in the
#   recommended policies templates. This only affects the template generation;
#   all policies can be at the recommended level. The default is False.
#   '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.
#
# 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: highest ID currently used: 360
#   And don't forget to also update the EnterprisePolicies enum of
#   histograms.xml.
#
# 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.
#
# Enterprise defaults:
#   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.

  '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': [
        {
          '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 an Active Directory 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 an Active Directory domain.''',
        },
      ],
    },
    {
      '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': [
        {
          'name': 'NewTabPageLocation',
          'type': 'string',
          'schema': { 'type': 'string' },
          'supported_on': ['chrome.*:57-', 'chrome_os:57-'],
          '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 in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> 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 to be opened on start up. They are controlled by the RestoreOnStartup policies, which could be to open the New Tab page.

          The NewTabPageLocation can be set to a URL you specify here. It will also affect the Home Page if it is set to open the New Tab page, as well as the startup page if set to 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 an Active Directory 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-',
        'ios:34-47',
      ],
      '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="NETWORKPREDICTIONOPTIONS_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 preference to 'always', 'never', or 'WiFi only', 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': '''Enables 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': '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': [
        {
          '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,
          },
          'example_value': 'my-awesome-domain.com',
          'id': 316,
          'caption': '''Configure the required domain name for remote access clients''',
          'tags': [],
          'desc': '''Configures the required client domain name that will be imposed on remote access clients and prevents users from changing it.

          If this setting is enabled, then only clients from the specified domain 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 can connect to the host; for anytime remote access, only the host owner can connect.

          See also RemoteAccessHostDomain.''',
        },
        {
          '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,
          },
          'example_value': 'my-awesome-domain.com',
          'id': 154,
          'caption': '''Configure the required domain name for remote access hosts''',
          'tags': [],
          'desc': '''Configures the required host domain name 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 the specified domain name.

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

          See also RemoteAccessHostClientDomain.''',
        },
        {
          '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="REMOTEACCESSHOSTFIREWALLTRAVERSAL_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="REMOTEACCESSHOSTFIREWALLTRAVERSAL_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': '''Requires that the name of the local user and the remote access host owner match''',
          'tags': [],
          'desc': '''Requires that the name of the local user and the remote access host owner match.

          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': '''URL where remote access clients should obtain their authentication token.

          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': '''URL for validating remote access client authentication token.

          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': '''Client certificate for connecting to RemoteAccessHostTokenValidationUrl.

          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': '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="FORCEGOOGLESAFESEARCH_POLICY_NAME">ForceGoogleSafeSearch</ph> and <ph name="FORCEYOUTUBERESTRICT_POLICY_NAME">ForceYouTubeRestrict</ph> instead. This policy is ignored if either the <ph name="FORCEGOOGLESAFESEARCH_POLICY_NAME">ForceGoogleSafeSearch</ph>, the <ph name="FORCEYOUTUBERESTRICT_POLICY_NAME">ForceYouTubeRestrict</ph> or the (deprecated) <ph name="FORCEYOUTUBESAFETYMODE_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="FORCEYOUTUBERESTRICT_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.''',
    },
    {
      '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
      an Active Directory domain.  (For Chrome OS, see
      DeviceMetricsReportingEnabled.)''',
    },
    {
      'name': 'PasswordManager',
      'type': 'group',
      'caption': '''Password manager''',
      'desc': '''Configures the password manager.''',
      'policies': [
        {
          'name': 'PasswordManagerEnabled',
          'type': 'main',
          'schema': { 'type': 'boolean' },
          'supported_on': [
            'chrome.*:8-',
            'chrome_os:11-',
            'android:30-',
            'ios:34-47',
          ],
          '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 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-',
        'ios:34-47',
      ],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': False,
      'id': 18,
      'caption': '''Enable AutoFill''',
      'tags': [],
      'desc': '''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': '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">$1<ex>DefaultPluginsSetting</ex></ph> to control the avalability of the Flash plugin and <ph name="ALWAYS_OPEN_PDF_EXTERNALLY_POLICY">$1<ex>AlwaysOpenPdfExternally</ex></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">$1<ex>DefaultPluginsSetting</ex></ph> to control the avalability of the Flash plugin and <ph name="ALWAYS_OPEN_PDF_EXTERNALLY_POLICY">$1<ex>AlwaysOpenPdfExternally</ex></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">$1<ex>DefaultPluginsSetting</ex></ph> to control the avalability of the Flash plugin and <ph name="ALWAYS_OPEN_PDF_EXTERNALLY_POLICY">$1<ex>AlwaysOpenPdfExternally</ex></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-', 'chrome_os:11-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': True,
      'id': 66,
      'caption': '''Specify whether the plugin finder should be disabled''',
      'tags': [],
      'desc': '''If you set this setting to enabled the automatic search and installation of missing plugins will be disabled in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.

      Setting this option to disabled or leave it not set the plugin finder will be active.''',
      'label': '''Disable plugin finder''',
    },
    {
      '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.''',
      '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': '''Enables the creation of roaming copies for <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> profile data.

      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="ROAMINGPROFILELOCATION_POLICY_NAME">$1<ex>RoamingProfileLocation</ex></ph> policy.

      Google Sync is automatically disabled when this policy is enabled.

      To prevent accidental data leaks it is advisable to also set the <ph name="SIGNINALLOWED_POLICY_NAME">$1<ex>SigninAllowed</ex></ph> policy to False.

      If this policy is disabled or left not set only the regular local profiles will be used.''',
      '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="ROAMINGPROFILESUPPORTENABLED_POLICY_NAME">$1<ex>RoamingProfileSupportEnabled</ex></ph> policy has been enabled. If the <ph name="ROAMINGPROFILESUPPORTENABLED_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': '''Allows 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': '''Enables the old web-based signin''',
      'tags': [],
      'desc': '''Enables the old web-based signin flow.

      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': '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': '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 succesful 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': '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': [
        {
          '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-',
            'ios:34-47',
          ],
          '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 ],
          },
          '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-',
            'ios:34-47',
          ],
          '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">ProxyMode</ph> policy for more details.',
        },
        {
          'name': 'ProxyServer',
          'type': 'string',
          'schema': { 'type': 'string' },
          'supported_on': [
            'chrome.*:8-',
            'chrome_os:11-',
            'android:30-',
            'ios:34-47',
          ],
          '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">ProxyMode</ph> policy for more details.',
        },
        {
          'name': 'ProxyPacUrl',
          'type': 'string',
          'schema': { 'type': 'string' },
          'supported_on': [
            'chrome.*:8-',
            'chrome_os:11-',
            'android:30-',
            'ios:34-47',
          ],
          '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">ProxyMode</ph> policy for more details.',
        },
        {
          'name': 'ProxyBypassList',
          'type': 'string',
          'schema': { 'type': 'string' },
          'supported_on': [
            'chrome.*:8-',
            'chrome_os:11-',
            'android:30-',
            'ios:34-47',
          ],
          '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">ProxyMode</ph> policy for more details.',
        },
      ],
    },
    {
      # TODO(joaodasilva): Make this the default and deprecate the other proxy
      # policies once all providers are ready to load 'dict' policies.
      # This is currently an internal policy.
      # https://crbug.com/108992, https://crbug.com/108996
      'name': 'ProxySettings',
      'type': 'dict',
      'schema': {
        'type': 'object',
        'properties': {
          'ProxyMode': { 'type': 'string' },
          'ProxyPacUrl': { 'type': 'string' },
          'ProxyServer': { 'type': 'string' },
          'ProxyBypassList': { 'type': 'string' },
          'ProxyServerMode': { 'type': 'string' },
        },
      },
      'supported_on': [
        'chrome.*:18-',
        'chrome_os:18-',
        'android:30-',
        'ios:34-47',
      ],
      'future': True,
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': { "ProxyMode": "direct" },
      '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': 'HTTPAuthentication',
      'type': 'group',
      'caption': '''Policies for HTTP authentication''',
      'desc': '''Policies related to integrated HTTP authentication.''',
      'policies': [
        {
          'name': 'AuthSchemes',
          'type': 'string',
          'schema': { 'type': 'string' },
          'supported_on': ['chrome.*:9-','android:46-'],
          '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-'],
          '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-'],
          '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-'],
          '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-'],
          '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-'],
          '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': '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="EXTENSIONINSTALLFORCELIST_POLICY_NAME">ExtensionInstallForcelist</ph>. Force-installed extensions are installed regardless whether they are present in the blacklist.''',
      'policies': [
        {
          '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 removed if blacklisted.

          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'],
          '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 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
          ExtensionsInstallBlacklist 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 an Active Directory
          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 DeveloperToolsDisabled
          policy should be set.

          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>.

          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.

          ExtensionInstallBlacklist 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.

          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>. 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]+)*$',
                  },
                },
              },
              '^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',
                  },
                },
              },
            },
          },
          'future': True,
          'supported_on': ['chrome.*:40-', 'chrome_os:40-'],
          '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'],
            },
            'update_url:https://www.example.com/update.xml': {
              'blocked_permissions': ['wallpaper'],
            },
            '*': {
              'installation_mode': 'blocked',
              'blocked_permissions': ['downloads', 'bookmarks'],
              'install_sources': ['https://company-intranet/chromeapps'],
              'allowed_types': ['hosted_app'],
            },
          },
          '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 "*", 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>.

          The configuration for each extension (or extensions with same update URL) is another dictionary that can contain the fields documented below.

          "installation_mode": maps to a string indicating the installation mode for the extension. The valid strings are:
          * "allowed": allows the extension to be installed by the user. This is the default behavior.
          * "blocked": blocks installation of the extension.
          * "force_installed": the extension is automatically installed and can't be removed by the user.
          * "normal_installed": the extension is automatically installed but can be disabled by the user.

          The "installation_mode" can also be configured for multiple extensions as well, including the "*" extension (as default settings) and extensions with same update URL. Only the "allowed" and "blocked" values can be used in this case.

          If the mode is set to "force_installed" or "normal_installed" then an "update_url" must be configured too. Note that the update URL set in this policy is only used for the initial installation; subsequent updates of the extension will use the update URL indicated in the extension's manifest. The update URL should point to an Update Manifest XML document as mentioned above.

          "blocked_permissions": maps to a list of strings indicating the blocked API permissions for the extension. The permissions names are same as the permission strings declared in manifest of extension as described at <ph name="LINK_TO_EXTENSION_DOC3">https://developer.chrome.com/extensions/declare_permissions</ph>. This setting also can be configured for "*" extension. If the extension requires a permission which is on the blocklist, it will not be allowed to load. If it contains a blocked permission as optional requirement, it will be handled in the normal way, but requesting conflicting permissions will be declined automatically at runtime.

          "allowed_permissions": similar to "blocked_permissions", but instead explicitly allow some permissions which might be blocked by global blocked permission list, thus can not be configured for "*" extension. Note that this setting doesn't give granted permissions to extensions automatically.

          "minimum_version_required": maps to a version string. The format of the version string is the same as the one used in extension manifest, as described at <ph name="LINK_TO_EXTENSION_DOC4">https://developer.chrome.com/apps/manifest/version</ph>. An extension with a version older than the specified minimum version will be disabled. This applies to force-installed extensions as well.

          The following settings can be used only for the default "*" configuration:

          "install_sources": 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.

          "allowed_types": This setting whitelists the allowed types of extension/apps that can be installed in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.  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.

          This policy isn't ready for usage yet, please don't use it.
          '''
        },
      ],
    },
    {
      '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,
      },
      'example_value': False,
      'id': 36,
      'caption': '''Disable Developer Tools''',
      'tags': [],
      'desc': '''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.''',
      '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': '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': [
        {
          '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 an Active Directory 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 an Active Directory 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': '''Blocks third party cookies.

      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.''',
    },
    {
      # 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': [
        {
          'name': 'DefaultSearchProviderEnabled',
          'type': 'main',
          'schema': { 'type': 'boolean' },
          'supported_on': [
            'chrome.*:8-',
            'chrome_os:11-',
            'android:30-',
            'ios:34-47',
          ],
          '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 an Active Directory domain.''',
        },
        {
          'name': 'DefaultSearchProviderName',
          'type': 'string',
          'schema': { 'type': 'string' },
          'supported_on': [
            'chrome.*:8-',
            'chrome_os:11-',
            'android:30-',
            'ios:34-47',
          ],
          '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-',
            'ios:34-47',
          ],
          '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-',
            'ios:34-47',
          ],
          '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}{google:instantExtendedEnabledParameter}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-', 'chrome_os:11-', 'android:30-'],
          '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-', 'chrome_os:25-', 'android:30-'],
          '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-', 'chrome_os:29-', 'android:30-'],
          '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.''',
        },
      ],
    },
    {
      # 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': [
        {
          '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-',
            'ios:34-47',
          ],
          '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-', 'android:30-'],
          '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.''',
        },
        {
          '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 plugins''',
            },
            {
              'name': 'BlockPlugins',
              'value': 2,
              'caption': '''Block all plugins''',
            },
            {
              '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 plugins setting''',
          'tags': [],
          'desc': '''Allows you to set whether websites are allowed to automatically run plugins. Automatically running plugins can be either allowed for all websites or denied for all websites.

          Click to play allows plugins to run but the user must click them to start their execution.

          If this policy is left not set, 'AllowPlugins' will be used and the user will be able to change it.''',
        },
        {
          '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-',
            'ios:34-47',
            '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': 0,
          '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': 'AutoSelectCertificateForUrls',
          'type': 'list',
          'schema': {
            'type': 'array',
            'items': { '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': 'CookiesAllowedForUrls',
          'type': 'list',
          'schema': {
            'type': 'array',
            'items': { 'type': 'string' },
          },
          'supported_on': [
            'chrome.*:11-',
            'chrome_os:11-',
            'android:30-',
            'ios:34-47',
          ],
          '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.''',
        },
        {
          'name': 'CookiesBlockedForUrls',
          'type': 'list',
          'schema': {
            'type': 'array',
            'items': { 'type': 'string' },
          },
          'supported_on': [
            'chrome.*:11-',
            'chrome_os:11-',
            'android:30-',
            'ios:34-47',
          ],
          '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.''',
        },
        {
          'name': 'CookiesSessionOnlyForUrls',
          'type': 'list',
          'schema': {
            'type': 'array',
            'items': { 'type': 'string' },
          },
          'supported_on': [
            'chrome.*:11-',
            'chrome_os:11-',
            'android:30-',
            'ios:34-47',
          ],
          'features': {
            'dynamic_refresh': True,
            'per_profile': True,
          },
          'example_value': ['https://www.example.com', '[*.]example.edu'],
          'id': 68,
          'caption': '''Allow session only cookies on these sites''',
          'tags': [],
          'desc': '''Allows you to set a list of url patterns that specify sites which are allowed to set session only 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.

          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.

          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-', 'android:30-'],
          '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.''',
        },
        {
          'name': 'ImagesBlockedForUrls',
          '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': 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.''',
        },
        {
          '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 plugins on these sites''',
          'tags': [],
          'desc': '''Allows you to set a list of url patterns that specify sites which are allowed to run plugins.

          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 plugins on these sites''',
          'tags': [],
          'desc': '''Allows you to set a list of url patterns that specify sites which are not allowed to run plugins.

          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-',
            'ios:34-47',
            '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-',
            'ios:34-47',
            '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': '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': [
        {
          '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': '''Disable support for 3D graphics APIs.

      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': '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': [
        {
          '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': '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': [
        {
          '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': '''Allow <ph name="PRODUCT_FRAME_NAME">$3<ex>Google Chrome Frame</ex></ph> to handle the listed content types.

          If this policy is not set the default renderer will be used for all sites as specified by the 'ChromeFrameRendererSettings' policy.''',
        },
      ],
    },
    {
      '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': '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-',
        'ios:34-47',
      ],
      '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 show an integrated toolbar offering to translate the page for the user, when appropriate.

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

      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': '''Allows <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> to run plugins that are outdated.

      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-', 'chrome_os:13-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 86,
      'caption': '''Always runs plugins that require authorization''',
      'tags': ['system-security'],
      'desc': '''Allows <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> to run plugins that require authorization.

      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': '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': '''Enables the bookmark bar 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 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': '''Enables or disables bookmark editing''',
      'tags': [],
      'desc': '''Enables or disables editing bookmarks in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.

      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': '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-',
        'ios:34-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': '''Blocks access to the listed URLs.

      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-',
        'ios:34-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': '''Allows 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': '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-'],
      'deprecated': True,
      'features': {
        'dynamic_refresh': False,
        'per_profile': True,
      },
      'example_value': False,
      'id': 117,
      'caption': '''Disable Print Preview (deprecated)''',
      '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': 'DefaultPrinterSelection',
      'type': 'string',
      'schema': { '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": {
              "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': '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': '''Limit the time for which a user authenticated via SAML can log in offline.

      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': '''Selects 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-'],
      '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-'],
      '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-'],
      '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-'],
      '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-'],
      '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-'],
      '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-'],
      '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-'],
      '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-'],
      '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-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': False,
      '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, no status information is reported.
      If set to true or left unset, 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-'],
      '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-'],
      '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 frequency is 3 minutes. The minimum
      frequency is 30 seconds and the maximum frequency 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-'],
      '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="DEVICEALLOWNEWUSERS_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="CLOUDDPC_ACCOUNT_MANAGEMENT_POLICY">accountTypesWithManagementDisabled</ph> policy as part of <ph name="ARC_POLICY">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="DEVICEUSERWHITELISTPROTO_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="CLOUDDPC_ACCOUNT_MANAGEMENT_POLICY">accountTypesWithManagementDisabled</ph> policy as part of <ph name="ARC_POLICY">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 use the username/password prompt for login.''',
    },
    {
      '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 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. If not configured or set to false, metrics reporting will be disabled.''',
      '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': '''Disables 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': '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, there is no effect (i.e. no downgrades are performed) and the device will remain on the current version. 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-'],
      '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-'],
      '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-'],
      '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-'],
      '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-'],
      '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': '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_POLICY">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': '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': [
        {
          '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': '''Disables 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': '''Disables 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'],
      '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.''',
    },
    {
      'name': 'RestrictSigninToPattern',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome.*:21-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': '*@domain.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.''',
    },
    {
      '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': [],
      'desc': '''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.''',
    },
    {
      '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': '''Allow playing audio.

      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': '''Allow or deny audio capture.

      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': '''Allow or deny video capture.

      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 audio
      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': '''Disables taking screenshots.

      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': '''Adds a logout button to the system tray.

      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 session length''',
      'tags': [],
      'desc': '''Limit the maximum length of a user session.

      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': '''Allow fullscreen mode.

      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': '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': [
        {
          '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': '''Specify the action to take when the idle delay is reached.

          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="IDLEACTIONAC_POLICY_NAME">IdleActionAC</ph> and <ph name="IDLEACTIONBATTERY_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': '''Specify the action to take when the idle delay is reached while running on AC power.

          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': '''Specify the action to take when the idle delay is reached while running on battery power.

          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': '''Specify the action to take when the user closes the lid.

          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': '''Specifies whether audio activity affects power management.

          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': '''Specifies whether video activity affects power management.

          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'
            }
          },
          'id': 258,
          'caption': '''Power management settings when the user becomes idle''',
          'tags': [],
          'desc': '''Configure power management settings when the user becomes idle.

          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'
        }
      },
      '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': 'Accessibility',
      'type': 'group',
      'caption': '''Accessibility settings''',
      'desc': '''Configure <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> accessibility features.''',
      'policies': [
        {
          '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': '''Show <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> accessibility options in the system menu.

          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': '''Set the type of screen magnifier that is enabled.

          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-'],
      '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-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': False,
      },
      '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': '''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-'],
      '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-', 'ios:35-47'],
      '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': 'Attestation',
      'type': 'group',
      'caption': 'Remote Attestation',
      'desc': 'Configure the remote attestation with TPM mechanism.',
      'policies': [
        {
          'name': 'AttestationEnabledForDevice',
          'type': 'main',
          'schema': { 'type': 'boolean' },
          'supported_on': ['chrome_os:28-'],
          '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-'],
          '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': 'LocallyManagedUsers',
      'type': 'group',
      'caption': '''Locally managed users settings''',
      'desc': '''Configure settings for managed users.''',
      'policies': [
        {
          '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': '''The default behavior for sites not in any content pack.

          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-'],
          'device_only': True,
          'features': {
            'dynamic_refresh': False,
          },
          'example_value': True,
          '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-',
        'ios:35-47',
        'chrome.*:37-',
        'chrome_os:37-',
      ],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': [
        {
          "toplevel_name": "My managed bookmarks"
        }, {
          "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 "Managed bookmarks" folder that can't be modified by the user, but the user can choose to hide it from the bookmark bar. Managed bookmarks are not synced to the user account and can't be modified by extensions.

      Starting with release 51, the folder name for the bookmarks is customizable by adding a {"toplevel_name": "some name"} list item.''',
    },
    {
      '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': '''Configure user avatar image.

      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': '''Configure wallpaper image.

      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-'],
      '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': '''Allows Smart Lock to be used''',
      'tags': [],
      'desc': '''Allows Smart Lock to be used on <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> devices.

      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 profile 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 profile manager.''',
    },
    {
      'name': 'ForceBrowserSignin',
      'type': 'main',
      'future': True,
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:55-', 'android:57-'],
      'features': {
        'dynamic_refresh': False,
        'per_profile': False,
      },
      'example_value': False,
      'id': 346,
      'caption': '''Enables 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.

      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': [
          'ssl3',
          'tls1',
          'tls1.1',
          'tls1.2',
        ],
      },
      'items': [
        {
          'name': 'SSLv3',
          'value': 'ssl3',
          'caption': 'SSL 3.0',
        },
        {
          '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.*:39-43',
        'chrome_os:39-43',
        'android:39-43',
        'ios:39-43',
      ],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': 'ssl3',
      'id': 279,
      'caption': '''Minimum SSL version enabled''',
      'tags': [],
      'desc': '''Warning: SSLv3 support will be entirely removed from <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> after version 43 (around July 2015) and this policy will be removed at the same time.

      If this policy is not configured then <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> uses a default minimum version which is SSLv3 in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> 39 and TLS 1.0 in later versions.

      Otherwise it may be set to one of the following values: "sslv3", "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.

      Note that, despite the number, "sslv3" is an earlier version than "tls1".''',
    },
    {
      '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',
        'ios: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': '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': 'RC4Enabled',
      'type': 'main',
      'schema': {
        'type': 'boolean',
      },
      'supported_on': [
        'chrome.*:48-52',
        'chrome_os:48-52',
        'android:48-52',
        'ios:48-52',
      ],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      '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',
        'ios:53-57',
      ],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      '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 Touch to Search''',
      'tags': [],
      'desc': '''Enables the availability of Touch to Search in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>'s content view.

      If you enable this setting, Touch to Search will be available to the user and they can choose to turn the feature on or off.

      If you disable this setting, Touch 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-'],
      '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 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': '''Allows 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': '''Enable showing the welcome page on the first browser launch following OS upgrade.

      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': '''Use hardware acceleration when available.

      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': '',
      '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.'''
    },
    {
      'name': 'AllowKioskAppControlChromeVersion',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:51-'],
      '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-'],
      '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 ],
      },
      '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 acess-points to 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 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': '''Enables ending processes in Task Manager''',
      'desc': '''Enables ending processes in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>'s Task Manager.

      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': '''Enables 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-'],
      '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-'],
      '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': 'LoginApps',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome_os:54-'],
      '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.

      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': '''Permit locking the screen.

      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,gmail.com',
      'id': 331,
      'caption': '''Define domains allowed to access Google Apps''',
      'tags': ['filtering'],
      'desc': '''Enables <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>'s
      restricted log in feature in Google Apps and prevents users from
      changing this setting.

      If you define this setting, the user will only be able to access
      Google Apps (such as Gmail) using accounts from the specified domains.

      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 Google Apps with those accounts.

      If you leave this setting empty/not-configured, the user will be able to
      access Google Apps 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': '''Enables cast''',
      'tags': [],
      'desc': '''If this is set to true or is not set, users will be able to cast tabs, sites or the desktop from the browser. If set to false, this option will be disabled.'''
    },
    {
      'name': 'ArcBackupRestoreEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:53-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': False,
      'id': 337,
      'caption': '''Enable Android Backup Service''',
      'tags': [],
      'desc':
      '''When this policy is set to true, Android app data is uploaded to Android Backup servers and restored from them upon app re-installations for compatible apps.

      When this policy is set to false, Android Backup Service will be switched off.

      If this setting is configured then users are not able change it themselves.

      If this setting is not configured then users are able to turn Android Backup Service on and off in the Android Settings app.''',
    },
    {
      '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': '''Enables 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. ''',
    },
    {
      'name': 'NativePrinters',
      'type': 'list',
      '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_manufacturer': { 'type': 'string' },
                'effective_model': { 'type': 'string' }
              }
            }
          }
        }
      },
      'supported_on': [ 'chrome_os:56-' ],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      '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_manufacturer": "MakesPrinters",
          "effective_model": "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> should match one of the <ph
      name="PRODUCT_NAME">$2<ex>Google Chrome OS</ex></ph> supported
      printers.  <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.

      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.''',
    },
    {
      'name': 'QuickUnlock',
      'type': 'group',
      'caption': '''Quick unlock policies''',
      'desc': '''Configures quick unlock related policies.''',
      'policies': [
        {
          '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'],
          'id': 352,
          'caption': '''Configure allowed quick unlock modes.''',
          'tags': [],
          'desc': '''Controls which quick unlock modes are allowed to be set up and used.
          This setting white-lists the allowed quick unlock modes that can be set up and used to unlock the lock screen. The value is a list of strings, each of which should be one of the following: "all", "PIN". If "all" is selected, then all supported quick modes will be available, otherwise the modes in the list will be the ones available.

          If this setting is configured, quick unlock modes which have a type that is not on this list can not be set up or used.

          If this setting is left not configured, "PIN" mode will be enabled, and all other modes will be disabled.''',
        },
        {
          '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': '''Sets 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': 4,
          'id': 354,
          'caption': '''Sets the minimum length of the lock screen PIN.''',
          'tags': [],
          'desc': '''This setting controls the minimum length a PIN can be.

          If this setting is configured to be less than 1, the minimum length a PIN can be is 1.

          If this setting is not configured, the minimum length a PIN can be is 4.''',
        },
        {
          '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': '''Sets the maximum length of the lock screen PIN.''',
          'tags': [],
          'desc': '''This setting controls the maximum length a PIN can be.

          If this setting is configured to be 0 or less, there is no maximum length and a user can set a PIN as long as they want.

          If this setting is less than PinUnlockMinimumLength but greater than 0, the maximum length is the same as the minimum length.

          If this setting is not configured, there is no maximum length and a user can set a PIN as long as they want.''',
        },
        {
          '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': '''Enables users to set weak PINs for the lock screen PIN.''',
          'tags': [],
          'desc': '''If this setting is configured to be false, users will be prevented from setting PINs that are considered weak. Such PINs include PINs which contain the same digit throughout, PINs whose digits are increasing by 1, PINs whose digits are decreasing by 1 and PINs which are too common.

          If this setting is configured to be true, or not configured, users can enter these PINs and will only get a warning display.''',
        },
      ],
    },
    {
      'name': 'DeviceWallpaperImage',
      'type': 'external',
      'schema': {
        'type': 'object',
        'properties': {
          'url': { "type": "string" },
          'hash': { "type": "string" }
        },
      },
      'supported_on': ['chrome_os:57-'],
      '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.''',
    },
  ],
  'messages': {
    # Messages that are not associated to any policies.
    'win_supported_winxpsp2': {
      '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 XP SP2 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:'''
    },
    '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_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 policies that are
      targeted for unreleased software versions (i.e. their 'Supported on' entry
      refers to an unreleased version) and that such policies are subject to
      change or removal without prior notice.

      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 an Active Directory 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>''',
    },
  },
  'placeholders': [],
}
