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

Side by Side Diff: remoting/webapp/me2mom/remoting.js

Issue 7383015: Replace in-session header with auto-hide tool-bar. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Removed comment. Created 9 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « remoting/webapp/me2mom/debug_log.css ('k') | remoting/webapp/me2mom/toolbar.css » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 var remoting = remoting || {}; 5 var remoting = remoting || {};
6 6
7 (function() { 7 (function() {
8 "use strict"; 8 'use strict';
9 9
10 window.addEventListener('blur', pluginLostFocus_, false); 10 window.addEventListener('blur', pluginLostFocus_, false);
11 11
12 function pluginLostFocus_() { 12 function pluginLostFocus_() {
13 // If the plug loses input focus, release all keys as a precaution against 13 // If the plug loses input focus, release all keys as a precaution against
14 // leaving them 'stuck down' on the host. 14 // leaving them 'stuck down' on the host.
15 if (remoting.session && remoting.session.plugin) { 15 if (remoting.session && remoting.session.plugin) {
16 remoting.session.plugin.releaseAllKeys(); 16 remoting.session.plugin.releaseAllKeys();
17 } 17 }
18 } 18 }
(...skipping 25 matching lines...) Expand all
44 var kDigitsPerGroup = 4; 44 var kDigitsPerGroup = 4;
45 45
46 function retrieveEmail_(access_token) { 46 function retrieveEmail_(access_token) {
47 var headers = { 47 var headers = {
48 'Authorization': 'OAuth ' + remoting.oauth2.getAccessToken() 48 'Authorization': 'OAuth ' + remoting.oauth2.getAccessToken()
49 }; 49 };
50 50
51 var onResponse = function(xhr) { 51 var onResponse = function(xhr) {
52 if (xhr.status != 200) { 52 if (xhr.status != 200) {
53 // TODO(ajwong): Have a better way of showing an error. 53 // TODO(ajwong): Have a better way of showing an error.
54 window.alert("Unable to get e-mail"); 54 window.alert('Unable to get e-mail');
55 return; 55 return;
56 } 56 }
57 57
58 // TODO(ajwong): See if we can't find a JSON endpoint. 58 // TODO(ajwong): See if we can't find a JSON endpoint.
59 setEmail(xhr.responseText.split('&')[0].split('=')[1]); 59 setEmail(xhr.responseText.split('&')[0].split('=')[1]);
60 }; 60 };
61 61
62 // TODO(ajwong): Update to new v2 API. 62 // TODO(ajwong): Update to new v2 API.
63 remoting.xhr.get('https://www.googleapis.com/userinfo/email', 63 remoting.xhr.get('https://www.googleapis.com/userinfo/email',
64 onResponse, '', headers); 64 onResponse, '', headers);
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
102 } 102 }
103 updateControls_(disableControls); 103 updateControls_(disableControls);
104 } 104 }
105 105
106 function setEmail(value) { 106 function setEmail(value) {
107 window.localStorage.setItem(KEY_EMAIL_, value); 107 window.localStorage.setItem(KEY_EMAIL_, value);
108 updateAuthStatus_(); 108 updateAuthStatus_();
109 } 109 }
110 110
111 /** 111 /**
112 * @return {string} 112 * @return {string} The email address associated with the auth credentials.
113 */ 113 */
114 function getEmail() { 114 function getEmail() {
115 return window.localStorage.getItem(KEY_EMAIL_); 115 return window.localStorage.getItem(KEY_EMAIL_);
116 } 116 }
117 117
118 function exchangedCodeForToken_() { 118 function exchangedCodeForToken_() {
119 if (!remoting.oauth2.isAuthenticated()) { 119 if (!remoting.oauth2.isAuthenticated()) {
120 alert('Your OAuth2 token was invalid. Please try again.'); 120 alert('Your OAuth2 token was invalid. Please try again.');
121 } 121 }
122 remoting.oauth2.callWithToken(function(token) { 122 remoting.oauth2.callWithToken(function(token) {
123 retrieveEmail_(token); 123 retrieveEmail_(token);
124 updateAuthStatus_(); 124 updateAuthStatus_();
125 }); 125 });
126 } 126 }
127 127
128 remoting.clearOAuth2 = function() { 128 remoting.clearOAuth2 = function() {
129 remoting.oauth2.clear(); 129 remoting.oauth2.clear();
130 updateAuthStatus_(); 130 updateAuthStatus_();
131 } 131 }
132 132
133 // Show the div with id |mode| and hide those with other ids in |modes|. 133 // Show the div with id |mode| and hide those with other ids in |modes|.
134 function setMode_(mode, modes) { 134 function setMode_(mode, modes) {
135 for (var i = 0; i < modes.length; ++i) { 135 for (var i = 0; i < modes.length; ++i) {
136 modes[i].hidden = (mode != modes[i].id); 136 modes[i].hidden = (mode != modes[i].id);
137 } 137 }
138 } 138 }
139 139
140 remoting.toggleDebugLog = function() { 140 remoting.toggleDebugLog = function() {
141 var debugLog = document.getElementById('debug-log'); 141 var debugLog = document.getElementById('debug-log');
142 var toggleButton = document.getElementById('debug-log-toggle'); 142 if (debugLog.hidden) {
143 143 debugLog.hidden = false;
144 if (!debugLog.style.display || debugLog.style.display == 'none') {
145 debugLog.style.display = 'block';
146 toggleButton.value = 'Hide Debug Log';
147 } else { 144 } else {
148 debugLog.style.display = 'none'; 145 debugLog.hidden = true;
149 toggleButton.value = 'Show Debug Log';
150 } 146 }
151 } 147 }
152 148
153 remoting.init = function() { 149 remoting.init = function() {
154 // Create global objects. 150 // Create global objects.
155 remoting.oauth2 = new remoting.OAuth2(); 151 remoting.oauth2 = new remoting.OAuth2();
156 remoting.debug = new remoting.DebugLog(document.getElementById('debug-log')); 152 remoting.debug =
153 new remoting.DebugLog(document.getElementById('debug-messages'));
157 154
158 updateAuthStatus_(); 155 updateAuthStatus_();
159 refreshEmail_(); 156 refreshEmail_();
160 remoting.setHostMode('unshared'); 157 remoting.setHostMode('unshared');
161 remoting.setClientMode('unconnected'); 158 remoting.setClientMode('unconnected');
162 setGlobalMode(getAppStartupMode()); 159 setGlobalMode(getAppStartupMode());
163 document.getElementById('loading-mode').hidden = true; 160 document.getElementById('loading-mode').hidden = true;
164 document.getElementById('choice-mode').hidden = false; 161 document.getElementById('choice-mode').hidden = false;
165 } 162 }
166 163
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
291 * This is that callback that the host plugin invokes to indicate that there 288 * This is that callback that the host plugin invokes to indicate that there
292 * is additional debug log info to display. 289 * is additional debug log info to display.
293 */ 290 */
294 function debugInfoCallback_(msg) { 291 function debugInfoCallback_(msg) {
295 remoting.debug.log('plugin: ' + msg); 292 remoting.debug.log('plugin: ' + msg);
296 } 293 }
297 294
298 function showShareError_(errorCode) { 295 function showShareError_(errorCode) {
299 var errorDiv = document.getElementById(errorCode); 296 var errorDiv = document.getElementById(errorCode);
300 errorDiv.style.display = 'block'; 297 errorDiv.style.display = 'block';
301 remoting.debug.log("Sharing error: " + errorCode); 298 remoting.debug.log('Sharing error: ' + errorCode);
302 remoting.setHostMode('share-failed'); 299 remoting.setHostMode('share-failed');
303 } 300 }
304 301
305 remoting.cancelShare = function() { 302 remoting.cancelShare = function() {
306 remoting.debug.log('Canceling share...'); 303 remoting.debug.log('Canceling share...');
307 var plugin = document.getElementById(remoting.HOST_PLUGIN_ID); 304 var plugin = document.getElementById(remoting.HOST_PLUGIN_ID);
308 plugin.disconnect(); 305 plugin.disconnect();
309 } 306 }
310 307
311 /** 308 /**
312 * Show a client message that stays on the screeen until the state changes. 309 * Show a client message that stays on the screeen until the state changes.
313 * 310 *
314 * @param {string} message The message to display. 311 * @param {string} message The message to display.
312 * @param {string} opt_host The host to display after the message.
315 */ 313 */
316 function setClientStateMessage(message) { 314 function setClientStateMessage(message, opt_host) {
317 var msg = document.getElementById('session-status-message'); 315 document.getElementById('session-status-message').innerText = message;
318 msg.innerText = message; 316 opt_host = opt_host || '';
317 document.getElementById('connected-to').innerText = opt_host;
319 } 318 }
320 319
321 function updateStatusBarStats() { 320 function updateStatistics() {
322 if (remoting.session.state != remoting.ClientSession.State.CONNECTED) 321 if (remoting.session.state != remoting.ClientSession.State.CONNECTED)
323 return; 322 return;
324 var stats = remoting.session.stats(); 323 var stats = remoting.session.stats();
325 324
326 var units = ''; 325 var units = '';
327 var videoBandwidth = stats['video_bandwidth']; 326 var videoBandwidth = stats['video_bandwidth'];
328 if (videoBandwidth < 1024) { 327 if (videoBandwidth < 1024) {
329 units = 'Bps'; 328 units = 'Bps';
330 } else if (videoBandwidth < 1048576) { 329 } else if (videoBandwidth < 1048576) {
331 units = 'KiBps'; 330 units = 'KiBps';
332 videoBandwidth = videoBandwidth / 1024; 331 videoBandwidth = videoBandwidth / 1024;
333 } else if (videoBandwidth < 1073741824) { 332 } else if (videoBandwidth < 1073741824) {
334 units = 'MiBps'; 333 units = 'MiBps';
335 videoBandwidth = videoBandwidth / 1048576; 334 videoBandwidth = videoBandwidth / 1048576;
336 } else { 335 } else {
337 units = 'GiBps'; 336 units = 'GiBps';
338 videoBandwidth = videoBandwidth / 1073741824; 337 videoBandwidth = videoBandwidth / 1073741824;
339 } 338 }
340 339
341 setClientStateMessage( 340 var statistics = document.getElementById('statistics');
341 statistics.innerText =
342 'Bandwidth: ' + videoBandwidth.toFixed(2) + units + 342 'Bandwidth: ' + videoBandwidth.toFixed(2) + units +
343 ', Capture: ' + stats['capture_latency'].toFixed(2) + 'ms' + 343 ', Capture: ' + stats['capture_latency'].toFixed(2) + 'ms' +
344 ', Encode: ' + stats['encode_latency'].toFixed(2) + 'ms' + 344 ', Encode: ' + stats['encode_latency'].toFixed(2) + 'ms' +
345 ', Decode: ' + stats['decode_latency'].toFixed(2) + 'ms' + 345 ', Decode: ' + stats['decode_latency'].toFixed(2) + 'ms' +
346 ', Render: ' + stats['render_latency'].toFixed(2) + 'ms' + 346 ', Render: ' + stats['render_latency'].toFixed(2) + 'ms' +
347 ', Latency: ' + stats['roundtrip_latency'].toFixed(2) + 'ms'); 347 ', Latency: ' + stats['roundtrip_latency'].toFixed(2) + 'ms';
348 348
349 // Update the stats once per second. 349 // Update the stats once per second.
350 window.setTimeout(updateStatusBarStats, 1000); 350 window.setTimeout(updateStatistics, 1000);
351 } 351 }
352 352
353 function onClientStateChange_(state) { 353 function onClientStateChange_(state) {
354 if (state == remoting.ClientSession.State.UNKNOWN) { 354 if (state == remoting.ClientSession.State.UNKNOWN) {
355 setClientStateMessage('Unknown'); 355 setClientStateMessage('Unknown');
356 } else if (state == remoting.ClientSession.State.CREATED) { 356 } else if (state == remoting.ClientSession.State.CREATED) {
357 setClientStateMessage('Created'); 357 setClientStateMessage('Created');
358 } else if (state == remoting.ClientSession.State.BAD_PLUGIN_VERSION) { 358 } else if (state == remoting.ClientSession.State.BAD_PLUGIN_VERSION) {
359 setClientStateMessage('Incompatible Plugin Version'); 359 setClientStateMessage('Incompatible Plugin Version');
360 } else if (state == remoting.ClientSession.State.UNKNOWN_PLUGIN_ERROR) { 360 } else if (state == remoting.ClientSession.State.UNKNOWN_PLUGIN_ERROR) {
361 setClientStateMessage('Unknown error with plugin.'); 361 setClientStateMessage('Unknown error with plugin.');
362 } else if (state == remoting.ClientSession.State.CONNECTING) { 362 } else if (state == remoting.ClientSession.State.CONNECTING) {
363 setClientStateMessage('Connecting as ' + remoting.username); 363 setClientStateMessage('Connecting as ' + remoting.username);
364 } else if (state == remoting.ClientSession.State.INITIALIZING) { 364 } else if (state == remoting.ClientSession.State.INITIALIZING) {
365 setClientStateMessage('Initializing connection'); 365 setClientStateMessage('Initializing connection');
366 } else if (state == remoting.ClientSession.State.CONNECTED) { 366 } else if (state == remoting.ClientSession.State.CONNECTED) {
367 updateStatusBarStats(); 367 var split = remoting.hostJid.split('/');
368 var host = null;
369 if (split.length == 2) {
370 host = split[0];
371 }
372 setClientStateMessage('Connected to', host);
373 updateStatistics();
368 } else if (state == remoting.ClientSession.State.CLOSED) { 374 } else if (state == remoting.ClientSession.State.CLOSED) {
369 setClientStateMessage('Closed'); 375 setClientStateMessage('Closed');
370 } else if (state == remoting.ClientSession.State.CONNECTION_FAILED) { 376 } else if (state == remoting.ClientSession.State.CONNECTION_FAILED) {
371 setClientStateMessage('Failed'); 377 setClientStateMessage('Failed');
372 } else { 378 } else {
373 setClientStateMessage('Bad State!!'); 379 setClientStateMessage('Bad State: ' + state);
374 } 380 }
375 } 381 }
376 382
377 function startSession_() { 383 function startSession_() {
378 remoting.debug.log('Starting session...'); 384 remoting.debug.log('Starting session...');
379 remoting.username = getEmail(); 385 remoting.username = getEmail();
380 setGlobalMode(remoting.AppMode.IN_SESSION); 386 setGlobalMode(remoting.AppMode.IN_SESSION);
381 remoting.session = 387 remoting.session =
382 new remoting.ClientSession(remoting.hostJid, remoting.hostPublicKey, 388 new remoting.ClientSession(remoting.hostJid, remoting.hostPublicKey,
383 remoting.accessCode, getEmail(), 389 remoting.accessCode, getEmail(),
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
465 document.getElementById('cancel-button').disabled = true; 471 document.getElementById('cancel-button').disabled = true;
466 if (remoting.currentMode == remoting.AppMode.HOST) { 472 if (remoting.currentMode == remoting.AppMode.HOST) {
467 remoting.cancelShare(); 473 remoting.cancelShare();
468 } 474 }
469 } 475 }
470 476
471 /** 477 /**
472 * Changes the major-mode of the application (Eg., client or host). 478 * Changes the major-mode of the application (Eg., client or host).
473 * 479 *
474 * @param {remoting.AppMode} mode The mode to shift the application into. 480 * @param {remoting.AppMode} mode The mode to shift the application into.
475 * @return {void} 481 * @return {void} Nothing.
476 */ 482 */
477 remoting.setAppMode = function(mode) { 483 remoting.setAppMode = function(mode) {
478 setGlobalMode(mode); 484 setGlobalMode(mode);
479 window.localStorage.setItem(KEY_APP_MODE_, mode); 485 window.localStorage.setItem(KEY_APP_MODE_, mode);
480 } 486 }
481 487
482 /** 488 /**
483 * Gets the major-mode that this application should start up in. 489 * Gets the major-mode that this application should start up in.
484 * 490 *
485 * @return {remoting.AppMode} 491 * @return {remoting.AppMode} The mode (client or host) to start in.
486 */ 492 */
487 function getAppStartupMode() { 493 function getAppStartupMode() {
488 var mode = window.localStorage.getItem(KEY_APP_MODE_); 494 var mode = window.localStorage.getItem(KEY_APP_MODE_);
489 if (!mode) { 495 if (!mode) {
490 mode = remoting.AppMode.HOST; 496 mode = remoting.AppMode.HOST;
491 } 497 }
492 return mode; 498 return mode;
493 } 499 }
494 500
495 remoting.toggleScaleToFit = function() { 501 remoting.toggleScaleToFit = function() {
496 remoting.scaleToFit = !remoting.scaleToFit; 502 remoting.scaleToFit = !remoting.scaleToFit;
497 document.getElementById('scale-to-fit-toggle').value =
498 remoting.scaleToFit ? 'No scaling' : 'Scale to fit';
499 remoting.session.toggleScaleToFit(remoting.scaleToFit); 503 remoting.session.toggleScaleToFit(remoting.scaleToFit);
500 } 504 }
501 505
502 }()); 506 }());
OLDNEW
« no previous file with comments | « remoting/webapp/me2mom/debug_log.css ('k') | remoting/webapp/me2mom/toolbar.css » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698