// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// This file was generated by:
//   tools/json_schema_compiler/compiler.py.
// NOTE: The format of types has changed. 'FooType' is now
//   'chrome.networkingPrivate.FooType'.
// Please run the closure compiler before committing changes.
// See https://chromium.googlesource.com/chromium/src/+/master/docs/closure_compilation.md

/** @fileoverview Externs generated from namespace: networkingPrivate */

/**
 * @const
 */
chrome.networkingPrivate = {};

/**
 * @enum {string}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-ActivationStateType
 */
chrome.networkingPrivate.ActivationStateType = {
  ACTIVATED: 'Activated',
  ACTIVATING: 'Activating',
  NOT_ACTIVATED: 'NotActivated',
  PARTIALLY_ACTIVATED: 'PartiallyActivated',
};

/**
 * @enum {string}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-CaptivePortalStatus
 */
chrome.networkingPrivate.CaptivePortalStatus = {
  UNKNOWN: 'Unknown',
  OFFLINE: 'Offline',
  ONLINE: 'Online',
  PORTAL: 'Portal',
  PROXY_AUTH_REQUIRED: 'ProxyAuthRequired',
};

/**
 * @enum {string}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-ConnectionStateType
 */
chrome.networkingPrivate.ConnectionStateType = {
  CONNECTED: 'Connected',
  CONNECTING: 'Connecting',
  NOT_CONNECTED: 'NotConnected',
};

/**
 * @enum {string}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-DeviceStateType
 */
chrome.networkingPrivate.DeviceStateType = {
  UNINITIALIZED: 'Uninitialized',
  DISABLED: 'Disabled',
  ENABLING: 'Enabling',
  ENABLED: 'Enabled',
  PROHIBITED: 'Prohibited',
};

/**
 * @enum {string}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-IPConfigType
 */
chrome.networkingPrivate.IPConfigType = {
  DHCP: 'DHCP',
  STATIC: 'Static',
};

/**
 * @enum {string}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-NetworkType
 */
chrome.networkingPrivate.NetworkType = {
  ALL: 'All',
  CELLULAR: 'Cellular',
  ETHERNET: 'Ethernet',
  TETHER: 'Tether',
  VPN: 'VPN',
  WIRELESS: 'Wireless',
  WI_FI: 'WiFi',
  WI_MAX: 'WiMAX',
};

/**
 * @enum {string}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-ProxySettingsType
 */
chrome.networkingPrivate.ProxySettingsType = {
  DIRECT: 'Direct',
  MANUAL: 'Manual',
  PAC: 'PAC',
  WPAD: 'WPAD',
};

/**
 * @typedef {{
 *   Active: (boolean|undefined),
 *   Effective: (string|undefined),
 *   UserPolicy: (boolean|undefined),
 *   DevicePolicy: (boolean|undefined),
 *   UserSetting: (boolean|undefined),
 *   SharedSetting: (boolean|undefined),
 *   UserEditable: (boolean|undefined),
 *   DeviceEditable: (boolean|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-ManagedBoolean
 */
chrome.networkingPrivate.ManagedBoolean;

/**
 * @typedef {{
 *   Active: (number|undefined),
 *   Effective: (string|undefined),
 *   UserPolicy: (number|undefined),
 *   DevicePolicy: (number|undefined),
 *   UserSetting: (number|undefined),
 *   SharedSetting: (number|undefined),
 *   UserEditable: (boolean|undefined),
 *   DeviceEditable: (boolean|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-ManagedLong
 */
chrome.networkingPrivate.ManagedLong;

/**
 * @typedef {{
 *   Active: (string|undefined),
 *   Effective: (string|undefined),
 *   UserPolicy: (string|undefined),
 *   DevicePolicy: (string|undefined),
 *   UserSetting: (string|undefined),
 *   SharedSetting: (string|undefined),
 *   UserEditable: (boolean|undefined),
 *   DeviceEditable: (boolean|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-ManagedDOMString
 */
chrome.networkingPrivate.ManagedDOMString;

/**
 * @typedef {{
 *   Active: (!Array<string>|undefined),
 *   Effective: (string|undefined),
 *   UserPolicy: (!Array<string>|undefined),
 *   DevicePolicy: (!Array<string>|undefined),
 *   UserSetting: (!Array<string>|undefined),
 *   SharedSetting: (!Array<string>|undefined),
 *   UserEditable: (boolean|undefined),
 *   DeviceEditable: (boolean|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-ManagedDOMStringList
 */
chrome.networkingPrivate.ManagedDOMStringList;

/**
 * @typedef {{
 *   Active: (!chrome.networkingPrivate.IPConfigType|undefined),
 *   Effective: (string|undefined),
 *   UserPolicy: (!chrome.networkingPrivate.IPConfigType|undefined),
 *   DevicePolicy: (!chrome.networkingPrivate.IPConfigType|undefined),
 *   UserSetting: (!chrome.networkingPrivate.IPConfigType|undefined),
 *   SharedSetting: (!chrome.networkingPrivate.IPConfigType|undefined),
 *   UserEditable: (boolean|undefined),
 *   DeviceEditable: (boolean|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-ManagedIPConfigType
 */
chrome.networkingPrivate.ManagedIPConfigType;

/**
 * @typedef {{
 *   Active: (!chrome.networkingPrivate.ProxySettingsType|undefined),
 *   Effective: (string|undefined),
 *   UserPolicy: (!chrome.networkingPrivate.ProxySettingsType|undefined),
 *   DevicePolicy: (!chrome.networkingPrivate.ProxySettingsType|undefined),
 *   UserSetting: (!chrome.networkingPrivate.ProxySettingsType|undefined),
 *   SharedSetting: (!chrome.networkingPrivate.ProxySettingsType|undefined),
 *   UserEditable: (boolean|undefined),
 *   DeviceEditable: (boolean|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-ManagedProxySettingsType
 */
chrome.networkingPrivate.ManagedProxySettingsType;

/**
 * @typedef {{
 *   AccessPointName: string,
 *   Language: (string|undefined),
 *   LocalizedName: (string|undefined),
 *   Name: (string|undefined),
 *   Password: (string|undefined),
 *   Username: (string|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-APNProperties
 */
chrome.networkingPrivate.APNProperties;

/**
 * @typedef {{
 *   AccessPointName: !chrome.networkingPrivate.ManagedDOMString,
 *   Language: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   LocalizedName: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   Name: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   Password: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   Username: (!chrome.networkingPrivate.ManagedDOMString|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-ManagedAPNProperties
 */
chrome.networkingPrivate.ManagedAPNProperties;

/**
 * @typedef {{
 *   Active: (!Array<!chrome.networkingPrivate.APNProperties>|undefined),
 *   Effective: (string|undefined),
 *   UserPolicy: (!Array<!chrome.networkingPrivate.APNProperties>|undefined),
 *   DevicePolicy: (!Array<!chrome.networkingPrivate.APNProperties>|undefined),
 *   UserSetting: (!Array<!chrome.networkingPrivate.APNProperties>|undefined),
 *   SharedSetting: (!Array<!chrome.networkingPrivate.APNProperties>|undefined),
 *   UserEditable: (boolean|undefined),
 *   DeviceEditable: (boolean|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-ManagedAPNList
 */
chrome.networkingPrivate.ManagedAPNList;

/**
 * @typedef {{
 *   Name: string,
 *   Code: string,
 *   Country: (string|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-CellularProviderProperties
 */
chrome.networkingPrivate.CellularProviderProperties;

/**
 * @typedef {{
 *   requirePin: boolean,
 *   currentPin: string,
 *   newPin: (string|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-CellularSimState
 */
chrome.networkingPrivate.CellularSimState;

/**
 * @typedef {{
 *   CommonName: (string|undefined),
 *   Locality: (string|undefined),
 *   Organization: (string|undefined),
 *   OrganizationalUnit: (string|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-IssuerSubjectPattern
 */
chrome.networkingPrivate.IssuerSubjectPattern;

/**
 * @typedef {{
 *   CommonName: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   Locality: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   Organization: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   OrganizationalUnit: (!chrome.networkingPrivate.ManagedDOMString|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-ManagedIssuerSubjectPattern
 */
chrome.networkingPrivate.ManagedIssuerSubjectPattern;

/**
 * @typedef {{
 *   EnrollmentURI: (!Array<string>|undefined),
 *   Issuer: (!chrome.networkingPrivate.IssuerSubjectPattern|undefined),
 *   IssuerCARef: (!Array<string>|undefined),
 *   Subject: (!chrome.networkingPrivate.IssuerSubjectPattern|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-CertificatePattern
 */
chrome.networkingPrivate.CertificatePattern;

/**
 * @typedef {{
 *   EnrollmentURI: (!chrome.networkingPrivate.ManagedDOMStringList|undefined),
 *   Issuer: (!chrome.networkingPrivate.ManagedIssuerSubjectPattern|undefined),
 *   IssuerCARef: (!chrome.networkingPrivate.ManagedDOMStringList|undefined),
 *   Subject: (!chrome.networkingPrivate.ManagedIssuerSubjectPattern|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-ManagedCertificatePattern
 */
chrome.networkingPrivate.ManagedCertificatePattern;

/**
 * @typedef {{
 *   AnonymousIdentity: (string|undefined),
 *   ClientCertPattern: (!chrome.networkingPrivate.CertificatePattern|undefined),
 *   ClientCertPKCS11Id: (string|undefined),
 *   ClientCertRef: (string|undefined),
 *   ClientCertType: (string|undefined),
 *   Identity: (string|undefined),
 *   Inner: (string|undefined),
 *   Outer: (string|undefined),
 *   Password: (string|undefined),
 *   SaveCredentials: (boolean|undefined),
 *   ServerCAPEMs: (!Array<string>|undefined),
 *   ServerCARefs: (!Array<string>|undefined),
 *   SubjectMatch: (string|undefined),
 *   TLSVersionMax: (string|undefined),
 *   UseProactiveKeyCaching: (boolean|undefined),
 *   UseSystemCAs: (boolean|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-EAPProperties
 */
chrome.networkingPrivate.EAPProperties;

/**
 * @typedef {{
 *   AnonymousIdentity: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   ClientCertPattern: (!chrome.networkingPrivate.ManagedCertificatePattern|undefined),
 *   ClientCertPKCS11Id: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   ClientCertRef: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   ClientCertType: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   Identity: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   Inner: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   Outer: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   Password: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   SaveCredentials: (!chrome.networkingPrivate.ManagedBoolean|undefined),
 *   ServerCAPEMs: (!chrome.networkingPrivate.ManagedDOMStringList|undefined),
 *   ServerCARefs: (!chrome.networkingPrivate.ManagedDOMStringList|undefined),
 *   SubjectMatch: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   TLSVersionMax: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   UseProactiveKeyCaching: (!chrome.networkingPrivate.ManagedBoolean|undefined),
 *   UseSystemCAs: (!chrome.networkingPrivate.ManagedBoolean|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-ManagedEAPProperties
 */
chrome.networkingPrivate.ManagedEAPProperties;

/**
 * @typedef {{
 *   Status: string,
 *   NetworkId: string,
 *   Technology: string,
 *   ShortName: (string|undefined),
 *   LongName: (string|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-FoundNetworkProperties
 */
chrome.networkingPrivate.FoundNetworkProperties;

/**
 * @typedef {{
 *   Gateway: (string|undefined),
 *   IPAddress: (string|undefined),
 *   NameServers: (!Array<string>|undefined),
 *   RoutingPrefix: (number|undefined),
 *   Type: (string|undefined),
 *   WebProxyAutoDiscoveryUrl: (string|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-IPConfigProperties
 */
chrome.networkingPrivate.IPConfigProperties;

/**
 * @typedef {{
 *   Gateway: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   IPAddress: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   NameServers: (!chrome.networkingPrivate.ManagedDOMStringList|undefined),
 *   RoutingPrefix: (!chrome.networkingPrivate.ManagedLong|undefined),
 *   Type: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   WebProxyAutoDiscoveryUrl: (!chrome.networkingPrivate.ManagedDOMString|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-ManagedIPConfigProperties
 */
chrome.networkingPrivate.ManagedIPConfigProperties;

/**
 * @typedef {{
 *   Password: (string|undefined),
 *   SaveCredentials: (boolean|undefined),
 *   Username: (string|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-XAUTHProperties
 */
chrome.networkingPrivate.XAUTHProperties;

/**
 * @typedef {{
 *   Password: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   SaveCredentials: (!chrome.networkingPrivate.ManagedBoolean|undefined),
 *   Username: (!chrome.networkingPrivate.ManagedDOMString|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-ManagedXAUTHProperties
 */
chrome.networkingPrivate.ManagedXAUTHProperties;

/**
 * @typedef {{
 *   AuthenticationType: string,
 *   ClientCertPattern: (!chrome.networkingPrivate.CertificatePattern|undefined),
 *   ClientCertPKCS11Id: (string|undefined),
 *   ClientCertRef: (string|undefined),
 *   ClientCertType: (string|undefined),
 *   EAP: (!chrome.networkingPrivate.EAPProperties|undefined),
 *   Group: (string|undefined),
 *   IKEVersion: (number|undefined),
 *   PSK: (string|undefined),
 *   SaveCredentials: (boolean|undefined),
 *   ServerCAPEMs: (!Array<string>|undefined),
 *   ServerCARefs: (!Array<string>|undefined),
 *   XAUTH: (!chrome.networkingPrivate.XAUTHProperties|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-IPSecProperties
 */
chrome.networkingPrivate.IPSecProperties;

/**
 * @typedef {{
 *   AuthenticationType: !chrome.networkingPrivate.ManagedDOMString,
 *   ClientCertPattern: (!chrome.networkingPrivate.ManagedCertificatePattern|undefined),
 *   ClientCertPKCS11Id: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   ClientCertRef: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   ClientCertType: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   EAP: (!chrome.networkingPrivate.ManagedEAPProperties|undefined),
 *   Group: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   IKEVersion: (!chrome.networkingPrivate.ManagedLong|undefined),
 *   PSK: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   SaveCredentials: (!chrome.networkingPrivate.ManagedBoolean|undefined),
 *   ServerCAPEMs: (!chrome.networkingPrivate.ManagedDOMStringList|undefined),
 *   ServerCARefs: (!chrome.networkingPrivate.ManagedDOMStringList|undefined),
 *   XAUTH: (!chrome.networkingPrivate.ManagedXAUTHProperties|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-ManagedIPSecProperties
 */
chrome.networkingPrivate.ManagedIPSecProperties;

/**
 * @typedef {{
 *   LcpEchoDisabled: (boolean|undefined),
 *   Password: (string|undefined),
 *   SaveCredentials: (boolean|undefined),
 *   Username: (string|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-L2TPProperties
 */
chrome.networkingPrivate.L2TPProperties;

/**
 * @typedef {{
 *   LcpEchoDisabled: (!chrome.networkingPrivate.ManagedBoolean|undefined),
 *   Password: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   SaveCredentials: (!chrome.networkingPrivate.ManagedBoolean|undefined),
 *   Username: (!chrome.networkingPrivate.ManagedDOMString|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-ManagedL2TPProperties
 */
chrome.networkingPrivate.ManagedL2TPProperties;

/**
 * @typedef {{
 *   Method: string,
 *   PostData: (string|undefined),
 *   Url: (string|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-PaymentPortal
 */
chrome.networkingPrivate.PaymentPortal;

/**
 * @typedef {{
 *   Host: string,
 *   Port: number
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-ProxyLocation
 */
chrome.networkingPrivate.ProxyLocation;

/**
 * @typedef {{
 *   Host: !chrome.networkingPrivate.ManagedDOMString,
 *   Port: !chrome.networkingPrivate.ManagedLong
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-ManagedProxyLocation
 */
chrome.networkingPrivate.ManagedProxyLocation;

/**
 * @typedef {{
 *   HTTPProxy: (!chrome.networkingPrivate.ProxyLocation|undefined),
 *   SecureHTTPProxy: (!chrome.networkingPrivate.ProxyLocation|undefined),
 *   FTPProxy: (!chrome.networkingPrivate.ProxyLocation|undefined),
 *   SOCKS: (!chrome.networkingPrivate.ProxyLocation|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-ManualProxySettings
 */
chrome.networkingPrivate.ManualProxySettings;

/**
 * @typedef {{
 *   HTTPProxy: (!chrome.networkingPrivate.ManagedProxyLocation|undefined),
 *   SecureHTTPProxy: (!chrome.networkingPrivate.ManagedProxyLocation|undefined),
 *   FTPProxy: (!chrome.networkingPrivate.ManagedProxyLocation|undefined),
 *   SOCKS: (!chrome.networkingPrivate.ManagedProxyLocation|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-ManagedManualProxySettings
 */
chrome.networkingPrivate.ManagedManualProxySettings;

/**
 * @typedef {{
 *   Type: !chrome.networkingPrivate.ProxySettingsType,
 *   Manual: (!chrome.networkingPrivate.ManualProxySettings|undefined),
 *   ExcludeDomains: (!Array<string>|undefined),
 *   PAC: (string|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-ProxySettings
 */
chrome.networkingPrivate.ProxySettings;

/**
 * @typedef {{
 *   Type: !chrome.networkingPrivate.ManagedProxySettingsType,
 *   Manual: (!chrome.networkingPrivate.ManagedManualProxySettings|undefined),
 *   ExcludeDomains: (!chrome.networkingPrivate.ManagedDOMStringList|undefined),
 *   PAC: (!chrome.networkingPrivate.ManagedDOMString|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-ManagedProxySettings
 */
chrome.networkingPrivate.ManagedProxySettings;

/**
 * @typedef {{
 *   Name: (string|undefined),
 *   Type: (string|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-VerifyX509
 */
chrome.networkingPrivate.VerifyX509;

/**
 * @typedef {{
 *   Name: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   Type: (!chrome.networkingPrivate.ManagedDOMString|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-ManagedVerifyX509
 */
chrome.networkingPrivate.ManagedVerifyX509;

/**
 * @typedef {{
 *   Auth: (string|undefined),
 *   AuthRetry: (string|undefined),
 *   AuthNoCache: (boolean|undefined),
 *   Cipher: (string|undefined),
 *   ClientCertPKCS11Id: (string|undefined),
 *   ClientCertPattern: (!chrome.networkingPrivate.CertificatePattern|undefined),
 *   ClientCertRef: (string|undefined),
 *   ClientCertType: (string|undefined),
 *   CompLZO: (string|undefined),
 *   CompNoAdapt: (boolean|undefined),
 *   ExtraHosts: (!Array<string>|undefined),
 *   IgnoreDefaultRoute: (boolean|undefined),
 *   KeyDirection: (string|undefined),
 *   NsCertType: (string|undefined),
 *   OTP: (string|undefined),
 *   Password: (string|undefined),
 *   Port: (number|undefined),
 *   Proto: (string|undefined),
 *   PushPeerInfo: (boolean|undefined),
 *   RemoteCertEKU: (string|undefined),
 *   RemoteCertKU: (!Array<string>|undefined),
 *   RemoteCertTLS: (string|undefined),
 *   RenegSec: (number|undefined),
 *   SaveCredentials: (boolean|undefined),
 *   ServerCAPEMs: (!Array<string>|undefined),
 *   ServerCARefs: (!Array<string>|undefined),
 *   ServerCertRef: (string|undefined),
 *   ServerPollTimeout: (number|undefined),
 *   Shaper: (number|undefined),
 *   StaticChallenge: (string|undefined),
 *   TLSAuthContents: (string|undefined),
 *   TLSRemote: (string|undefined),
 *   TLSVersionMin: (string|undefined),
 *   UserAuthenticationType: (string|undefined),
 *   Username: (string|undefined),
 *   Verb: (string|undefined),
 *   VerifyHash: (string|undefined),
 *   VerifyX509: (!chrome.networkingPrivate.VerifyX509|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-OpenVPNProperties
 */
chrome.networkingPrivate.OpenVPNProperties;

/**
 * @typedef {{
 *   Auth: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   AuthRetry: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   AuthNoCache: (!chrome.networkingPrivate.ManagedBoolean|undefined),
 *   Cipher: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   ClientCertPKCS11Id: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   ClientCertPattern: (!chrome.networkingPrivate.ManagedCertificatePattern|undefined),
 *   ClientCertRef: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   ClientCertType: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   CompLZO: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   CompNoAdapt: (!chrome.networkingPrivate.ManagedBoolean|undefined),
 *   ExtraHosts: (!chrome.networkingPrivate.ManagedDOMStringList|undefined),
 *   IgnoreDefaultRoute: (!chrome.networkingPrivate.ManagedBoolean|undefined),
 *   KeyDirection: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   NsCertType: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   OTP: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   Password: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   Port: (!chrome.networkingPrivate.ManagedLong|undefined),
 *   Proto: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   PushPeerInfo: (!chrome.networkingPrivate.ManagedBoolean|undefined),
 *   RemoteCertEKU: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   RemoteCertKU: (!chrome.networkingPrivate.ManagedDOMStringList|undefined),
 *   RemoteCertTLS: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   RenegSec: (!chrome.networkingPrivate.ManagedLong|undefined),
 *   SaveCredentials: (!chrome.networkingPrivate.ManagedBoolean|undefined),
 *   ServerCAPEMs: (!chrome.networkingPrivate.ManagedDOMStringList|undefined),
 *   ServerCARefs: (!chrome.networkingPrivate.ManagedDOMStringList|undefined),
 *   ServerCertRef: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   ServerPollTimeout: (!chrome.networkingPrivate.ManagedLong|undefined),
 *   Shaper: (!chrome.networkingPrivate.ManagedLong|undefined),
 *   StaticChallenge: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   TLSAuthContents: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   TLSRemote: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   TLSVersionMin: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   UserAuthenticationType: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   Username: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   Verb: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   VerifyHash: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   VerifyX509: (!chrome.networkingPrivate.ManagedVerifyX509|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-ManagedOpenVPNProperties
 */
chrome.networkingPrivate.ManagedOpenVPNProperties;

/**
 * @typedef {{
 *   LockType: string,
 *   LockEnabled: boolean,
 *   RetriesLeft: (number|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-SIMLockStatus
 */
chrome.networkingPrivate.SIMLockStatus;

/**
 * @typedef {{
 *   ExtensionID: string,
 *   ProviderName: (string|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-ThirdPartyVPNProperties
 */
chrome.networkingPrivate.ThirdPartyVPNProperties;

/**
 * @typedef {{
 *   ExtensionID: !chrome.networkingPrivate.ManagedDOMString,
 *   ProviderName: (string|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-ManagedThirdPartyVPNProperties
 */
chrome.networkingPrivate.ManagedThirdPartyVPNProperties;

/**
 * @typedef {{
 *   AutoConnect: (boolean|undefined),
 *   APN: (!chrome.networkingPrivate.APNProperties|undefined),
 *   APNList: (!Array<!chrome.networkingPrivate.APNProperties>|undefined),
 *   ActivationType: (string|undefined),
 *   ActivationState: (!chrome.networkingPrivate.ActivationStateType|undefined),
 *   AllowRoaming: (boolean|undefined),
 *   Carrier: (string|undefined),
 *   ESN: (string|undefined),
 *   Family: (string|undefined),
 *   FirmwareRevision: (string|undefined),
 *   FoundNetworks: (!Array<!chrome.networkingPrivate.FoundNetworkProperties>|undefined),
 *   HardwareRevision: (string|undefined),
 *   HomeProvider: (!chrome.networkingPrivate.CellularProviderProperties|undefined),
 *   ICCID: (string|undefined),
 *   IMEI: (string|undefined),
 *   LastGoodAPN: (!chrome.networkingPrivate.APNProperties|undefined),
 *   Manufacturer: (string|undefined),
 *   MDN: (string|undefined),
 *   MEID: (string|undefined),
 *   MIN: (string|undefined),
 *   ModelID: (string|undefined),
 *   NetworkTechnology: (string|undefined),
 *   PaymentPortal: (!chrome.networkingPrivate.PaymentPortal|undefined),
 *   PRLVersion: (number|undefined),
 *   RoamingState: (string|undefined),
 *   Scanning: (boolean|undefined),
 *   ServingOperator: (!chrome.networkingPrivate.CellularProviderProperties|undefined),
 *   SIMLockStatus: (!chrome.networkingPrivate.SIMLockStatus|undefined),
 *   SIMPresent: (boolean|undefined),
 *   SignalStrength: (number|undefined),
 *   SupportNetworkScan: (boolean|undefined),
 *   SupportedCarriers: (!Array<string>|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-CellularProperties
 */
chrome.networkingPrivate.CellularProperties;

/**
 * @typedef {{
 *   AutoConnect: (!chrome.networkingPrivate.ManagedBoolean|undefined),
 *   APN: (!chrome.networkingPrivate.ManagedAPNProperties|undefined),
 *   APNList: (!chrome.networkingPrivate.ManagedAPNList|undefined),
 *   ActivationType: (string|undefined),
 *   ActivationState: (!chrome.networkingPrivate.ActivationStateType|undefined),
 *   AllowRoaming: (boolean|undefined),
 *   Carrier: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   ESN: (string|undefined),
 *   Family: (string|undefined),
 *   FirmwareRevision: (string|undefined),
 *   FoundNetworks: (!Array<!chrome.networkingPrivate.FoundNetworkProperties>|undefined),
 *   HardwareRevision: (string|undefined),
 *   HomeProvider: (!chrome.networkingPrivate.CellularProviderProperties|undefined),
 *   ICCID: (string|undefined),
 *   IMEI: (string|undefined),
 *   LastGoodAPN: (!chrome.networkingPrivate.APNProperties|undefined),
 *   Manufacturer: (string|undefined),
 *   MDN: (string|undefined),
 *   MEID: (string|undefined),
 *   MIN: (string|undefined),
 *   ModelID: (string|undefined),
 *   NetworkTechnology: (string|undefined),
 *   PaymentPortal: (!chrome.networkingPrivate.PaymentPortal|undefined),
 *   PRLVersion: (number|undefined),
 *   RoamingState: (string|undefined),
 *   Scanning: (boolean|undefined),
 *   ServingOperator: (!chrome.networkingPrivate.CellularProviderProperties|undefined),
 *   SIMLockStatus: (!chrome.networkingPrivate.SIMLockStatus|undefined),
 *   SIMPresent: (boolean|undefined),
 *   SignalStrength: (number|undefined),
 *   SupportNetworkScan: (boolean|undefined),
 *   SupportedCarriers: (!Array<string>|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-ManagedCellularProperties
 */
chrome.networkingPrivate.ManagedCellularProperties;

/**
 * @typedef {{
 *   ActivationState: (!chrome.networkingPrivate.ActivationStateType|undefined),
 *   NetworkTechnology: (string|undefined),
 *   RoamingState: (string|undefined),
 *   Scanning: (boolean|undefined),
 *   SIMPresent: (boolean|undefined),
 *   SignalStrength: (number|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-CellularStateProperties
 */
chrome.networkingPrivate.CellularStateProperties;

/**
 * @typedef {{
 *   AutoConnect: (boolean|undefined),
 *   Authentication: (string|undefined),
 *   EAP: (!chrome.networkingPrivate.EAPProperties|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-EthernetProperties
 */
chrome.networkingPrivate.EthernetProperties;

/**
 * @typedef {{
 *   AutoConnect: (!chrome.networkingPrivate.ManagedBoolean|undefined),
 *   Authentication: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   EAP: (!chrome.networkingPrivate.ManagedEAPProperties|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-ManagedEthernetProperties
 */
chrome.networkingPrivate.ManagedEthernetProperties;

/**
 * @typedef {{
 *   Authentication: string
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-EthernetStateProperties
 */
chrome.networkingPrivate.EthernetStateProperties;

/**
 * @typedef {{
 *   BatteryPercentage: (number|undefined),
 *   Carrier: (string|undefined),
 *   HasConnectedToHost: boolean,
 *   SignalStrength: (number|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-TetherProperties
 */
chrome.networkingPrivate.TetherProperties;

/**
 * @typedef {{
 *   AutoConnect: (boolean|undefined),
 *   Host: (string|undefined),
 *   IPsec: (!chrome.networkingPrivate.IPSecProperties|undefined),
 *   L2TP: (!chrome.networkingPrivate.L2TPProperties|undefined),
 *   OpenVPN: (!chrome.networkingPrivate.OpenVPNProperties|undefined),
 *   ThirdPartyVPN: (!chrome.networkingPrivate.ThirdPartyVPNProperties|undefined),
 *   Type: (string|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-VPNProperties
 */
chrome.networkingPrivate.VPNProperties;

/**
 * @typedef {{
 *   AutoConnect: (!chrome.networkingPrivate.ManagedBoolean|undefined),
 *   Host: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   IPsec: (!chrome.networkingPrivate.ManagedIPSecProperties|undefined),
 *   L2TP: (!chrome.networkingPrivate.ManagedL2TPProperties|undefined),
 *   OpenVPN: (!chrome.networkingPrivate.ManagedOpenVPNProperties|undefined),
 *   ThirdPartyVPN: (!chrome.networkingPrivate.ManagedThirdPartyVPNProperties|undefined),
 *   Type: (!chrome.networkingPrivate.ManagedDOMString|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-ManagedVPNProperties
 */
chrome.networkingPrivate.ManagedVPNProperties;

/**
 * @typedef {{
 *   Type: string,
 *   IPsec: (!chrome.networkingPrivate.IPSecProperties|undefined),
 *   ThirdPartyVPN: (!chrome.networkingPrivate.ThirdPartyVPNProperties|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-VPNStateProperties
 */
chrome.networkingPrivate.VPNStateProperties;

/**
 * @typedef {{
 *   AllowGatewayARPPolling: (boolean|undefined),
 *   AutoConnect: (boolean|undefined),
 *   BSSID: (string|undefined),
 *   EAP: (!chrome.networkingPrivate.EAPProperties|undefined),
 *   Frequency: (number|undefined),
 *   FrequencyList: (!Array<number>|undefined),
 *   FTEnabled: (boolean|undefined),
 *   HexSSID: (string|undefined),
 *   HiddenSSID: (boolean|undefined),
 *   Passphrase: (string|undefined),
 *   RoamThreshold: (number|undefined),
 *   SSID: (string|undefined),
 *   Security: (string|undefined),
 *   SignalStrength: (number|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-WiFiProperties
 */
chrome.networkingPrivate.WiFiProperties;

/**
 * @typedef {{
 *   AllowGatewayARPPolling: (!chrome.networkingPrivate.ManagedBoolean|undefined),
 *   AutoConnect: (!chrome.networkingPrivate.ManagedBoolean|undefined),
 *   BSSID: (string|undefined),
 *   EAP: (!chrome.networkingPrivate.ManagedEAPProperties|undefined),
 *   Frequency: (number|undefined),
 *   FrequencyList: (!Array<number>|undefined),
 *   FTEnabled: (!chrome.networkingPrivate.ManagedBoolean|undefined),
 *   HexSSID: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   HiddenSSID: (!chrome.networkingPrivate.ManagedBoolean|undefined),
 *   Passphrase: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   RoamThreshold: (!chrome.networkingPrivate.ManagedLong|undefined),
 *   SSID: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   Security: !chrome.networkingPrivate.ManagedDOMString,
 *   SignalStrength: (number|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-ManagedWiFiProperties
 */
chrome.networkingPrivate.ManagedWiFiProperties;

/**
 * @typedef {{
 *   BSSID: (string|undefined),
 *   Frequency: (number|undefined),
 *   HexSSID: (string|undefined),
 *   Security: string,
 *   SignalStrength: (number|undefined),
 *   SSID: (string|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-WiFiStateProperties
 */
chrome.networkingPrivate.WiFiStateProperties;

/**
 * @typedef {{
 *   AutoConnect: (boolean|undefined),
 *   EAP: (!chrome.networkingPrivate.EAPProperties|undefined),
 *   SignalStrength: (number|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-WiMAXProperties
 */
chrome.networkingPrivate.WiMAXProperties;

/**
 * @typedef {{
 *   AutoConnect: (!chrome.networkingPrivate.ManagedBoolean|undefined),
 *   EAP: (!chrome.networkingPrivate.ManagedEAPProperties|undefined),
 *   SignalStrength: (number|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-ManagedWiMAXProperties
 */
chrome.networkingPrivate.ManagedWiMAXProperties;

/**
 * @typedef {{
 *   SignalStrength: (number|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-WiMAXStateProperties
 */
chrome.networkingPrivate.WiMAXStateProperties;

/**
 * @typedef {{
 *   Cellular: (!chrome.networkingPrivate.CellularProperties|undefined),
 *   Ethernet: (!chrome.networkingPrivate.EthernetProperties|undefined),
 *   GUID: (string|undefined),
 *   IPAddressConfigType: (!chrome.networkingPrivate.IPConfigType|undefined),
 *   Name: (string|undefined),
 *   NameServersConfigType: (!chrome.networkingPrivate.IPConfigType|undefined),
 *   Priority: (number|undefined),
 *   ProxySettings: (!chrome.networkingPrivate.ProxySettings|undefined),
 *   StaticIPConfig: (!chrome.networkingPrivate.IPConfigProperties|undefined),
 *   Type: (!chrome.networkingPrivate.NetworkType|undefined),
 *   VPN: (!chrome.networkingPrivate.VPNProperties|undefined),
 *   WiFi: (!chrome.networkingPrivate.WiFiProperties|undefined),
 *   WiMAX: (!chrome.networkingPrivate.WiMAXProperties|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-NetworkConfigProperties
 */
chrome.networkingPrivate.NetworkConfigProperties;

/**
 * @typedef {{
 *   Cellular: (!chrome.networkingPrivate.CellularProperties|undefined),
 *   Connectable: (boolean|undefined),
 *   ConnectionState: (!chrome.networkingPrivate.ConnectionStateType|undefined),
 *   ErrorState: (string|undefined),
 *   Ethernet: (!chrome.networkingPrivate.EthernetProperties|undefined),
 *   GUID: string,
 *   IPAddressConfigType: (!chrome.networkingPrivate.IPConfigType|undefined),
 *   IPConfigs: (!Array<!chrome.networkingPrivate.IPConfigProperties>|undefined),
 *   MacAddress: (string|undefined),
 *   Name: (string|undefined),
 *   NameServersConfigType: (!chrome.networkingPrivate.IPConfigType|undefined),
 *   Priority: (number|undefined),
 *   ProxySettings: (!chrome.networkingPrivate.ProxySettings|undefined),
 *   RestrictedConnectivity: (boolean|undefined),
 *   StaticIPConfig: (!chrome.networkingPrivate.IPConfigProperties|undefined),
 *   SavedIPConfig: (!chrome.networkingPrivate.IPConfigProperties|undefined),
 *   Source: (string|undefined),
 *   Tether: (!chrome.networkingPrivate.TetherProperties|undefined),
 *   Type: !chrome.networkingPrivate.NetworkType,
 *   VPN: (!chrome.networkingPrivate.VPNProperties|undefined),
 *   WiFi: (!chrome.networkingPrivate.WiFiProperties|undefined),
 *   WiMAX: (!chrome.networkingPrivate.WiMAXProperties|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-NetworkProperties
 */
chrome.networkingPrivate.NetworkProperties;

/**
 * @typedef {{
 *   Cellular: (!chrome.networkingPrivate.ManagedCellularProperties|undefined),
 *   Connectable: (boolean|undefined),
 *   ConnectionState: (!chrome.networkingPrivate.ConnectionStateType|undefined),
 *   ErrorState: (string|undefined),
 *   Ethernet: (!chrome.networkingPrivate.ManagedEthernetProperties|undefined),
 *   GUID: string,
 *   IPAddressConfigType: (!chrome.networkingPrivate.ManagedIPConfigType|undefined),
 *   IPConfigs: (!Array<!chrome.networkingPrivate.IPConfigProperties>|undefined),
 *   MacAddress: (string|undefined),
 *   Name: (!chrome.networkingPrivate.ManagedDOMString|undefined),
 *   NameServersConfigType: (!chrome.networkingPrivate.ManagedIPConfigType|undefined),
 *   Priority: (!chrome.networkingPrivate.ManagedLong|undefined),
 *   ProxySettings: (!chrome.networkingPrivate.ManagedProxySettings|undefined),
 *   RestrictedConnectivity: (boolean|undefined),
 *   StaticIPConfig: (!chrome.networkingPrivate.ManagedIPConfigProperties|undefined),
 *   SavedIPConfig: (!chrome.networkingPrivate.IPConfigProperties|undefined),
 *   Source: (string|undefined),
 *   Tether: (!chrome.networkingPrivate.TetherProperties|undefined),
 *   Type: !chrome.networkingPrivate.NetworkType,
 *   VPN: (!chrome.networkingPrivate.ManagedVPNProperties|undefined),
 *   WiFi: (!chrome.networkingPrivate.ManagedWiFiProperties|undefined),
 *   WiMAX: (!chrome.networkingPrivate.ManagedWiMAXProperties|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-ManagedProperties
 */
chrome.networkingPrivate.ManagedProperties;

/**
 * @typedef {{
 *   Cellular: (!chrome.networkingPrivate.CellularStateProperties|undefined),
 *   Connectable: (boolean|undefined),
 *   ConnectionState: (!chrome.networkingPrivate.ConnectionStateType|undefined),
 *   Ethernet: (!chrome.networkingPrivate.EthernetStateProperties|undefined),
 *   ErrorState: (string|undefined),
 *   GUID: string,
 *   Name: (string|undefined),
 *   Priority: (number|undefined),
 *   Source: (string|undefined),
 *   Tether: (!chrome.networkingPrivate.TetherProperties|undefined),
 *   Type: !chrome.networkingPrivate.NetworkType,
 *   VPN: (!chrome.networkingPrivate.VPNStateProperties|undefined),
 *   WiFi: (!chrome.networkingPrivate.WiFiStateProperties|undefined),
 *   WiMAX: (!chrome.networkingPrivate.WiMAXStateProperties|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-NetworkStateProperties
 */
chrome.networkingPrivate.NetworkStateProperties;

/**
 * @typedef {{
 *   Scanning: (boolean|undefined),
 *   SIMLockStatus: (!chrome.networkingPrivate.SIMLockStatus|undefined),
 *   SIMPresent: (boolean|undefined),
 *   State: !chrome.networkingPrivate.DeviceStateType,
 *   Type: !chrome.networkingPrivate.NetworkType
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-DeviceStateProperties
 */
chrome.networkingPrivate.DeviceStateProperties;

/**
 * @typedef {{
 *   certificate: string,
 *   intermediateCertificates: (!Array<string>|undefined),
 *   publicKey: string,
 *   nonce: string,
 *   signedData: string,
 *   deviceSerial: string,
 *   deviceSsid: string,
 *   deviceBssid: string
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-VerificationProperties
 */
chrome.networkingPrivate.VerificationProperties;

/**
 * @typedef {{
 *   networkType: !chrome.networkingPrivate.NetworkType,
 *   visible: (boolean|undefined),
 *   configured: (boolean|undefined),
 *   limit: (number|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-NetworkFilter
 */
chrome.networkingPrivate.NetworkFilter;

/**
 * @typedef {{
 *   AllowOnlyPolicyNetworksToAutoconnect: (boolean|undefined),
 *   AllowOnlyPolicyNetworksToConnect: (boolean|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-GlobalPolicy
 */
chrome.networkingPrivate.GlobalPolicy;

/**
 * @typedef {{
 *   hash: string,
 *   issuedBy: string,
 *   issuedTo: string,
 *   pem: (string|undefined),
 *   PKCS11Id: (string|undefined),
 *   hardwareBacked: boolean
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-Certificate
 */
chrome.networkingPrivate.Certificate;

/**
 * @typedef {{
 *   serverCaCertificates: !Array<!chrome.networkingPrivate.Certificate>,
 *   userCertificates: !Array<!chrome.networkingPrivate.Certificate>
 * }}
 * @see https://developer.chrome.com/extensions/networkingPrivate#type-CertificateLists
 */
chrome.networkingPrivate.CertificateLists;

/**
 * Gets all the properties of the network with id networkGuid. Includes all
 * properties of the network (read-only and read/write values).
 * @param {string} networkGuid The GUID of the network to get properties for.
 * @param {function(!chrome.networkingPrivate.NetworkProperties):void} callback
 *     Called with the network properties when received.
 * @see https://developer.chrome.com/extensions/networkingPrivate#method-getProperties
 */
chrome.networkingPrivate.getProperties = function(networkGuid, callback) {};

/**
 * Gets the merged properties of the network with id networkGuid from the
 * sources: User settings, shared settings, user policy, device policy and the
 * currently active settings.
 * @param {string} networkGuid The GUID of the network to get properties for.
 * @param {function(!chrome.networkingPrivate.ManagedProperties):void} callback
 *     Called with the managed network properties when received.
 * @see https://developer.chrome.com/extensions/networkingPrivate#method-getManagedProperties
 */
chrome.networkingPrivate.getManagedProperties = function(networkGuid, callback) {};

/**
 * Gets the cached read-only properties of the network with id networkGuid. This
 * is meant to be a higher performance function than $(ref:getProperties), which
 * requires a round trip to query the networking subsystem. The following
 * properties are returned for all networks: GUID, Type, Name, WiFi.Security.
 * Additional properties are provided for visible networks: ConnectionState,
 * ErrorState, WiFi.SignalStrength, Cellular.NetworkTechnology,
 * Cellular.ActivationState, Cellular.RoamingState.
 * @param {string} networkGuid The GUID of the network to get properties for.
 * @param {function(!chrome.networkingPrivate.NetworkStateProperties):void}
 *     callback Called immediately with the network state properties.
 * @see https://developer.chrome.com/extensions/networkingPrivate#method-getState
 */
chrome.networkingPrivate.getState = function(networkGuid, callback) {};

/**
 * Sets the properties of the network with id |networkGuid|. This is only valid
 * for configured networks (Source != None). Unconfigured visible networks
 * should use createNetwork instead.
 * @param {string} networkGuid The GUID of the network to set properties for.
 * @param {!chrome.networkingPrivate.NetworkConfigProperties} properties The
 *     properties to set.
 * @param {function():void=} callback Called when the operation has completed.
 * @see https://developer.chrome.com/extensions/networkingPrivate#method-setProperties
 */
chrome.networkingPrivate.setProperties = function(networkGuid, properties, callback) {};

/**
 * Creates a new network configuration from properties. If a matching configured
 * network already exists, this will fail. Otherwise returns the guid of the new
 * network.
 * @param {boolean} shared If true, share this network configuration with other
 *     users.
 * @param {!chrome.networkingPrivate.NetworkConfigProperties} properties The
 *     properties to configure the new network with.
 * @param {function(string):void=} callback Called with the GUID for the new
 *     network configuration once     the network has been created.
 * @see https://developer.chrome.com/extensions/networkingPrivate#method-createNetwork
 */
chrome.networkingPrivate.createNetwork = function(shared, properties, callback) {};

/**
 * Forgets a network configuration by clearing any configured properties for the
 * network with GUID 'networkGuid'. This may also include any other networks
 * with matching identifiers (e.g. WiFi SSID and Security). If no such
 * configuration exists, an error will be set and the operation will fail.
 * @param {string} networkGuid The GUID of the network to forget.
 * @param {function():void=} callback Called when the operation has completed.
 * @see https://developer.chrome.com/extensions/networkingPrivate#method-forgetNetwork
 */
chrome.networkingPrivate.forgetNetwork = function(networkGuid, callback) {};

/**
 * Returns a list of network objects with the same properties provided by
 * $(ref:networkingPrivate.getState). A filter is provided to specify the type
 * of networks returned and to limit the number of networks. Networks are
 * ordered by the system based on their priority, with connected or connecting
 * networks listed first.
 * @param {!chrome.networkingPrivate.NetworkFilter} filter Describes which
 *     networks to return.
 * @param {function(!Array<!chrome.networkingPrivate.NetworkStateProperties>):void}
 *     callback Called with a dictionary of networks and their state
 *     properties when received.
 * @see https://developer.chrome.com/extensions/networkingPrivate#method-getNetworks
 */
chrome.networkingPrivate.getNetworks = function(filter, callback) {};

/**
 * Deprecated. Please use $(ref:networkingPrivate.getNetworks) with
 * filter.visible = true instead.
 * @param {!chrome.networkingPrivate.NetworkType} networkType
 * @param {function(!Array<!chrome.networkingPrivate.NetworkStateProperties>):void}
 *     callback
 * @deprecated Use getNetworks.
 * @see https://developer.chrome.com/extensions/networkingPrivate#method-getVisibleNetworks
 */
chrome.networkingPrivate.getVisibleNetworks = function(networkType, callback) {};

/**
 * Deprecated. Please use $(ref:networkingPrivate.getDeviceStates) instead.
 * @param {function(!Array<!chrome.networkingPrivate.NetworkType>):void}
 *     callback
 * @deprecated Use getDeviceStates.
 * @see https://developer.chrome.com/extensions/networkingPrivate#method-getEnabledNetworkTypes
 */
chrome.networkingPrivate.getEnabledNetworkTypes = function(callback) {};

/**
 * Returns a list of $(ref:networkingPrivate.DeviceStateProperties) objects.
 * @param {function(!Array<!chrome.networkingPrivate.DeviceStateProperties>):void}
 *     callback Called with a list of devices and their state.
 * @see https://developer.chrome.com/extensions/networkingPrivate#method-getDeviceStates
 */
chrome.networkingPrivate.getDeviceStates = function(callback) {};

/**
 * Enables any devices matching the specified network type. Note, the type might
 * represent multiple network types (e.g. 'Wireless').
 * @param {!chrome.networkingPrivate.NetworkType} networkType The type of
 *     network to enable.
 * @see https://developer.chrome.com/extensions/networkingPrivate#method-enableNetworkType
 */
chrome.networkingPrivate.enableNetworkType = function(networkType) {};

/**
 * Disables any devices matching the specified network type. See note for
 * $(ref:networkingPrivate.enableNetworkType).
 * @param {!chrome.networkingPrivate.NetworkType} networkType The type of
 *     network to disable.
 * @see https://developer.chrome.com/extensions/networkingPrivate#method-disableNetworkType
 */
chrome.networkingPrivate.disableNetworkType = function(networkType) {};

/**
 * Requests that the networking subsystem scan for new networks and update the
 * list returned by $(ref:getVisibleNetworks). This is only a request: the
 * network subsystem can choose to ignore it.  If the list is updated, then the
 * $(ref:onNetworkListChanged) event will be fired.
 * @param {!chrome.networkingPrivate.NetworkType=} networkType If provided,
 *     requests a scan specific to the type.     For Cellular a mobile network
 *     scan will be requested if supported.
 * @see https://developer.chrome.com/extensions/networkingPrivate#method-requestNetworkScan
 */
chrome.networkingPrivate.requestNetworkScan = function(networkType) {};

/**
 * Starts a connection to the network with networkGuid.
 * @param {string} networkGuid The GUID of the network to connect to.
 * @param {function():void=} callback Called when the connect request has been
 *     sent. Note: the     connection may not have completed. Observe
 *     $(ref:onNetworksChanged)     to be notified when a network state changes.
 *     If the connect request     immediately failed (e.g. the network is
 *     unconfigured),     $(ref:runtime.lastError) will be set with a failure
 *     reason.
 * @see https://developer.chrome.com/extensions/networkingPrivate#method-startConnect
 */
chrome.networkingPrivate.startConnect = function(networkGuid, callback) {};

/**
 * Starts a disconnect from the network with networkGuid.
 * @param {string} networkGuid The GUID of the network to disconnect from.
 * @param {function():void=} callback Called when the disconnect request has
 *     been sent. See note     for $(ref:startConnect).
 * @see https://developer.chrome.com/extensions/networkingPrivate#method-startDisconnect
 */
chrome.networkingPrivate.startDisconnect = function(networkGuid, callback) {};

/**
 * Starts activation of the Cellular network with networkGuid. If called for a
 * network that is already activated, or for a network with a carrier that can
 * not be directly activated, this will show the account details page for the
 * carrier if possible.
 * @param {string} networkGuid The GUID of the Cellular network to activate.
 * @param {string=} carrier Optional name of carrier to activate.
 * @param {function():void=} callback Called when the activation request has
 *     been sent. See note     for $(ref:startConnect).
 * @see https://developer.chrome.com/extensions/networkingPrivate#method-startActivate
 */
chrome.networkingPrivate.startActivate = function(networkGuid, carrier, callback) {};

/**
 * Verifies that the device is a trusted device.
 * @param {!chrome.networkingPrivate.VerificationProperties} properties
 *     Properties of the destination to use in verifying that it     is a
 *     trusted device.
 * @param {function(boolean):void} callback A callback function that indicates
 *     whether or not the device     is a trusted device.
 * @deprecated Use networking.castPrivate API.
 * @see https://developer.chrome.com/extensions/networkingPrivate#method-verifyDestination
 */
chrome.networkingPrivate.verifyDestination = function(properties, callback) {};

/**
 * Verifies that the device is a trusted device and retrieves encrypted network
 * credentials.
 * @param {!chrome.networkingPrivate.VerificationProperties} properties
 *     Properties of the destination to use in verifying that it     is a
 *     trusted device.
 * @param {string} networkGuid The GUID of the Cellular network to activate.
 * @param {function(string):void} callback A callback function that receives
 *     base64-encoded encrypted     credential data to send to a trusted device.
 * @deprecated Use networking.castPrivate API.
 * @see https://developer.chrome.com/extensions/networkingPrivate#method-verifyAndEncryptCredentials
 */
chrome.networkingPrivate.verifyAndEncryptCredentials = function(properties, networkGuid, callback) {};

/**
 * Verifies that the device is a trusted device and encrypts supplied data with
 * device public key.
 * @param {!chrome.networkingPrivate.VerificationProperties} properties
 *     Properties of the destination to use in verifying that it     is a
 *     trusted device.
 * @param {string} data A string containing the base64-encoded data to encrypt.
 * @param {function(string):void} callback A callback function that receives
 *     base64-encoded encrypted     data to send to a trusted device.
 * @deprecated Use networking.castPrivate API.
 * @see https://developer.chrome.com/extensions/networkingPrivate#method-verifyAndEncryptData
 */
chrome.networkingPrivate.verifyAndEncryptData = function(properties, data, callback) {};

/**
 * Enables TDLS for WiFi traffic with a specified peer if available.
 * @param {string} ip_or_mac_address The IP or MAC address of the peer with
 *     which to     enable a TDLS connection. |enabled| If true, enable TDLS,
 *     otherwise disable TDLS.
 * @param {boolean} enabled
 * @param {function(string):void=} callback A callback function that receives a
 *     string with an error or     the current TDLS status. 'Failed' indicates
 *     that the request failed     (e.g. MAC address lookup failed). 'Timeout'
 *     indicates that the lookup     timed out. Otherwise a valid status is
 *     returned (see     $(ref:getWifiTDLSStatus)).
 * @deprecated Use networking.castPrivate API.
 * @see https://developer.chrome.com/extensions/networkingPrivate#method-setWifiTDLSEnabledState
 */
chrome.networkingPrivate.setWifiTDLSEnabledState = function(ip_or_mac_address, enabled, callback) {};

/**
 * Returns the current TDLS status for the specified peer.
 * @param {string} ip_or_mac_address The IP or MAC address of the peer.
 * @param {function(string):void} callback A callback function that receives a
 *     string with the current     TDLS status which can be 'Connected',
 *     'Disabled', 'Disconnected',     'Nonexistent', or 'Unknown'.
 * @deprecated Use networking.castPrivate API.
 * @see https://developer.chrome.com/extensions/networkingPrivate#method-getWifiTDLSStatus
 */
chrome.networkingPrivate.getWifiTDLSStatus = function(ip_or_mac_address, callback) {};

/**
 * Returns captive portal status for the network matching 'networkGuid'.
 * @param {string} networkGuid The GUID of the network to get captive portal
 *     status for.
 * @param {function(!chrome.networkingPrivate.CaptivePortalStatus):void}
 *     callback A callback function that returns the results of the query for
 *     network captive portal status.
 * @see https://developer.chrome.com/extensions/networkingPrivate#method-getCaptivePortalStatus
 */
chrome.networkingPrivate.getCaptivePortalStatus = function(networkGuid, callback) {};

/**
 * Unlocks a Cellular SIM card. * If the SIM is PIN locked, |pin| will be used
 * to unlock the SIM and   the |puk| argument will be ignored if provided. * If
 * the SIM is PUK locked, |puk| and |pin| must be provided. If the   operation
 * succeeds (|puk| is valid), the PIN will be set to |pin|.   (If |pin| is empty
 * or invalid the operation will fail).
 * @param {string} networkGuid The GUID of the cellular network to unlock.
 *     If empty, the default cellular device will be used.
 * @param {string} pin The current SIM PIN, or the new PIN if PUK is provided.
 * @param {string=} puk The operator provided PUK for unblocking a blocked SIM.
 * @param {function():void=} callback Called when the operation has completed.
 * @see https://developer.chrome.com/extensions/networkingPrivate#method-unlockCellularSim
 */
chrome.networkingPrivate.unlockCellularSim = function(networkGuid, pin, puk, callback) {};

/**
 * Sets whether or not SIM locking is enabled (i.e a PIN will be required when
 * the device is powered) and changes the PIN if a new PIN is specified. If the
 * new PIN is provided but not valid (e.g. too short) the operation will fail.
 * This will not lock the SIM; that is handled automatically by the device.
 * NOTE: If the SIM is locked, it must first be unlocked with
 * unlockCellularSim() before this can be called (otherwise it will fail and
 * $(ref:runtime.lastError) will be set to Error.SimLocked).
 * @param {string} networkGuid The GUID of the cellular network to set the SIM
 *     state of.     If empty, the default cellular device will be used.
 * @param {!chrome.networkingPrivate.CellularSimState} simState The SIM state to
 *     set.
 * @param {function():void=} callback Called when the operation has completed.
 * @see https://developer.chrome.com/extensions/networkingPrivate#method-setCellularSimState
 */
chrome.networkingPrivate.setCellularSimState = function(networkGuid, simState, callback) {};

/**
 * Selects which Cellular Mobile Network to use. |networkId| must be the
 * NetworkId property of a member of Cellular.FoundNetworks from the network
 * properties for the specified Cellular network.
 * @param {string} networkGuid The GUID of the cellular network to select the
 *     network     for. If empty, the default cellular device will be used.
 * @param {string} networkId The networkId to select.
 * @param {function():void=} callback Called when the operation has completed.
 * @see https://developer.chrome.com/extensions/networkingPrivate#method-selectCellularMobileNetwork
 */
chrome.networkingPrivate.selectCellularMobileNetwork = function(networkGuid, networkId, callback) {};

/**
 * Gets the global policy properties. These properties are not expected to
 * change during a session.
 * @param {function(!chrome.networkingPrivate.GlobalPolicy):void} callback
 * @see https://developer.chrome.com/extensions/networkingPrivate#method-getGlobalPolicy
 */
chrome.networkingPrivate.getGlobalPolicy = function(callback) {};

/**
 * Gets the lists of certificates available for network configuration.
 * @param {function(!chrome.networkingPrivate.CertificateLists):void} callback
 * @see https://developer.chrome.com/extensions/networkingPrivate#method-getCertificateLists
 */
chrome.networkingPrivate.getCertificateLists = function(callback) {};

/**
 * Fired when the properties change on any of the networks.  Sends a list of
 * GUIDs for networks whose properties have changed.
 * @type {!ChromeEvent}
 * @see https://developer.chrome.com/extensions/networkingPrivate#event-onNetworksChanged
 */
chrome.networkingPrivate.onNetworksChanged;

/**
 * Fired when the list of networks has changed.  Sends a complete list of GUIDs
 * for all the current networks.
 * @type {!ChromeEvent}
 * @see https://developer.chrome.com/extensions/networkingPrivate#event-onNetworkListChanged
 */
chrome.networkingPrivate.onNetworkListChanged;

/**
 * Fired when the list of devices has changed or any device state properties
 * have changed.
 * @type {!ChromeEvent}
 * @see https://developer.chrome.com/extensions/networkingPrivate#event-onDeviceStateListChanged
 */
chrome.networkingPrivate.onDeviceStateListChanged;

/**
 * Fired when a portal detection for a network completes. Sends the guid of the
 * network and the corresponding captive portal status.
 * @type {!ChromeEvent}
 * @see https://developer.chrome.com/extensions/networkingPrivate#event-onPortalDetectionCompleted
 */
chrome.networkingPrivate.onPortalDetectionCompleted;

/**
 * Fired when any certificate list has changed.
 * @type {!ChromeEvent}
 * @see https://developer.chrome.com/extensions/networkingPrivate#event-onCertificateListsChanged
 */
chrome.networkingPrivate.onCertificateListsChanged;
