Home | History | Annotate | Download | only in webapp
      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