Chromium Code Reviews| 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 * It2MeHelperChannel relays messages between Hangouts and Chrome Remote Desktop | 8 * It2MeHelperChannel relays messages between Hangouts and Chrome Remote Desktop |
| 9 * (webapp) for the helper (the Hangouts participant who is giving remote | 9 * (webapp) for the helper (the Hangouts participant who is giving remote |
| 10 * assistance). | 10 * assistance). |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 112 this.onWebappDisconnectRef_ = this.onWebappDisconnect_.bind(this); | 112 this.onWebappDisconnectRef_ = this.onWebappDisconnect_.bind(this); |
| 113 this.onHangoutMessageRef_ = this.onHangoutMessage_.bind(this); | 113 this.onHangoutMessageRef_ = this.onHangoutMessage_.bind(this); |
| 114 this.onHangoutDisconnectRef_ = this.onHangoutDisconnect_.bind(this); | 114 this.onHangoutDisconnectRef_ = this.onHangoutDisconnect_.bind(this); |
| 115 }; | 115 }; |
| 116 | 116 |
| 117 /** @enum {string} */ | 117 /** @enum {string} */ |
| 118 remoting.It2MeHelperChannel.HangoutMessageTypes = { | 118 remoting.It2MeHelperChannel.HangoutMessageTypes = { |
| 119 HELLO: 'hello', | 119 HELLO: 'hello', |
| 120 HELLO_RESPONSE: 'helloResponse', | 120 HELLO_RESPONSE: 'helloResponse', |
| 121 CONNECT: 'connect', | 121 CONNECT: 'connect', |
| 122 DISCONNECT: 'disconnect' | 122 DISCONNECT: 'disconnect', |
| 123 ERROR: 'error' | |
| 123 }; | 124 }; |
| 124 | 125 |
| 125 /** @enum {string} */ | 126 /** @enum {string} */ |
| 126 remoting.It2MeHelperChannel.Features = { | 127 remoting.It2MeHelperChannel.Features = { |
| 127 REMOTE_ASSISTANCE: 'remoteAssistance' | 128 REMOTE_ASSISTANCE: 'remoteAssistance' |
| 128 }; | 129 }; |
| 129 | 130 |
| 130 /** @enum {string} */ | 131 /** @enum {string} */ |
| 131 remoting.It2MeHelperChannel.WebappMessageTypes = { | 132 remoting.It2MeHelperChannel.WebappMessageTypes = { |
| 132 SESSION_STATE_CHANGED: 'sessionStateChanged' | 133 SESSION_STATE_CHANGED: 'sessionStateChanged' |
| (...skipping 27 matching lines...) Expand all Loading... | |
| 160 case MessageTypes.HELLO: | 161 case MessageTypes.HELLO: |
| 161 this.hangoutPort_.postMessage({ | 162 this.hangoutPort_.postMessage({ |
| 162 method: MessageTypes.HELLO_RESPONSE, | 163 method: MessageTypes.HELLO_RESPONSE, |
| 163 supportedFeatures: base.values(remoting.It2MeHelperChannel.Features) | 164 supportedFeatures: base.values(remoting.It2MeHelperChannel.Features) |
| 164 }); | 165 }); |
| 165 return true; | 166 return true; |
| 166 } | 167 } |
| 167 throw new Error('Unknown message method=' + message.method); | 168 throw new Error('Unknown message method=' + message.method); |
| 168 } catch(e) { | 169 } catch(e) { |
| 169 var error = /** @type {Error} */ e; | 170 var error = /** @type {Error} */ e; |
| 170 console.error(error); | 171 this.sendErrorResponse_(this.hangoutPort_, message, error); |
| 171 this.hangoutPort_.postMessage({ | |
| 172 method: message.method + 'Response', | |
| 173 error: error.message | |
| 174 }); | |
| 175 } | 172 } |
| 176 return false; | 173 return false; |
| 177 }; | 174 }; |
| 178 | 175 |
| 179 /** | 176 /** |
| 180 * Disconnect the existing connection to the helpee. | 177 * Disconnect the existing connection to the helpee. |
| 181 * | 178 * |
| 182 * @param {{method:string, data:Object.<string,*>}} message | 179 * @param {{method:string, data:Object.<string,*>}} message |
| 183 * @private | 180 * @private |
| 184 */ | 181 */ |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 273 case MessageTypes.SESSION_STATE_CHANGED: | 270 case MessageTypes.SESSION_STATE_CHANGED: |
| 274 var state = getNumberAttr(message, 'state'); | 271 var state = getNumberAttr(message, 'state'); |
| 275 this.sessionState_ = | 272 this.sessionState_ = |
| 276 /** @type {remoting.ClientSession.State} */ state; | 273 /** @type {remoting.ClientSession.State} */ state; |
| 277 this.hangoutPort_.postMessage(message); | 274 this.hangoutPort_.postMessage(message); |
| 278 return true; | 275 return true; |
| 279 } | 276 } |
| 280 throw new Error('Unknown message method=' + message.method); | 277 throw new Error('Unknown message method=' + message.method); |
| 281 } catch(e) { | 278 } catch(e) { |
| 282 var error = /** @type {Error} */ e; | 279 var error = /** @type {Error} */ e; |
| 283 console.error(error); | 280 this.sendErrorResponse_(this.webappPort_, message, error); |
| 284 this.webappPort_.postMessage({ | |
| 285 method: message.method + 'Response', | |
| 286 error: error.message | |
| 287 }); | |
| 288 } | 281 } |
| 289 return false; | 282 return false; |
| 290 }; | 283 }; |
| 291 | 284 |
| 292 remoting.It2MeHelperChannel.prototype.unhookPorts_ = function() { | 285 remoting.It2MeHelperChannel.prototype.unhookPorts_ = function() { |
| 293 if (this.webappPort_) { | 286 if (this.webappPort_) { |
| 294 this.webappPort_.onMessage.removeListener(this.onWebappMessageRef_); | 287 this.webappPort_.onMessage.removeListener(this.onWebappMessageRef_); |
| 295 this.webappPort_.onDisconnect.removeListener(this.onWebappDisconnectRef_); | 288 this.webappPort_.onDisconnect.removeListener(this.onWebappDisconnectRef_); |
| 296 this.webappPort_.disconnect(); | 289 this.webappPort_.disconnect(); |
| 297 this.webappPort_ = null; | 290 this.webappPort_ = null; |
| 298 } | 291 } |
| 299 | 292 |
| 300 if (this.hangoutPort_) { | 293 if (this.hangoutPort_) { |
| 301 this.hangoutPort_.onMessage.removeListener(this.onHangoutMessageRef_); | 294 this.hangoutPort_.onMessage.removeListener(this.onHangoutMessageRef_); |
| 302 this.hangoutPort_.onDisconnect.removeListener(this.onHangoutDisconnectRef_); | 295 this.hangoutPort_.onDisconnect.removeListener(this.onHangoutDisconnectRef_); |
| 303 this.hangoutPort_.disconnect(); | 296 this.hangoutPort_.disconnect(); |
| 304 this.hangoutPort_ = null; | 297 this.hangoutPort_ = null; |
| 305 } | 298 } |
| 306 | 299 |
| 307 if (this.onDisconnectCallback_) { | 300 if (this.onDisconnectCallback_) { |
| 308 this.onDisconnectCallback_(this); | 301 this.onDisconnectCallback_(this); |
| 309 this.onDisconnectCallback_ = null; | 302 this.onDisconnectCallback_ = null; |
| 310 } | 303 } |
| 311 }; | 304 }; |
| 305 | |
| 306 /** | |
| 307 * @param {chrome.runtime.Port} port | |
| 308 * @param {?{method:string, data:Object.<string,*>}} incomingMessage | |
|
Jamie
2014/09/05 22:01:21
incomingMessage is never null in this code; do you
| |
| 309 * @param {string|Error} error | |
| 310 * @private | |
| 311 */ | |
| 312 remoting.It2MeHelperChannel.prototype.sendErrorResponse_ = | |
| 313 function(port, incomingMessage, error) { | |
| 314 if (error instanceof Error) { | |
| 315 error = error.message; | |
| 316 } | |
|
Jamie
2014/09/05 22:01:21
I think it would be cleaner to require the caller
| |
| 317 | |
| 318 console.error('Error responding to message method:' + | |
| 319 (incomingMessage ? incomingMessage.method : 'null') + | |
| 320 ' error:' + error); | |
| 321 port.postMessage({ | |
| 322 method: remoting.It2MeHelperChannel.HangoutMessageTypes.ERROR, | |
| 323 message: error, | |
| 324 request: incomingMessage | |
| 325 }); | |
| 326 }; | |
| OLD | NEW |