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

Side by Side Diff: chrome/browser/resources/whispernet_proxy/js/init.js

Issue 438513002: Add the whispernet proxy. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
xiyuan 2014/07/31 19:22:22 nit: 'use strict';
rkc 2014/07/31 23:12:53 Done.
5 // Globals holding our encoder and decoder. We will never have more than one
6 // Global variable that will be used to access this Nacl bridge.
7 var whispernetNacl = null;
8
9 // copy of an encoder or a decoder at a time.
10 var whisperEncoder = null;
11 var whisperDecoder = null;
12
13 /**
14 * Initialize the whispernet encoder and decoder.
15 * @param {Object} audioParams Audio parameters used to initialize the encoder
16 * and decoder.
17 */
18 function initialize(audioParams) {
19 if (!whispernetNacl) {
20 chrome.copresencePrivate.sendInitialized(false);
21 return;
22 }
23
24 console.log('init: creating encoder!');
25 whisperEncoder = new WhisperEncoder(audioParams.play, whispernetNacl);
26 whisperEncoder.onAudioData(chrome.copresencePrivate.sendSamples);
27
28 console.log('init: creating decoder!');
29 whisperDecoder = new WhisperDecoder(audioParams.record, whispernetNacl);
30 whisperDecoder.onReceive(chrome.copresencePrivate.sendFound);
31 whisperDecoder.onDetectBroadcast(chrome.copresencePrivate.sendDetect);
32
33 chrome.copresencePrivate.sendInitialized(true);
34 }
35
36 /**
37 * Sends a request to whispernet to encode a token.
38 * @param {string} token Token to encode. This needs to be a base64 string.
39 */
40 function encodeTokenRequest(token) {
41 if (whisperEncoder) {
42 whisperEncoder.encode(atob(token), true);
43 } else {
44 console.error('encodeTokenRequest: Whisper not initialized!');
45 }
46 }
47
48 /**
49 * Sends a request to whispernet to decode samples.
50 * @param {ArrayBuffer} samples Array of samples to decode.
51 */
52 function decodeSamplesRequest(samples) {
53 if (whisperDecoder) {
54 whisperDecoder.processSamples(samples);
55 } else {
56 console.error('decodeSamplesRequest: Whisper not initialized!');
57 }
58 }
59
60 /**
61 * Sends a request to whispernet to detect broadcast.
62 */
63 function detectBroadcastRequest() {
64 if (whisperDecoder) {
65 whisperDecoder.detectBroadcast();
66 } else {
67 console.error('detectBroadcastRequest: Whisper not initialized!');
68 }
69 }
70
71 /**
72 * Initialize our listerners and signal that the extension is loaded.
73 */
74 function onWhispernetLoaded() {
75 console.log('init: Nacl ready!');
76
77 // Setup all the listeners for the private API.
78 chrome.copresencePrivate.onInitialize.addListener(initialize);
79 chrome.copresencePrivate.onEncodeTokenRequest.addListener(encodeTokenRequest);
80 chrome.copresencePrivate.onDecodeSamplesRequest.addListener(
81 decodeSamplesRequest);
82 chrome.copresencePrivate.onDetectBroadcastRequest.addListener(
83 detectBroadcastRequest);
84
85 // This first initialized is sent to indicate that the library is loaded.
86 // Every other time, it will be sent only when Chrome wants to reinitialize
87 // the encoder and decoder.
88 chrome.copresencePrivate.sendInitialized(true);
89 }
90
91 /**
92 * Initialize the whispernet Nacl bridge.
93 */
94 function initWhispernet() {
95 console.log('init: Starting Nacl bridge.');
96 // TODO(rkc): Figure out how to embed the .nmf and the .pexe into component
97 // resources without having to rename them to .js.
98 whispernetNacl = new NaclBridge('whispernet_proxy.nmf.html',
99 onWhispernetLoaded);
100 }
101
102 window.addEventListener('DOMContentLoaded', initWhispernet);
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698