| 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 * Class to communicate with the host daemon via Native Messaging. | 7 * Class to communicate with the host daemon via Native Messaging. |
| 8 */ | 8 */ |
| 9 | 9 |
| 10 'use strict'; | 10 'use strict'; |
| (...skipping 25 matching lines...) Expand all Loading... |
| 36 | 36 |
| 37 /** @type {Array.<remoting.HostController.Feature>} @private */ | 37 /** @type {Array.<remoting.HostController.Feature>} @private */ |
| 38 this.supportedFeatures_ = []; | 38 this.supportedFeatures_ = []; |
| 39 | 39 |
| 40 /** @type {Array.<function(boolean):void>} @private */ | 40 /** @type {Array.<function(boolean):void>} @private */ |
| 41 this.afterInitializationTasks_ = []; | 41 this.afterInitializationTasks_ = []; |
| 42 | 42 |
| 43 /** @private */ | 43 /** @private */ |
| 44 this.initializationFinished_ = false; | 44 this.initializationFinished_ = false; |
| 45 | 45 |
| 46 /** @type {remoting.Error} @private */ |
| 47 this.error_ = remoting.Error.NONE; |
| 48 |
| 46 try { | 49 try { |
| 47 this.port_ = chrome.runtime.connectNative( | 50 this.port_ = chrome.runtime.connectNative( |
| 48 'com.google.chrome.remote_desktop'); | 51 'com.google.chrome.remote_desktop'); |
| 49 this.port_.onMessage.addListener(this.onIncomingMessage_.bind(this)); | 52 this.port_.onMessage.addListener(this.onIncomingMessage_.bind(this)); |
| 50 this.port_.onDisconnect.addListener(this.onDisconnect_.bind(this)); | 53 this.port_.onDisconnect.addListener(this.onDisconnect_.bind(this)); |
| 51 this.postMessage_({type: 'hello'}, | 54 this.postMessage_({type: 'hello'}, |
| 52 this.onInitialized_.bind(this, true), | 55 this.onInitialized_.bind(this, true), |
| 53 this.onInitialized_.bind(this, false)); | 56 this.onInitialized_.bind(this, false)); |
| 54 } catch (err) { | 57 } catch (err) { |
| 55 console.log('Native Messaging initialization failed: ', | 58 console.log('Native Messaging initialization failed: ', |
| (...skipping 17 matching lines...) Expand all Loading... |
| 73 this.onError = onError; | 76 this.onError = onError; |
| 74 }; | 77 }; |
| 75 | 78 |
| 76 /** | 79 /** |
| 77 * @param {boolean} success | 80 * @param {boolean} success |
| 78 * @return {void} Nothing. | 81 * @return {void} Nothing. |
| 79 * @private | 82 * @private |
| 80 */ | 83 */ |
| 81 remoting.HostDaemonFacade.prototype.onInitialized_ = function(success) { | 84 remoting.HostDaemonFacade.prototype.onInitialized_ = function(success) { |
| 82 this.initializationFinished_ = true; | 85 this.initializationFinished_ = true; |
| 83 if (!success) { | |
| 84 this.port_ = null; | |
| 85 } | |
| 86 | |
| 87 var afterInitializationTasks = this.afterInitializationTasks_; | 86 var afterInitializationTasks = this.afterInitializationTasks_; |
| 88 this.afterInitializationTasks_ = []; | 87 this.afterInitializationTasks_ = []; |
| 89 for (var id in afterInitializationTasks) { | 88 for (var id in afterInitializationTasks) { |
| 90 afterInitializationTasks[/** @type {number} */(id)](success); | 89 afterInitializationTasks[/** @type {number} */(id)](success); |
| 91 } | 90 } |
| 92 }; | 91 }; |
| 93 | 92 |
| 94 /** | 93 /** |
| 95 * @param {remoting.HostController.Feature} feature The feature to test for. | 94 * @param {remoting.HostController.Feature} feature The feature to test for. |
| 96 * @param {function(boolean):void} onDone Callback to return result. | 95 * @param {function(boolean):void} onDone Callback to return result. |
| (...skipping 24 matching lines...) Expand all Loading... |
| 121 * @param {{type: string}} message The message to post. | 120 * @param {{type: string}} message The message to post. |
| 122 * @param {function(...):void} onDone The callback, if any, to be triggered | 121 * @param {function(...):void} onDone The callback, if any, to be triggered |
| 123 * on response. | 122 * on response. |
| 124 * @param {function(remoting.Error):void} onError Callback to call on error. | 123 * @param {function(remoting.Error):void} onError Callback to call on error. |
| 125 * @return {void} Nothing. | 124 * @return {void} Nothing. |
| 126 * @private | 125 * @private |
| 127 */ | 126 */ |
| 128 remoting.HostDaemonFacade.prototype.postMessage_ = | 127 remoting.HostDaemonFacade.prototype.postMessage_ = |
| 129 function(message, onDone, onError) { | 128 function(message, onDone, onError) { |
| 130 if (!this.port_) { | 129 if (!this.port_) { |
| 131 onError(remoting.Error.UNEXPECTED); | 130 onError(this.error_); |
| 132 return; | 131 return; |
| 133 } | 132 } |
| 134 var id = this.nextId_++; | 133 var id = this.nextId_++; |
| 135 message['id'] = id; | 134 message['id'] = id; |
| 136 this.pendingReplies_[id] = new remoting.HostDaemonFacade.PendingReply( | 135 this.pendingReplies_[id] = new remoting.HostDaemonFacade.PendingReply( |
| 137 message.type + 'Response', onDone, onError); | 136 message.type + 'Response', onDone, onError); |
| 138 this.port_.postMessage(message); | 137 this.port_.postMessage(message); |
| 139 }; | 138 }; |
| 140 | 139 |
| 141 /** | 140 /** |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 273 } | 272 } |
| 274 }; | 273 }; |
| 275 | 274 |
| 276 /** | 275 /** |
| 277 * @return {void} Nothing. | 276 * @return {void} Nothing. |
| 278 * @private | 277 * @private |
| 279 */ | 278 */ |
| 280 remoting.HostDaemonFacade.prototype.onDisconnect_ = function() { | 279 remoting.HostDaemonFacade.prototype.onDisconnect_ = function() { |
| 281 console.error('Native Message port disconnected'); | 280 console.error('Native Message port disconnected'); |
| 282 | 281 |
| 282 this.port_ = null; |
| 283 |
| 284 // If initialization hasn't finished then assume that the port was |
| 285 // disconnected because Native Messaging host is not installed. |
| 286 this.error_ = this.initializationFinished_ ? remoting.Error.UNEXPECTED : |
| 287 remoting.Error.MISSING_PLUGIN; |
| 288 |
| 283 // Notify the error-handlers of any requests that are still outstanding. | 289 // Notify the error-handlers of any requests that are still outstanding. |
| 284 var pendingReplies = this.pendingReplies_; | 290 var pendingReplies = this.pendingReplies_; |
| 285 this.pendingReplies_ = {}; | 291 this.pendingReplies_ = {}; |
| 286 | |
| 287 for (var id in pendingReplies) { | 292 for (var id in pendingReplies) { |
| 288 pendingReplies[/** @type {number} */(id)].onError( | 293 pendingReplies[/** @type {number} */(id)].onError(this.error_); |
| 289 remoting.Error.UNEXPECTED); | |
| 290 } | 294 } |
| 291 } | 295 } |
| 292 | 296 |
| 293 /** | 297 /** |
| 294 * Gets local hostname. | 298 * Gets local hostname. |
| 295 * | 299 * |
| 296 * @param {function(string):void} onDone Callback to return result. | 300 * @param {function(string):void} onDone Callback to return result. |
| 297 * @param {function(remoting.Error):void} onError Callback to call on error. | 301 * @param {function(remoting.Error):void} onError Callback to call on error. |
| 298 * @return {void} Nothing. | 302 * @return {void} Nothing. |
| 299 */ | 303 */ |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 385 onDone(this.version_); | 389 onDone(this.version_); |
| 386 } else { | 390 } else { |
| 387 /** @type remoting.HostDaemonFacade */ | 391 /** @type remoting.HostDaemonFacade */ |
| 388 var that = this; | 392 var that = this; |
| 389 this.afterInitializationTasks_.push( | 393 this.afterInitializationTasks_.push( |
| 390 /** @param {boolean} success */ | 394 /** @param {boolean} success */ |
| 391 function(success) { | 395 function(success) { |
| 392 if (success) { | 396 if (success) { |
| 393 onDone(that.version_); | 397 onDone(that.version_); |
| 394 } else { | 398 } else { |
| 395 onError(remoting.Error.UNEXPECTED); | 399 onError(that.error_); |
| 396 } | 400 } |
| 397 }); | 401 }); |
| 398 } | 402 } |
| 399 }; | 403 }; |
| 400 | 404 |
| 401 /** | 405 /** |
| 402 * Get the user's consent to crash reporting. The consent flags are passed to | 406 * Get the user's consent to crash reporting. The consent flags are passed to |
| 403 * the callback as booleans: supported, allowed, set-by-policy. | 407 * the callback as booleans: supported, allowed, set-by-policy. |
| 404 * | 408 * |
| 405 * @param {function(boolean, boolean, boolean):void} onDone Callback to return | 409 * @param {function(boolean, boolean, boolean):void} onDone Callback to return |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 514 * @param {function(remoting.Error):void} onError Callback to call on error. | 518 * @param {function(remoting.Error):void} onError Callback to call on error. |
| 515 * @return {void} Nothing. | 519 * @return {void} Nothing. |
| 516 */ | 520 */ |
| 517 remoting.HostDaemonFacade.prototype.getCredentialsFromAuthCode = | 521 remoting.HostDaemonFacade.prototype.getCredentialsFromAuthCode = |
| 518 function(authorizationCode, onDone, onError) { | 522 function(authorizationCode, onDone, onError) { |
| 519 this.postMessage_({ | 523 this.postMessage_({ |
| 520 type: 'getCredentialsFromAuthCode', | 524 type: 'getCredentialsFromAuthCode', |
| 521 authorizationCode: authorizationCode | 525 authorizationCode: authorizationCode |
| 522 }, onDone, onError); | 526 }, onDone, onError); |
| 523 }; | 527 }; |
| OLD | NEW |