| Index: native_client_sdk/src/examples/api/vpn_provider/example.js
|
| diff --git a/native_client_sdk/src/examples/api/vpn_provider/example.js b/native_client_sdk/src/examples/api/vpn_provider/example.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..c0a590d2f31cb016f97c5edbebb0af474da895ca
|
| --- /dev/null
|
| +++ b/native_client_sdk/src/examples/api/vpn_provider/example.js
|
| @@ -0,0 +1,134 @@
|
| +// Copyright 2016 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.
|
| +
|
| +// VPN Configuration identification.
|
| +var configName = 'Mock configuration';
|
| +var configId;
|
| +
|
| +// Example configuration.
|
| +var vpnParams = {
|
| + 'address': '127.0.0.1/32',
|
| + 'mtu': '1000',
|
| + 'exclusionList': ['127.0.0.1/32'],
|
| + 'inclusionList': ['0.0.0.0/0'],
|
| + 'dnsServers': ['8.8.8.8'],
|
| + 'reconnect': 'true'
|
| +};
|
| +
|
| +// Simple log to HTML
|
| +function wlog(message) {
|
| + var logEl = document.getElementById('log');
|
| + logEl.innerHTML += message + '<br />'; // Append to log.
|
| + logEl.scrollTop = logEl.scrollHeight; // Scroll log to bottom.
|
| +}
|
| +
|
| +// Create a VPN configuration using the createConfig method.
|
| +// A VPN configuration is a persistent entry shown to the user in a native
|
| +// Chrome OS UI. The user can select a VPN configuration from a list and
|
| +// connect to it or disconnect from it.
|
| +function create() {
|
| + chrome.vpnProvider.createConfig(configName, function(id) {
|
| + configId = id;
|
| + wlog('JS: Created configuration with name=\'' + configName + '\'' +
|
| + ' and id=\'' + configId + '\'');
|
| + });
|
| +}
|
| +
|
| +// Bind connection to NaCl.
|
| +function bind() {
|
| + common.naclModule.postMessage({cmd: 'bind', name: configName, id: configId});
|
| +}
|
| +
|
| +function onSetParameters() {
|
| + chrome.vpnProvider.setParameters(vpnParams, function() {
|
| + wlog('JS: setParameters set!');
|
| +
|
| + // Bind connection to NaCl.
|
| + bind();
|
| + });
|
| +}
|
| +
|
| +function onBindSuccess() {
|
| + // Notify the connection state as 'connected'.
|
| + chrome.vpnProvider.notifyConnectionStateChanged('connected', function() {
|
| + wlog('JS: notifyConnectionStateChanged connected!');
|
| + });
|
| +}
|
| +
|
| +// VpnProviders handlers.
|
| +function onPlatformMessageListener(id, message, error) {
|
| + wlog('JS: onPlatformMessage: id=\'' + id + '\' message=\'' + message +
|
| + '\' error=\'' + error + '\'');
|
| +
|
| + if (message == 'connected') {
|
| + wlog('JS: onPlatformMessage connected!');
|
| +
|
| + // Notify NaCl module to connect to the VPN tunnel.
|
| + common.naclModule.postMessage({cmd: 'connected'});
|
| +
|
| + } else if (message == 'disconnected') {
|
| + wlog('JS: onPlatformMessage disconnected!');
|
| +
|
| + // Notify NaCl module to disconnect from the VPN tunnel.
|
| + common.naclModule.postMessage({cmd: 'disconnected'});
|
| + }
|
| +}
|
| +
|
| +// This function is called by common.js when a message is received from the
|
| +// NaCl module.
|
| +function handleMessage(message) {
|
| + if (typeof message.data === 'string') {
|
| + wlog(message.data);
|
| + } else if (message.data['cmd'] == 'setParameters') {
|
| + onSetParameters();
|
| + } else if (message.data['cmd'] == 'bindSuccess') {
|
| + onBindSuccess();
|
| + }
|
| +}
|
| +
|
| +// setupHandlers VpnProviders handlers.
|
| +function setupHandlers() {
|
| + // Add listeners to the events onPlatformMessage, onPacketReceived and
|
| + // onConfigRemoved.
|
| + chrome.vpnProvider.onPlatformMessage.addListener(onPlatformMessageListener);
|
| +
|
| + chrome.vpnProvider.onPacketReceived.addListener(function(data) {
|
| + wlog('JS: onPacketReceived');
|
| + console.log('Unexpected event:vpnProvider.onPacketReceived ' +
|
| + 'called from JavaScript.');
|
| + });
|
| +
|
| + chrome.vpnProvider.onConfigRemoved.addListener(function(id) {
|
| + wlog('JS: onConfigRemoved: id=\'' + id + '\'');
|
| + });
|
| +
|
| + chrome.vpnProvider.onConfigCreated.addListener(function(id, name, data) {
|
| + wlog('JS: onConfigCreated: id=\'' + id + '\' name=\'' + name + '\'' +
|
| + 'data=' + JSON.stringify(data));
|
| + });
|
| +
|
| + chrome.vpnProvider.onUIEvent.addListener(function(event, id) {
|
| + wlog('JS: onUIEvent: event=\'' + event + '\' id=\'' + id + '\'');
|
| + });
|
| +}
|
| +
|
| +// This function is called by common.js when the NaCl module is
|
| +// loaded.
|
| +function moduleDidLoad() {
|
| + // Once we load, hide the plugin. In this example, we don't display anything
|
| + // in the plugin, so it is fine to hide it.
|
| + common.hideModule();
|
| +
|
| + if (chrome.vpnProvider === undefined) {
|
| + wlog('JS: moduleDidLoad: chrome.vpnProvider undefined.');
|
| + console.log('JS: moduleDidLoad: chrome.vpnProvider undefined.');
|
| + return;
|
| + }
|
| +
|
| + // Setup VpnProvider handlers.
|
| + setupHandlers();
|
| +
|
| + // All done, create the connection entry in the VPN UI.
|
| + create();
|
| +}
|
|
|