OLD | NEW |
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 * Class handling creation and teardown of a remoting client session. | 7 * Class handling creation and teardown of a remoting client session. |
8 * | 8 * |
9 * The ClientSession class controls lifetime of the client plugin | 9 * The ClientSession class controls lifetime of the client plugin |
10 * object and provides the plugin with the functionality it needs to | 10 * object and provides the plugin with the functionality it needs to |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
47 * authentication methods the client should attempt to use. | 47 * authentication methods the client should attempt to use. |
48 * @param {remoting.DesktopConnectedView.Mode} mode The mode of this connection. | 48 * @param {remoting.DesktopConnectedView.Mode} mode The mode of this connection. |
49 * @param {string} clientPairingId For paired Me2Me connections, the | 49 * @param {string} clientPairingId For paired Me2Me connections, the |
50 * pairing id for this client, as issued by the host. | 50 * pairing id for this client, as issued by the host. |
51 * @param {string} clientPairedSecret For paired Me2Me connections, the | 51 * @param {string} clientPairedSecret For paired Me2Me connections, the |
52 * paired secret for this client, as issued by the host. | 52 * paired secret for this client, as issued by the host. |
53 * @param {string} defaultRemapKeys The default set of remap keys, to use | 53 * @param {string} defaultRemapKeys The default set of remap keys, to use |
54 * when the client doesn't define any. | 54 * when the client doesn't define any. |
55 * @constructor | 55 * @constructor |
56 * @extends {base.EventSourceImpl} | 56 * @extends {base.EventSourceImpl} |
| 57 * @implements {base.Disposable} |
57 */ | 58 */ |
58 remoting.ClientSession = function(host, signalStrategy, container, accessCode, | 59 remoting.ClientSession = function(host, signalStrategy, container, accessCode, |
59 fetchPin, fetchThirdPartyToken, | 60 fetchPin, fetchThirdPartyToken, |
60 authenticationMethods, mode, clientPairingId, | 61 authenticationMethods, mode, clientPairingId, |
61 clientPairedSecret, defaultRemapKeys) { | 62 clientPairedSecret, defaultRemapKeys) { |
62 /** @private */ | 63 /** @private */ |
63 this.state_ = remoting.ClientSession.State.CREATED; | 64 this.state_ = remoting.ClientSession.State.CREATED; |
64 | 65 |
65 /** @private */ | 66 /** @private */ |
66 this.error_ = remoting.Error.NONE; | 67 this.error_ = remoting.Error.NONE; |
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
314 }; | 315 }; |
315 | 316 |
316 /** | 317 /** |
317 * @param {remoting.Error} error | 318 * @param {remoting.Error} error |
318 */ | 319 */ |
319 remoting.ClientSession.prototype.resetWithError_ = function(error) { | 320 remoting.ClientSession.prototype.resetWithError_ = function(error) { |
320 this.signalStrategy_.setIncomingStanzaCallback(null); | 321 this.signalStrategy_.setIncomingStanzaCallback(null); |
321 this.removePlugin(); | 322 this.removePlugin(); |
322 this.error_ = error; | 323 this.error_ = error; |
323 this.setState_(remoting.ClientSession.State.FAILED); | 324 this.setState_(remoting.ClientSession.State.FAILED); |
324 } | 325 }; |
325 | 326 |
326 /** | 327 /** |
327 * Deletes the <embed> element from the container, without sending a | 328 * Deletes the <embed> element from the container, without sending a |
328 * session_terminate request. This is to be called when the session was | 329 * session_terminate request. This is to be called when the session was |
329 * disconnected by the Host. | 330 * disconnected by the Host. |
330 * | 331 * |
331 * @return {void} Nothing. | 332 * @return {void} Nothing. |
332 */ | 333 */ |
333 remoting.ClientSession.prototype.removePlugin = function() { | 334 remoting.ClientSession.prototype.removePlugin = function() { |
334 this.uiHandler_.removePlugin(); | 335 this.uiHandler_.removePlugin(); |
335 this.plugin_ = null; | 336 this.plugin_ = null; |
| 337 remoting.desktopConnectedView = null; |
336 }; | 338 }; |
337 | 339 |
338 /** | 340 /** |
339 * Disconnect the current session with a particular |error|. The session will | 341 * Disconnect the current session with a particular |error|. The session will |
340 * raise a |stateChanged| event in response to it. The caller should then call | 342 * raise a |stateChanged| event in response to it. The caller should then call |
341 * |cleanup| to remove and destroy the <embed> element. | 343 * dispose() to remove and destroy the <embed> element. |
342 * | 344 * |
343 * @param {remoting.Error} error The reason for the disconnection. Use | 345 * @param {remoting.Error} error The reason for the disconnection. Use |
344 * remoting.Error.NONE if there is no error. | 346 * remoting.Error.NONE if there is no error. |
345 * @return {void} Nothing. | 347 * @return {void} Nothing. |
346 */ | 348 */ |
347 remoting.ClientSession.prototype.disconnect = function(error) { | 349 remoting.ClientSession.prototype.disconnect = function(error) { |
348 var state = (error == remoting.Error.NONE) ? | 350 var state = (error == remoting.Error.NONE) ? |
349 remoting.ClientSession.State.CLOSED : | 351 remoting.ClientSession.State.CLOSED : |
350 remoting.ClientSession.State.FAILED; | 352 remoting.ClientSession.State.FAILED; |
351 | 353 |
352 // The plugin won't send a state change notification, so we explicitly log | 354 // The plugin won't send a state change notification, so we explicitly log |
353 // the fact that the connection has closed. | 355 // the fact that the connection has closed. |
354 this.logToServer.logClientSessionStateChange(state, error); | 356 this.logToServer.logClientSessionStateChange(state, error); |
355 this.error_ = error; | 357 this.error_ = error; |
356 this.setState_(state); | 358 this.setState_(state); |
357 }; | 359 }; |
358 | 360 |
359 /** | 361 /** |
360 * Deletes the <embed> element from the container and disconnects. | 362 * Deletes the <embed> element from the container and disconnects. |
361 * | 363 * |
362 * @return {void} Nothing. | 364 * @return {void} Nothing. |
363 */ | 365 */ |
364 remoting.ClientSession.prototype.cleanup = function() { | 366 remoting.ClientSession.prototype.dispose = function() { |
365 this.sendIq_( | 367 this.sendIq_( |
366 '<cli:iq ' + | 368 '<cli:iq ' + |
367 'to="' + this.host_.jabberId + '" ' + | 369 'to="' + this.host_.jabberId + '" ' + |
368 'type="set" ' + | 370 'type="set" ' + |
369 'id="session-terminate" ' + | 371 'id="session-terminate" ' + |
370 'xmlns:cli="jabber:client">' + | 372 'xmlns:cli="jabber:client">' + |
371 '<jingle ' + | 373 '<jingle ' + |
372 'xmlns="urn:xmpp:jingle:1" ' + | 374 'xmlns="urn:xmpp:jingle:1" ' + |
373 'action="session-terminate" ' + | 375 'action="session-terminate" ' + |
374 'sid="' + this.sessionId_ + '">' + | 376 'sid="' + this.sessionId_ + '">' + |
(...skipping 467 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
842 * @param {boolean} enable True to enable rendering. | 844 * @param {boolean} enable True to enable rendering. |
843 */ | 845 */ |
844 remoting.ClientSession.prototype.enableDebugRegion = function(enable) { | 846 remoting.ClientSession.prototype.enableDebugRegion = function(enable) { |
845 if (enable) { | 847 if (enable) { |
846 this.plugin_.setDebugDirtyRegionHandler( | 848 this.plugin_.setDebugDirtyRegionHandler( |
847 this.uiHandler_.handleDebugRegion.bind(this.uiHandler_)); | 849 this.uiHandler_.handleDebugRegion.bind(this.uiHandler_)); |
848 } else { | 850 } else { |
849 this.plugin_.setDebugDirtyRegionHandler(null); | 851 this.plugin_.setDebugDirtyRegionHandler(null); |
850 } | 852 } |
851 } | 853 } |
OLD | NEW |