OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 * Connect set-up state machine for Me2Me and IT2Me | 7 * Connect set-up state machine for Me2Me and IT2Me |
8 */ | 8 */ |
9 | 9 |
10 'use strict'; | 10 'use strict'; |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
101 this.reconnector_ = null; | 101 this.reconnector_ = null; |
102 | 102 |
103 /** | 103 /** |
104 * @private | 104 * @private |
105 */ | 105 */ |
106 this.bound_ = { | 106 this.bound_ = { |
107 onStateChange : this.onStateChange_.bind(this) | 107 onStateChange : this.onStateChange_.bind(this) |
108 }; | 108 }; |
109 | 109 |
110 // Initialize/declare per-connection state. | 110 // Initialize/declare per-connection state. |
111 this.reset(); | 111 this.reset_(); |
112 }; | 112 }; |
113 | 113 |
114 /** | 114 /** |
115 * Reset the per-connection state so that the object can be re-used for a | 115 * Reset the per-connection state so that the object can be re-used for a |
116 * second connection. Note the none of the shared WCS state is reset. | 116 * second connection. Note the none of the shared WCS state is reset. |
117 */ | 117 */ |
118 remoting.SessionConnectorImpl.prototype.reset = function() { | 118 remoting.SessionConnectorImpl.prototype.reset_ = function() { |
119 /** | 119 /** |
120 * @type {remoting.Host} | 120 * @type {remoting.Host} |
121 * @private | 121 * @private |
122 */ | 122 */ |
123 this.host_ = null; | 123 this.host_ = null; |
124 | 124 |
125 /** | 125 /** |
126 * @type {boolean} | 126 * @type {boolean} |
127 * @private | 127 * @private |
128 */ | 128 */ |
129 this.logHostOfflineErrors_ = false; | 129 this.logHostOfflineErrors_ = false; |
130 | 130 |
131 /** @type {remoting.ClientPlugin} @private */ | |
132 this.plugin_ = null; | |
133 | |
131 /** | 134 /** |
132 * @type {remoting.ClientSession} | 135 * @type {remoting.ClientSession} |
133 * @private | 136 * @private |
134 */ | 137 */ |
135 this.clientSession_ = null; | 138 this.clientSession_ = null; |
136 | 139 |
140 /** @type {remoting.DesktopConnectedView} @private */ | |
141 this.connectedView_ = null; | |
142 | |
137 /** | 143 /** |
138 * @type {XMLHttpRequest} | 144 * @type {XMLHttpRequest} |
139 * @private | 145 * @private |
140 */ | 146 */ |
141 this.pendingXhr_ = null; | 147 this.pendingXhr_ = null; |
142 | 148 |
143 /** | 149 /** |
144 * @type {remoting.CredentialsProvider} | 150 * @type {remoting.CredentialsProvider} |
145 * @private | 151 * @private |
146 */ | 152 */ |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
281 return; | 287 return; |
282 } | 288 } |
283 this.logHostOfflineErrors_ = false; | 289 this.logHostOfflineErrors_ = false; |
284 this.connectInternal_(this.host_, this.credentialsProvider_); | 290 this.connectInternal_(this.host_, this.credentialsProvider_); |
285 }; | 291 }; |
286 | 292 |
287 /** | 293 /** |
288 * Cancel a connection-in-progress. | 294 * Cancel a connection-in-progress. |
289 */ | 295 */ |
290 remoting.SessionConnectorImpl.prototype.cancel = function() { | 296 remoting.SessionConnectorImpl.prototype.cancel = function() { |
291 if (this.clientSession_) { | |
garykac
2015/03/06 00:45:04
No longer needed - resetConnection does this.
| |
292 this.clientSession_.removePlugin(); | |
293 this.clientSession_ = null; | |
294 } | |
295 if (this.pendingXhr_) { | 297 if (this.pendingXhr_) { |
296 this.pendingXhr_.abort(); | 298 this.pendingXhr_.abort(); |
297 this.pendingXhr_ = null; | 299 this.pendingXhr_ = null; |
298 } | 300 } |
299 this.reset(); | 301 this.resetConnection(); |
300 }; | 302 }; |
301 | 303 |
302 /** | 304 /** |
303 * Get the connection mode (Me2Me or IT2Me) | 305 * Get the connection mode (Me2Me or IT2Me) |
304 * | 306 * |
305 * @return {remoting.DesktopConnectedView.Mode} | 307 * @return {remoting.DesktopConnectedView.Mode} |
306 */ | 308 */ |
307 remoting.SessionConnectorImpl.prototype.getConnectionMode = function() { | 309 remoting.SessionConnectorImpl.prototype.getConnectionMode = function() { |
308 return this.connectionMode_; | 310 return this.connectionMode_; |
309 }; | 311 }; |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
426 } | 428 } |
427 }; | 429 }; |
428 | 430 |
429 /** | 431 /** |
430 * Creates ClientSession object. | 432 * Creates ClientSession object. |
431 */ | 433 */ |
432 remoting.SessionConnectorImpl.prototype.createSession_ = function() { | 434 remoting.SessionConnectorImpl.prototype.createSession_ = function() { |
433 // In some circumstances, the WCS <iframe> can get reloaded, which results | 435 // In some circumstances, the WCS <iframe> can get reloaded, which results |
434 // in a new clientJid and a new callback. In this case, remove the old | 436 // in a new clientJid and a new callback. In this case, remove the old |
435 // client plugin before instantiating a new one. | 437 // client plugin before instantiating a new one. |
436 if (this.clientSession_) { | 438 this.removePlugin(); |
437 this.clientSession_.removePlugin(); | |
438 this.clientSession_ = null; | |
439 } | |
440 | 439 |
441 this.clientSession_ = new remoting.ClientSession( | 440 this.clientSession_ = new remoting.ClientSession( |
442 this.host_, this.signalStrategy_, this.credentialsProvider_, | 441 this.host_, this.signalStrategy_, this.credentialsProvider_, |
443 this.clientContainer_, this.connectionMode_, this.defaultRemapKeys_); | 442 this.connectionMode_); |
443 remoting.clientSession = this.clientSession_; | |
444 | |
445 this.connectedView_ = new remoting.DesktopConnectedView( | |
446 this.clientSession_, this.clientContainer_, this.host_, | |
447 this.connectionMode_, | |
448 this.defaultRemapKeys_); | |
449 remoting.desktopConnectedView = this.connectedView_; | |
450 | |
444 this.clientSession_.logHostOfflineErrors(this.logHostOfflineErrors_); | 451 this.clientSession_.logHostOfflineErrors(this.logHostOfflineErrors_); |
445 this.clientSession_.addEventListener( | 452 this.clientSession_.addEventListener( |
446 remoting.ClientSession.Events.stateChanged, | 453 remoting.ClientSession.Events.stateChanged, |
447 this.bound_.onStateChange); | 454 this.bound_.onStateChange); |
448 this.clientSession_.createPluginAndConnect(this.onExtensionMessage_, | 455 |
449 this.requiredCapabilities_); | 456 var pluginContainer = this.clientContainer_.querySelector( |
457 '.client-plugin-container'); | |
458 | |
459 this.plugin_ = remoting.ClientPlugin.factory.createPlugin( | |
460 pluginContainer, this.onExtensionMessage_, this.requiredCapabilities_); | |
461 | |
462 var that = this; | |
463 this.host_.options.load().then(function(){ | |
464 that.plugin_.initialize(that.onPluginInitialized_.bind(that)); | |
465 }); | |
450 }; | 466 }; |
451 | 467 |
452 /** | 468 /** |
469 * @param {boolean} initialized | |
470 */ | |
471 remoting.SessionConnectorImpl.prototype.onPluginInitialized_ = function( | |
garykac
2015/03/06 00:45:04
Most of this came here from DesktopConnectedView
| |
472 initialized) { | |
473 if (!initialized) { | |
474 console.error('ERROR: remoting plugin not loaded'); | |
475 this.pluginError(remoting.Error.MISSING_PLUGIN); | |
476 return; | |
477 } | |
478 | |
479 if (!this.plugin_.isSupportedVersion()) { | |
480 console.error('ERROR: bad plugin version'); | |
481 this.pluginError(remoting.Error.BAD_PLUGIN_VERSION); | |
482 return; | |
483 } | |
484 | |
485 this.connectedView_.onPluginInitialized(this.plugin_); | |
486 this.clientSession_.onPluginInitialized(this.plugin_); | |
487 }; | |
488 | |
489 /** @param {remoting.Error} error */ | |
490 remoting.SessionConnectorImpl.prototype.pluginError = function(error) { | |
491 this.signalStrategy_.setIncomingStanzaCallback(null); | |
492 this.clientSession_.disconnect(error); | |
493 this.removePlugin(); | |
494 }; | |
495 | |
496 remoting.SessionConnectorImpl.prototype.removePlugin = function() { | |
497 if (this.plugin_) { | |
498 this.clientSession_.removePlugin(); | |
499 this.connectedView_.removePlugin(); | |
500 this.plugin_.dispose(); | |
501 } | |
502 this.plugin_ = null; | |
503 | |
504 if (this.clientSession_) { | |
505 this.clientSession_.dispose(); | |
506 } | |
507 this.clientSession_ = null | |
508 remoting.clientSession = null; | |
509 | |
510 this.connectedView_ = null; | |
511 remoting.desktopConnectedView = null; | |
512 }; | |
513 | |
514 remoting.SessionConnectorImpl.prototype.resetConnection = function() { | |
515 this.removePlugin(); | |
516 | |
517 this.host_ = null; | |
518 this.logHostOfflineErrors_ = false; | |
519 this.pendingXhr_ = null; | |
520 this.credentialsProvider_ = null; | |
521 }; | |
522 | |
523 /** | |
453 * Handle a change in the state of the client session prior to successful | 524 * Handle a change in the state of the client session prior to successful |
454 * connection (after connection, this class no longer handles state change | 525 * connection (after connection, this class no longer handles state change |
455 * events). Errors that occur while connecting either trigger a reconnect | 526 * events). Errors that occur while connecting either trigger a reconnect |
456 * or notify the onError handler. | 527 * or notify the onError handler. |
457 * | 528 * |
458 * @param {remoting.ClientSession.StateEvent=} event | 529 * @param {remoting.ClientSession.StateEvent=} event |
459 * @return {void} Nothing. | 530 * @return {void} Nothing. |
460 * @private | 531 * @private |
461 */ | 532 */ |
462 remoting.SessionConnectorImpl.prototype.onStateChange_ = function(event) { | 533 remoting.SessionConnectorImpl.prototype.onStateChange_ = function(event) { |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
577 */ | 648 */ |
578 remoting.DefaultSessionConnectorFactory.prototype.createConnector = | 649 remoting.DefaultSessionConnectorFactory.prototype.createConnector = |
579 function(clientContainer, onConnected, onError, onExtensionMessage, | 650 function(clientContainer, onConnected, onError, onExtensionMessage, |
580 onConnectionFailed, requiredCapabilities, defaultRemapKeys) { | 651 onConnectionFailed, requiredCapabilities, defaultRemapKeys) { |
581 return new remoting.SessionConnectorImpl(clientContainer, onConnected, | 652 return new remoting.SessionConnectorImpl(clientContainer, onConnected, |
582 onError, onExtensionMessage, | 653 onError, onExtensionMessage, |
583 onConnectionFailed, | 654 onConnectionFailed, |
584 requiredCapabilities, | 655 requiredCapabilities, |
585 defaultRemapKeys); | 656 defaultRemapKeys); |
586 }; | 657 }; |
OLD | NEW |