Index: chrome/browser/resources/whispernet_proxy/js/init.js |
diff --git a/chrome/browser/resources/whispernet_proxy/js/init.js b/chrome/browser/resources/whispernet_proxy/js/init.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e346f2063f695b64f0c5aa90725fa282c0f9fd1e |
--- /dev/null |
+++ b/chrome/browser/resources/whispernet_proxy/js/init.js |
@@ -0,0 +1,104 @@ |
+// 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 strict'; |
+ |
+// Globals holding our encoder and decoder. We will never have more than one |
+// Global variable that will be used to access this Nacl bridge. |
+var whispernetNacl = null; |
+ |
+// copy of an encoder or a decoder at a time. |
+var whisperEncoder = null; |
+var whisperDecoder = null; |
+ |
+/** |
+ * Initialize the whispernet encoder and decoder. |
+ * @param {Object} audioParams Audio parameters used to initialize the encoder |
+ * and decoder. |
+ */ |
+function initialize(audioParams) { |
+ if (!whispernetNacl) { |
+ chrome.copresencePrivate.sendInitialized(false); |
+ return; |
+ } |
+ |
+ console.log('init: creating encoder!'); |
+ whisperEncoder = new WhisperEncoder(audioParams.play, whispernetNacl); |
+ whisperEncoder.setAudioDataCallback(chrome.copresencePrivate.sendSamples); |
+ |
+ console.log('init: creating decoder!'); |
+ whisperDecoder = new WhisperDecoder(audioParams.record, whispernetNacl); |
+ whisperDecoder.setReceiveCallback(chrome.copresencePrivate.sendFound); |
+ whisperDecoder.onDetectBroadcast(chrome.copresencePrivate.sendDetect); |
+ |
+ chrome.copresencePrivate.sendInitialized(true); |
+} |
+ |
+/** |
+ * Sends a request to whispernet to encode a token. |
+ * @param {string} token Token to encode. This needs to be a base64 string. |
+ */ |
+function encodeTokenRequest(token) { |
+ if (whisperEncoder) { |
+ whisperEncoder.encode(atob(token), true); |
+ } else { |
+ console.error('encodeTokenRequest: Whisper not initialized!'); |
+ } |
+} |
+ |
+/** |
+ * Sends a request to whispernet to decode samples. |
+ * @param {ArrayBuffer} samples Array of samples to decode. |
+ */ |
+function decodeSamplesRequest(samples) { |
+ if (whisperDecoder) { |
+ whisperDecoder.processSamples(samples); |
+ } else { |
+ console.error('decodeSamplesRequest: Whisper not initialized!'); |
+ } |
+} |
+ |
+/** |
+ * Sends a request to whispernet to detect broadcast. |
+ */ |
+function detectBroadcastRequest() { |
+ if (whisperDecoder) { |
+ whisperDecoder.detectBroadcast(); |
+ } else { |
+ console.error('detectBroadcastRequest: Whisper not initialized!'); |
+ } |
+} |
+ |
+/** |
+ * Initialize our listerners and signal that the extension is loaded. |
+ */ |
+function onWhispernetLoaded() { |
+ console.log('init: Nacl ready!'); |
+ |
+ // Setup all the listeners for the private API. |
+ chrome.copresencePrivate.onInitialize.addListener(initialize); |
+ chrome.copresencePrivate.onEncodeTokenRequest.addListener(encodeTokenRequest); |
+ chrome.copresencePrivate.onDecodeSamplesRequest.addListener( |
+ decodeSamplesRequest); |
+ chrome.copresencePrivate.onDetectBroadcastRequest.addListener( |
+ detectBroadcastRequest); |
+ |
+ // This first initialized is sent to indicate that the library is loaded. |
+ // Every other time, it will be sent only when Chrome wants to reinitialize |
+ // the encoder and decoder. |
+ chrome.copresencePrivate.sendInitialized(true); |
+} |
+ |
+/** |
+ * Initialize the whispernet Nacl bridge. |
+ */ |
+function initWhispernet() { |
+ console.log('init: Starting Nacl bridge.'); |
+ // TODO(rkc): Figure out how to embed the .nmf and the .pexe into component |
+ // resources without having to rename them to .js. |
+ whispernetNacl = new NaclBridge('whispernet_proxy.nmf.png', |
+ onWhispernetLoaded); |
+} |
+ |
+window.addEventListener('DOMContentLoaded', initWhispernet); |