Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
|
Jamie
2015/04/07 21:20:44
Rename to match class definition.
kelvinp
2015/04/07 22:48:19
Done.
| |
| 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 /** @suppress {duplicate} */ | 5 /** @suppress {duplicate} */ |
| 6 var remoting = remoting || {}; | 6 var remoting = remoting || {}; |
| 7 | 7 |
| 8 (function() { | 8 (function() { |
| 9 | 9 |
| 10 'use strict'; | 10 'use strict'; |
| 11 | 11 |
| 12 /** | 12 /** |
| 13 * @param {remoting.SessionConnector} sessionConnector | 13 * @param {remoting.SessionConnector} sessionConnector |
| 14 * @param {remoting.Host} host | 14 * @param {remoting.Host} host |
| 15 * | 15 * |
| 16 * @constructor | 16 * @constructor |
| 17 * @implements {remoting.Activity} | |
| 17 */ | 18 */ |
| 18 remoting.Me2MeConnectFlow = function(sessionConnector, host) { | 19 remoting.Me2MeActivity = function(sessionConnector, host) { |
| 19 /** @private */ | 20 /** @private */ |
| 20 this.host_ = host; | 21 this.host_ = host; |
| 21 /** @private */ | 22 /** @private */ |
| 22 this.connector_ = sessionConnector; | 23 this.connector_ = sessionConnector; |
| 24 /** @private */ | |
| 25 this.pinDialog_ = | |
| 26 new remoting.PinDialog(document.getElementById('pin-dialog'), host); | |
| 27 /** @private */ | |
| 28 this.hostUpdateDialog_ = new remoting.HostNeedsUpdateDialog( | |
| 29 document.getElementById('host-needs-update-dialog'), this.host_); | |
| 30 /** @private */ | |
| 31 this.retryOnHostOffline_ = true; | |
| 23 }; | 32 }; |
| 24 | 33 |
| 25 remoting.Me2MeConnectFlow.prototype.start = function() { | 34 remoting.Me2MeActivity.prototype.dispose = function() {}; |
| 35 | |
| 36 remoting.Me2MeActivity.prototype.start = function() { | |
| 26 var webappVersion = chrome.runtime.getManifest().version; | 37 var webappVersion = chrome.runtime.getManifest().version; |
| 27 var needsUpdateDialog = new remoting.HostNeedsUpdateDialog( | |
| 28 document.getElementById('host-needs-update-dialog'), this.host_); | |
| 29 var that = this; | 38 var that = this; |
| 30 | 39 |
| 31 needsUpdateDialog.showIfNecessary(webappVersion).then(function() { | 40 this.hostUpdateDialog_.showIfNecessary(webappVersion).then(function() { |
| 32 return that.host_.options.load(); | 41 return that.host_.options.load(); |
| 33 }).then(function() { | 42 }).then(function() { |
| 34 that.connect_(); | 43 that.connect_(); |
| 35 }).catch(function(/** remoting.Error */ error) { | 44 }).catch(function(/** remoting.Error */ error) { |
| 36 if (error.hasTag(remoting.Error.Tag.CANCELLED)) { | 45 if (error.hasTag(remoting.Error.Tag.CANCELLED)) { |
| 37 remoting.setMode(remoting.AppMode.HOME); | 46 remoting.setMode(remoting.AppMode.HOME); |
| 38 } | 47 } |
| 39 }); | 48 }); |
| 40 }; | 49 }; |
| 41 | 50 |
| 42 /** @private */ | 51 /** @private */ |
| 43 remoting.Me2MeConnectFlow.prototype.connect_ = function() { | 52 remoting.Me2MeActivity.prototype.connect_ = function() { |
| 44 remoting.setMode(remoting.AppMode.CLIENT_CONNECTING); | 53 remoting.setMode(remoting.AppMode.CLIENT_CONNECTING); |
| 45 var host = this.host_; | 54 var host = this.host_; |
| 46 | 55 |
| 47 /** | 56 /** |
| 48 * @param {string} tokenUrl Token-issue URL received from the host. | 57 * @param {string} tokenUrl Token-issue URL received from the host. |
| 49 * @param {string} hostPublicKey Host public key (DER and Base64 encoded). | 58 * @param {string} hostPublicKey Host public key (DER and Base64 encoded). |
| 50 * @param {string} scope OAuth scope to request the token for. | 59 * @param {string} scope OAuth scope to request the token for. |
| 51 * @param {function(string, string):void} onThirdPartyTokenFetched Callback. | 60 * @param {function(string, string):void} onThirdPartyTokenFetched Callback. |
| 52 */ | 61 */ |
| 53 var fetchThirdPartyToken = function( | 62 var fetchThirdPartyToken = function( |
| 54 tokenUrl, hostPublicKey, scope, onThirdPartyTokenFetched) { | 63 tokenUrl, hostPublicKey, scope, onThirdPartyTokenFetched) { |
| 55 var thirdPartyTokenFetcher = new remoting.ThirdPartyTokenFetcher( | 64 var thirdPartyTokenFetcher = new remoting.ThirdPartyTokenFetcher( |
| 56 tokenUrl, hostPublicKey, scope, host.tokenUrlPatterns, | 65 tokenUrl, hostPublicKey, scope, host.tokenUrlPatterns, |
| 57 onThirdPartyTokenFetched); | 66 onThirdPartyTokenFetched); |
| 58 thirdPartyTokenFetcher.fetchToken(); | 67 thirdPartyTokenFetcher.fetchToken(); |
| 59 }; | 68 }; |
| 60 | 69 |
| 70 var that = this; | |
| 61 /** | 71 /** |
| 62 * @param {boolean} supportsPairing | 72 * @param {boolean} supportsPairing |
| 63 * @param {function(string):void} onPinFetched | 73 * @param {function(string):void} onPinFetched |
| 64 */ | 74 */ |
| 65 var requestPin = function(supportsPairing, onPinFetched) { | 75 var requestPin = function(supportsPairing, onPinFetched) { |
| 66 var pinDialog = | 76 that.pinDialog_.show(supportsPairing).then(function(/** string */ pin) { |
| 67 new remoting.PinDialog(document.getElementById('pin-dialog'), host); | |
| 68 pinDialog.show(supportsPairing).then(function(/** string */ pin) { | |
| 69 remoting.setMode(remoting.AppMode.CLIENT_CONNECTING); | 77 remoting.setMode(remoting.AppMode.CLIENT_CONNECTING); |
| 70 onPinFetched(pin); | 78 onPinFetched(pin); |
| 71 /** @type {boolean} */ | |
| 72 remoting.pairingRequested = pinDialog.pairingRequested(); | |
| 73 }).catch(function(/** remoting.Error */ error) { | 79 }).catch(function(/** remoting.Error */ error) { |
| 74 base.debug.assert(error.hasTag(remoting.Error.Tag.CANCELLED)); | 80 base.debug.assert(error.hasTag(remoting.Error.Tag.CANCELLED)); |
| 75 remoting.setMode(remoting.AppMode.HOME); | 81 remoting.setMode(remoting.AppMode.HOME); |
| 76 }); | 82 }); |
| 77 }; | 83 }; |
| 78 | 84 |
| 79 var pairingInfo = host.options.pairingInfo; | 85 var pairingInfo = host.options.pairingInfo; |
| 80 this.connector_.connectMe2Me(host, requestPin, fetchThirdPartyToken, | 86 this.connector_.connectMe2Me(host, requestPin, fetchThirdPartyToken, |
| 81 pairingInfo.clientId, pairingInfo.sharedSecret); | 87 pairingInfo.clientId, pairingInfo.sharedSecret); |
| 82 }; | 88 }; |
| 83 | 89 |
| 90 /** | |
| 91 * @param {!remoting.Error} error | |
| 92 */ | |
| 93 remoting.Me2MeActivity.prototype.onConnectionFailed = function(error) { | |
| 94 var that = this; | |
| 95 var onHostListRefresh = function(/** boolean */ success) { | |
| 96 if (success) { | |
| 97 // Get the host from the hostList for the refreshed JID. | |
| 98 var host = remoting.hostList.getHostForId(that.host_.hostId); | |
| 99 that.connector_.retryConnectMe2Me(host); | |
| 100 return; | |
| 101 } | |
| 102 that.onError(error); | |
| 103 }; | |
| 104 | |
| 105 if (error.hasTag(remoting.Error.Tag.HOST_IS_OFFLINE) && | |
| 106 this.retryOnHostOffline_) { | |
| 107 this.retryOnHostOffline_ = false; | |
| 108 | |
| 109 // The plugin will be re-created when the host finished refreshing | |
| 110 remoting.hostList.refresh(onHostListRefresh); | |
| 111 } else { | |
| 112 this.onError(error); | |
| 113 } | |
| 114 }; | |
| 115 | |
| 116 /** | |
| 117 * @param {!remoting.ConnectionInfo} connectionInfo | |
| 118 */ | |
| 119 remoting.Me2MeActivity.prototype.onConnected = function(connectionInfo) { | |
| 120 // Reset the refresh flag so that the next connection will retry if needed. | |
| 121 this.retryOnHostOffline_ = true; | |
| 122 | |
| 123 if (remoting.app.hasCapability(remoting.ClientSession.Capability.CAST)) { | |
| 124 this.connector_.registerProtocolExtension( | |
| 125 new remoting.CastExtensionHandler()); | |
| 126 } | |
| 127 this.connector_.registerProtocolExtension(new remoting.GnubbyAuthHandler()); | |
| 128 this.pinDialog_.requestPairingIfNecessary(connectionInfo.plugin(), | |
| 129 this.connector_); | |
| 130 }; | |
| 131 | |
| 132 remoting.Me2MeActivity.prototype.onDisconnected = function() { | |
| 133 remoting.setMode(remoting.AppMode.CLIENT_SESSION_FINISHED_ME2ME); | |
| 134 }; | |
| 135 | |
| 136 /** | |
| 137 * @param {!remoting.Error} error | |
| 138 */ | |
| 139 remoting.Me2MeActivity.prototype.onError = function(error) { | |
| 140 this.retryOnHostOffline_ = true; | |
| 141 var errorDiv = document.getElementById('connect-error-message'); | |
| 142 l10n.localizeElementFromTag(errorDiv, error.getTag()); | |
| 143 remoting.setMode(remoting.AppMode.CLIENT_CONNECT_FAILED_IT2ME); | |
| 144 }; | |
| 84 | 145 |
| 85 /** | 146 /** |
| 86 * @param {HTMLElement} rootElement | 147 * @param {HTMLElement} rootElement |
| 87 * @param {remoting.Host} host | 148 * @param {remoting.Host} host |
| 88 * @constructor | 149 * @constructor |
| 89 */ | 150 */ |
| 90 remoting.HostNeedsUpdateDialog = function(rootElement, host) { | 151 remoting.HostNeedsUpdateDialog = function(rootElement, host) { |
| 91 /** @private */ | 152 /** @private */ |
| 92 this.host_ = host; | 153 this.host_ = host; |
| 93 /** @private */ | 154 /** @private */ |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 182 remoting.PinDialog.prototype.show = function(supportsPairing) { | 243 remoting.PinDialog.prototype.show = function(supportsPairing) { |
| 183 // Reset the UI. | 244 // Reset the UI. |
| 184 this.pairingCheckbox_.checked = false; | 245 this.pairingCheckbox_.checked = false; |
| 185 this.rootElement_.querySelector('.pairing-section').hidden = !supportsPairing; | 246 this.rootElement_.querySelector('.pairing-section').hidden = !supportsPairing; |
| 186 var message = this.rootElement_.querySelector('.pin-message'); | 247 var message = this.rootElement_.querySelector('.pin-message'); |
| 187 l10n.localizeElement(message, this.host_.hostName); | 248 l10n.localizeElement(message, this.host_.hostName); |
| 188 this.pinInput_.value = ''; | 249 this.pinInput_.value = ''; |
| 189 return this.dialog_.show(); | 250 return this.dialog_.show(); |
| 190 }; | 251 }; |
| 191 | 252 |
| 192 /** @return {boolean} */ | 253 /** |
| 193 remoting.PinDialog.prototype.pairingRequested = function() { | 254 * @param {remoting.ClientPlugin} plugin |
| 194 return this.pairingCheckbox_.checked; | 255 * @param {remoting.SessionConnector} connector |
| 256 */ | |
| 257 remoting.PinDialog.prototype.requestPairingIfNecessary = | |
| 258 function(plugin, connector) { | |
| 259 if (this.pairingCheckbox_.checked) { | |
| 260 var that = this; | |
| 261 /** | |
| 262 * @param {string} clientId | |
| 263 * @param {string} sharedSecret | |
| 264 */ | |
| 265 var onPairingComplete = function(clientId, sharedSecret) { | |
| 266 that.host_.options.pairingInfo.clientId = clientId; | |
| 267 that.host_.options.pairingInfo.sharedSecret = sharedSecret; | |
| 268 that.host_.options.save(); | |
| 269 connector.updatePairingInfo(clientId, sharedSecret); | |
| 270 }; | |
| 271 | |
| 272 // Use the platform name as a proxy for the local computer name. | |
| 273 // TODO(jamiewalch): Use a descriptive name for the local computer, for | |
| 274 // example, its Chrome Sync name. | |
| 275 var clientName = ''; | |
| 276 if (remoting.platformIsMac()) { | |
| 277 clientName = 'Mac'; | |
| 278 } else if (remoting.platformIsWindows()) { | |
| 279 clientName = 'Windows'; | |
| 280 } else if (remoting.platformIsChromeOS()) { | |
| 281 clientName = 'ChromeOS'; | |
| 282 } else if (remoting.platformIsLinux()) { | |
| 283 clientName = 'Linux'; | |
| 284 } else { | |
| 285 console.log('Unrecognized client platform. Using navigator.platform.'); | |
| 286 clientName = navigator.platform; | |
| 287 } | |
| 288 plugin.requestPairing(clientName, onPairingComplete); | |
| 289 } | |
| 195 }; | 290 }; |
| 196 | 291 |
| 197 })(); | 292 })(); |
| OLD | NEW |