blob: 9399f48e1bab4b9e22fe2a8ea51a93d3106e4579 [file] [log] [blame]
// Copyright 2014 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.
// Use the <code>chrome.vpnProvider</code> API to implement a VPN
// client.
namespace vpnProvider {
// A parameters class for the VPN interface.
dictionary Parameters {
// IP address for the VPN interface in CIDR notation.
// IPv4 is currently the only supported mode.
DOMString address;
// Broadcast address for the VPN interface. (default: deduced
// from IP address and mask)
DOMString? broadcastAddress;
// MTU setting for the VPN interface. (default: 1500 bytes)
DOMString? mtu;
// Exclude network traffic to the list of IP blocks in CIDR notation from
// the tunnel. This can be used to bypass traffic to and from the VPN
// server.
// When many rules match a destination, the rule with the longest matching
// prefix wins.
// Entries that correspond to the same CIDR block are treated as duplicates.
// Such duplicates in the collated (exclusionList + inclusionList) list are
// eliminated and the exact duplicate entry that will be eliminated is
// undefined.
DOMString[] exclusionList;
// Include network traffic to the list of IP blocks in CIDR notation to the
// tunnel. This parameter can be used to set up a split tunnel. By default
// no traffic is directed to the tunnel. Adding the entry "0.0.0.0/0" to
// this list gets all the user traffic redirected to the tunnel.
// When many rules match a destination, the rule with the longest matching
// prefix wins.
// Entries that correspond to the same CIDR block are treated as duplicates.
// Such duplicates in the collated (exclusionList + inclusionList) list are
// eliminated and the exact duplicate entry that will be eliminated is
// undefined.
DOMString[] inclusionList;
// A list of search domains. (default: no search domain)
DOMString[]? domainSearch;
// A list of IPs for the DNS servers.
DOMString[] dnsServers;
// Whether or not the VPN extension implements auto-reconnection.
//
// If true, the <code>linkDown</code>, <code>linkUp</code>,
// <code>linkChanged</code>, <code>suspend</code>, and <code>resume</code>
// platform messages will be used to signal the respective events.
// If false, the system will forcibly disconnect the VPN if the network
// topology changes, and the user will need to reconnect manually.
// (default: false)
//
// This property is new in Chrome 51; it will generate an exception in
// earlier versions. try/catch can be used to conditionally enable the
// feature based on browser support.
DOMString? reconnect;
};
// The enum is used by the platform to notify the client of the VPN session
// status.
enum PlatformMessage {
// VPN configuration connected.
connected,
// VPN configuration disconnected.
disconnected,
// An error occurred in VPN connection, for example a timeout. A description
// of the error is given as the <a href="#property-onPlatformMessage-error">
// error argument to onPlatformMessage</a>.
error,
// The default physical network connection is down.
linkDown,
// The default physical network connection is back up.
linkUp,
// The default physical network connection changed, e.g. wifi-&gt;mobile.
linkChanged,
// The OS is preparing to suspend, so the VPN should drop its connection.
// The extension is not guaranteed to receive this event prior to
// suspending.
suspend,
// The OS has resumed and the user has logged back in, so the VPN should
// try to reconnect.
resume
};
// The enum is used by the VPN client to inform the platform
// of its current state. This helps provide meaningful messages
// to the user.
enum VpnConnectionState {
// VPN connection was successful.
connected,
// VPN connection failed.
failure
};
// The enum is used by the platform to indicate the event that triggered
// <code>onUIEvent</code>.
enum UIEvent {
// Request the VPN client to show add configuration dialog to the user.
showAddDialog,
// Request the VPN client to show configuration settings dialog to the user.
showConfigureDialog
};
// The callback is used by <code>setParameters, sendPacket</code>
// to signal completion. The callback is called with
// <code>chrome.runtime.lastError</code> set to error code if
// there is an error.
[inline_doc] callback CallCompleteCallback = void ();
// The callback is used by <code>createConfig</code> to signal completion.
// The callback is called with <code>chrome.runtime.lastError</code> set to
// an error code if there is an error.
// |id|: A unique ID for the created configuration, or <code>undefined</code>
// on failure.
[inline_doc] callback CreateConfigCompleteCallback = void (DOMString id);
interface Functions {
// Creates a new VPN configuration that persists across multiple login
// sessions of the user.
// |name|: The name of the VPN configuration.
// |callback|: Called when the configuration is created or if there is an
// error.
static void createConfig(DOMString name,
CreateConfigCompleteCallback callback);
// Destroys a VPN configuration created by the extension.
// |id|: ID of the VPN configuration to destroy.
// |callback|: Called when the configuration is destroyed or if there is an
// error.
static void destroyConfig(DOMString id,
optional CallCompleteCallback callback);
// Sets the parameters for the VPN session. This should be called
// immediately after <code>"connected"</code> is received from the platform.
// This will succeed only when the VPN session is owned by the extension.
// |parameters|: The parameters for the VPN session.
// |callback|: Called when the parameters are set or if there is an error.
static void setParameters(Parameters parameters,
CallCompleteCallback callback);
// Sends an IP packet through the tunnel created for the VPN session.
// This will succeed only when the VPN session is owned by the extension.
// |data|: The IP packet to be sent to the platform.
// |callback|: Called when the packet is sent or if there is an error.
static void sendPacket(ArrayBuffer data,
optional CallCompleteCallback callback);
// Notifies the VPN session state to the platform.
// This will succeed only when the VPN session is owned by the extension.
// |state|: The VPN session state of the VPN client.
// |callback|: Called when the notification is complete or if there is an
// error.
static void notifyConnectionStateChanged(
VpnConnectionState state,
optional CallCompleteCallback callback);
};
interface Events {
// Triggered when a message is received from the platform for a
// VPN configuration owned by the extension.
// |id|: ID of the configuration the message is intended for.
// |message|: The message received from the platform. Note that new
// message types may be added in future Chrome versions to support new
// features.
// |error|: Error message when there is an error.
static void onPlatformMessage(DOMString id,
PlatformMessage message,
DOMString error);
// Triggered when an IP packet is received via the tunnel for the VPN
// session owned by the extension.
// |data|: The IP packet received from the platform.
static void onPacketReceived(ArrayBuffer data);
// Triggered when a configuration created by the extension is removed by the
// platform.
// |id|: ID of the removed configuration.
static void onConfigRemoved(DOMString id);
// Triggered when a configuration is created by the platform for the
// extension.
// |id|: ID of the configuration created.
// |name|: Name of the configuration created.
// |data|: Configuration data provided by the administrator.
static void onConfigCreated(DOMString id, DOMString name, object data);
// Triggered when there is a UI event for the extension. UI events are
// signals from the platform that indicate to the app that a UI dialog
// needs to be shown to the user.
// |event|: The UI event that is triggered.
// |id|: ID of the configuration for which the UI event was triggered.
static void onUIEvent(UIEvent event, optional DOMString id);
};
};