1 // Copyright 2014 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 'use strict'; 6 7 /** @suppress {duplicate} */ 8 var remoting = remoting || {}; 9 10 /** 11 * Abstract interface for various signaling mechanisms. 12 * 13 * @interface 14 * @extends {base.Disposable} 15 */ 16 remoting.SignalStrategy = function() {}; 17 18 /** 19 * @enum {number} SignalStrategy states. Possible state transitions: 20 * NOT_CONNECTED -> CONNECTING (connect() called). 21 * CONNECTING -> HANDSHAKE (connected successfully). 22 * HANDSHAKE -> CONNECTED (authenticated successfully). 23 * CONNECTING -> FAILED (connection failed). 24 * HANDSHAKE -> FAILED (authentication failed). 25 * * -> CLOSED (dispose() called). 26 */ 27 remoting.SignalStrategy.State = { 28 NOT_CONNECTED: 0, 29 CONNECTING: 1, 30 HANDSHAKE: 2, 31 CONNECTED: 3, 32 FAILED: 4, 33 CLOSED: 5 34 }; 35 36 remoting.SignalStrategy.prototype.dispose = function() {}; 37 38 /** 39 * @param {?function(Element):void} onIncomingStanzaCallback Callback to call on 40 * incoming messages. 41 */ 42 remoting.SignalStrategy.prototype.setIncomingStanzaCallback = 43 function(onIncomingStanzaCallback) {}; 44 45 /** 46 * @param {string} server 47 * @param {string} username 48 * @param {string} authToken 49 */ 50 remoting.SignalStrategy.prototype.connect = 51 function(server, username, authToken) { 52 }; 53 54 /** 55 * Sends a message. Can be called only in CONNECTED state. 56 * @param {string} message 57 */ 58 remoting.SignalStrategy.prototype.sendMessage = function(message) {}; 59 60 /** @return {remoting.SignalStrategy.State} Current state */ 61 remoting.SignalStrategy.prototype.getState = function() {}; 62 63 /** @return {remoting.Error} Error when in FAILED state. */ 64 remoting.SignalStrategy.prototype.getError = function() {}; 65 66 /** @return {string} Current JID when in CONNECTED state. */ 67 remoting.SignalStrategy.prototype.getJid = function() {}; 68 69 /** 70 * Creates the appropriate signal strategy for the current environment. 71 * @param {function(remoting.SignalStrategy.State): void} onStateChangedCallback 72 * @return {remoting.SignalStrategy} New signal strategy object. 73 */ 74 remoting.SignalStrategy.create = function(onStateChangedCallback) { 75 // Only use XMPP when TCP API is available and TLS support is enabled. That's 76 // not the case for V1 app (socket API is available only to platform apps) 77 // and for Chrome releases before 38. 78 if (chrome.socket && chrome.socket.secure) { 79 return new remoting.XmppConnection(onStateChangedCallback); 80 } else { 81 return new remoting.WcsAdapter(onStateChangedCallback); 82 } 83 }; 84