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 3// found in the LICENSE file. 4 5/** 6 * @fileoverview 7 * Class handling creation and teardown of a remoting host session. 8 * 9 * This abstracts a <embed> element and controls the plugin which does the 10 * actual remoting work. There should be no UI code inside this class. It 11 * should be purely thought of as a controller of sorts. 12 */ 13 14'use strict'; 15 16/** @suppress {duplicate} */ 17var remoting = remoting || {}; 18 19/** 20 * @constructor 21 */ 22remoting.HostSession = function() { 23 /** @type {remoting.It2MeHostFacade} @private */ 24 this.hostFacade_ = null; 25}; 26 27// Note that these values are copied directly from host_script_object.h and 28// must be kept in sync. 29/** @enum {number} */ 30remoting.HostSession.State = { 31 UNKNOWN: -1, 32 DISCONNECTED: 0, 33 STARTING: 1, 34 REQUESTED_ACCESS_CODE: 2, 35 RECEIVED_ACCESS_CODE: 3, 36 CONNECTED: 4, 37 DISCONNECTING: 5, 38 ERROR: 6, 39 INVALID_DOMAIN_ERROR: 7 40}; 41 42/** 43 * @param {string} stateString The string representation of the host state. 44 * @return {remoting.HostSession.State} The HostSession.State enum value 45 * corresponding to stateString. 46 */ 47remoting.HostSession.State.fromString = function(stateString) { 48 if (!remoting.HostSession.State.hasOwnProperty(stateString)) { 49 console.error('Unexpected HostSession.State string: ', stateString); 50 return remoting.HostSession.State.UNKNOWN; 51 } 52 return remoting.HostSession.State[stateString]; 53} 54 55/** 56 * Initiates a connection. 57 * @param {remoting.It2MeHostFacade} hostFacade It2Me host facade to use. 58 * @param {string} email The user's email address. 59 * @param {string} accessToken A valid OAuth2 access token. 60 * @param {function(remoting.HostSession.State):void} onStateChanged 61 * Callback for notifications of changes to the host plugin's state. 62 * @param {function(boolean):void} onNatTraversalPolicyChanged Callback 63 * for notification of changes to the NAT traversal policy. 64 * @param {function(string):void} logDebugInfo Callback allowing the plugin 65 * to log messages to the debug log. 66 * @param {function():void} onError Callback to invoke in case of an error. 67 */ 68remoting.HostSession.prototype.connect = 69 function(hostFacade, email, accessToken, onStateChanged, 70 onNatTraversalPolicyChanged, logDebugInfo, onError) { 71 /** @private */ 72 this.hostFacade_ = hostFacade; 73 74 this.hostFacade_.connect( 75 email, 'oauth2:' + accessToken, 76 onStateChanged, onNatTraversalPolicyChanged, logDebugInfo, 77 remoting.settings.XMPP_SERVER_ADDRESS, 78 remoting.settings.XMPP_SERVER_USE_TLS, 79 remoting.settings.DIRECTORY_BOT_JID, 80 onError); 81}; 82 83/** 84 * Get the access code generated by the it2me host. Valid only after the 85 * host state is RECEIVED_ACCESS_CODE. 86 * @return {string} The access code. 87 */ 88remoting.HostSession.prototype.getAccessCode = function() { 89 return this.hostFacade_.getAccessCode(); 90}; 91 92/** 93 * Get the lifetime for the access code. Valid only after the host state is 94 * RECEIVED_ACCESS_CODE. 95 * @return {number} The access code lifetime, in seconds. 96 */ 97remoting.HostSession.prototype.getAccessCodeLifetime = function() { 98 return this.hostFacade_.getAccessCodeLifetime(); 99}; 100 101/** 102 * Get the email address of the connected client. Valid only after the plugin 103 * state is CONNECTED. 104 * @return {string} The client's email address. 105 */ 106remoting.HostSession.prototype.getClient = function() { 107 return this.hostFacade_.getClient(); 108}; 109 110/** 111 * Disconnect the it2me session. 112 * @return {void} Nothing. 113 */ 114remoting.HostSession.prototype.disconnect = function() { 115 this.hostFacade_.disconnect(); 116}; 117