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

Side by Side Diff: remoting/webapp/crd/js/host_screen.js

Issue 1176693002: Add more host-side connection state logging for IT2Me. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Reviewer feedback. Created 5 years, 6 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
« no previous file with comments | « remoting/webapp/crd/js/host_controller.js ('k') | remoting/webapp/files.gni » ('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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 /** 5 /**
6 * @fileoverview 6 * @fileoverview
7 * Functions related to the 'host screen' for Chromoting. 7 * Functions related to the 'host screen' for Chromoting.
8 */ 8 */
9 9
10 /** @suppress {duplicate} */ 10 /** @suppress {duplicate} */
11 var remoting = remoting || {}; 11 var remoting = remoting || {};
12 12
13 (function(){ 13 (function(){
14 14
15 'use strict'; 15 'use strict';
16 16
17 /** @type {remoting.HostSession} */ 17 /** @type {remoting.HostSession} */
18 var hostSession_ = null; 18 var hostSession_ = null;
19 19
20 /** 20 /**
21 * @type {boolean} Whether or not the last share was cancelled by the user. 21 * @type {boolean} Whether or not the last share was cancelled by the user.
22 * This controls what screen is shown when the host signals completion. 22 * This controls what screen is shown when the host signals completion.
23 */ 23 */
24 var lastShareWasCancelled_ = false; 24 var lastShareWasCancelled_ = false;
25 25
26 /** 26 /**
27 * @type {remoting.LogToServer} Logging instance for IT2Me host connection
28 * status.
29 */
30 var it2meLogger = null;
31
32 /**
27 * Start a host session. This is the main entry point for the host screen, 33 * Start a host session. This is the main entry point for the host screen,
28 * called directly from the onclick action of a button on the home screen. 34 * called directly from the onclick action of a button on the home screen.
29 * It first verifies that the native host components are installed and asks 35 * It first verifies that the native host components are installed and asks
30 * to install them if necessary. 36 * to install them if necessary.
31 */ 37 */
32 remoting.tryShare = function() { 38 remoting.tryShare = function() {
39 ensureIT2MeLogger_().then(tryShareWithLogger_);
40 };
41
42 function tryShareWithLogger_() {
43 it2meLogger.setSessionId();
44 it2meLogger.logClientSessionStateChange(
45 remoting.ClientSession.State.INITIALIZING,
46 remoting.Error.none());
47
33 /** @type {remoting.It2MeHostFacade} */ 48 /** @type {remoting.It2MeHostFacade} */
34 var hostFacade = new remoting.It2MeHostFacade(); 49 var hostFacade = new remoting.It2MeHostFacade();
35 50
36 /** @type {remoting.HostInstallDialog} */ 51 /** @type {remoting.HostInstallDialog} */
37 var hostInstallDialog = null; 52 var hostInstallDialog = null;
38 53
39 var tryInitializeFacade = function() { 54 var tryInitializeFacade = function() {
40 hostFacade.initialize(onFacadeInitialized, onFacadeInitializationFailed); 55 hostFacade.initialize(onFacadeInitialized, onFacadeInitializationFailed);
41 }; 56 };
42 57
43 var onFacadeInitialized = function () { 58 var onFacadeInitialized = function () {
44 // Host already installed. 59 // Host already installed.
45 remoting.startHostUsingFacade_(hostFacade); 60 remoting.startHostUsingFacade_(hostFacade);
46 }; 61 };
47 62
48 var onFacadeInitializationFailed = function() { 63 var onFacadeInitializationFailed = function() {
49 // If we failed to initialize the dispatcher then prompt the user to install 64 // If we failed to initialize the dispatcher then prompt the user to install
50 // the host manually. 65 // the host manually.
51 var hasHostDialog = (hostInstallDialog !== null); /** jscompile hack */ 66 var hasHostDialog = (hostInstallDialog !== null); /** jscompile hack */
52 if (!hasHostDialog) { 67 if (!hasHostDialog) {
53 hostInstallDialog = new remoting.HostInstallDialog(); 68 hostInstallDialog = new remoting.HostInstallDialog();
54 hostInstallDialog.show(tryInitializeFacade, onInstallError); 69 hostInstallDialog.show(tryInitializeFacade, showShareError_);
55 } else { 70 } else {
56 hostInstallDialog.tryAgain(); 71 hostInstallDialog.tryAgain();
57 } 72 }
58 }; 73 };
59 74
60 /** @param {!remoting.Error} error */
61 var onInstallError = function(error) {
62 if (error.hasTag(remoting.Error.Tag.CANCELLED)) {
63 remoting.setMode(remoting.AppMode.HOME);
64 } else {
65 showShareError_(error);
66 }
67 };
68
69 tryInitializeFacade(); 75 tryInitializeFacade();
70 }; 76 };
71 77
72 /** 78 /**
73 * @param {remoting.It2MeHostFacade} hostFacade An initialized It2MeHostFacade. 79 * @param {remoting.It2MeHostFacade} hostFacade An initialized It2MeHostFacade.
74 */ 80 */
75 remoting.startHostUsingFacade_ = function(hostFacade) { 81 remoting.startHostUsingFacade_ = function(hostFacade) {
76 console.log('Attempting to share...'); 82 console.log('Attempting to share...');
77 remoting.identity.getToken().then( 83 setHostVersion_()
78 remoting.tryShareWithToken_.bind(null, hostFacade), 84 .then(remoting.identity.getToken.bind(remoting.identity))
79 remoting.Error.handler(remoting.showErrorMessage)); 85 .then(remoting.tryShareWithToken_.bind(null, hostFacade),
86 remoting.Error.handler(showShareError_));
80 } 87 }
81 88
82 /** 89 /**
83 * @param {remoting.It2MeHostFacade} hostFacade An initialized 90 * @param {remoting.It2MeHostFacade} hostFacade An initialized
84 * It2MeHostFacade. 91 * It2MeHostFacade.
85 * @param {string} token The OAuth access token. 92 * @param {string} token The OAuth access token.
86 * @private 93 * @private
87 */ 94 */
88 remoting.tryShareWithToken_ = function(hostFacade, token) { 95 remoting.tryShareWithToken_ = function(hostFacade, token) {
89 lastShareWasCancelled_ = false; 96 lastShareWasCancelled_ = false;
90 onNatTraversalPolicyChanged_(true); // Hide warning by default. 97 onNatTraversalPolicyChanged_(true); // Hide warning by default.
91 remoting.setMode(remoting.AppMode.HOST_WAITING_FOR_CODE); 98 remoting.setMode(remoting.AppMode.HOST_WAITING_FOR_CODE);
99 it2meLogger.logClientSessionStateChange(
100 remoting.ClientSession.State.CONNECTING,
101 remoting.Error.none());
92 document.getElementById('cancel-share-button').disabled = false; 102 document.getElementById('cancel-share-button').disabled = false;
93 disableTimeoutCountdown_(); 103 disableTimeoutCountdown_();
94 104
95 base.debug.assert(hostSession_ === null); 105 base.debug.assert(hostSession_ === null);
96 hostSession_ = new remoting.HostSession(); 106 hostSession_ = new remoting.HostSession();
97 remoting.identity.getEmail().then( 107 remoting.identity.getEmail().then(
98 function(/** string */ email) { 108 function(/** string */ email) {
99 hostSession_.connect( 109 hostSession_.connect(
100 hostFacade, email, token, onHostStateChanged_, 110 hostFacade, email, token, onHostStateChanged_,
101 onNatTraversalPolicyChanged_, logDebugInfo_, it2meConnectFailed_); 111 onNatTraversalPolicyChanged_, logDebugInfo_, it2meConnectFailed_);
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
187 console.log('plugin: ' + msg); 197 console.log('plugin: ' + msg);
188 } 198 }
189 199
190 /** 200 /**
191 * Show a host-side error message. 201 * Show a host-side error message.
192 * 202 *
193 * @param {!remoting.Error} error The error to be localized and displayed. 203 * @param {!remoting.Error} error The error to be localized and displayed.
194 * @return {void} Nothing. 204 * @return {void} Nothing.
195 */ 205 */
196 function showShareError_(error) { 206 function showShareError_(error) {
197 var errorDiv = document.getElementById('host-plugin-error'); 207 if (error.hasTag(remoting.Error.Tag.CANCELLED)) {
198 l10n.localizeElementFromTag(errorDiv, error.getTag()); 208 remoting.setMode(remoting.AppMode.HOME);
199 console.error('Sharing error: ' + error.toString()); 209 it2meLogger.logClientSessionStateChange(
200 remoting.setMode(remoting.AppMode.HOST_SHARE_FAILED); 210 remoting.ClientSession.State.CONNECTION_CANCELED,
211 remoting.Error.none());
212 } else {
213 var errorDiv = document.getElementById('host-plugin-error');
214 l10n.localizeElementFromTag(errorDiv, error.getTag());
215 console.error('Sharing error: ' + error.toString());
216 remoting.setMode(remoting.AppMode.HOST_SHARE_FAILED);
217 it2meLogger.logClientSessionStateChange(
218 remoting.ClientSession.State.FAILED,
219 error);
220 }
221
201 cleanUp(); 222 cleanUp();
202 } 223 }
203 224
204 /** 225 /**
205 * Show a sharing error with error code UNEXPECTED . 226 * Show a sharing error with error code UNEXPECTED .
206 * 227 *
207 * @return {void} Nothing. 228 * @return {void} Nothing.
208 */ 229 */
209 function it2meConnectFailed_() { 230 function it2meConnectFailed_() {
210 // TODO (weitaosu): Instruct the user to install the native messaging host. 231 // TODO (weitaosu): Instruct the user to install the native messaging host.
(...skipping 12 matching lines...) Expand all
223 * Cancel an active or pending it2me share operation. 244 * Cancel an active or pending it2me share operation.
224 * 245 *
225 * @return {void} Nothing. 246 * @return {void} Nothing.
226 */ 247 */
227 remoting.cancelShare = function() { 248 remoting.cancelShare = function() {
228 document.getElementById('cancel-share-button').disabled = true; 249 document.getElementById('cancel-share-button').disabled = true;
229 console.log('Canceling share...'); 250 console.log('Canceling share...');
230 remoting.lastShareWasCancelled = true; 251 remoting.lastShareWasCancelled = true;
231 try { 252 try {
232 hostSession_.disconnect(); 253 hostSession_.disconnect();
254 it2meLogger.logClientSessionStateChange(
255 remoting.ClientSession.State.CONNECTION_CANCELED,
256 remoting.Error.none());
233 } catch (/** @type {*} */ error) { 257 } catch (/** @type {*} */ error) {
234 console.error('Error disconnecting: ' + error + 258 console.error('Error disconnecting: ' + error +
235 '. The host probably crashed.'); 259 '. The host probably crashed.');
236 // TODO(jamiewalch): Clean this up. We should have a class representing 260 // TODO(jamiewalch): Clean this up. We should have a class representing
237 // the host plugin, like we do for the client, which should handle crash 261 // the host plugin, like we do for the client, which should handle crash
238 // reporting and it should use a more detailed error message than the 262 // reporting and it should use a more detailed error message than the
239 // default 'generic' one. See crbug.com/94624 263 // default 'generic' one. See crbug.com/94624
240 showShareError_(remoting.Error.unexpected()); 264 showShareError_(remoting.Error.unexpected());
241 } 265 }
242 disableTimeoutCountdown_(); 266 disableTimeoutCountdown_();
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
331 */ 355 */
332 function onNatTraversalPolicyChanged_(enabled) { 356 function onNatTraversalPolicyChanged_(enabled) {
333 var natBox = document.getElementById('nat-box'); 357 var natBox = document.getElementById('nat-box');
334 if (enabled) { 358 if (enabled) {
335 natBox.classList.add('traversal-enabled'); 359 natBox.classList.add('traversal-enabled');
336 } else { 360 } else {
337 natBox.classList.remove('traversal-enabled'); 361 natBox.classList.remove('traversal-enabled');
338 } 362 }
339 } 363 }
340 364
365 /**
366 * Create an IT2Me LogToServer instance if one does not already exist.
367 *
368 * @return {Promise} Promise that resolves when the host version (if available),
369 * has been set on the logger instance.
370 */
371 function ensureIT2MeLogger_() {
372 if (it2meLogger) {
373 return Promise.resolve();
374 }
375
376 var xmppConnection = new remoting.XmppConnection();
377 var tokenPromise = remoting.identity.getToken();
378 var emailPromise = remoting.identity.getEmail();
379 tokenPromise.then(function(/** string */ token) {
380 emailPromise.then(function(/** string */ email) {
381 xmppConnection.connect(remoting.settings.XMPP_SERVER, email, token);
382 });
383 });
384
385 var bufferedSignalStrategy =
386 new remoting.BufferedSignalStrategy(xmppConnection);
387 it2meLogger = new remoting.LogToServer(bufferedSignalStrategy, true);
388 it2meLogger.setLogEntryMode(remoting.ServerLogEntry.VALUE_MODE_IT2ME);
389
390 return setHostVersion_();
391 };
392
393 /**
394 * @return {Promise} Promise that resolves when the host version (if available),
395 * has been set on the logger instance.
396 */
397 function setHostVersion_() {
398 return remoting.hostController.getLocalHostVersion().then(
399 function(/** string */ version) {
400 it2meLogger.setHostVersion(version);
401 }).catch(
402 base.doNothing
403 );
404 };
405
341 })(); 406 })();
OLDNEW
« no previous file with comments | « remoting/webapp/crd/js/host_controller.js ('k') | remoting/webapp/files.gni » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698