| 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..1392553bfffe4455845528ec979134fe9e1f0af9
|
| --- /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.html',
|
| + onWhispernetLoaded);
|
| +}
|
| +
|
| +window.addEventListener('DOMContentLoaded', initWhispernet);
|
|
|