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

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

Issue 552403004: Interfaceify ClientPlugin in preparation for mocking it. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Renamed interfaces. Created 6 years, 3 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
Sergey Ulanov 2014/09/20 00:35:25 Technically this is a new file, so I guess it shou
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
Sergey Ulanov 2014/09/20 00:35:25 update this comment please. E.g. something like "D
Jamie 2014/09/20 00:54:22 Done.
8 */ 8 */
9 9
10 'use strict'; 10 'use strict';
11 11
12 /** @suppress {duplicate} */ 12 /** @suppress {duplicate} */
13 var remoting = remoting || {}; 13 var remoting = remoting || {};
14 14
15 /** 15 /**
16 * @param {HTMLElement} clientContainer Container element for the client view. 16 * @param {HTMLElement} clientContainer Container element for the client view.
17 * @param {function(remoting.ClientSession):void} onConnected Callback on 17 * @param {function(remoting.ClientSession):void} onConnected Callback on
18 * success. 18 * success.
19 * @param {function(remoting.Error):void} onError Callback on error. 19 * @param {function(remoting.Error):void} onError Callback on error.
20 * @param {function(string, string):boolean} onExtensionMessage The handler for 20 * @param {function(string, string):boolean} onExtensionMessage The handler for
21 * protocol extension messages. Returns true if a message is recognized; 21 * protocol extension messages. Returns true if a message is recognized;
22 * false otherwise. 22 * false otherwise.
23 * @constructor 23 * @constructor
24 * @implements {remoting.SessionConnector}
24 */ 25 */
25 remoting.SessionConnector = function(clientContainer, onConnected, onError, 26 remoting.SessionConnectorImpl = function(clientContainer, onConnected, onError,
26 onExtensionMessage) { 27 onExtensionMessage) {
27 /** 28 /**
28 * @type {HTMLElement} 29 * @type {HTMLElement}
29 * @private 30 * @private
30 */ 31 */
31 this.clientContainer_ = clientContainer; 32 this.clientContainer_ = clientContainer;
32 33
33 /** 34 /**
34 * @type {function(remoting.ClientSession):void} 35 * @type {function(remoting.ClientSession):void}
35 * @private 36 * @private
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 }; 81 };
81 82
82 // Initialize/declare per-connection state. 83 // Initialize/declare per-connection state.
83 this.reset(); 84 this.reset();
84 }; 85 };
85 86
86 /** 87 /**
87 * Reset the per-connection state so that the object can be re-used for a 88 * Reset the per-connection state so that the object can be re-used for a
88 * second connection. Note the none of the shared WCS state is reset. 89 * second connection. Note the none of the shared WCS state is reset.
89 */ 90 */
90 remoting.SessionConnector.prototype.reset = function() { 91 remoting.SessionConnectorImpl.prototype.reset = function() {
91 /**
92 * Set to true to indicate that the user requested pairing when entering
93 * their PIN for a Me2Me connection.
94 *
95 * @type {boolean}
96 */
97 this.pairingRequested = false;
98
99 /** 92 /**
100 * String used to identify the host to which to connect. For IT2Me, this is 93 * String used to identify the host to which to connect. For IT2Me, this is
101 * the first 7 digits of the access code; for Me2Me it is the host identifier. 94 * the first 7 digits of the access code; for Me2Me it is the host identifier.
102 * 95 *
103 * @type {string} 96 * @type {string}
104 * @private 97 * @private
105 */ 98 */
106 this.hostId_ = ''; 99 this.hostId_ = '';
107 100
108 /** 101 /**
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 * @param {function(string, string, string, 189 * @param {function(string, string, string,
197 * function(string, string): void): void} 190 * function(string, string): void): void}
198 * fetchThirdPartyToken Function to obtain a token from a third party 191 * fetchThirdPartyToken Function to obtain a token from a third party
199 * authenticaiton server. 192 * authenticaiton server.
200 * @param {string} clientPairingId The client id issued by the host when 193 * @param {string} clientPairingId The client id issued by the host when
201 * this device was paired, if it is already paired. 194 * this device was paired, if it is already paired.
202 * @param {string} clientPairedSecret The shared secret issued by the host when 195 * @param {string} clientPairedSecret The shared secret issued by the host when
203 * this device was paired, if it is already paired. 196 * this device was paired, if it is already paired.
204 * @return {void} Nothing. 197 * @return {void} Nothing.
205 */ 198 */
206 remoting.SessionConnector.prototype.connectMe2Me = 199 remoting.SessionConnectorImpl.prototype.connectMe2Me =
207 function(host, fetchPin, fetchThirdPartyToken, 200 function(host, fetchPin, fetchThirdPartyToken,
208 clientPairingId, clientPairedSecret) { 201 clientPairingId, clientPairedSecret) {
209 this.connectMe2MeInternal_( 202 this.connectMe2MeInternal_(
210 host.hostId, host.jabberId, host.publicKey, host.hostName, 203 host.hostId, host.jabberId, host.publicKey, host.hostName,
211 fetchPin, fetchThirdPartyToken, 204 fetchPin, fetchThirdPartyToken,
212 clientPairingId, clientPairedSecret, true); 205 clientPairingId, clientPairedSecret, true);
213 }; 206 };
214 207
215 /** 208 /**
216 * Update the pairing info so that the reconnect function will work correctly. 209 * Update the pairing info so that the reconnect function will work correctly.
217 * 210 *
218 * @param {string} clientId The paired client id. 211 * @param {string} clientId The paired client id.
219 * @param {string} sharedSecret The shared secret. 212 * @param {string} sharedSecret The shared secret.
220 */ 213 */
221 remoting.SessionConnector.prototype.updatePairingInfo = 214 remoting.SessionConnectorImpl.prototype.updatePairingInfo =
222 function(clientId, sharedSecret) { 215 function(clientId, sharedSecret) {
223 this.clientPairingId_ = clientId; 216 this.clientPairingId_ = clientId;
224 this.clientPairedSecret_ = sharedSecret; 217 this.clientPairedSecret_ = sharedSecret;
225 }; 218 };
226 219
227 /** 220 /**
228 * Initiate a Me2Me connection. 221 * Initiate a Me2Me connection.
229 * 222 *
230 * @param {string} hostId ID of the Me2Me host. 223 * @param {string} hostId ID of the Me2Me host.
231 * @param {string} hostJid XMPP JID of the host. 224 * @param {string} hostJid XMPP JID of the host.
232 * @param {string} hostPublicKey Public Key of the host. 225 * @param {string} hostPublicKey Public Key of the host.
233 * @param {string} hostDisplayName Display name (friendly name) of the host. 226 * @param {string} hostDisplayName Display name (friendly name) of the host.
234 * @param {function(boolean, function(string):void):void} fetchPin Function to 227 * @param {function(boolean, function(string):void):void} fetchPin Function to
235 * interactively obtain the PIN from the user. 228 * interactively obtain the PIN from the user.
236 * @param {function(string, string, string, 229 * @param {function(string, string, string,
237 * function(string, string): void): void} 230 * function(string, string): void): void}
238 * fetchThirdPartyToken Function to obtain a token from a third party 231 * fetchThirdPartyToken Function to obtain a token from a third party
239 * authenticaiton server. 232 * authenticaiton server.
240 * @param {string} clientPairingId The client id issued by the host when 233 * @param {string} clientPairingId The client id issued by the host when
241 * this device was paired, if it is already paired. 234 * this device was paired, if it is already paired.
242 * @param {string} clientPairedSecret The shared secret issued by the host when 235 * @param {string} clientPairedSecret The shared secret issued by the host when
243 * this device was paired, if it is already paired. 236 * this device was paired, if it is already paired.
244 * @param {boolean} refreshHostJidIfOffline Whether to refresh the JID and retry 237 * @param {boolean} refreshHostJidIfOffline Whether to refresh the JID and retry
245 * the connection if the current JID is offline. 238 * the connection if the current JID is offline.
246 * @return {void} Nothing. 239 * @return {void} Nothing.
247 * @private 240 * @private
248 */ 241 */
249 remoting.SessionConnector.prototype.connectMe2MeInternal_ = 242 remoting.SessionConnectorImpl.prototype.connectMe2MeInternal_ =
250 function(hostId, hostJid, hostPublicKey, hostDisplayName, 243 function(hostId, hostJid, hostPublicKey, hostDisplayName,
251 fetchPin, fetchThirdPartyToken, 244 fetchPin, fetchThirdPartyToken,
252 clientPairingId, clientPairedSecret, 245 clientPairingId, clientPairedSecret,
253 refreshHostJidIfOffline) { 246 refreshHostJidIfOffline) {
254 // Cancel any existing connect operation. 247 // Cancel any existing connect operation.
255 this.cancel(); 248 this.cancel();
256 249
257 this.hostId_ = hostId; 250 this.hostId_ = hostId;
258 this.hostJid_ = hostJid; 251 this.hostJid_ = hostJid;
259 this.hostPublicKey_ = hostPublicKey; 252 this.hostPublicKey_ = hostPublicKey;
260 this.fetchPin_ = fetchPin; 253 this.fetchPin_ = fetchPin;
261 this.fetchThirdPartyToken_ = fetchThirdPartyToken; 254 this.fetchThirdPartyToken_ = fetchThirdPartyToken;
262 this.hostDisplayName_ = hostDisplayName; 255 this.hostDisplayName_ = hostDisplayName;
263 this.connectionMode_ = remoting.ClientSession.Mode.ME2ME; 256 this.connectionMode_ = remoting.ClientSession.Mode.ME2ME;
264 this.refreshHostJidIfOffline_ = refreshHostJidIfOffline; 257 this.refreshHostJidIfOffline_ = refreshHostJidIfOffline;
265 this.updatePairingInfo(clientPairingId, clientPairedSecret); 258 this.updatePairingInfo(clientPairingId, clientPairedSecret);
266 259
267 this.connectSignaling_(); 260 this.connectSignaling_();
268 } 261 }
269 262
270 /** 263 /**
271 * Initiate an IT2Me connection. 264 * Initiate an IT2Me connection.
272 * 265 *
273 * @param {string} accessCode The access code as entered by the user. 266 * @param {string} accessCode The access code as entered by the user.
274 * @return {void} Nothing. 267 * @return {void} Nothing.
275 */ 268 */
276 remoting.SessionConnector.prototype.connectIT2Me = function(accessCode) { 269 remoting.SessionConnectorImpl.prototype.connectIT2Me = function(accessCode) {
277 var kSupportIdLen = 7; 270 var kSupportIdLen = 7;
278 var kHostSecretLen = 5; 271 var kHostSecretLen = 5;
279 var kAccessCodeLen = kSupportIdLen + kHostSecretLen; 272 var kAccessCodeLen = kSupportIdLen + kHostSecretLen;
280 273
281 // Cancel any existing connect operation. 274 // Cancel any existing connect operation.
282 this.cancel(); 275 this.cancel();
283 276
284 var normalizedAccessCode = this.normalizeAccessCode_(accessCode); 277 var normalizedAccessCode = this.normalizeAccessCode_(accessCode);
285 if (normalizedAccessCode.length != kAccessCodeLen) { 278 if (normalizedAccessCode.length != kAccessCodeLen) {
286 this.onError_(remoting.Error.INVALID_ACCESS_CODE); 279 this.onError_(remoting.Error.INVALID_ACCESS_CODE);
287 return; 280 return;
288 } 281 }
289 282
290 this.hostId_ = normalizedAccessCode.substring(0, kSupportIdLen); 283 this.hostId_ = normalizedAccessCode.substring(0, kSupportIdLen);
291 this.passPhrase_ = normalizedAccessCode; 284 this.passPhrase_ = normalizedAccessCode;
292 this.connectionMode_ = remoting.ClientSession.Mode.IT2ME; 285 this.connectionMode_ = remoting.ClientSession.Mode.IT2ME;
293 remoting.identity.callWithToken(this.connectIT2MeWithToken_.bind(this), 286 remoting.identity.callWithToken(this.connectIT2MeWithToken_.bind(this),
294 this.onError_); 287 this.onError_);
295 }; 288 };
296 289
297 /** 290 /**
298 * Reconnect a closed connection. 291 * Reconnect a closed connection.
299 * 292 *
300 * @return {void} Nothing. 293 * @return {void} Nothing.
301 */ 294 */
302 remoting.SessionConnector.prototype.reconnect = function() { 295 remoting.SessionConnectorImpl.prototype.reconnect = function() {
303 if (this.connectionMode_ == remoting.ClientSession.Mode.IT2ME) { 296 if (this.connectionMode_ == remoting.ClientSession.Mode.IT2ME) {
304 console.error('reconnect not supported for IT2Me.'); 297 console.error('reconnect not supported for IT2Me.');
305 return; 298 return;
306 } 299 }
307 this.connectMe2MeInternal_( 300 this.connectMe2MeInternal_(
308 this.hostId_, this.hostJid_, this.hostPublicKey_, this.hostDisplayName_, 301 this.hostId_, this.hostJid_, this.hostPublicKey_, this.hostDisplayName_,
309 this.fetchPin_, this.fetchThirdPartyToken_, 302 this.fetchPin_, this.fetchThirdPartyToken_,
310 this.clientPairingId_, this.clientPairedSecret_, true); 303 this.clientPairingId_, this.clientPairedSecret_, true);
311 }; 304 };
312 305
313 /** 306 /**
314 * Cancel a connection-in-progress. 307 * Cancel a connection-in-progress.
315 */ 308 */
316 remoting.SessionConnector.prototype.cancel = function() { 309 remoting.SessionConnectorImpl.prototype.cancel = function() {
317 if (this.clientSession_) { 310 if (this.clientSession_) {
318 this.clientSession_.removePlugin(); 311 this.clientSession_.removePlugin();
319 this.clientSession_ = null; 312 this.clientSession_ = null;
320 } 313 }
321 if (this.pendingXhr_) { 314 if (this.pendingXhr_) {
322 this.pendingXhr_.abort(); 315 this.pendingXhr_.abort();
323 this.pendingXhr_ = null; 316 this.pendingXhr_ = null;
324 } 317 }
325 this.reset(); 318 this.reset();
326 }; 319 };
327 320
328 /** 321 /**
329 * Get the connection mode (Me2Me or IT2Me) 322 * Get the connection mode (Me2Me or IT2Me)
330 * 323 *
331 * @return {remoting.ClientSession.Mode} 324 * @return {remoting.ClientSession.Mode}
332 */ 325 */
333 remoting.SessionConnector.prototype.getConnectionMode = function() { 326 remoting.SessionConnectorImpl.prototype.getConnectionMode = function() {
334 return this.connectionMode_; 327 return this.connectionMode_;
335 }; 328 };
336 329
337 /** 330 /**
338 * Get host ID. 331 * Get host ID.
339 * 332 *
340 * @return {string} 333 * @return {string}
341 */ 334 */
342 remoting.SessionConnector.prototype.getHostId = function() { 335 remoting.SessionConnectorImpl.prototype.getHostId = function() {
343 return this.hostId_; 336 return this.hostId_;
344 }; 337 };
345 338
346 /** 339 /**
347 * @private 340 * @private
348 */ 341 */
349 remoting.SessionConnector.prototype.connectSignaling_ = function() { 342 remoting.SessionConnectorImpl.prototype.connectSignaling_ = function() {
350 base.dispose(this.signalStrategy_); 343 base.dispose(this.signalStrategy_);
351 this.signalStrategy_ = null; 344 this.signalStrategy_ = null;
352 345
353 /** @type {remoting.SessionConnector} */ 346 /** @type {remoting.SessionConnectorImpl} */
354 var that = this; 347 var that = this;
355 348
356 /** @param {string} token */ 349 /** @param {string} token */
357 function connectSignalingWithToken(token) { 350 function connectSignalingWithToken(token) {
358 remoting.identity.getEmail( 351 remoting.identity.getEmail(
359 connectSignalingWithTokenAndEmail.bind(null, token), that.onError_); 352 connectSignalingWithTokenAndEmail.bind(null, token), that.onError_);
360 } 353 }
361 354
362 /** 355 /**
363 * @param {string} token 356 * @param {string} token
(...skipping 15 matching lines...) Expand all
379 (new remoting.WcsAdapter(this.onSignalingState_.bind(this))); 372 (new remoting.WcsAdapter(this.onSignalingState_.bind(this)));
380 } 373 }
381 374
382 remoting.identity.callWithToken(connectSignalingWithToken, this.onError_); 375 remoting.identity.callWithToken(connectSignalingWithToken, this.onError_);
383 }; 376 };
384 377
385 /** 378 /**
386 * @private 379 * @private
387 * @param {remoting.SignalStrategy.State} state 380 * @param {remoting.SignalStrategy.State} state
388 */ 381 */
389 remoting.SessionConnector.prototype.onSignalingState_ = function(state) { 382 remoting.SessionConnectorImpl.prototype.onSignalingState_ = function(state) {
390 switch (state) { 383 switch (state) {
391 case remoting.SignalStrategy.State.CONNECTED: 384 case remoting.SignalStrategy.State.CONNECTED:
392 // Proceed only if the connection hasn't been canceled. 385 // Proceed only if the connection hasn't been canceled.
393 if (this.hostJid_) { 386 if (this.hostJid_) {
394 this.createSession_(); 387 this.createSession_();
395 } 388 }
396 break; 389 break;
397 390
398 case remoting.SignalStrategy.State.FAILED: 391 case remoting.SignalStrategy.State.FAILED:
399 this.onError_(this.signalStrategy_.getError()); 392 this.onError_(this.signalStrategy_.getError());
400 break; 393 break;
401 } 394 }
402 }; 395 };
403 396
404 /** 397 /**
405 * Continue an IT2Me connection once an access token has been obtained. 398 * Continue an IT2Me connection once an access token has been obtained.
406 * 399 *
407 * @param {string} token An OAuth2 access token. 400 * @param {string} token An OAuth2 access token.
408 * @return {void} Nothing. 401 * @return {void} Nothing.
409 * @private 402 * @private
410 */ 403 */
411 remoting.SessionConnector.prototype.connectIT2MeWithToken_ = function(token) { 404 remoting.SessionConnectorImpl.prototype.connectIT2MeWithToken_ =
405 function(token) {
412 // Resolve the host id to get the host JID. 406 // Resolve the host id to get the host JID.
413 this.pendingXhr_ = remoting.xhr.get( 407 this.pendingXhr_ = remoting.xhr.get(
414 remoting.settings.DIRECTORY_API_BASE_URL + '/support-hosts/' + 408 remoting.settings.DIRECTORY_API_BASE_URL + '/support-hosts/' +
415 encodeURIComponent(this.hostId_), 409 encodeURIComponent(this.hostId_),
416 this.onIT2MeHostInfo_.bind(this), 410 this.onIT2MeHostInfo_.bind(this),
417 '', 411 '',
418 { 'Authorization': 'OAuth ' + token }); 412 { 'Authorization': 'OAuth ' + token });
419 }; 413 };
420 414
421 /** 415 /**
422 * Continue an IT2Me connection once the host JID has been looked up. 416 * Continue an IT2Me connection once the host JID has been looked up.
423 * 417 *
424 * @param {XMLHttpRequest} xhr The server response to the support-hosts query. 418 * @param {XMLHttpRequest} xhr The server response to the support-hosts query.
425 * @return {void} Nothing. 419 * @return {void} Nothing.
426 * @private 420 * @private
427 */ 421 */
428 remoting.SessionConnector.prototype.onIT2MeHostInfo_ = function(xhr) { 422 remoting.SessionConnectorImpl.prototype.onIT2MeHostInfo_ = function(xhr) {
429 this.pendingXhr_ = null; 423 this.pendingXhr_ = null;
430 if (xhr.status == 200) { 424 if (xhr.status == 200) {
431 var host = /** @type {{data: {jabberId: string, publicKey: string}}} */ 425 var host = /** @type {{data: {jabberId: string, publicKey: string}}} */
432 jsonParseSafe(xhr.responseText); 426 jsonParseSafe(xhr.responseText);
433 if (host && host.data && host.data.jabberId && host.data.publicKey) { 427 if (host && host.data && host.data.jabberId && host.data.publicKey) {
434 this.hostJid_ = host.data.jabberId; 428 this.hostJid_ = host.data.jabberId;
435 this.hostPublicKey_ = host.data.publicKey; 429 this.hostPublicKey_ = host.data.publicKey;
436 this.hostDisplayName_ = this.hostJid_.split('/')[0]; 430 this.hostDisplayName_ = this.hostJid_.split('/')[0];
437 this.createSession_(); 431 this.createSession_();
438 return; 432 return;
439 } else { 433 } else {
440 console.error('Invalid "support-hosts" response from server.'); 434 console.error('Invalid "support-hosts" response from server.');
441 } 435 }
442 } else { 436 } else {
443 this.onError_(this.translateSupportHostsError(xhr.status)); 437 this.onError_(this.translateSupportHostsError_(xhr.status));
444 } 438 }
445 }; 439 };
446 440
447 /** 441 /**
448 * Creates ClientSession object. 442 * Creates ClientSession object.
449 */ 443 */
450 remoting.SessionConnector.prototype.createSession_ = function() { 444 remoting.SessionConnectorImpl.prototype.createSession_ = function() {
451 // In some circumstances, the WCS <iframe> can get reloaded, which results 445 // In some circumstances, the WCS <iframe> can get reloaded, which results
452 // in a new clientJid and a new callback. In this case, remove the old 446 // in a new clientJid and a new callback. In this case, remove the old
453 // client plugin before instantiating a new one. 447 // client plugin before instantiating a new one.
454 if (this.clientSession_) { 448 if (this.clientSession_) {
455 this.clientSession_.removePlugin(); 449 this.clientSession_.removePlugin();
456 this.clientSession_ = null; 450 this.clientSession_ = null;
457 } 451 }
458 452
459 var authenticationMethods = 453 var authenticationMethods =
460 'third_party,spake2_pair,spake2_hmac,spake2_plain'; 454 'third_party,spake2_pair,spake2_hmac,spake2_plain';
(...skipping 12 matching lines...) Expand all
473 /** 467 /**
474 * Handle a change in the state of the client session prior to successful 468 * Handle a change in the state of the client session prior to successful
475 * connection (after connection, this class no longer handles state change 469 * connection (after connection, this class no longer handles state change
476 * events). Errors that occur while connecting either trigger a reconnect 470 * events). Errors that occur while connecting either trigger a reconnect
477 * or notify the onError handler. 471 * or notify the onError handler.
478 * 472 *
479 * @param {remoting.ClientSession.StateEvent} event 473 * @param {remoting.ClientSession.StateEvent} event
480 * @return {void} Nothing. 474 * @return {void} Nothing.
481 * @private 475 * @private
482 */ 476 */
483 remoting.SessionConnector.prototype.onStateChange_ = function(event) { 477 remoting.SessionConnectorImpl.prototype.onStateChange_ = function(event) {
484 switch (event.current) { 478 switch (event.current) {
485 case remoting.ClientSession.State.CONNECTED: 479 case remoting.ClientSession.State.CONNECTED:
486 // When the connection succeeds, deregister for state-change callbacks 480 // When the connection succeeds, deregister for state-change callbacks
487 // and pass the session to the onConnected callback. It is expected that 481 // and pass the session to the onConnected callback. It is expected that
488 // it will register a new state-change callback to handle disconnect 482 // it will register a new state-change callback to handle disconnect
489 // or error conditions. 483 // or error conditions.
490 this.clientSession_.removeEventListener( 484 this.clientSession_.removeEventListener(
491 remoting.ClientSession.Events.stateChanged, 485 remoting.ClientSession.Events.stateChanged,
492 this.bound_.onStateChange); 486 this.bound_.onStateChange);
493 487
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
543 // sync, and even then the version check should ensure compatibility. 537 // sync, and even then the version check should ensure compatibility.
544 this.onError_(remoting.Error.MISSING_PLUGIN); 538 this.onError_(remoting.Error.MISSING_PLUGIN);
545 } 539 }
546 }; 540 };
547 541
548 /** 542 /**
549 * @param {boolean} success True if the host list was successfully refreshed; 543 * @param {boolean} success True if the host list was successfully refreshed;
550 * false if an error occurred. 544 * false if an error occurred.
551 * @private 545 * @private
552 */ 546 */
553 remoting.SessionConnector.prototype.onHostListRefresh_ = function(success) { 547 remoting.SessionConnectorImpl.prototype.onHostListRefresh_ = function(success) {
554 if (success) { 548 if (success) {
555 var host = remoting.hostList.getHostForId(this.hostId_); 549 var host = remoting.hostList.getHostForId(this.hostId_);
556 if (host) { 550 if (host) {
557 this.connectMe2MeInternal_( 551 this.connectMe2MeInternal_(
558 host.hostId, host.jabberId, host.publicKey, host.hostName, 552 host.hostId, host.jabberId, host.publicKey, host.hostName,
559 this.fetchPin_, this.fetchThirdPartyToken_, 553 this.fetchPin_, this.fetchThirdPartyToken_,
560 this.clientPairingId_, this.clientPairedSecret_, false); 554 this.clientPairingId_, this.clientPairedSecret_, false);
561 return; 555 return;
562 } 556 }
563 } 557 }
564 this.onError_(remoting.Error.HOST_IS_OFFLINE); 558 this.onError_(remoting.Error.HOST_IS_OFFLINE);
565 }; 559 };
566 560
567 /** 561 /**
568 * @param {number} error An HTTP error code returned by the support-hosts 562 * @param {number} error An HTTP error code returned by the support-hosts
569 * endpoint. 563 * endpoint.
570 * @return {remoting.Error} The equivalent remoting.Error code. 564 * @return {remoting.Error} The equivalent remoting.Error code.
571 * @private 565 * @private
572 */ 566 */
573 remoting.SessionConnector.prototype.translateSupportHostsError = 567 remoting.SessionConnectorImpl.prototype.translateSupportHostsError_ =
574 function(error) { 568 function(error) {
575 switch (error) { 569 switch (error) {
576 case 0: return remoting.Error.NETWORK_FAILURE; 570 case 0: return remoting.Error.NETWORK_FAILURE;
577 case 404: return remoting.Error.INVALID_ACCESS_CODE; 571 case 404: return remoting.Error.INVALID_ACCESS_CODE;
578 case 502: // No break 572 case 502: // No break
579 case 503: return remoting.Error.SERVICE_UNAVAILABLE; 573 case 503: return remoting.Error.SERVICE_UNAVAILABLE;
580 default: return remoting.Error.UNEXPECTED; 574 default: return remoting.Error.UNEXPECTED;
581 } 575 }
582 }; 576 };
583 577
584 /** 578 /**
585 * Normalize the access code entered by the user. 579 * Normalize the access code entered by the user.
586 * 580 *
587 * @param {string} accessCode The access code, as entered by the user. 581 * @param {string} accessCode The access code, as entered by the user.
588 * @return {string} The normalized form of the code (whitespace removed). 582 * @return {string} The normalized form of the code (whitespace removed).
583 * @private
589 */ 584 */
590 remoting.SessionConnector.prototype.normalizeAccessCode_ = 585 remoting.SessionConnectorImpl.prototype.normalizeAccessCode_ =
591 function(accessCode) { 586 function(accessCode) {
592 // Trim whitespace. 587 // Trim whitespace.
593 return accessCode.replace(/\s/g, ''); 588 return accessCode.replace(/\s/g, '');
594 }; 589 };
590
591
592 /**
593 * @constructor
594 * @implements {remoting.SessionConnectorFactory}
595 */
596 remoting.DefaultSessionConnectorFactory = function() {
597 };
598
599 /**
600 * @param {HTMLElement} clientContainer Container element for the client view.
601 * @param {function(remoting.ClientSession):void} onConnected Callback on
602 * success.
603 * @param {function(remoting.Error):void} onError Callback on error.
604 * @param {function(string, string):boolean} onExtensionMessage The handler for
605 * protocol extension messages. Returns true if a message is recognized;
606 * false otherwise.
607 */
608 remoting.DefaultSessionConnectorFactory.prototype.createConnector =
609 function(clientContainer, onConnected, onError, onExtensionMessage) {
610 return new remoting.SessionConnectorImpl(
611 clientContainer, onConnected, onError, onExtensionMessage);
612 };
OLDNEW
« remoting/webapp/session_connector.js ('K') | « remoting/webapp/session_connector.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698