// Copyright 2015 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.
// The chrome.networkingPrivate
API is used for configuring
// network connections (Cellular, Ethernet, VPN, WiFi or WiMAX). This private
// API is only valid if called from a browser or app associated with the
// primary user. See the Open Network Configuration (ONC) documentation for
// descriptions of properties:
//
// src/components/onc/docs/onc_spec.html, or the
//
// Open Network Configuration page at chromium.org.
//
// NOTE: Most dictionary properties and enum values use UpperCamelCase to match
// the ONC spec instead of the JavaScript lowerCamelCase convention.
//
// "State" properties describe just the ONC properties returned by
// $(ref:networkingPrivate.getState) and $(ref:networkingPrivate.getNetworks).
//
// "Config" properties describe just the ONC properties that can be configured
// through this API. NOTE: Not all configuration properties are exposed at this
// time, only those currently required by the Chrome Settings UI.
// TODO(stevenjb): Provide all configuration properties and types,
// crbug.com/380937.
//
// TODO(stevenjb/pneubeck): Merge the ONC documentation with this document and
// use it as the ONC specification.
namespace networkingPrivate {
enum ActivationStateType {
Activated, Activating, NotActivated, PartiallyActivated
};
enum CaptivePortalStatus {
Unknown, Offline, Online, Portal, ProxyAuthRequired
};
enum ConnectionStateType {
Connected, Connecting, NotConnected
};
enum DeviceStateType {
// Device is available but not initialized.
Uninitialized,
// Device is intialized but not enabled.
Disabled,
// Enabled state has been requested but has not completed.
Enabling,
// Device is enabled.
Enabled
};
enum IPConfigType {
DHCP, Static
};
enum NetworkType {
All, Cellular, Ethernet, VPN, Wireless, WiFi, WiMAX
};
dictionary APNProperties {
DOMString? AccessPointName;
DOMString? Language;
DOMString? LocalizedName;
DOMString? Name;
DOMString? Password;
DOMString? Username;
};
dictionary CellularConfigProperties {
boolean? AutoConnect;
APNProperties? APN;
// Specifies which carrier to use for Cellular configurations that support
// multiple carriers. May be set with $(ref:setProperties), but will be
// ignored by $(ref:createConfiguration).
DOMString? Carrier;
};
dictionary CellularStateProperties {
ActivationStateType? ActivationState;
DOMString? NetworkTechnology;
DOMString? RoamingState;
boolean? SIMPresent;
long? SignalStrength;
};
dictionary DeviceStateProperties {
// Set if the device is enabled. True if the device is currently scanning.
boolean? Scanning;
// The current state of the device.
DeviceStateType State;
// The network type associated with the device (Cellular, Ethernet, WiFi, or
// WiMAX).
NetworkType Type;
};
dictionary EthernetStateProperties {
DOMString Authentication;
};
dictionary IPConfigProperties {
DOMString? Gateway;
DOMString? IPAddress;
DOMString[]? NameServers;
long? RoutingPrefix;
DOMString? Type;
DOMString? WebProxyAutoDiscoveryUrl;
};
dictionary IPSecProperties {
DOMString AuthenticationType;
};
dictionary ThirdPartyVPNProperties {
DOMString ExtensionID;
};
dictionary VPNConfigProperties {
boolean? AutoConnect;
DOMString? Host;
ThirdPartyVPNProperties? ThirdPartyVPN;
DOMString? Type;
};
dictionary VPNStateProperties {
DOMString Type;
IPSecProperties? IPsec;
ThirdPartyVPNProperties? ThirdPartyVPN;
};
dictionary WiFiConfigProperties {
boolean? AutoConnect;
DOMString? HexSSID;
boolean? HiddenSSID;
DOMString? Passphrase;
DOMString? SSID;
DOMString? Security;
};
dictionary WiFiStateProperties {
DOMString Security;
long? SignalStrength;
};
dictionary WiMaxConfigProperties {
boolean? AutoConnect;
};
dictionary WiMAXStateProperties {
long? SignalStrength;
};
dictionary NetworkConfigProperties {
CellularConfigProperties? Cellular;
DOMString? GUID;
IPConfigType? IPAddressConfigType;
DOMString? Name;
IPConfigType? NameServersConfigType;
long? Priority;
IPConfigProperties? StaticIPConfig;
NetworkType? Type;
VPNConfigProperties? VPN;
WiFiConfigProperties? WiFi;
WiMaxConfigProperties? WiMAX;
};
dictionary NetworkStateProperties {
CellularStateProperties? Cellular;
boolean? Connectable;
ConnectionStateType? ConnectionState;
EthernetStateProperties? Ethernet;
DOMString? ErrorState;
DOMString GUID;
DOMString? Name;
long? Priority;
DOMString? Source;
NetworkType Type;
VPNStateProperties? VPN;
WiFiStateProperties? WiFi;
WiMAXStateProperties? WiMAX;
};
dictionary VerificationProperties {
// A string containing a PEM-encoded (including the 'BEGIN CERTIFICATE'
// header and 'END CERTIFICATE' footer) X.509 certificate for use in
// verifying the signed data.
DOMString certificate;
// An array of PEM-encoded X.509 intermediate certificate authority
// certificates. Each PEM-encoded certificate is expected to have the
// 'BEGIN CERTIFICATE' header and 'END CERTIFICATE' footer.
DOMString[]? intermediateCertificates;
// A string containing a base64-encoded RSAPublicKey ASN.1 structure,
// representing the public key to be used by
// $(ref:verifyAndEncryptCredentials) and $(ref:verifyAndEncryptData)
// methods.
DOMString publicKey;
// A string containing a base64-encoded random binary data for use in
// verifying the signed data.
DOMString nonce;
// A string containing the identifying data string signed by the device.
DOMString signedData;
// A string containing the serial number of the device.
DOMString deviceSerial;
// A string containing the SSID of the device. Should be empty for new
// configurations.
DOMString deviceSsid;
// A string containing the BSSID of the device. Should be empty for new
// configurations.
DOMString deviceBssid;
};
dictionary NetworkFilter {
// The type of networks to return.
NetworkType networkType;
// If true, only include visible (physically connected or in-range)
// networks. Defaults to 'false'.
boolean? visible;
// If true, only include configured (saved) networks. Defaults to 'false'.
boolean? configured;
// Maximum number of networks to return. Defaults to 1000 if unspecified.
// Use 0 for no limit.
long? limit;
};
callback VoidCallback = void();
callback BooleanCallback = void(boolean result);
callback StringCallback = void(DOMString result);
// TODO(stevenjb): Use NetworkProperties for |result| once defined.
callback GetPropertiesCallback = void(object result);
// TODO(stevenjb): Use ManagedNetworkProperties for |result| once defined.
callback GetManagedPropertiesCallback = void(object result);
callback GetStatePropertiesCallback = void(NetworkStateProperties result);
callback GetNetworksCallback = void(NetworkStateProperties[] result);
callback GetDeviceStatesCallback = void(DeviceStateProperties[] result);
callback GetEnabledNetworkTypesCallback = void(NetworkType[] result);
callback CaptivePortalStatusCallback = void(CaptivePortalStatus result);
// These functions all report failures via chrome.runtime.lastError.
interface Functions {
// Gets all the properties of the network with id networkGuid. Includes all
// properties of the network (read-only and read/write values).
// |networkGuid|: The GUID of the network to get properties for.
// |callback|: Called with the network properties when received.
static void getProperties(DOMString networkGuid,
GetPropertiesCallback 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.
// |networkGuid|: The GUID of the network to get properties for.
// |callback|: Called with the managed network properties when received.
static void getManagedProperties(DOMString networkGuid,
GetManagedPropertiesCallback 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.
// |networkGuid|: The GUID of the network to get properties for.
// |callback|: Called immediately with the network state properties.
static void getState(DOMString networkGuid,
GetStatePropertiesCallback callback);
// Sets the properties of the network with id networkGuid.
// |networkGuid|: The GUID of the network to set properties for.
// |properties|: The properties to set.
// |callback|: Called when the operation has completed.
static void setProperties(DOMString networkGuid,
NetworkConfigProperties properties,
optional VoidCallback 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.
// |shared|: If true, share this network configuration with other users.
// |properties|: The properties to configure the new network with.
// |callback|: Called with the GUID for the new network configuration once
// the network has been created.
static void createNetwork(boolean shared,
NetworkConfigProperties properties,
optional StringCallback 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.
// |networkGuid|: The GUID of the network to forget.
// |callback|: Called when the operation has completed.
static void forgetNetwork(DOMString networkGuid,
optional VoidCallback 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.
// |filter|: Describes which networks to return.
// |callback|: Called with a dictionary of networks and their state
// properties when received.
static void getNetworks(NetworkFilter filter,
GetNetworksCallback callback);
// Deprecated. Please use $(ref:networkingPrivate.getNetworks) with
// filter.visible = true instead.
[deprecated="Use getNetworks."] static void getVisibleNetworks(
NetworkType networkType,
GetNetworksCallback callback);
// Deprecated. Please use $(ref:networkingPrivate.getDeviceStates) instead.
[deprecated="Use getDeviceStates."] static void getEnabledNetworkTypes(
GetEnabledNetworkTypesCallback callback);
// Returns a list of $(ref:networkingPrivate.DeviceStateProperties) objects.
// |callback|: Called with a list of devices and their state.
static void getDeviceStates(GetDeviceStatesCallback callback);
// Enables any devices matching the specified network type. Note, the type
// might represent multiple network types (e.g. 'Wireless').
// |networkType|: The type of network to enable.
static void enableNetworkType(NetworkType networkType);
// Disables any devices matching the specified network type. See note for
// $(ref:networkingPrivate.enableNetworkType).
// |networkType|: The type of network to disable.
static void disableNetworkType(NetworkType 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.
static void requestNetworkScan();
// Starts a connection to the network with networkGuid.
// |networkGuid|: The GUID of the network to connect to.
// |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.
static void startConnect(DOMString networkGuid,
optional VoidCallback callback);
// Starts a disconnect from the network with networkGuid.
// |networkGuid|: The GUID of the network to disconnect from.
// |callback|: Called when the disconnect request has been sent. See note
// for $(ref:startConnect).
static void startDisconnect(DOMString networkGuid,
optional VoidCallback callback);
// Starts activation of the Cellular network with networkGuid.
// |networkGuid|: The GUID of the Cellular network to activate.
// |carrier|: Optional name of carrier to activate.
// |callback|: Called when the activation request has been sent. See note
// for $(ref:startConnect).
static void startActivate(DOMString networkGuid,
optional DOMString carrier,
optional VoidCallback callback);
// Verifies that the device is a trusted device.
// |properties|: Properties of the destination to use in verifying that it
// is a trusted device.
// |callback|: A callback function that indicates whether or not the device
// is a trusted device.
static void verifyDestination(VerificationProperties properties,
BooleanCallback callback);
// Verifies that the device is a trusted device and retrieves encrypted
// network credentials.
// |properties|: Properties of the destination to use in verifying that it
// is a trusted device.
// |networkGuid|: The GUID of the Cellular network to activate.
// |callback|: A callback function that receives base64-encoded encrypted
// credential data to send to a trusted device.
static void verifyAndEncryptCredentials(VerificationProperties properties,
DOMString networkGuid,
StringCallback callback);
// Verifies that the device is a trusted device and encrypts supplied
// data with device public key.
// |properties|: Properties of the destination to use in verifying that it
// is a trusted device.
// |data|: A string containing the base64-encoded data to encrypt.
// |callback|: A callback function that receives base64-encoded encrypted
// data to send to a trusted device.
static void verifyAndEncryptData(VerificationProperties properties,
DOMString data,
StringCallback callback);
// Enables TDLS for WiFi traffic with a specified peer if available.
// |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.
// |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)).
static void setWifiTDLSEnabledState(DOMString ip_or_mac_address,
boolean enabled,
optional StringCallback callback);
// Returns the current TDLS status for the specified peer.
// |ip_or_mac_address|: The IP or MAC address of the peer.
// |callback|: A callback function that receives a string with the current
// TDLS status which can be 'Connected', 'Disabled', 'Disconnected',
// 'Nonexistent', or 'Unknown'.
static void getWifiTDLSStatus(DOMString ip_or_mac_address,
StringCallback callback);
// Returns captive portal status for the network matching 'networkGuid'.
// |networkGuid|: The GUID of the network to get captive portal status for.
// |callback|: A callback function that returns the results of the query for
// network captive portal status.
static void getCaptivePortalStatus(DOMString networkGuid,
CaptivePortalStatusCallback callback);
};
interface Events {
// Fired when the properties change on any of the networks. Sends a list of
// GUIDs for networks whose properties have changed.
static void onNetworksChanged(DOMString[] changes);
// Fired when the list of networks has changed. Sends a complete list of
// GUIDs for all the current networks.
static void onNetworkListChanged(DOMString[] changes);
// Fired when the list of devices has changed or any device state properties
// have changed.
static void onDeviceStateListChanged();
// Fired when a portal detection for a network completes. Sends the guid of
// the network and the corresponding captive portal status.
static void onPortalDetectionCompleted(DOMString networkGuid,
CaptivePortalStatus status);
};
};