Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / remoting / webapp / base / js / signal_strategy.js
blobbeaa6353921de0515eafcf08fe4228d751825445
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.
5 'use strict';
7 /** @suppress {duplicate} */
8 var remoting = remoting || {};
10 /**
11  * Abstract interface for various signaling mechanisms.
12  *
13  * @interface
14  * @extends {base.Disposable}
15  */
16 remoting.SignalStrategy = function() {};
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  *    CONNECTED -> FAILED (connection was terminated).
26  *    * -> CLOSED (dispose() called).
27  *
28  * Do not re-order these values without updating fallback_signal_strategy.js.
29  */
30 remoting.SignalStrategy.State = {
31   NOT_CONNECTED: 0,
32   CONNECTING: 1,
33   HANDSHAKE: 2,
34   CONNECTED: 3,
35   FAILED: 4,
36   CLOSED: 5
39 /**
40  * @enum {string} SignalStrategy types. Do not add to these values without
41  *     updating the corresponding enum in chromoting_extensions.proto.
42  */
43 remoting.SignalStrategy.Type = {
44   XMPP: 'xmpp',
45   WCS: 'wcs'
48 remoting.SignalStrategy.prototype.dispose = function() {};
50 /**
51  * @param {function(remoting.SignalStrategy.State):void} onStateChangedCallback
52  *   Callback to call on state change.
53  */
54 remoting.SignalStrategy.prototype.setStateChangedCallback =
55     function(onStateChangedCallback) {};
57 /**
58  * @param {?function(Element):void} onIncomingStanzaCallback Callback to call on
59  *     incoming messages.
60  */
61 remoting.SignalStrategy.prototype.setIncomingStanzaCallback =
62     function(onIncomingStanzaCallback) {};
64 /**
65  * @param {string} server
66  * @param {string} username
67  * @param {string} authToken
68  */
69 remoting.SignalStrategy.prototype.connect =
70     function(server, username, authToken) {
73 /**
74  * Sends a message. Can be called only in CONNECTED state.
75  * @param {string} message
76  */
77 remoting.SignalStrategy.prototype.sendMessage = function(message) {};
79 /** @return {remoting.SignalStrategy.State} Current state */
80 remoting.SignalStrategy.prototype.getState = function() {};
82 /** @return {!remoting.Error} Error when in FAILED state. */
83 remoting.SignalStrategy.prototype.getError = function() {};
85 /** @return {string} Current JID when in CONNECTED state. */
86 remoting.SignalStrategy.prototype.getJid = function() {};
88 /** @return {remoting.SignalStrategy.Type} The signal strategy type. */
89 remoting.SignalStrategy.prototype.getType = function() {};
91 /**
92  * Creates the appropriate signal strategy for the current environment.
93  * @return {remoting.SignalStrategy} New signal strategy object.
94  */
95 remoting.SignalStrategy.create = function() {
96   // Only use XMPP when TCP API is available and TLS support is enabled. That's
97   // not the case for V1 app (socket API is available only to platform apps)
98   // and for Chrome releases before 38.
99   if (chrome.sockets && chrome.sockets.tcp && chrome.sockets.tcp.secure) {
100     /**
101      * @param {remoting.FallbackSignalStrategy.Progress} progress
102      */
103     var progressCallback = function(progress) {
104       console.log('FallbackSignalStrategy progress: ' + progress);
105     };
107     return new remoting.FallbackSignalStrategy(
108         new remoting.DnsBlackholeChecker(new remoting.XmppConnection()),
109         new remoting.WcsAdapter());
110   } else {
111     return new remoting.WcsAdapter();
112   }