Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6)

Side by Side Diff: remoting/webapp/crd/js/fallback_signal_strategy.js

Issue 855003008: Log signal strategy progress to server. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update for new log format. Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 'use strict'; 5 'use strict';
6 6
7 /** @suppress {duplicate} */ 7 /** @suppress {duplicate} */
8 var remoting = remoting || {}; 8 var remoting = remoting || {};
9 9
10 /** 10 /**
11 * A signal strategy encapsulating a primary and a back-up strategy. If the 11 * A signal strategy encapsulating a primary and a back-up strategy. If the
12 * primary fails or times out, then the secondary is used. Information about 12 * primary fails or times out, then the secondary is used. Information about
13 * which strategy was used, and why, is returned via |onProgressCallback|. 13 * which strategy was used, and why, is returned via |onProgressCallback|.
14 * 14 *
15 * @param {function( 15 * @param {function(
16 * function(remoting.SignalStrategy.State) 16 * function(remoting.SignalStrategy.State)
17 * ):remoting.SignalStrategy} primaryFactory 17 * ):remoting.SignalStrategy} primaryFactory
18 * @param {function( 18 * @param {function(
19 * function(remoting.SignalStrategy.State) 19 * function(remoting.SignalStrategy.State)
20 * ):remoting.SignalStrategy} secondaryFactory 20 * ):remoting.SignalStrategy} secondaryFactory
21 * @param {function(remoting.SignalStrategy.State):void} onStateChangedCallback 21 * @param {function(remoting.SignalStrategy.State):void} onStateChangedCallback
22 * @param {function(remoting.FallbackSignalStrategy.Progress)}
23 * onProgressCallback
24 * 22 *
25 * @implements {remoting.SignalStrategy} 23 * @implements {remoting.SignalStrategy}
26 * @constructor 24 * @constructor
27 */ 25 */
28 remoting.FallbackSignalStrategy = function( 26 remoting.FallbackSignalStrategy = function(
29 primaryFactory, secondaryFactory, 27 primaryFactory, secondaryFactory, onStateChangedCallback) {
30 onStateChangedCallback, onProgressCallback) {
31 /** 28 /**
32 * @type {remoting.SignalStrategy} 29 * @type {remoting.SignalStrategy}
33 * @private 30 * @private
34 */ 31 */
35 this.primary_ = primaryFactory(this.onPrimaryStateChanged_.bind(this)); 32 this.primary_ = primaryFactory(this.onPrimaryStateChanged_.bind(this));
36 33
37 /** 34 /**
38 * @type {remoting.SignalStrategy} 35 * @type {remoting.SignalStrategy}
39 * @private 36 * @private
40 */ 37 */
41 this.secondary_ = secondaryFactory(this.onSecondaryStateChanged_.bind(this)); 38 this.secondary_ = secondaryFactory(this.onSecondaryStateChanged_.bind(this));
42 39
43 /** 40 /**
44 * @type {function(remoting.SignalStrategy.State)} 41 * @type {function(remoting.SignalStrategy.State)}
45 * @private 42 * @private
46 */ 43 */
47 this.onStateChangedCallback_ = onStateChangedCallback; 44 this.onStateChangedCallback_ = onStateChangedCallback;
48 45
49 /** 46 /**
50 * @type {function(remoting.FallbackSignalStrategy.Progress)}
51 * @private
52 */
53 this.onProgressCallback_ = onProgressCallback;
54
55 /**
56 * @type {?function(Element):void} 47 * @type {?function(Element):void}
57 * @private 48 * @private
58 */ 49 */
59 this.onIncomingStanzaCallback_ = null; 50 this.onIncomingStanzaCallback_ = null;
60 51
61 /** 52 /**
62 * @type {number} 53 * @type {number}
63 * @private 54 * @private
64 * @const 55 * @const
65 */ 56 */
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 * @type {string} 98 * @type {string}
108 * @private 99 * @private
109 */ 100 */
110 this.authToken_ = ''; 101 this.authToken_ = '';
111 102
112 /** 103 /**
113 * @type {number} 104 * @type {number}
114 * @private 105 * @private
115 */ 106 */
116 this.primaryConnectTimerId_ = 0; 107 this.primaryConnectTimerId_ = 0;
108
109 /**
110 * @type {remoting.LogToServer}
111 * @private
112 */
113 this.logToServer_ = null;
114
115 /**
116 * @type {Array.<{strategyType: remoting.SignalStrategy.Type,
117 progress: remoting.FallbackSignalStrategy.Progress,
118 * elapsed: number}>}
119 */
120 this.connectionSetupResults_ = [];
121
122 /**
123 * @type {number}
124 * @private
125 */
126 this.startTime_ = 0;
117 }; 127 };
118 128
119 /** 129 /**
120 * @enum {string} 130 * @enum {string}
121 */ 131 */
122 remoting.FallbackSignalStrategy.Progress = { 132 remoting.FallbackSignalStrategy.Progress = {
123 PRIMARY_SUCCEEDED: 'primary-succeeded', 133 SUCCEEDED: 'succeeded',
124 PRIMARY_FAILED: 'primary-failed', 134 FAILED: 'failed',
125 PRIMARY_TIMED_OUT: 'primary-timed-out', 135 TIMED_OUT: 'timed-out',
126 PRIMARY_SUCCEEDED_LATE: 'primary-succeeded-late', 136 SUCCEEDED_LATE: 'succeeded-late',
127 PRIMARY_FAILED_LATE: 'primary-failed-late', 137 FAILED_LATE: 'failed-late',
128 SECONDARY_SUCCEEDED: 'secondary-succeeded',
129 SECONDARY_FAILED: 'secondary-failed'
130 }; 138 };
131 139
132 remoting.FallbackSignalStrategy.prototype.dispose = function() { 140 remoting.FallbackSignalStrategy.prototype.dispose = function() {
133 this.primary_.dispose(); 141 this.primary_.dispose();
134 this.secondary_.dispose(); 142 this.secondary_.dispose();
135 }; 143 };
136 144
137 /** 145 /**
138 * @param {?function(Element):void} onIncomingStanzaCallback Callback to call on 146 * @param {?function(Element):void} onIncomingStanzaCallback Callback to call on
139 * incoming messages. 147 * incoming messages.
(...skipping 15 matching lines...) Expand all
155 * @param {string} username 163 * @param {string} username
156 * @param {string} authToken 164 * @param {string} authToken
157 */ 165 */
158 remoting.FallbackSignalStrategy.prototype.connect = 166 remoting.FallbackSignalStrategy.prototype.connect =
159 function(server, username, authToken) { 167 function(server, username, authToken) {
160 base.debug.assert(this.state_ == this.State.NOT_CONNECTED); 168 base.debug.assert(this.state_ == this.State.NOT_CONNECTED);
161 this.server_ = server; 169 this.server_ = server;
162 this.username_ = username; 170 this.username_ = username;
163 this.authToken_ = authToken; 171 this.authToken_ = authToken;
164 this.state_ = this.State.PRIMARY_PENDING; 172 this.state_ = this.State.PRIMARY_PENDING;
173 this.startTime_ = new Date().getTime();
165 this.primary_.setIncomingStanzaCallback(this.onIncomingStanzaCallback_); 174 this.primary_.setIncomingStanzaCallback(this.onIncomingStanzaCallback_);
166 this.primary_.connect(server, username, authToken); 175 this.primary_.connect(server, username, authToken);
167 this.primaryConnectTimerId_ = 176 this.primaryConnectTimerId_ =
168 window.setTimeout(this.onPrimaryTimeout_.bind(this), 177 window.setTimeout(this.onPrimaryTimeout_.bind(this),
169 this.PRIMARY_CONNECT_TIMEOUT_MS_); 178 this.PRIMARY_CONNECT_TIMEOUT_MS_);
170 }; 179 };
171 180
172 /** 181 /**
173 * Sends a message. Can be called only in CONNECTED state. 182 * Sends a message. Can be called only in CONNECTED state.
174 * @param {string} message 183 * @param {string} message
175 */ 184 */
176 remoting.FallbackSignalStrategy.prototype.sendMessage = function(message) { 185 remoting.FallbackSignalStrategy.prototype.sendMessage = function(message) {
177 this.getConnectedSignalStrategy_().sendMessage(message); 186 this.getConnectedSignalStrategy_().sendMessage(message);
178 }; 187 };
179 188
189 /**
190 * Send any messages accumulated during connection set-up.
191 *
192 * @param {remoting.LogToServer} logToServer The LogToServer instance for the
193 * connection.
194 */
195 remoting.FallbackSignalStrategy.prototype.sendConnectionSetupResults =
196 function(logToServer) {
197 this.logToServer_ = logToServer;
198 this.sendConnectionSetupResultsInternal_();
199 }
200
201 remoting.FallbackSignalStrategy.prototype.sendConnectionSetupResultsInternal_ =
202 function() {
203 for (var i = 0; i < this.connectionSetupResults_.length; ++i) {
204 var result = this.connectionSetupResults_[i];
205 this.logToServer_.logSignalStrategyProgress(result.strategyType,
206 result.progress,
207 result.elapsed);
208 }
209 this.connectionSetupResults_ = [];
210 };
211
180 /** @return {remoting.SignalStrategy.State} Current state */ 212 /** @return {remoting.SignalStrategy.State} Current state */
181 remoting.FallbackSignalStrategy.prototype.getState = function() { 213 remoting.FallbackSignalStrategy.prototype.getState = function() {
182 return (this.externalState_ === null) 214 return (this.externalState_ === null)
183 ? remoting.SignalStrategy.State.NOT_CONNECTED 215 ? remoting.SignalStrategy.State.NOT_CONNECTED
184 : this.externalState_; 216 : this.externalState_;
185 }; 217 };
186 218
187 /** @return {remoting.Error} Error when in FAILED state. */ 219 /** @return {remoting.Error} Error when in FAILED state. */
188 remoting.FallbackSignalStrategy.prototype.getError = function() { 220 remoting.FallbackSignalStrategy.prototype.getError = function() {
189 base.debug.assert(this.state_ == this.State.SECONDARY_FAILED); 221 base.debug.assert(this.state_ == this.State.SECONDARY_FAILED);
190 base.debug.assert( 222 base.debug.assert(
191 this.secondary_.getState() == remoting.SignalStrategy.State.FAILED); 223 this.secondary_.getState() == remoting.SignalStrategy.State.FAILED);
192 return this.secondary_.getError(); 224 return this.secondary_.getError();
193 }; 225 };
194 226
195 /** @return {string} Current JID when in CONNECTED state. */ 227 /** @return {string} Current JID when in CONNECTED state. */
196 remoting.FallbackSignalStrategy.prototype.getJid = function() { 228 remoting.FallbackSignalStrategy.prototype.getJid = function() {
197 return this.getConnectedSignalStrategy_().getJid(); 229 return this.getConnectedSignalStrategy_().getJid();
198 }; 230 };
199 231
232 /** @return {remoting.SignalStrategy.Type} The signal strategy type. */
233 remoting.FallbackSignalStrategy.prototype.getType = function() {
234 return this.getConnectedSignalStrategy_().getType();
235 };
236
200 /** 237 /**
201 * @return {remoting.SignalStrategy} The active signal strategy, if the 238 * @return {remoting.SignalStrategy} The active signal strategy, if the
202 * connection has succeeded. 239 * connection has succeeded.
203 * @private 240 * @private
204 */ 241 */
205 remoting.FallbackSignalStrategy.prototype.getConnectedSignalStrategy_ = 242 remoting.FallbackSignalStrategy.prototype.getConnectedSignalStrategy_ =
206 function() { 243 function() {
207 if (this.state_ == this.State.PRIMARY_SUCCEEDED) { 244 if (this.state_ == this.State.PRIMARY_SUCCEEDED) {
208 base.debug.assert( 245 base.debug.assert(
209 this.primary_.getState() == remoting.SignalStrategy.State.CONNECTED); 246 this.primary_.getState() == remoting.SignalStrategy.State.CONNECTED);
(...skipping 13 matching lines...) Expand all
223 /** 260 /**
224 * @param {remoting.SignalStrategy.State} state 261 * @param {remoting.SignalStrategy.State} state
225 * @private 262 * @private
226 */ 263 */
227 remoting.FallbackSignalStrategy.prototype.onPrimaryStateChanged_ = 264 remoting.FallbackSignalStrategy.prototype.onPrimaryStateChanged_ =
228 function(state) { 265 function(state) {
229 switch (state) { 266 switch (state) {
230 case remoting.SignalStrategy.State.CONNECTED: 267 case remoting.SignalStrategy.State.CONNECTED:
231 if (this.state_ == this.State.PRIMARY_PENDING) { 268 if (this.state_ == this.State.PRIMARY_PENDING) {
232 window.clearTimeout(this.primaryConnectTimerId_); 269 window.clearTimeout(this.primaryConnectTimerId_);
233 this.onProgressCallback_( 270 this.updateProgress_(
234 remoting.FallbackSignalStrategy.Progress.PRIMARY_SUCCEEDED); 271 this.primary_,
272 remoting.FallbackSignalStrategy.Progress.SUCCEEDED);
235 this.state_ = this.State.PRIMARY_SUCCEEDED; 273 this.state_ = this.State.PRIMARY_SUCCEEDED;
236 } else { 274 } else {
237 this.onProgressCallback_( 275 this.updateProgress_(
238 remoting.FallbackSignalStrategy.Progress.PRIMARY_SUCCEEDED_LATE); 276 this.primary_,
277 remoting.FallbackSignalStrategy.Progress.SUCCEEDED_LATE);
239 } 278 }
240 break; 279 break;
241 280
242 case remoting.SignalStrategy.State.FAILED: 281 case remoting.SignalStrategy.State.FAILED:
243 if (this.state_ == this.State.PRIMARY_PENDING) { 282 if (this.state_ == this.State.PRIMARY_PENDING) {
244 window.clearTimeout(this.primaryConnectTimerId_); 283 window.clearTimeout(this.primaryConnectTimerId_);
245 this.onProgressCallback_( 284 this.updateProgress_(
246 remoting.FallbackSignalStrategy.Progress.PRIMARY_FAILED); 285 this.primary_,
286 remoting.FallbackSignalStrategy.Progress.FAILED);
247 this.connectSecondary_(); 287 this.connectSecondary_();
248 } else { 288 } else {
249 this.onProgressCallback_( 289 this.updateProgress_(
250 remoting.FallbackSignalStrategy.Progress.PRIMARY_FAILED_LATE); 290 this.primary_,
291 remoting.FallbackSignalStrategy.Progress.FAILED_LATE);
251 } 292 }
252 return; // Don't notify the external callback 293 return; // Don't notify the external callback
253 294
254 case remoting.SignalStrategy.State.CLOSED: 295 case remoting.SignalStrategy.State.CLOSED:
255 this.state_ = this.State.CLOSED; 296 this.state_ = this.State.CLOSED;
256 break; 297 break;
257 } 298 }
258 299
259 this.notifyExternalCallback_(state); 300 this.notifyExternalCallback_(state);
260 }; 301 };
261 302
262 /** 303 /**
263 * @param {remoting.SignalStrategy.State} state 304 * @param {remoting.SignalStrategy.State} state
264 * @private 305 * @private
265 */ 306 */
266 remoting.FallbackSignalStrategy.prototype.onSecondaryStateChanged_ = 307 remoting.FallbackSignalStrategy.prototype.onSecondaryStateChanged_ =
267 function(state) { 308 function(state) {
268 switch (state) { 309 switch (state) {
269 case remoting.SignalStrategy.State.CONNECTED: 310 case remoting.SignalStrategy.State.CONNECTED:
270 this.onProgressCallback_( 311 this.updateProgress_(
271 remoting.FallbackSignalStrategy.Progress.SECONDARY_SUCCEEDED); 312 this.secondary_,
313 remoting.FallbackSignalStrategy.Progress.SUCCEEDED);
272 this.state_ = this.State.SECONDARY_SUCCEEDED; 314 this.state_ = this.State.SECONDARY_SUCCEEDED;
273 break; 315 break;
274 316
275 case remoting.SignalStrategy.State.FAILED: 317 case remoting.SignalStrategy.State.FAILED:
276 this.onProgressCallback_( 318 this.updateProgress_(
277 remoting.FallbackSignalStrategy.Progress.SECONDARY_FAILED); 319 this.secondary_,
320 remoting.FallbackSignalStrategy.Progress.FAILED);
278 this.state_ = this.State.SECONDARY_FAILED; 321 this.state_ = this.State.SECONDARY_FAILED;
279 break; 322 break;
280 323
281 case remoting.SignalStrategy.State.CLOSED: 324 case remoting.SignalStrategy.State.CLOSED:
282 this.state_ = this.State.CLOSED; 325 this.state_ = this.State.CLOSED;
283 break; 326 break;
284 } 327 }
285 328
286 this.notifyExternalCallback_(state); 329 this.notifyExternalCallback_(state);
287 }; 330 };
(...skipping 28 matching lines...) Expand all
316 this.state_ = this.State.SECONDARY_PENDING; 359 this.state_ = this.State.SECONDARY_PENDING;
317 this.primary_.setIncomingStanzaCallback(null); 360 this.primary_.setIncomingStanzaCallback(null);
318 this.secondary_.setIncomingStanzaCallback(this.onIncomingStanzaCallback_); 361 this.secondary_.setIncomingStanzaCallback(this.onIncomingStanzaCallback_);
319 this.secondary_.connect(this.server_, this.username_, this.authToken_); 362 this.secondary_.connect(this.server_, this.username_, this.authToken_);
320 }; 363 };
321 364
322 /** 365 /**
323 * @private 366 * @private
324 */ 367 */
325 remoting.FallbackSignalStrategy.prototype.onPrimaryTimeout_ = function() { 368 remoting.FallbackSignalStrategy.prototype.onPrimaryTimeout_ = function() {
326 this.onProgressCallback_( 369 this.updateProgress_(
327 remoting.FallbackSignalStrategy.Progress.PRIMARY_TIMED_OUT); 370 this.primary_,
371 remoting.FallbackSignalStrategy.Progress.TIMED_OUT);
328 this.connectSecondary_(); 372 this.connectSecondary_();
329 }; 373 };
374
375 /**
376 * @param {remoting.SignalStrategy} strategy
377 * @param {remoting.FallbackSignalStrategy.Progress} progress
378 * @private
379 */
380 remoting.FallbackSignalStrategy.prototype.updateProgress_ = function(
381 strategy, progress) {
382 console.log('FallbackSignalStrategy progress: ' + strategy.getType() + ' ' +
383 progress);
384 this.connectionSetupResults_.push({
385 'strategyType': strategy.getType(),
386 'progress': progress,
387 'elapsed': new Date().getTime() - this.startTime_
388 });
389 if (this.logToServer_) {
390 this.sendConnectionSetupResultsInternal_();
391 }
392 };
OLDNEW
« no previous file with comments | « no previous file | remoting/webapp/crd/js/log_to_server.js » ('j') | remoting/webapp/crd/js/signal_strategy.js » ('J')

Powered by Google App Engine
This is Rietveld 408576698