| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 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 * | 7 * |
| 8 * It2MeHelpeeChannel relays messages between the Hangouts web page (Hangouts) | 8 * It2MeHelpeeChannel relays messages between the Hangouts web page (Hangouts) |
| 9 * and the It2Me Native Messaging Host (It2MeHost) for the helpee (the Hangouts | 9 * and the It2Me Native Messaging Host (It2MeHost) for the helpee (the Hangouts |
| 10 * participant who is receiving remoting assistance). | 10 * participant who is receiving remoting assistance). |
| (...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 181 this.handleDownloadHost_(message); | 181 this.handleDownloadHost_(message); |
| 182 return true; | 182 return true; |
| 183 case MessageTypes.CONNECT: | 183 case MessageTypes.CONNECT: |
| 184 this.handleConnect_(message); | 184 this.handleConnect_(message); |
| 185 return true; | 185 return true; |
| 186 case MessageTypes.DISCONNECT: | 186 case MessageTypes.DISCONNECT: |
| 187 this.dispose(); | 187 this.dispose(); |
| 188 return true; | 188 return true; |
| 189 } | 189 } |
| 190 throw new Error('Unsupported message method=' + message.method); | 190 throw new Error('Unsupported message method=' + message.method); |
| 191 } catch(e) { | 191 } catch(/** @type {Error} */ error) { |
| 192 var error = /** @type {Error} */ e; | |
| 193 this.sendErrorResponse_(message, error.message); | 192 this.sendErrorResponse_(message, error.message); |
| 194 } | 193 } |
| 195 return false; | 194 return false; |
| 196 }; | 195 }; |
| 197 | 196 |
| 198 /** | 197 /** |
| 199 * Queries the |hostInstaller| for the installation status. | 198 * Queries the |hostInstaller| for the installation status. |
| 200 * | 199 * |
| 201 * @param {{method:string, data:Object.<string,*>}} message | 200 * @param {{method:string, data:Object.<string,*>}} message |
| 202 * @private | 201 * @private |
| 203 */ | 202 */ |
| 204 remoting.It2MeHelpeeChannel.prototype.handleIsHostInstalled_ = | 203 remoting.It2MeHelpeeChannel.prototype.handleIsHostInstalled_ = |
| 205 function(message) { | 204 function(message) { |
| 206 /** @type {remoting.It2MeHelpeeChannel} */ | 205 /** @type {remoting.It2MeHelpeeChannel} */ |
| 207 var that = this; | 206 var that = this; |
| 208 | 207 |
| 209 /** @param {boolean} installed */ | 208 /** @param {boolean} installed */ |
| 210 function sendResponse(installed) { | 209 function sendResponse(installed) { |
| 211 var MessageTypes = remoting.It2MeHelpeeChannel.HangoutMessageTypes; | 210 var MessageTypes = remoting.It2MeHelpeeChannel.HangoutMessageTypes; |
| 212 that.hangoutPort_.postMessage({ | 211 that.hangoutPort_.postMessage({ |
| 213 method: MessageTypes.IS_HOST_INSTALLED_RESPONSE, | 212 method: MessageTypes.IS_HOST_INSTALLED_RESPONSE, |
| 214 result: installed | 213 result: installed |
| 215 }); | 214 }); |
| 216 } | 215 } |
| 217 | 216 |
| 218 this.hostInstaller_.isInstalled().then( | 217 this.hostInstaller_.isInstalled().then( |
| 219 sendResponse, | 218 sendResponse, |
| 220 this.sendErrorResponse_.bind(this, message) | 219 /** @type {function(*):void} */(this.sendErrorResponse_.bind(this, message)) |
| 221 ); | 220 ); |
| 222 }; | 221 }; |
| 223 | 222 |
| 224 /** | 223 /** |
| 225 * @param {{method:string, data:Object.<string,*>}} message | 224 * @param {{method:string, data:Object.<string,*>}} message |
| 226 * @private | 225 * @private |
| 227 */ | 226 */ |
| 228 remoting.It2MeHelpeeChannel.prototype.handleDownloadHost_ = function(message) { | 227 remoting.It2MeHelpeeChannel.prototype.handleDownloadHost_ = function(message) { |
| 229 try { | 228 try { |
| 230 this.hostInstaller_.download(); | 229 this.hostInstaller_.download(); |
| 231 } catch (e) { | 230 } catch (/** @type {*} */ e) { |
| 232 var error = /** @type {Error} */ e; | 231 var error = /** @type {Error} */ (e); |
| 233 this.sendErrorResponse_(message, error.message); | 232 this.sendErrorResponse_(message, error.message); |
| 234 } | 233 } |
| 235 }; | 234 }; |
| 236 | 235 |
| 237 /** | 236 /** |
| 238 * Disconnect the session if the |hangoutPort| gets disconnected. | 237 * Disconnect the session if the |hangoutPort| gets disconnected. |
| 239 * @private | 238 * @private |
| 240 */ | 239 */ |
| 241 remoting.It2MeHelpeeChannel.prototype.onHangoutDisconnect_ = function() { | 240 remoting.It2MeHelpeeChannel.prototype.onHangoutDisconnect_ = function() { |
| 242 this.dispose(); | 241 this.dispose(); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 258 | 257 |
| 259 if (this.hostState_ !== remoting.HostSession.State.UNKNOWN) { | 258 if (this.hostState_ !== remoting.HostSession.State.UNKNOWN) { |
| 260 throw new Error('An existing connection is in progress.'); | 259 throw new Error('An existing connection is in progress.'); |
| 261 } | 260 } |
| 262 | 261 |
| 263 this.showConfirmDialog_().then( | 262 this.showConfirmDialog_().then( |
| 264 this.initializeHost_.bind(this) | 263 this.initializeHost_.bind(this) |
| 265 ).then( | 264 ).then( |
| 266 this.fetchOAuthToken_.bind(this) | 265 this.fetchOAuthToken_.bind(this) |
| 267 ).then( | 266 ).then( |
| 268 this.connectToHost_.bind(this, email), | 267 /** @type {function(*):void} */(this.connectToHost_.bind(this, email)), |
| 269 this.sendErrorResponse_.bind(this, message) | 268 /** @type {function(*):void} */(this.sendErrorResponse_.bind(this, message)) |
| 270 ); | 269 ); |
| 271 }; | 270 }; |
| 272 | 271 |
| 273 /** | 272 /** |
| 274 * Prompts the user before starting the It2Me Native Messaging Host. This | 273 * Prompts the user before starting the It2Me Native Messaging Host. This |
| 275 * ensures that even if Hangouts is compromised, an attacker cannot start the | 274 * ensures that even if Hangouts is compromised, an attacker cannot start the |
| 276 * host without explicit user confirmation. | 275 * host without explicit user confirmation. |
| 277 * | 276 * |
| 278 * @return {Promise} A promise that resolves to a boolean value, indicating | 277 * @return {Promise} A promise that resolves to a boolean value, indicating |
| 279 * whether the user accepts the remote assistance or not. | 278 * whether the user accepts the remote assistance or not. |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 328 '<li>' + base.escapeHTML(message2) + '</li>' + | 327 '<li>' + base.escapeHTML(message2) + '</li>' + |
| 329 '</ul>'; | 328 '</ul>'; |
| 330 /** | 329 /** |
| 331 * @param {function(*=):void} resolve | 330 * @param {function(*=):void} resolve |
| 332 * @param {function(*=):void} reject | 331 * @param {function(*=):void} reject |
| 333 */ | 332 */ |
| 334 return new Promise(function(resolve, reject) { | 333 return new Promise(function(resolve, reject) { |
| 335 /** @param {number} result */ | 334 /** @param {number} result */ |
| 336 function confirmDialogCallback(result) { | 335 function confirmDialogCallback(result) { |
| 337 if (result === 1) { | 336 if (result === 1) { |
| 338 resolve(); | 337 resolve(true); |
| 339 } else { | 338 } else { |
| 340 reject(new Error(remoting.Error.CANCELLED)); | 339 reject(new Error(remoting.Error.CANCELLED)); |
| 341 } | 340 } |
| 342 } | 341 } |
| 343 remoting.MessageWindow.showConfirmWindow( | 342 remoting.MessageWindow.showConfirmWindow( |
| 344 '', // Empty string to use the package name as the dialog title. | 343 '', // Empty string to use the package name as the dialog title. |
| 345 message, | 344 message, |
| 346 l10n.getTranslationOrError( | 345 l10n.getTranslationOrError( |
| 347 /*i18n-content*/'HANGOUTS_CONFIRM_DIALOG_ACCEPT'), | 346 /*i18n-content*/'HANGOUTS_CONFIRM_DIALOG_ACCEPT'), |
| 348 l10n.getTranslationOrError( | 347 l10n.getTranslationOrError( |
| (...skipping 10 matching lines...) Expand all Loading... |
| 359 remoting.It2MeHelpeeChannel.prototype.initializeHost_ = function() { | 358 remoting.It2MeHelpeeChannel.prototype.initializeHost_ = function() { |
| 360 /** @type {remoting.It2MeHostFacade} */ | 359 /** @type {remoting.It2MeHostFacade} */ |
| 361 var host = this.host_; | 360 var host = this.host_; |
| 362 | 361 |
| 363 /** | 362 /** |
| 364 * @param {function(*=):void} resolve | 363 * @param {function(*=):void} resolve |
| 365 * @param {function(*=):void} reject | 364 * @param {function(*=):void} reject |
| 366 */ | 365 */ |
| 367 return new Promise(function(resolve, reject) { | 366 return new Promise(function(resolve, reject) { |
| 368 if (host.initialized()) { | 367 if (host.initialized()) { |
| 369 resolve(); | 368 resolve(true); |
| 370 } else { | 369 } else { |
| 371 host.initialize(resolve, reject); | 370 host.initialize(/** @type {function(*=):void} */ (resolve), |
| 371 /** @type {function(*=):void} */ (reject)); |
| 372 } | 372 } |
| 373 }); | 373 }); |
| 374 }; | 374 }; |
| 375 | 375 |
| 376 /** | 376 /** |
| 377 * @return {Promise} Promise that resolves with the OAuth token as the value. | 377 * @return {Promise} Promise that resolves with the OAuth token as the value. |
| 378 */ | 378 */ |
| 379 remoting.It2MeHelpeeChannel.prototype.fetchOAuthToken_ = function() { | 379 remoting.It2MeHelpeeChannel.prototype.fetchOAuthToken_ = function() { |
| 380 if (base.isAppsV2()) { | 380 if (base.isAppsV2()) { |
| 381 /** | 381 /** |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 488 | 488 |
| 489 console.error('Error responding to message method:' + | 489 console.error('Error responding to message method:' + |
| 490 (incomingMessage ? incomingMessage.method : 'null') + | 490 (incomingMessage ? incomingMessage.method : 'null') + |
| 491 ' error:' + error); | 491 ' error:' + error); |
| 492 this.hangoutPort_.postMessage({ | 492 this.hangoutPort_.postMessage({ |
| 493 method: remoting.It2MeHelpeeChannel.HangoutMessageTypes.ERROR, | 493 method: remoting.It2MeHelpeeChannel.HangoutMessageTypes.ERROR, |
| 494 message: error, | 494 message: error, |
| 495 request: incomingMessage | 495 request: incomingMessage |
| 496 }); | 496 }); |
| 497 }; | 497 }; |
| OLD | NEW |