Index: remoting/webapp/crd/js/buffered_signal_strategy.js |
diff --git a/remoting/webapp/crd/js/buffered_signal_strategy.js b/remoting/webapp/crd/js/buffered_signal_strategy.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..0dba7b53048536a07b2bf36d5b911e246b0d0b4c |
--- /dev/null |
+++ b/remoting/webapp/crd/js/buffered_signal_strategy.js |
@@ -0,0 +1,107 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+'use strict'; |
+ |
+/** @suppress {duplicate} */ |
+var remoting = remoting || {}; |
+ |
+/** |
+ * Simplified SignalStrategy implementation that wraps an underlying signal |
+ * strategy and forwards messages when it is CONNECTED. It is used only to |
+ * log status messages during IT2Me connection setup, and only those methods |
+ * required for that are implemented. |
+ * |
+ * TODO(jamiewalch): Remove this class once a signal strategy is no longer |
+ * required for logging (crbug.com/497269). |
+ * |
+ * @constructor |
+ * @param {remoting.SignalStrategy} underlying The underlying implementation. |
+ * @implements {remoting.SignalStrategy} |
+ */ |
+remoting.BufferedSignalStrategy = function(underlying) { |
+ /** @private */ |
+ this.underlying_ = underlying; |
+ /** @private {Array<string>} */ |
+ this.pendingMessages_ = []; |
+ |
+ this.underlying_.setStateChangedCallback(this.flush_.bind(this)); |
+}; |
+ |
+remoting.BufferedSignalStrategy.prototype.dispose = function() { |
+ this.underlying_.dispose(); |
+}; |
+ |
+/** |
+ * Sends a message. Can be called only in CONNECTED state. |
+ * @param {string} message |
+ */ |
+remoting.BufferedSignalStrategy.prototype.sendMessage = function(message) { |
+ this.pendingMessages_.push(message); |
+ this.flush_(); |
+}; |
+ |
+/** |
+ * Send any messages accumulated during connection set-up. |
+ * |
+ * @param {remoting.LogToServer} logToServer The LogToServer instance for the |
+ * connection. |
+ */ |
+remoting.BufferedSignalStrategy.prototype.sendConnectionSetupResults = |
+ function(logToServer) { |
+ this.underlying_.sendConnectionSetupResults(logToServer); |
+}; |
+ |
+/** |
+ * If the underlying implementation is connected, flush all pending messages. |
+ * @private |
+ */ |
+remoting.BufferedSignalStrategy.prototype.flush_ = function() { |
+ if (this.underlying_.getState() !== remoting.SignalStrategy.State.CONNECTED) { |
+ return; |
+ } |
+ for (var i = 0; i < this.pendingMessages_.length; ++i) { |
+ this.underlying_.sendMessage(this.pendingMessages_[i]); |
+ } |
+ this.pendingMessages_ = []; |
+}; |
+ |
+ |
+// The following methods are not used by LogToServer and are not implemented. |
+ |
+remoting.BufferedSignalStrategy.prototype.setStateChangedCallback = |
+ function(onStateChangedCallback) { |
+ base.debug.assert(false); |
+}; |
+ |
+remoting.BufferedSignalStrategy.prototype.setIncomingStanzaCallback = |
+ function(onIncomingStanzaCallback) { |
+ base.debug.assert(false); |
+}; |
+ |
+remoting.BufferedSignalStrategy.prototype.connect = |
+ function(server, username, authToken) { |
+ base.debug.assert(false); |
+}; |
+ |
+remoting.BufferedSignalStrategy.prototype.sendConnectionSetupResults = |
+ function(logToServer) { |
+ base.debug.assert(false); |
+}; |
+ |
+remoting.BufferedSignalStrategy.prototype.getState = function() { |
+ base.debug.assert(false); |
+}; |
+ |
+remoting.BufferedSignalStrategy.prototype.getError = function() { |
+ base.debug.assert(false); |
+}; |
+ |
+remoting.BufferedSignalStrategy.prototype.getJid = function() { |
+ base.debug.assert(false); |
+}; |
+ |
+remoting.BufferedSignalStrategy.prototype.getType = function() { |
+ base.debug.assert(false); |
+}; |