Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 /** | 5 /** |
| 6 * @fileoverview | 6 * @fileoverview |
| 7 * Module for sending log entries to the server. | 7 * Module for sending log entries to the server. |
| 8 */ | 8 */ |
| 9 | 9 |
| 10 'use strict'; | 10 'use strict'; |
| 11 | 11 |
| 12 /** @suppress {duplicate} */ | 12 /** @suppress {duplicate} */ |
| 13 var remoting = remoting || {}; | 13 var remoting = remoting || {}; |
| 14 | 14 |
| 15 /** | 15 /** |
| 16 * @param {remoting.SignalStrategy} signalStrategy Signal strategy. | 16 * @param {remoting.SignalStrategy} signalStrategy Signal strategy. |
| 17 * @constructor | 17 * @constructor |
| 18 */ | 18 */ |
| 19 remoting.LogToServer = function(signalStrategy) { | 19 remoting.LogToServer = function(signalStrategy) { |
| 20 /** @private */ | 20 /** @private */ |
| 21 this.statsAccumulator_ = new remoting.StatsAccumulator(); | 21 this.statsAccumulator_ = new remoting.StatsAccumulator(); |
| 22 /** @private */ | 22 /** @private */ |
| 23 this.sessionId_ = ''; | 23 this.sessionId_ = ''; |
| 24 /** @private */ | 24 /** @private */ |
| 25 this.applicationId_ = ''; | |
|
anandc
2015/04/23 00:38:32
There are a few different ways we could track the
Jamie
2015/04/23 00:54:38
With my suggested change it's just a property acce
| |
| 26 /** @private */ | |
| 25 this.sessionIdGenerationTime_ = 0; | 27 this.sessionIdGenerationTime_ = 0; |
| 26 /** @private */ | 28 /** @private */ |
| 27 this.sessionStartTime_ = new Date().getTime(); | 29 this.sessionStartTime_ = new Date().getTime(); |
| 28 /** @private */ | 30 /** @private */ |
| 29 this.signalStrategy_ = signalStrategy; | 31 this.signalStrategy_ = signalStrategy; |
| 30 /** @private {string} */ | 32 /** @private {string} */ |
| 31 this.connectionType_ = ''; | 33 this.connectionType_ = ''; |
| 32 | 34 |
| 33 this.setSessionId_(); | 35 this.setSessionId_(); |
| 36 this.setApplicationId_(); | |
| 34 signalStrategy.sendConnectionSetupResults(this); | 37 signalStrategy.sendConnectionSetupResults(this); |
| 35 }; | 38 }; |
| 36 | 39 |
| 37 // Constants used for generating a session ID. | 40 // Constants used for generating a session ID. |
| 38 /** @private */ | 41 /** @private */ |
| 39 remoting.LogToServer.SESSION_ID_ALPHABET_ = | 42 remoting.LogToServer.SESSION_ID_ALPHABET_ = |
| 40 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'; | 43 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'; |
| 41 /** @private */ | 44 /** @private */ |
| 42 remoting.LogToServer.SESSION_ID_LEN_ = 20; | 45 remoting.LogToServer.SESSION_ID_LEN_ = 20; |
| 43 | 46 |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 85 | 88 |
| 86 /** | 89 /** |
| 87 * @param {remoting.SignalStrategy.Type} strategyType | 90 * @param {remoting.SignalStrategy.Type} strategyType |
| 88 * @param {remoting.FallbackSignalStrategy.Progress} progress | 91 * @param {remoting.FallbackSignalStrategy.Progress} progress |
| 89 */ | 92 */ |
| 90 remoting.LogToServer.prototype.logSignalStrategyProgress = | 93 remoting.LogToServer.prototype.logSignalStrategyProgress = |
| 91 function(strategyType, progress) { | 94 function(strategyType, progress) { |
| 92 this.maybeExpireSessionId_(); | 95 this.maybeExpireSessionId_(); |
| 93 var entry = remoting.ServerLogEntry.makeSignalStrategyProgress( | 96 var entry = remoting.ServerLogEntry.makeSignalStrategyProgress( |
| 94 this.sessionId_, strategyType, progress); | 97 this.sessionId_, strategyType, progress); |
| 95 this.log_(entry); | 98 this.log_(entry); |
|
anandc
2015/04/23 00:38:32
Is there a reason we're not setting the webapp and
Jamie
2015/04/23 00:54:38
No; I just didn't think to include that informatio
| |
| 96 }; | 99 }; |
| 97 | 100 |
| 98 /** | 101 /** |
| 99 * Whether a session state is one of the states that occurs at the start of | 102 * Whether a session state is one of the states that occurs at the start of |
| 100 * a session. | 103 * a session. |
| 101 * | 104 * |
| 102 * @private | 105 * @private |
| 103 * @param {remoting.ClientSession.State} state | 106 * @param {remoting.ClientSession.State} state |
| 104 * @return {boolean} | 107 * @return {boolean} |
| 105 */ | 108 */ |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 167 * Sends a log entry to the server. | 170 * Sends a log entry to the server. |
| 168 * | 171 * |
| 169 * @private | 172 * @private |
| 170 * @param {remoting.ServerLogEntry} entry | 173 * @param {remoting.ServerLogEntry} entry |
| 171 */ | 174 */ |
| 172 remoting.LogToServer.prototype.log_ = function(entry) { | 175 remoting.LogToServer.prototype.log_ = function(entry) { |
| 173 // Log the time taken to get to this point from the time this session started. | 176 // Log the time taken to get to this point from the time this session started. |
| 174 var sessionDurationInSeconds = | 177 var sessionDurationInSeconds = |
| 175 (new Date().getTime() - this.sessionStartTime_) / 1000.0; | 178 (new Date().getTime() - this.sessionStartTime_) / 1000.0; |
| 176 entry.addSessionDuration(sessionDurationInSeconds); | 179 entry.addSessionDuration(sessionDurationInSeconds); |
| 180 entry.addApplicationId(this.applicationId_); | |
| 177 | 181 |
| 178 // Send the stanza to the debug log. | 182 // Send the stanza to the debug log. |
| 179 console.log('Enqueueing log entry:'); | 183 console.log('Enqueueing log entry:'); |
| 180 entry.toDebugLog(1); | 184 entry.toDebugLog(1); |
| 181 | 185 |
| 182 var stanza = '<cli:iq to="' + remoting.settings.DIRECTORY_BOT_JID + '" ' + | 186 var stanza = '<cli:iq to="' + remoting.settings.DIRECTORY_BOT_JID + '" ' + |
| 183 'type="set" xmlns:cli="jabber:client">' + | 187 'type="set" xmlns:cli="jabber:client">' + |
| 184 '<gr:log xmlns:gr="google:remoting">' + | 188 '<gr:log xmlns:gr="google:remoting">' + |
| 185 entry.toStanza() + | 189 entry.toStanza() + |
| 186 '</gr:log>' + | 190 '</gr:log>' + |
| 187 '</cli:iq>'; | 191 '</cli:iq>'; |
| 188 this.signalStrategy_.sendMessage(stanza); | 192 this.signalStrategy_.sendMessage(stanza); |
| 189 }; | 193 }; |
| 190 | 194 |
| 191 /** | 195 /** |
| 192 * Sets the session ID to a random string. | 196 * Sets the session ID to a random string. |
| 193 * | 197 * |
| 194 * @private | 198 * @private |
| 195 */ | 199 */ |
| 196 remoting.LogToServer.prototype.setSessionId_ = function() { | 200 remoting.LogToServer.prototype.setSessionId_ = function() { |
| 197 this.sessionId_ = remoting.LogToServer.generateSessionId_(); | 201 this.sessionId_ = remoting.LogToServer.generateSessionId_(); |
| 198 this.sessionIdGenerationTime_ = new Date().getTime(); | 202 this.sessionIdGenerationTime_ = new Date().getTime(); |
| 199 }; | 203 }; |
| 200 | 204 |
| 201 /** | 205 /** |
| 206 * Sets the application ID for this session. | |
| 207 * | |
| 208 * @private | |
| 209 */ | |
| 210 remoting.LogToServer.prototype.setApplicationId_ = function() { | |
| 211 this.applicationId_ = chrome.i18n.getMessage('@@extension_id'); | |
|
Jamie
2015/04/23 00:54:38
chrome.runtime.id would be a better way of getting
anandc
2015/04/23 01:26:59
Done.
rmsousa
2015/04/23 01:55:51
Drive-by:
For app remoting, there are cases (e.g.
| |
| 212 }; | |
| 213 | |
| 214 /** | |
| 202 * Clears the session ID. | 215 * Clears the session ID. |
| 203 * | 216 * |
| 204 * @private | 217 * @private |
| 205 */ | 218 */ |
| 206 remoting.LogToServer.prototype.clearSessionId_ = function() { | 219 remoting.LogToServer.prototype.clearSessionId_ = function() { |
| 207 this.sessionId_ = ''; | 220 this.sessionId_ = ''; |
| 208 this.sessionIdGenerationTime_ = 0; | 221 this.sessionIdGenerationTime_ = 0; |
| 209 }; | 222 }; |
| 210 | 223 |
| 211 /** | 224 /** |
| 212 * Sets a new session ID, if the current session ID has reached its maximum age. | 225 * Sets a new session ID, if the current session ID has reached its maximum age. |
| 213 * | 226 * |
| 214 * This method also logs the old and new session IDs to the server, in separate | 227 * This method also logs the old and new session IDs to the server, in separate |
| 215 * log entries. | 228 * log entries. |
| 216 * | 229 * |
| 217 * @private | 230 * @private |
| 218 */ | 231 */ |
| 219 remoting.LogToServer.prototype.maybeExpireSessionId_ = function() { | 232 remoting.LogToServer.prototype.maybeExpireSessionId_ = function() { |
| 220 if ((this.sessionId_ != '') && | 233 if ((this.sessionId_ != '') && |
| 221 (new Date().getTime() - this.sessionIdGenerationTime_ >= | 234 (new Date().getTime() - this.sessionIdGenerationTime_ >= |
| 222 remoting.LogToServer.MAX_SESSION_ID_AGE)) { | 235 remoting.LogToServer.MAX_SESSION_ID_AGE)) { |
| 223 // Log the old session ID. | 236 // Log the old session ID. |
| 224 var entry = remoting.ServerLogEntry.makeSessionIdOld(this.sessionId_); | 237 var entry = remoting.ServerLogEntry.makeSessionIdOld(this.sessionId_); |
|
anandc
2015/04/23 00:38:32
Same question as above: why don't we set the webap
| |
| 225 this.log_(entry); | 238 this.log_(entry); |
| 226 // Generate a new session ID. | 239 // Generate a new session ID. |
| 227 this.setSessionId_(); | 240 this.setSessionId_(); |
| 228 // Log the new session ID. | 241 // Log the new session ID. |
| 229 entry = remoting.ServerLogEntry.makeSessionIdNew(this.sessionId_); | 242 entry = remoting.ServerLogEntry.makeSessionIdNew(this.sessionId_); |
| 230 this.log_(entry); | 243 this.log_(entry); |
| 231 } | 244 } |
| 232 }; | 245 }; |
| 233 | 246 |
| 234 /** | 247 /** |
| 235 * Generates a string that can be used as a session ID. | 248 * Generates a string that can be used as a session ID. |
| 236 * | 249 * |
| 237 * @private | 250 * @private |
| 238 * @return {string} a session ID | 251 * @return {string} a session ID |
| 239 */ | 252 */ |
| 240 remoting.LogToServer.generateSessionId_ = function() { | 253 remoting.LogToServer.generateSessionId_ = function() { |
| 241 var idArray = []; | 254 var idArray = []; |
| 242 for (var i = 0; i < remoting.LogToServer.SESSION_ID_LEN_; i++) { | 255 for (var i = 0; i < remoting.LogToServer.SESSION_ID_LEN_; i++) { |
| 243 var index = | 256 var index = |
| 244 Math.random() * remoting.LogToServer.SESSION_ID_ALPHABET_.length; | 257 Math.random() * remoting.LogToServer.SESSION_ID_ALPHABET_.length; |
| 245 idArray.push( | 258 idArray.push( |
| 246 remoting.LogToServer.SESSION_ID_ALPHABET_.slice(index, index + 1)); | 259 remoting.LogToServer.SESSION_ID_ALPHABET_.slice(index, index + 1)); |
| 247 } | 260 } |
| 248 return idArray.join(''); | 261 return idArray.join(''); |
| 249 }; | 262 }; |
| OLD | NEW |