{
# 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
#   '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. http://crbug.com/108992
#   'external' - a policy that references external data.
#     NOTE: This type is not supported yet. http://crbug.com/256635
#
# 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.
#
# 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',
#       '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_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.
#   'max_size' specifies 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: 236
#
# 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.
#
  '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:0.11-'],
          'features': {
            'can_be_recommended': True,
            'dynamic_refresh': True,
            'per_profile': True,
          },
          'example_value': 'http://chromium.org',
          'id': 1,
          'caption': '''Configure the home page URL''',
          '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 can choose the New Tab Page as their home page.

          Leaving this policy not set will allow the user to choose his home page on his own if HomepageIsNewTabPage is not set too.''',
          'label': '''Home page URL''',
        },
        {
          'name': 'HomepageIsNewTabPage',
          'type': 'main',
          'schema': { 'type': 'boolean' },
          'supported_on': ['chrome.*:8-', 'chrome_os:0.11-'],
          'features': {
            'can_be_recommended': True,
            'dynamic_refresh': True,
            'per_profile': True,
          },
          'example_value': True,
          'id': 2,
          'caption': '''Use New Tab Page as homepage''',
          '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 his home page on his own.''',
        },
      ],
    },
    {
      '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 Chrome as Default Browser''',
      '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 Chrome 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''',
      '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:0.11-', 'android:30-'],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 5,
      'caption': '''Enable alternate error pages''',
      '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:0.11-', 'android:30-'],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 6,
      'caption': '''Enable search suggestions''',
      '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-', 'chrome_os:0.11-', 'android:30-'],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 7,
      'caption': '''Enable network prediction''',
      'desc': '''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': 'DisableSpdy',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:8-', 'chrome_os:0.11-', 'android:30-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': True,
      'id': 8,
      'caption': '''Disable SPDY protocol''',
      'desc': '''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:0.12-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'deprecated': True,
      'example_value': ['file', 'https'],
      'id': 85,
      'caption': '''Disable URL protocol schemes''',
      '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': 'JavascriptEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:8-', 'chrome_os:0.11-', 'android:30-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'deprecated': True,
      'example_value': True,
      'id': 9,
      'caption': '''Enable JavaScript''',
      '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:0.11-', 'android:30-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'deprecated': True,
      'example_value': False,
      'id': 10,
      'caption': '''Enable Incognito mode''',
      '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:0.14-', 'android:30-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 1,
      'id': 93,
      'caption': '''Incognito mode availability''',
      '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:0.11-', 'android:30-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 11,
      'caption': '''Disable saving browser history''',
      '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.

      If this setting is disabled or not set, browsing history is saved.''',
    },
    {
      'name': 'AllowDeletingBrowserHistory',
      'future': True,
      'type': 'main',
      'schema': { 'type': 'boolean' },
      # TODO(pamg): Restore the correct 'supported' line when the UI properly
      # shows that deleting browser history is disabled. Also fix the 'os' line
      # in policy_test_cases.json.
      # 'supported_on': ['chrome.*:27-', 'chrome_os:0.27-'],
      'supported_on': [],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 187,
      'caption': '''Enable deleting browser and download history''',
      'desc': '''Enables deleting browser history and download history in <ph name="PRODUCT_NAME">$<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': 'RemoteAccess',
      'type': 'group',
      'caption': '''Configure remote access options''',
      'desc': '''Configure remote access options in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.

      These features are ignored unless the Remote Access web application is installed.''',
      'policies': [
        {
          'name': 'RemoteAccessClientFirewallTraversal',
          'type': 'main',
          'schema': { 'type': 'boolean' },
          'supported_on': ['chrome.*:14-', 'chrome_os:0.14-'],
          'features': {
            'dynamic_refresh': True,
          },
          # Mark this 'removed' when http://crbug.com/100216 is resolved.
          'deprecated': True,
          'example_value': False,
          'id': 94,
          'caption': '''Enable firewall traversal from remote access client''',
          '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': 'RemoteAccessHostFirewallTraversal',
          'type': 'main',
          'schema': { 'type': 'boolean' },
          'supported_on': ['chrome.*:14-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': False,
          },
          'example_value': False,
          'id': 95,
          'caption': '''Enable firewall traversal from remote access host''',
          'desc': '''Enables usage of STUN and relay 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-'],
          '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''',
          '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.''',
        },
        {
          'name': 'RemoteAccessHostRequireTwoFactor',
          'type': 'main',
          'schema': { 'type': 'boolean' },
          'supported_on': ['chrome.*:22-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': False,
          },
          'example_value': False,
          'id': 155,
          'caption': '''Enable two-factor authentication for remote access hosts''',
          '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-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': False,
          },
          'example_value': 'chromoting-host',
          'id': 156,
          'caption': '''Configure the TalkGadget prefix for remote access hosts''',
          '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-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': False,
          },
          'example_value': False,
          'id': 157,
          'caption': '''Enable curtaining of remote access hosts''',
          '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-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': False,
          },
          'example_value': False,
          'id': 234,
          'caption': '''Enable or disable PIN-less authentication''',
          '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': 'PrintingEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:8-', 'chrome_os:0.11-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 12,
      'caption': '''Enable printing''',
      '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.''',
    },
    {
      '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''',
      '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:0.25-', 'android:30-'],
      'features': {
        'can_be_recommended': False,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': False,
      'id': 162,
      'caption': '''Force SafeSearch''',
      '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': 'SafeBrowsingEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:8-', 'chrome_os:0.11-', 'android:30-'],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 14,
      'caption': '''Enable Safe Browsing''',
      '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''',
      '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 you enable this setting, anonymous reporting of usage and crash-related data is sent to Google.

      If you disable this setting, anonymous reporting of usage and crash-related data is never sent to Google.

      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 setting will be what the user chose upon installation / first run.''',
    },
    {
      'name': 'PasswordManager',
      'type': 'group',
      'caption': '''Password manager''',
      'desc': '''Configures the password manager. If the password manager is enabled, then you can choose to enable or disable whether the user may show stored passwords in clear text.''',
      'policies': [
        {
          'name': 'PasswordManagerEnabled',
          'type': 'main',
          'schema': { 'type': 'boolean' },
          'supported_on': ['chrome.*:8-', 'chrome_os:0.11-', 'android:30-'],
          'features': {
            'can_be_recommended': True,
            'dynamic_refresh': True,
            'per_profile': True,
          },
          'example_value': True,
          'id': 16,
          'caption': '''Enable the password manager''',
          'desc': '''Enables saving passwords and using saved passwords in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.

          If you enable this setting, 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 you disable this setting, users are not able to save passwords or use already saved passwords.

          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': 'PasswordManagerAllowShowPasswords',
          'type': 'main',
          'schema': { 'type': 'boolean' },
          'supported_on': ['chrome.*:8-', 'chrome_os:0.11-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': True,
          },
          'example_value': False,
          'id': 17,
          'caption': '''Allow users to show passwords in Password Manager''',
          'desc': '''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:0.11-', 'android:30-'],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': False,
      'id': 18,
      'caption': '''Enable AutoFill''',
      '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:0.11-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['Java', 'Shockwave Flash', 'Chrome PDF Viewer'],
      'id': 19,
      'caption': '''Specify a list of disabled plugins''',
      'desc': '''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:0.11-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['Java', 'Shockwave Flash', 'Chrome PDF Viewer'],
      'id': 78,
      'caption': '''Specify a list of enabled plugins''',
      'desc': '''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:0.11-'],
      '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''',
      'desc': '''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.

      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': 'DisablePluginFinder',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:11-', 'chrome_os:0.11-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': True,
      'id': 66,
      'caption': '''Specify whether the plugin finder should be disabled''',
      '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:0.11-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 20,
      'caption': '''Disable synchronization of data with Google''',
      '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.''',
    },
    {
      'name': 'SigninAllowed',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:27-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 190,
      'caption': '''Allows sign in to Chrome''',
      'desc': '''Allows the user to sign in to <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> and prevents users from changing this setting.

      If you set this policy, you can configure if a user is allowed to sign in to <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> or not.''',
    },
    {
      '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''',
      '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.

      See http://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''',
      '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.

      See http://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''',
      '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.

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

      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-'],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': '/home/${user_name}/Downloads',
      'id': 64,
      'caption': '''Set download directory''',
      '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 http://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''',
    },
    {
      'name': 'ClearSiteDataOnExit',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:11-28', 'chrome_os:0.11-0.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)''',
      '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': '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">http://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett<ex>http://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 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:0.11-', 'android:30-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': True,
          },
          'example_value': 'direct',
          'id': 21,
          'caption': '''Choose how to specify proxy server settings''',
          '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 or 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'.

          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">http://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett<ex>http://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.''',
        },
        {
          '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:0.11-', 'android:30-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': True,
          },
          'deprecated': True,
          'example_value': 2,
          'id': 22,
          'caption': '''Choose how to specify proxy server settings''',
          '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'.

          For detailed examples, visit:
          <ph name="PROXY_HELP_URL">http://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett<ex>http://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.''',
        },
        {
          'name': 'ProxyServer',
          'type': 'string',
          'schema': { 'type': 'string' },
          'supported_on': ['chrome.*:8-', 'chrome_os:0.11-', 'android:30-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': True,
          },
          'example_value': '123.123.123.123:8080',
          'id': 23,
          'caption': '''Address or URL of proxy server''',
          '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">http://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett<ex>http://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett</ex></ph>''',
        },
        {
          'name': 'ProxyPacUrl',
          'type': 'string',
          'schema': { 'type': 'string' },
          'supported_on': ['chrome.*:8-', 'chrome_os:0.11-', 'android:30-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': True,
          },
          'example_value': 'http://internal.site/example.pac',
          'id': 24,
          'caption': '''URL to a proxy .pac file''',
          '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">http://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett<ex>http://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett</ex></ph>''',
        },
        {
          'name': 'ProxyBypassList',
          'type': 'string',
          'schema': { 'type': 'string' },
          'supported_on': ['chrome.*:8-', 'chrome_os:0.11-', 'android:30-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': True,
          },
          'example_value': 'http://www.example1.com,http://www.example2.com,http://internalsite/',
          'id': 25,
          'caption': '''Proxy bypass rules''',
          '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">http://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett<ex>http://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''',
        },
      ],
    },
    {
      # 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.
      # http://crbug.com/108992, http://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:0.18-', 'android:30-'],
      'future': True,
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': { "ProxyMode": "direct" },
      'id': 116,
      'caption': '''Proxy settings''',
      'desc': '''Configures the proxy settings for <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.

      This policy isn't ready for usage yet, please don't use it.''',
    },
    {
      '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-'],
          'features': {
            'dynamic_refresh': False,
            'per_profile': False,
          },
          'example_value': 'basic,digest,ntlm,negotiate',
          'id': 26,
          'caption': '''Supported authentication schemes''',
          '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-'],
          'features': {
            'dynamic_refresh': False,
            'per_profile': False,
          },
          'example_value': False,
          'id': 27,
          'caption': '''Disable CNAME lookup when negotiating Kerberos authentication''',
          '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''',
          '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-'],
          'features': {
            'dynamic_refresh': False,
            'per_profile': False,
          },
          'example_value': '*example.com,foobar.com,*baz',
          'id': 29,
          'caption': '''Authentication server whitelist''',
          '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 Chrome 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 Chrome.''',
        },
        {
          'name': 'AuthNegotiateDelegateWhitelist',
          'type': 'string',
          'schema': { 'type': 'string' },
          'supported_on': ['chrome.*:9-'],
          'features': {
            'dynamic_refresh': False,
            'per_profile': False,
          },
          'example_value': 'foobar.example.com',
          'id': 30,
          'caption': '''Kerberos delegation server whitelist''',
          '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 Chrome 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''',
          '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': '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''',
          '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>. The blacklist takes precedence over the list of forced extensions.''',
      'policies': [
        {
          'name': 'ExtensionInstallBlacklist',
          'type': 'list',
          'schema': {
            'type': 'array',
            'items': { 'type': 'string' },
          },
          'supported_on': ['chrome.*:8-', 'chrome_os:0.11-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': True,
          },
          'example_value': ['extension_id1', 'extension_id2'],
          'id': 32,
          'caption': '''Configure extension installation blacklist''',
          '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:0.11-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': True,
          },
          'example_value': ['extension_id1', 'extension_id2'],
          'id': 33,
          'caption': '''Configure extension installation whitelist''',
          '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:0.11-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': True,
          },
          'example_value': ['lcncmkcnkcdbbanbjakcencbaoegdjlp;https://clients2.google.com/service/update2/crx'],
          'id': 34,
          'caption': '''Configure the list of force-installed extensions''',
          'desc': '''Allows you to specify a list of extensions that will be installed silently, without user interaction.

          Each item of the list is a string that contains an extension ID and an update URL delimited 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">http://code.google.com/chrome/extensions/autoupdate.html</ph>. 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.

          For each item, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will retrieve the extension specified by the extension ID from the update service at the specified update URL and silently install it.

          For example, <ph name="EXTENSION_POLICY_EXAMPLE">lcncmkcnkcdbbanbjakcencbaoegdjlp;https://clients2.google.com/service/update2/crx</ph> installs the <ph name="EXTENSION_POLICY_EXAMPLE_EXTENSION_NAME">Google SSL Web Search</ph> extension from the standard Chrome Web Store update URL. For more information about hosting extensions, see: <ph name="LINK_TO_EXTENSION_DOC2">http://code.google.com/chrome/extensions/hosting.html</ph>.

          Users will be unable to uninstall extensions that are specified by this policy. If you remove an extension from this list, then it will be automatically uninstalled by <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>. Extensions specified in this list are also automatically whitelisted for installation; the ExtensionsInstallBlacklist does not affect them.

          If this policy is left not set the user can uninstall any extension  in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.''',
          'label': '''Extension IDs and update URLs to be silently installed''',
        },
        {
          'name': 'ExtensionInstallSources',
          'type': 'list',
          'schema': {
            'type': 'array',
            'items': { 'type': 'string' },
          },
          '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''',
          'desc': '''Allows you to specify which URLs are allowed to install extensions, apps, and themes.

          Starting in Chrome 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 Chrome would offer to install the file after a few warnings. After Chrome 21, such files must be downloaded and dragged onto the Chrome 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 http://code.google.com/chrome/extensions/match_patterns.html). 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'
              ],
            },
          },
          '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''',
          '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 Chrome 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': 'ShowHomeButton',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:8-', 'chrome_os:0.11-'],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 35,
      'caption': '''Show Home button on toolbar''',
      '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:0.11-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': False,
      'id': 36,
      'caption': '''Disable Developer Tools''',
      '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 will allow the use to use the Developer Tools and the JavaScript console.''',
    },
    {
      '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:0.11-'],
          'features': {
            'can_be_recommended': True,
            'dynamic_refresh': True,
            'per_profile': True,
          },
          'example_value': 4,
          'id': 37,
          'caption': '''Action on startup''',
          '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 equvalent 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>.''',
        },
        {
          'name': 'RestoreOnStartupURLs',
          'type': 'list',
          'schema': {
            'type': 'array',
            'items': { 'type': 'string' },
          },
          'supported_on': ['chrome.*:8-', 'chrome_os:0.11-'],
          'features': {
            'can_be_recommended': True,
            'dynamic_refresh': True,
            'per_profile': True,
          },
          'example_value': ['http://example.com', 'http://chromium.org'],
          'id': 38,
          'caption': '''URLs to open on startup''',
          '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'.''',
        },
      ],
    },
    {
      'name': 'BlockThirdPartyCookies',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:10-', 'chrome_os:0.11-'],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': False,
      'id': 39,
      'caption': '''Block third party cookies''',
      '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 http://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:0.11-', 'android:30-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': True,
          },
          'example_value': True,
          'id': 40,
          'caption': '''Enable the default search provider''',
          '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.''',
        },
        {
          'name': 'DefaultSearchProviderName',
          'type': 'string',
          'schema': { 'type': 'string' },
          'supported_on': ['chrome.*:8-', 'chrome_os:0.11-', 'android:30-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': True,
          },
          'example_value': 'My Intranet Search',
          'id': 41,
          'caption': '''Default search provider name''',
          '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:0.11-', 'android:30-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': True,
          },
          'example_value': 'mis',
          'id': 42,
          'caption': '''Default search provider keyword''',
          '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:0.11-', 'android:30-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': True,
          },
          'example_value': 'http://search.my.company/search?q={searchTerms}',
          'id': 43,
          'caption': '''Default search provider search URL''',
          '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.

          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:0.11-', 'android:30-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': True,
          },
          'example_value': 'http://search.my.company/suggest?q={searchTerms}',
          'id': 44,
          'caption': '''Default search provider suggest URL''',
          '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.

          This policy is only respected if the 'DefaultSearchProviderEnabled' policy is enabled.''',
        },
        {
          'name': 'DefaultSearchProviderInstantURL',
          'type': 'string',
          'schema': { 'type': 'string' },
          'supported_on': ['chrome.*:10-', 'chrome_os:0.11-', 'android:30-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': True,
          },
          'example_value': 'http://search.my.company/suggest?q={searchTerms}',
          'id': 45,
          'caption': '''Default search provider instant URL''',
          '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.

          This policy is only respected if the 'DefaultSearchProviderEnabled' policy is enabled.''',
        },
        {
          'name': 'DefaultSearchProviderIconURL',
          'type': 'string',
          'schema': { 'type': 'string' },
          'supported_on': ['chrome.*:8-', 'chrome_os:0.11-', 'android:30-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': True,
          },
          'example_value': 'http://search.my.company/favicon.ico',
          'id': 46,
          'caption': '''Default search provider icon''',
          '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:0.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''',
          '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:0.24-', 'android:30-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': True,
          },
          'example_value': ['http://search.my.company/suggest#q={searchTerms}', 'http://search.my.company/suggest/search#q={searchTerms}'],
          'id': 161,
          'caption': '''List of alternate URLs for the default search provider''',
          '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:0.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''',
          '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:0.29-', 'android:30-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': True,
          },
          'example_value': 'http://search.my.company/searchbyimage/upload',
          'id': 229,
          'caption': '''Parameter providing search-by-image feature for the default search provider''',
          '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': 'DefaultSearchProviderSearchURLPostParams',
          'type': 'string',
          'schema': { 'type': 'string' },
          'supported_on': ['chrome.*:29-', 'chrome_os:0.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''',
          '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:0.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''',
          '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:0.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''',
          '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:0.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''',
          '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 http://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:0.11-', 'android:30-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': True,
          },
          'example_value': 1,
          'id': 48,
          'caption': '''Default cookies setting''',
          '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 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:0.11-', 'android:30-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': True,
          },
          'example_value': 1,
          'id': 49,
          'caption': '''Default images setting''',
          '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:0.11-', 'android:30-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': True,
          },
          'example_value': 1,
          'id': 50,
          'caption': '''Default JavaScript setting''',
          '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:0.11-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': True,
          },
          'example_value': 1,
          'id': 51,
          'caption': '''Default plugins setting''',
          '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:0.11-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': True,
          },
          'example_value': 1,
          'id': 52,
          'caption': '''Default popups setting''',
          '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:0.11-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': True,
          },
          'example_value': 2,
          'id': 53,
          'caption': '''Default notification setting''',
          '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:0.11-', 'android:30-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': True,
          },
          'example_value': 0,
          'id': 54,
          'caption': '''Default geolocation setting''',
          '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.''',
        },
        {
          '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:0.22-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': True,
          },
          'deprecated': True,
          'example_value': 2,
          'id': 149,
          'caption': '''Default mediastream setting''',
          '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': 'AutoSelectCertificateForUrls',
          'type': 'list',
          'schema': {
            'type': 'array',
            'items': { 'type': 'string' },
          },
          'supported_on': ['chrome.*:15-', 'chrome_os:0.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''',
          '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 certificates, if the site requests a certificate.

          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:0.11-', 'android:30-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': True,
          },
          'example_value': ['http://www.example.com', '[*.]example.edu'],
          'id': 77,
          'caption': '''Allow cookies on these sites''',
          '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:0.11-', 'android:30-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': True,
          },
          'example_value': ['http://www.example.com', '[*.]example.edu'],
          'id': 67,
          'caption': '''Block cookies on these sites''',
          '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:0.11-', 'android:30-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': True,
          },
          'example_value': ['http://www.example.com', '[*.]example.edu'],
          'id': 68,
          'caption': '''Allow session only cookies on these sites''',
          '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.

          If the "RestoreOnStartup" policy is set to restore URLs from previous sessions this policy will not be respectred 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:0.11-', 'android:30-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': True,
          },
          'example_value': ['http://www.example.com', '[*.]example.edu'],
          'id': 69,
          'caption': '''Allow images on these sites''',
          '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:0.11-', 'android:30-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': True,
          },
          'example_value': ['http://www.example.com', '[*.]example.edu'],
          'id': 70,
          'caption': '''Block images on these sites''',
          '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:0.11-', 'android:30-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': True,
          },
          'example_value': ['http://www.example.com', '[*.]example.edu'],
          'id': 71,
          'caption': '''Allow JavaScript on these sites''',
          '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:0.11-', 'android:30-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': True,
          },
          'example_value': ['http://www.example.com', '[*.]example.edu'],
          'id': 72,
          'caption': '''Block JavaScript on these sites''',
          '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': 'PluginsAllowedForUrls',
          'type': 'list',
          'schema': {
            'type': 'array',
            'items': { 'type': 'string' },
          },
          'supported_on': ['chrome.*:11-', 'chrome_os:0.11-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': True,
          },
          'example_value': ['http://www.example.com', '[*.]example.edu'],
          'id': 73,
          'caption': '''Allow plugins on these sites''',
          '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:0.11-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': True,
          },
          'example_value': ['http://www.example.com', '[*.]example.edu'],
          'id': 74,
          'caption': '''Block plugins on these sites''',
          '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:0.11-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': True,
          },
          'example_value': ['http://www.example.com', '[*.]example.edu'],
          'id': 75,
          'caption': '''Allow popups on these sites''',
          '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': 'PopupsBlockedForUrls',
          'type': 'list',
          'schema': {
            'type': 'array',
            'items': { 'type': 'string' },
          },
          'supported_on': ['chrome.*:11-', 'chrome_os:0.11-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': True,
          },
          'example_value': ['http://www.example.com', '[*.]example.edu'],
          'id': 76,
          'caption': '''Block popups on these sites''',
          '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:0.16-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': True,
          },
          'example_value': ['http://www.example.com', '[*.]example.edu'],
          'id': 105,
          'caption': '''Allow notifications on these sites''',
          '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:0.16-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': True,
          },
          'example_value': ['http://www.example.com', '[*.]example.edu'],
          'id': 106,
          'caption': '''Block notifications on these sites''',
          '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': 'Disable3DAPIs',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:9-', 'chrome_os:0.11-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': False,
      'id': 55,
      'caption': '''Disable support for 3D graphics APIs''',
      '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.''',
    },
    {
      'name': 'PolicyRefreshRate',
      'type': 'int',
      'schema': { 'type': 'integer' },
      'supported_on': ['chrome_os:0.11-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 3600000,
      'id': 56,
      'caption': '''Refresh rate for user policy''',
      '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.

      Leaving this policy not set will make <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> use the default value of 3 hours.''',
    },
    {
      'name': 'MaxInvalidationFetchDelay',
      'type': 'int',
      'schema': { 'type': 'integer' },
      'supported_on': ['chrome.*:30-', 'chrome_os:0.30-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': 10000,
      'id': 228,
      'caption': '''Maximum fetch delay after a policy invalidation''',
      '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-'],
          '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>''',
          '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-'],
          'features': {
            'dynamic_refresh': False,
          },
          'example_value': ['http://www.example.com', 'http://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>''',
          '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 http://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-'],
          'features': {
            'dynamic_refresh': False,
          },
          'example_value': ['http://www.example.com', 'http://www.example.edu'],
          'id': 59,
          'caption': '''Always render the following URL patterns in the host browser''',
          '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 http://www.chromium.org/developers/how-tos/chrome-frame-getting-started.''',
        },
        {
          'name': 'AdditionalLaunchParameters',
          'type': 'string',
          'schema': { 'type': 'string' },
          'supported_on': ['chrome_frame:19-'],
          '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>''',
          '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': '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-'],
          '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''',
          '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:0.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''',
      '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 he wants to be asked for password to unlock the device or not.''',
    },
    {
      'name': 'InstantEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:11-28', 'chrome_os:0.11-0.28'],
      'deprecated': True,
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 62,
      'caption': '''Enable Instant''',
      '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 Chrome 29 and higher versions.''',
    },
    {
      'name': 'TranslateEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:12-', 'chrome_os:0.12-', 'android:30-'],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 80,
      'caption': '''Enable Translate''',
      '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:0.12-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 81,
      'caption': '''Allow running plugins that are outdated''',
      '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:0.13-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 86,
      'caption': '''Always runs plugins that require authorization''',
      '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:0.12-'],
      'features': {
        'can_be_recommended': True,
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 82,
      'caption': '''Enable Bookmark Bar''',
      '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:0.12-', 'android:30-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': False,
      'id': 83,
      'caption': '''Enables or disables bookmark editing''',
      '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': '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''',
      '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-'],
      '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''',
      '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 http://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:0.11-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': 3600000,
      'id': 90,
      'caption': '''Refresh rate for Device Policy''',
      '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.''',
    },
    {
      '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''',
      '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''',
      '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''',
      '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''',
      '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''',
      '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': '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''',
      '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:0.15-0.21'],
      'deprecated': True,
      'features': {
        'dynamic_refresh': False,
      },
      'example_value': False,
      'id': 96,
      'caption': '''Prevent app promotions from appearing on the new tab page''',
      '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:0.15-', 'android:30-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['example.com', 'https://ssl.server.com', 'hosting.com/bad_path', 'http://server:8080/path', '.exact.hostname.com', '*'],
      'id': 103,
      'caption': '''Block access to a list of URLs''',
      'desc': '''Blocks access to the listed URLs.

      This policy prevents the user from loading web pages from blacklisted URLs.

      A URL has the format 'scheme://host:port/path'.
      The optional scheme can be http, https or ftp. Only this scheme will be blocked; if none is specified, all schemes are blocked.
      The host can be a hostname or an IP address. Subdomains of a hostname will also be blocked. To prevent blocking subdomains, include a '.' before the hostname. The special hostname '*' will block all domains.
      The optional port is a valid port number from 1 to 65535. If none is specified, all ports are blocked.
      If the optional path is specified, only paths with that prefix will be blocked.

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

      If this policy is not set no URL will be blacklisted in the browser.''',
    },
    {
      'name': 'URLWhitelist',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome.*:15-', 'chrome_os:0.15-', 'android:30-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['example.com', 'https://ssl.server.com', 'hosting.com/bad_path', 'http://server:8080/path', '.exact.hostname.com'],
      'id': 104,
      'caption': '''Allows access to a list of URLs''',
      '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.''',
    },
    {
      'name': 'OpenNetworkConfiguration',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome_os:0.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''',
      '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>''',
    },
    {
      'name': 'DeviceOpenNetworkConfiguration',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome_os:0.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''',
      '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>''',
    },
    {
      '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>''',
      '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:0.17-0.28'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'deprecated': True,
      'example_value': 'http://company-intranet/chromeapps',
      'id': 112,
      'caption': '''Enterprise web store URL (deprecated)''',
      '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:0.17-0.28'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'deprecated': True,
      'example_value': 'WidgCo Chrome Apps',
      'id': 113,
      'caption': '''Enterprise web store name (deprecated)''',
      '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-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'future': True,
      'example_value': True,
      'id': 114,
      'caption': '''Enable TLS domain-bound certificates extension''',
      'desc': '''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-', 'chrome_os:0.18-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'future': True,
      'example_value': False,
      'id': 115,
      'caption': '''Enable reporting memory info (JS heap size) to page''',
      'desc': '''Allows pages to access JavaScript memory usage statistics.

      This settings makes the memory statistics from the Developer Tools Profiles panel available to the web page itself.''',
    },
    {
      'name': 'DisablePrintPreview',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:18-'],
      'features': {
        'dynamic_refresh': False,
        'per_profile': True,
      },
      'example_value': False,
      'id': 117,
      'caption': '''Disable Print Preview''',
      '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': 'DisableSSLRecordSplitting',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:18-', 'chrome_os:0.18-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': True,
      'id': 118,
      'caption': '''Disable SSL record splitting''',
      'desc': '''Specifies whether SSL record splitting should be disabled. Record splitting is a workaround for a weakness in SSL 3.0 and TLS 1.0 but can cause compatibility issues with some HTTPS servers and proxies.

      If the policy is not set, or is set to false, then record splitting will be used on SSL/TLS connections which use CBC ciphersuites.''',
    },
    {
      'name': 'EnableOnlineRevocationChecks',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:19-', 'chrome_os:0.19-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': False,
      'id': 129,
      'caption': '''Whether online OCSP/CRL checks are performed''',
      '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 behaviour is restored and online OCSP/CRL checks will be performed.

      If the policy is not set, or is set to false, then Chrome will not perform online revocation checks in Chrome 19 and later.''',
    },
    {
      'name': 'RequireOnlineRevocationChecksForLocalAnchors',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:0.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''',
      '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 Chrome will use the existing online revocation checking settings.''',
    },
    {
      'name': 'ReportDeviceVersionInfo',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:0.18-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': False,
      'id': 119,
      'caption': '''Report OS and firmware version''',
      'desc': '''Report OS and firmware version of enrolled devices.

      If this setting is set to True, enrolled devices will report the OS and firmware version periodically. If this setting is not set or set to False, version info will not be reported.''',
    },
    {
      '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''',
      'desc': '''Report device activity times.

      If this setting is set to True, enrolled devices will report time periods when a user is active on the device. If this setting is not set or set to False, device activity times will not be recorded or reported.''',
    },
    {
      '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''',
      'desc': '''Report the state of the device's dev switch at boot.

      If the policy is not set, or set to false, the state of the dev switch will not be reported.''',
    },
    {
      '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''',
      'desc': '''Report the geographic location of the device.

      If the policy is not set, or set to false, the location will not be reported.''',
    },
    {
      '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''',
      'desc': '''Report list of network interfaces with their types and hardware addresses to the server.

      If the policy is not set, or set to false, the interface list will not be reported.''',
    },
    {
      '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''',
      '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.''',
    },
    {
      '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''',
      '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.''',
    },
    {
      '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''',
      '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''',
      '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''',
      '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''',
      '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.''',
    },
    {
      '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:0.11-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': 'stable-channel',
      'id': 91,
      'caption': '''Release channel''',
      'desc': '''Specifies the release channel that this device should be locked to.''',
    },
    {
      'name': 'ChromeOsReleaseChannelDelegated',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:0.19-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': False,
      'id': 134,
      'caption': '''Whether the release channel should be configurable by the user''',
      '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''',
      '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-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': [ 'http://google.com', 'chrome-extension://aaaaaaaaaaaaaaaaaaaaaaaa/' ],
      'id': 137,
      'caption': '''Load specified urls on demo login''',
      '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-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': 60000,
      'id': 130,
      'caption': '''Timeout until idle user log-out is executed''',
      '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-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': 15000,
      'id': 131,
      'caption': '''Duration of the idle log-out warning message''',
      '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-'],
      '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''',
      '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-'],
      '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''',
      '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-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': [ { "extension-id": "khgabmflimjjbclkmljlpmgaleanedem", "update-url": "http://clients2.google.com/service/update2/crx" } ],
      'id': 135,
      'caption': '''List of AppPack extensions''',
      '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''',
      '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.''',
    },
    {
      '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''',
      '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''',
    },
    {
      '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''',
      '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''',
      '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': 'DeviceLocalAccounts',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome_os:0.25-'],
      'device_only': True,
      'future': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': [ "demo@example.com" ],
      'id': 163,
      'caption': '''Device-local accounts''',
      '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''',
      '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''',
      '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,
      },
      'future': True,
      'example_value': True,
      'id': 202,
      'caption': '''Enable bailout keyboard shortcut for auto-login''',
      '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': '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''',
      '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 to remain active. 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 Chrome OS Files app''',
          'desc': '''Disables Google Drive syncing in the Chrome OS 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.''',
        },
        {
          '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 Chrome OS Files app''',
          'desc': '''Disables Google Drive syncing in the Chrome OS 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.''',
        },
      ],
    },
    {
      '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''',
      '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>''',
      '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:0.22-', 'android:30-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 150,
      'caption': '''Disable proceeding from the Safe Browsing warning page''',
      'desc': '''The Safe Browsing service shows a warning page when users navigate to sites that are flagged as potentially mallicious. 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': 'SpellCheckServiceEnabled',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:22-', 'chrome_os:0.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''',
      '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:0.22-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': True,
      'id': 152,
      'caption': '''Disable mounting of external storage''',
      'desc': '''Disable mounting of external storage.

      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': 'AudioOutputAllowed',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome_os:0.23-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': False,
      'id': 159,
      'caption': '''Allow playing audio''',
      '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 accessability 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:0.23-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': False,
      },
      'example_value': False,
      'id': 160,
      'caption': '''Allow or deny audio capture''',
      '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.''',
    },
    {
      'name': 'AudioCaptureAllowedUrls',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome.*:29-', 'chrome_os:0.29-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['http://www.example.com/', 'http://[*.]example.edu/'],
      'id': 208,
      'caption': '''URLs that will be granted access to audio capture devices without prompt.''',
      '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: This policy is currently only supported when running in Kiosk mode.''',
    },
    {
      'name': 'VideoCaptureAllowed',
      'type': 'main',
      'schema': { 'type': 'boolean' },
      'supported_on': ['chrome.*:25-', 'chrome_os:0.25-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': False,
      'id': 167,
      'caption': '''Allow or deny video capture''',
      '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.''',
    },
    {
      'name': 'VideoCaptureAllowedUrls',
      'type': 'list',
      'schema': {
        'type': 'array',
        'items': { 'type': 'string' },
      },
      'supported_on': ['chrome.*:29-', 'chrome_os:0.29-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'example_value': ['http://www.example.com/', 'http://[*.]example.edu/'],
      'id': 209,
      'caption': '''URLs that will be granted access to video capture devices without prompt.''',
      '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: This policy is currently only supported when running 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''',
      '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''',
      '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 "http://en.wikipedia.org/wiki/List_of_tz_database_time"). In particular, most timezones can be referred to by "continent/large_city" or "ocean/large_city".''',
    },
    {
      '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''',
      'desc': '''Specifies the clock format be used for the device. Users can override clock format for the current session. However, on logout it is set back to the specified value. If an empty string is provided, device owner preference is used.''',
    },
    {
      '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''',
      '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''',
      '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''',
      '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''',
      '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''',
      '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': 'PowerManagement',
      'type': 'group',
      'caption': '''Power mangement''',
      'desc': '''Configure power manegement 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' },
          'supported_on': ['chrome_os:26-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': False,
          },
          'example_value': 420000,
          'id': 172,
          'caption': '''Screen dim delay when running on AC power''',
          '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' },
          'supported_on': ['chrome_os:26-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': False,
          },
          'example_value': 480000,
          'id': 173,
          'caption': '''Screen off delay when running on AC power''',
          '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' },
          'supported_on': ['chrome_os:26-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': False,
          },
          'example_value': 600000,
          'id': 174,
          'caption': '''Screen lock delay when running on AC power''',
          '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' },
          'supported_on': ['chrome_os:27-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': False,
          },
          'example_value': 545000,
          'id': 197,
          'caption': '''Idle warning delay when running on AC power''',
          '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' },
          'supported_on': ['chrome_os:26-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': False,
          },
          'example_value': 1800000,
          'id': 175,
          'caption': '''Idle delay when running on AC power''',
          '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' },
          'supported_on': ['chrome_os:26-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': False,
          },
          'example_value': 300000,
          'id': 176,
          'caption': '''Screen dim delay when running on battery power''',
          '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' },
          'supported_on': ['chrome_os:26-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': False,
          },
          'example_value': 360000,
          'id': 177,
          'caption': '''Screen off delay when running on battery power''',
          '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' },
          'supported_on': ['chrome_os:26-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': False,
          },
          'example_value': 600000,
          'id': 178,
          'caption': '''Screen lock delay when running on battery power''',
          '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' },
          'supported_on': ['chrome_os:27-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': False,
          },
          'example_value': 545000,
          'id': 198,
          'caption': '''Idle warning delay when running on battery power''',
          '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' },
          'supported_on': ['chrome_os:26-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': False,
          },
          'example_value': 600000,
          'id': 179,
          'caption': '''Idle delay when running on battery power''',
          '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''',
          '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,
          },
          'example_value': 0,
          'id': 226,
          'caption': '''Action to take when the idle delay is reached while running on AC power''',
          '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,
          },
          'example_value': 0,
          'id': 222,
          'caption': '''Action to take when the idle delay is reached while running on battery power''',
          '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''',
          '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''',
          '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''',
          '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.''',
        },
        {
          '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)''',
          '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''',
          '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''',
          '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''',
          '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.''',
        },
      ],
    },
    {
      # TODO(bartfab): Change the policy type to 'dict' once this is fully
      # supported. http://crbug.com/258339
      'name': 'DeviceLoginScreenPowerManagement',
      'type': 'string',
      'schema': { 'type': 'string' },
      'supported_on': ['chrome_os:30-'],
      'device_only': True,
      'features': {
        'dynamic_refresh': True,
      },
      'example_value': '{ "AC": { "IdleAction": "DoNothing" }, "Battery": { "IdleAction": "DoNothing" } }',
      'id': 225,
      'caption': '''Power mangement on the login screen''',
      '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.

      The policy should be specified as a string that expresses the individual settings in JSON format, conforming to the following schema:
      {
        "type": "object",
        "properties": {
          "AC": {
            "description": "Power management settings applicable only when running on AC power",
            "type": "object",
            "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",
                "enum": [ "Suspend", "Shutdown", "DoNothing" ]
              }
            }
          },
          "Battery": {
            "description": "Power management settings applicable only when running on battery power",
            "type": "object",
            "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",
                "enum": [ "Suspend", "Shutdown", "DoNothing" ]
              }
            }
          },
          "LidCloseAction": {
            "description": "Action to take when the lid is closed",
            "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
          }
        }
      }

      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.''',
      'desc': '''IT admins for enterprise devices can use this flag to controll 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': 'http://www.example.com/terms_of_service.txt',
      'id': 186,
      'caption': '''Set the Terms of Service for a device-local account''',
      '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''',
          'desc': '''Show <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph> accessibility options in the systenm 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''',
          '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''',
          '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''',
          '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': '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''',
          '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''',
          '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''',
          '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''',
          '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': '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''',
          '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''',
      'desc': '''Hide the Chrome Web Store app and footer link from the New Tab Page and Chrome OS 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 Chrome start-up''',
      'desc': '''Specifies the flags that should be applied to Chrome when it starts. The specified flags are applied before Chrome is started even for the sign-in screen.''',
    },
    {
      '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''',
      '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''',
      '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-'],
      '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''',
      '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,
        'per_profile': False,
      },
      'device_only': True,
      'example_value': 'restricted',
      'id': 199,
      'future': True,
      'caption': '''Set the restriction on the fetching of the Variations seed''',
      '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,
            'per_profile': False,
          },
          'device_only': True,
          'example_value': True,
          'id': 207,
          'caption': '''Enable remote attestation for the device.''',
          '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.platformKeysPrivate 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.''',
          'desc': '''If true, the user can use the hardware on Chrome devices to remote attest its identity to the privacy CA via the Enterprise Platform Keys API chrome.enterprise.platformKeysPrivate.challengeUserKey().

          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.''',
          'desc': '''This policy specifies the allowed extensions to use Enterprise Platform Keys API chrome.enterprise.platformKeysPrivate.challengeUserKey() 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': 'SuppressChromeFrameTurndownPrompt',
      'caption': '''Suppress the <ph name="PRODUCT_FRAME_NAME">$3<ex>Google Chrome Frame</ex></ph> turndown prompt''',
      '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-'],
      '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,
          '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:0.28-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': True
          },
          'example_value': 2,
          'id': 204,
          'caption': '''Default behavior for sites not in any content pack''',
          'desc': '''The default behavior for sites not in any content pack.

          This policy is for internal use by Chrome itself.''',
        },
        {
          'name': 'ContentPackManualBehaviorHosts',
          'future': True,
          'type': 'dict',
          'schema': {
            'type': 'object',
            'additionalProperties': {
              'type': 'boolean'
            }
          },
          'supported_on': ['chrome.*:28-', 'chrome_os:0.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''',
          '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 Chrome itself.''',
        },
        {
          'name': 'ContentPackManualBehaviorURLs',
          'future': True,
          'type': 'dict',
          'schema': {
            'type': 'object',
            'additionalProperties': {
              'type': 'boolean'
            }
          },
          'supported_on': ['chrome.*:28-', 'chrome_os:0.28-'],
          'features': {
            'dynamic_refresh': True,
            'per_profile': True
          },
          'example_value': {
            'https://www.example.com': True,
            'http://moose.org': False
          },
          'id': 206,
          'caption': '''Managed user manual exception URLs''',
          '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 Chrome 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.''',
          '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.''',
          '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.'''
        },
      ],
    },
    # TODO(joaodasilva): replace the 'dict' type with a more generic
    # 'json' type. The actual schema type for this should be 'array'.
    {
      'name': 'ManagedBookmarks',
      'type': 'dict',
      'schema': {
        'type': 'object',
        'items': {
          'type': 'object',
          'properties': {
            'name': { 'type': 'string' },
            'url': { 'type': 'string' },
          },
        },
      },
      'supported_on': ['android:30-'],
      'features': {
        'dynamic_refresh': True,
        'per_profile': True,
      },
      'future': True,
      'example_value': { "name": "Google", "url": "google.com" },
      'id': 227,
      'caption': '''Managed Bookmarks''',
      'desc': '''Configures a list of managed bookmarks.

      The policy is a list of bookmarks, and each bookmark is a dictionary containing the bookmark "name" and target "url".

      These bookmarks are placed in a Managed bookmarks folder inside the Mobile bookmarks. These bookmarks can't be modified by the user.

      When this policy is set then the Managed bookmarks are the default folder opened when the bookmarks view is opened in Chrome.

      Managed bookmarks are not synced to the user account.''',
    },
  ],
  '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 Chrome 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_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_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': '''This is the list of policies that <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> respects.

      You don't need to change these settings by hand!  You can download easy-to-use templates from
      <ph name="POLICY_TEMPLATE_DOWNLOAD_URL">http://www.chromium.org/administrators/policy-templates<ex>
      http://www.chromium.org/administrators/policy-templates</ex></ph>.

      The list of supported policies is the same for Chromium and Google Chrome.

      These policies are strictly intended to be used to configure instances of Chrome 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.

      Note: starting with Chrome 28, policies are loaded directly from the Group Policy API on Windows. Policies manually written to the registry will be ignored. See http://crbug.com/259236 for details.'''
    },
    '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 Chrome 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_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)',
    },
  },
  'placeholders': [],
}
