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

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

Issue 954373002: [Webapp Refactor] Group authentications fields into remoting.CredentialsProvider. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove supports() Created 5 years, 9 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
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 * 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 16 matching lines...) Expand all
27 * to the host. 27 * to the host.
28 * 28 *
29 * @const 29 * @const
30 * @type {number} 30 * @type {number}
31 */ 31 */
32 remoting.ACCESS_TOKEN_RESEND_INTERVAL_MS = 15 * 60 * 1000; 32 remoting.ACCESS_TOKEN_RESEND_INTERVAL_MS = 15 * 60 * 1000;
33 33
34 /** 34 /**
35 * @param {remoting.Host} host The host to connect to. 35 * @param {remoting.Host} host The host to connect to.
36 * @param {remoting.SignalStrategy} signalStrategy Signal strategy. 36 * @param {remoting.SignalStrategy} signalStrategy Signal strategy.
37 * @param {remoting.CredentialsProvider} credentialsProvider
38 * The credentialsProvider to authenticate the client with the host.
37 * @param {HTMLElement} container Container element for the client view. 39 * @param {HTMLElement} container Container element for the client view.
38 * @param {string} accessCode The IT2Me access code. Blank for Me2Me.
39 * @param {function(boolean, function(string): void): void} fetchPin
40 * Called by Me2Me connections when a PIN needs to be obtained
41 * interactively.
42 * @param {function(string, string, string,
43 * function(string, string): void): void}
44 * fetchThirdPartyToken Called by Me2Me connections when a third party
45 * authentication token must be obtained.
46 * @param {string} authenticationMethods Comma-separated list of
47 * authentication methods the client should attempt to use.
48 * @param {remoting.DesktopConnectedView.Mode} mode The mode of this connection. 40 * @param {remoting.DesktopConnectedView.Mode} mode The mode of this connection.
49 * @param {string} clientPairingId For paired Me2Me connections, the
50 * pairing id for this client, as issued by the host.
51 * @param {string} clientPairedSecret For paired Me2Me connections, the
52 * paired secret for this client, as issued by the host.
53 * @param {string} defaultRemapKeys The default set of remap keys, to use 41 * @param {string} defaultRemapKeys The default set of remap keys, to use
54 * when the client doesn't define any. 42 * when the client doesn't define any.
55 * @constructor 43 * @constructor
56 * @extends {base.EventSourceImpl} 44 * @extends {base.EventSourceImpl}
57 */ 45 */
58 remoting.ClientSession = function(host, signalStrategy, container, accessCode, 46 remoting.ClientSession = function(host, signalStrategy, credentialsProvider,
59 fetchPin, fetchThirdPartyToken, 47 container, mode, defaultRemapKeys) {
60 authenticationMethods, mode, clientPairingId,
61 clientPairedSecret, defaultRemapKeys) {
62 /** @private */ 48 /** @private */
63 this.state_ = remoting.ClientSession.State.CREATED; 49 this.state_ = remoting.ClientSession.State.CREATED;
64 50
65 /** @private */ 51 /** @private */
66 this.error_ = remoting.Error.NONE; 52 this.error_ = remoting.Error.NONE;
67 53
68 /** @private */ 54 /** @private */
69 this.host_ = host; 55 this.host_ = host;
56
70 /** @private */ 57 /** @private */
71 this.accessCode_ = accessCode; 58 this.credentialsProvider_ = credentialsProvider;
72 /** @private */
73 this.fetchPin_ = fetchPin;
74 /** @private */
75 this.fetchThirdPartyToken_ = fetchThirdPartyToken;
76 /** @private */
77 this.authenticationMethods_ = authenticationMethods;
78 /** @private */
79 this.clientPairingId_ = clientPairingId;
80 /** @private */
81 this.clientPairedSecret_ = clientPairedSecret;
82 59
83 /** @private */ 60 /** @private */
84 this.uiHandler_ = new remoting.DesktopConnectedView( 61 this.uiHandler_ = new remoting.DesktopConnectedView(
85 this, container, this.host_, mode, defaultRemapKeys, 62 this, container, this.host_, mode, defaultRemapKeys,
86 this.onPluginInitialized_.bind(this)); 63 this.onPluginInitialized_.bind(this));
87 remoting.desktopConnectedView = this.uiHandler_; 64 remoting.desktopConnectedView = this.uiHandler_;
88 65
89 /** @private */ 66 /** @private */
90 this.sessionId_ = ''; 67 this.sessionId_ = '';
91 /** @type {remoting.ClientPlugin} 68 /** @type {remoting.ClientPlugin}
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after
303 plugin.setConnectionStatusUpdateHandler( 280 plugin.setConnectionStatusUpdateHandler(
304 this.onConnectionStatusUpdate_.bind(this)); 281 this.onConnectionStatusUpdate_.bind(this));
305 plugin.setRouteChangedHandler(this.onRouteChanged_.bind(this)); 282 plugin.setRouteChangedHandler(this.onRouteChanged_.bind(this));
306 plugin.setConnectionReadyHandler(this.onConnectionReady_.bind(this)); 283 plugin.setConnectionReadyHandler(this.onConnectionReady_.bind(this));
307 plugin.setCapabilitiesHandler(this.onSetCapabilities_.bind(this)); 284 plugin.setCapabilitiesHandler(this.onSetCapabilities_.bind(this));
308 plugin.setGnubbyAuthHandler( 285 plugin.setGnubbyAuthHandler(
309 this.processGnubbyAuthMessage_.bind(this)); 286 this.processGnubbyAuthMessage_.bind(this));
310 plugin.setCastExtensionHandler( 287 plugin.setCastExtensionHandler(
311 this.processCastExtensionMessage_.bind(this)); 288 this.processCastExtensionMessage_.bind(this));
312 289
313 this.initiateConnection_(); 290 this.plugin_.connect(
291 this.host_, this.signalStrategy_.getJid(), this.credentialsProvider_);
314 }; 292 };
315 293
316 /** 294 /**
317 * @param {remoting.Error} error 295 * @param {remoting.Error} error
318 */ 296 */
319 remoting.ClientSession.prototype.resetWithError_ = function(error) { 297 remoting.ClientSession.prototype.resetWithError_ = function(error) {
320 this.signalStrategy_.setIncomingStanzaCallback(null); 298 this.signalStrategy_.setIncomingStanzaCallback(null);
321 this.removePlugin(); 299 this.removePlugin();
322 this.error_ = error; 300 this.error_ = error;
323 this.setState_(remoting.ClientSession.State.FAILED); 301 this.setState_(remoting.ClientSession.State.FAILED);
324 } 302 };
325 303
326 /** 304 /**
327 * Deletes the <embed> element from the container, without sending a 305 * Deletes the <embed> element from the container, without sending a
328 * session_terminate request. This is to be called when the session was 306 * session_terminate request. This is to be called when the session was
329 * disconnected by the Host. 307 * disconnected by the Host.
330 * 308 *
331 * @return {void} Nothing. 309 * @return {void} Nothing.
332 */ 310 */
333 remoting.ClientSession.prototype.removePlugin = function() { 311 remoting.ClientSession.prototype.removePlugin = function() {
334 this.uiHandler_.removePlugin(); 312 this.uiHandler_.removePlugin();
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
453 if (!this.plugin_) { 431 if (!this.plugin_) {
454 return; 432 return;
455 } 433 }
456 var formatted = new XMLSerializer().serializeToString(message); 434 var formatted = new XMLSerializer().serializeToString(message);
457 console.log(remoting.timestamp(), 435 console.log(remoting.timestamp(),
458 remoting.formatIq.prettifyReceiveIq(formatted)); 436 remoting.formatIq.prettifyReceiveIq(formatted));
459 this.plugin_.onIncomingIq(formatted); 437 this.plugin_.onIncomingIq(formatted);
460 }; 438 };
461 439
462 /** 440 /**
463 * @private
464 */
465 remoting.ClientSession.prototype.initiateConnection_ = function() {
466 /** @type {remoting.ClientSession} */
467 var that = this;
468
469 /** @param {string} sharedSecret Shared secret. */
470 function onSharedSecretReceived(sharedSecret) {
471 that.plugin_.connect(that.host_.jabberId, that.host_.publicKey,
472 that.signalStrategy_.getJid(), sharedSecret,
473 that.authenticationMethods_, that.host_.hostId,
474 that.clientPairingId_, that.clientPairedSecret_);
475 }
476
477 this.getSharedSecret_(onSharedSecretReceived);
478 };
479
480 /**
481 * Gets shared secret to be used for connection.
482 *
483 * @param {function(string)} callback Callback called with the shared secret.
484 * @return {void} Nothing.
485 * @private
486 */
487 remoting.ClientSession.prototype.getSharedSecret_ = function(callback) {
488 /** @type remoting.ClientSession */
489 var that = this;
490 if (this.plugin_.hasFeature(remoting.ClientPlugin.Feature.THIRD_PARTY_AUTH)) {
491 /** @type{function(string, string, string): void} */
492 var fetchThirdPartyToken = function(tokenUrl, hostPublicKey, scope) {
493 that.fetchThirdPartyToken_(
494 tokenUrl, hostPublicKey, scope,
495 that.plugin_.onThirdPartyTokenFetched.bind(that.plugin_));
496 };
497 this.plugin_.setFetchThirdPartyTokenHandler(fetchThirdPartyToken);
498 }
499 if (this.accessCode_) {
500 // Shared secret was already supplied before connecting (It2Me case).
501 callback(this.accessCode_);
502 } else if (this.plugin_.hasFeature(
503 remoting.ClientPlugin.Feature.ASYNC_PIN)) {
504 // Plugin supports asynchronously asking for the PIN.
505 this.plugin_.useAsyncPinDialog();
506 /** @param {boolean} pairingSupported */
507 var fetchPin = function(pairingSupported) {
508 that.fetchPin_(pairingSupported,
509 that.plugin_.onPinFetched.bind(that.plugin_));
510 };
511 this.plugin_.setFetchPinHandler(fetchPin);
512 callback('');
513 } else {
514 // Clients that don't support asking for a PIN asynchronously also don't
515 // support pairing, so request the PIN now without offering to remember it.
516 this.fetchPin_(false, callback);
517 }
518 };
519
520 /**
521 * Callback that the plugin invokes to indicate that the connection 441 * Callback that the plugin invokes to indicate that the connection
522 * status has changed. 442 * status has changed.
523 * 443 *
524 * @param {number} status The plugin's status. 444 * @param {number} status The plugin's status.
525 * @param {number} error The plugin's error state, if any. 445 * @param {number} error The plugin's error state, if any.
526 * @private 446 * @private
527 */ 447 */
528 remoting.ClientSession.prototype.onConnectionStatusUpdate_ = 448 remoting.ClientSession.prototype.onConnectionStatusUpdate_ =
529 function(status, error) { 449 function(status, error) {
530 if (status == remoting.ClientSession.State.CONNECTED) { 450 if (status == remoting.ClientSession.State.CONNECTED) {
(...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after
844 * @param {boolean} enable True to enable rendering. 764 * @param {boolean} enable True to enable rendering.
845 */ 765 */
846 remoting.ClientSession.prototype.enableDebugRegion = function(enable) { 766 remoting.ClientSession.prototype.enableDebugRegion = function(enable) {
847 if (enable) { 767 if (enable) {
848 this.plugin_.setDebugDirtyRegionHandler( 768 this.plugin_.setDebugDirtyRegionHandler(
849 this.uiHandler_.handleDebugRegion.bind(this.uiHandler_)); 769 this.uiHandler_.handleDebugRegion.bind(this.uiHandler_));
850 } else { 770 } else {
851 this.plugin_.setDebugDirtyRegionHandler(null); 771 this.plugin_.setDebugDirtyRegionHandler(null);
852 } 772 }
853 } 773 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698