Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(128)

Unified Diff: native_client_sdk/src/examples/api/vpn_provider/example.js

Issue 1731273002: ppapi: PPB_VpnProvider: Add a simple NaCl SDK example. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@vpn-ppapi
Patch Set: New simplied API. Full connection workflow. Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..927272c10bad624bf503f0cfbf703bded18d7b23
--- /dev/null
+++ b/native_client_sdk/src/examples/api/vpn_provider/example.js
@@ -0,0 +1,132 @@
+// 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";
emaxx 2016/07/18 13:46:58 nit: Google JS style guide suggests to prefer the
adrian.belgun 2016/07/19 13:57:22 Done.
+var configId;
+
+// Example configuration.
+vpnParams = {
emaxx 2016/07/18 13:46:58 nit: add "var".
adrian.belgun 2016/07/19 13:57:22 Done.
+ "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 configurations using the createConfig method.
emaxx 2016/07/18 13:46:58 nit: s/configurations/configuration/.
adrian.belgun 2016/07/19 13:57:22 Done.
+// 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("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("setParameters set!");
+
+ // Bind connection to NaCl.
+ bind();
+ }
+ );
emaxx 2016/07/18 13:46:58 nit: the closing bracket usually stays on the same
adrian.belgun 2016/07/19 13:57:22 Done.
+}
+
+function onBindSuccess() {
+ // Notify the connection state as "connected".
+ chrome.vpnProvider.notifyConnectionStateChanged(
+ "connected",
+ function() {
+ wlog("notifyConnectionStateChanged connected!");
+ }
+ );
+}
+
+// VpnProviders handlers.
+function onPlatformMessageListener(id, message, error) {
+ wlog("onPlatformMessage id='" + id + "' message='" + message + "' error='" +
+ error + "'");
+
+ if (message == "connected") {
+ wlog("onPlatformMessage connected!");
+
+ // Notify NaCl module to connect to the VPN tunnel.
+ common.naclModule.postMessage({cmd: 'connected'});
emaxx 2016/07/18 13:46:58 nit: Please correct the indentation here and in li
adrian.belgun 2016/07/19 13:57:22 Done.
+
+ } else if (message == "disconnected") {
+ wlog("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) {
emaxx 2016/07/18 13:46:58 Is it correct that this JavaScript event should ne
adrian.belgun 2016/07/19 13:57:22 Yes. That's what I'm doing here. It's logging to t
+ wlog("onPacketRecevied - JS");
emaxx 2016/07/18 13:46:58 nit: s/onPacketRecevied/onPacketReceived/
adrian.belgun 2016/07/19 13:57:22 Done.
+ });
+
+ chrome.vpnProvider.onConfigRemoved.addListener(function(id) {
+ wlog("onConfigRemoved id='" + id + "'");
+ });
+
+ chrome.vpnProvider.onConfigCreated.addListener(function(id, name, data) {
+ wlog("onConfigCreated id='" + id + "' name='" + name + "'" +
+ " data='" + data + "'");
emaxx 2016/07/18 13:46:58 nit: the data argument is not a string, so it shou
emaxx 2016/07/18 13:46:58 nit: please fix the indentation.
adrian.belgun 2016/07/19 13:57:22 Done.
adrian.belgun 2016/07/19 13:57:22 Acknowledged.
+ });
+
+ chrome.vpnProvider.onUIEvent.addListener(function(event, id) {
+ wlog("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();
+
+ // Setup VpnProvider handlers.
+ setupHandlers();
+
+ // All done, create the connection entry in the VPN UI.
+ create();
+}

Powered by Google App Engine
This is Rietveld 408576698