| 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 * Class representing the host-list portion of the home screen UI. | 7 * Class representing the host-list portion of the home screen UI. |
| 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 * Create a host list consisting of the specified HTML elements, which should | 16 * Create a host list consisting of the specified HTML elements, which should |
| 17 * have a common parent that contains only host-list UI as it will be hidden | 17 * have a common parent that contains only host-list UI as it will be hidden |
| 18 * if the host-list is empty. | 18 * if the host-list is empty. |
| 19 * | 19 * |
| 20 * @constructor | 20 * @constructor |
| 21 * @param {Element} table The HTML <div> to contain host-list. | 21 * @param {Element} table The HTML <div> to contain host-list. |
| 22 * @param {Element} noHosts The HTML <div> containing the "no hosts" message. | 22 * @param {Element} noHosts The HTML <div> containing the "no hosts" message. |
| 23 * @param {Element} errorMsg The HTML <div> to display error messages. | 23 * @param {Element} errorMsg The HTML <div> to display error messages. |
| 24 * @param {Element} errorButton The HTML <button> to display the error | 24 * @param {Element} errorButton The HTML <button> to display the error |
| 25 * resolution action. | 25 * resolution action. |
| 26 * @param {HTMLElement} loadingIndicator The HTML <span> to update while the | 26 * @param {HTMLElement} loadingIndicator The HTML <span> to update while the |
| 27 * host list is being loaded. The first element of this span should be | 27 * host list is being loaded. The first element of this span should be |
| 28 * the reload button. | 28 * the reload button. |
| 29 * @param {function(!remoting.Error)} onError Function to call when an error |
| 30 * occurs. |
| 29 */ | 31 */ |
| 30 remoting.HostList = function(table, noHosts, errorMsg, errorButton, | 32 remoting.HostList = function(table, noHosts, errorMsg, errorButton, |
| 31 loadingIndicator) { | 33 loadingIndicator, onError) { |
| 32 /** @private {Element} */ | 34 /** @private {Element} */ |
| 33 this.table_ = table; | 35 this.table_ = table; |
| 34 /** | 36 /** |
| 35 * TODO(jamiewalch): This should be doable using CSS's sibling selector, | 37 * TODO(jamiewalch): This should be doable using CSS's sibling selector, |
| 36 * but it doesn't work right now (crbug.com/135050). | 38 * but it doesn't work right now (crbug.com/135050). |
| 37 * @private {Element} | 39 * @private {Element} |
| 38 */ | 40 */ |
| 39 this.noHosts_ = noHosts; | 41 this.noHosts_ = noHosts; |
| 40 /** @private {Element} */ | 42 /** @private {Element} */ |
| 41 this.errorMsg_ = errorMsg; | 43 this.errorMsg_ = errorMsg; |
| 42 /** @private {Element} */ | 44 /** @private {Element} */ |
| 43 this.errorButton_ = errorButton; | 45 this.errorButton_ = errorButton; |
| 44 /** @private {HTMLElement} */ | 46 /** @private {HTMLElement} */ |
| 45 this.loadingIndicator_ = loadingIndicator; | 47 this.loadingIndicator_ = loadingIndicator; |
| 48 this.onError_ = onError; |
| 49 |
| 46 /** @private {Array<remoting.HostTableEntry>} */ | 50 /** @private {Array<remoting.HostTableEntry>} */ |
| 47 this.hostTableEntries_ = []; | 51 this.hostTableEntries_ = []; |
| 48 /** @private {Array<remoting.Host>} */ | 52 /** @private {Array<remoting.Host>} */ |
| 49 this.hosts_ = []; | 53 this.hosts_ = []; |
| 50 /** @private {!remoting.Error} */ | 54 /** @private {!remoting.Error} */ |
| 51 this.lastError_ = remoting.Error.none(); | 55 this.lastError_ = remoting.Error.none(); |
| 52 /** @private {remoting.LocalHostSection} */ | 56 /** @private {remoting.LocalHostSection} */ |
| 53 this.localHostSection_ = new remoting.LocalHostSection( | 57 this.localHostSection_ = new remoting.LocalHostSection( |
| 54 /** @type {HTMLElement} */ (document.querySelector('.daemon-control')), | 58 /** @type {HTMLElement} */ (document.querySelector('.daemon-control')), |
| 55 new remoting.LocalHostSection.Controller( | 59 new remoting.LocalHostSection.Controller( |
| 56 this, new remoting.HostSetupDialog(remoting.hostController))); | 60 this, |
| 61 new remoting.HostSetupDialog(remoting.hostController, onError))); |
| 57 | 62 |
| 58 /** @private {number} */ | 63 /** @private {number} */ |
| 59 this.webappMajorVersion_ = parseInt(chrome.runtime.getManifest().version, 10); | 64 this.webappMajorVersion_ = parseInt(chrome.runtime.getManifest().version, 10); |
| 60 | 65 |
| 61 this.errorButton_.addEventListener('click', | 66 this.errorButton_.addEventListener('click', |
| 62 this.onErrorClick_.bind(this), | 67 this.onErrorClick_.bind(this), |
| 63 false); | 68 false); |
| 64 var reloadButton = this.loadingIndicator_.firstElementChild; | 69 var reloadButton = this.loadingIndicator_.firstElementChild; |
| 65 /** @type {remoting.HostList} */ | 70 /** @type {remoting.HostList} */ |
| 66 var that = this; | 71 var that = this; |
| (...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 288 * @return {void} Nothing. | 293 * @return {void} Nothing. |
| 289 * @private | 294 * @private |
| 290 */ | 295 */ |
| 291 remoting.HostList.prototype.deleteHost_ = function(hostTableEntry) { | 296 remoting.HostList.prototype.deleteHost_ = function(hostTableEntry) { |
| 292 this.table_.removeChild(hostTableEntry.element()); | 297 this.table_.removeChild(hostTableEntry.element()); |
| 293 var index = this.hostTableEntries_.indexOf(hostTableEntry); | 298 var index = this.hostTableEntries_.indexOf(hostTableEntry); |
| 294 if (index != -1) { | 299 if (index != -1) { |
| 295 this.hostTableEntries_.splice(index, 1); | 300 this.hostTableEntries_.splice(index, 1); |
| 296 } | 301 } |
| 297 remoting.hostListApi.remove(hostTableEntry.host.hostId, base.doNothing, | 302 remoting.hostListApi.remove(hostTableEntry.host.hostId, base.doNothing, |
| 298 remoting.showErrorMessage); | 303 this.onError_); |
| 299 }; | 304 }; |
| 300 | 305 |
| 301 /** | 306 /** |
| 302 * Prepare a host for renaming by replacing its name with an edit box. | 307 * Prepare a host for renaming by replacing its name with an edit box. |
| 303 * @param {remoting.HostTableEntry} hostTableEntry The host to be renamed. | 308 * @param {remoting.HostTableEntry} hostTableEntry The host to be renamed. |
| 304 * @return {void} Nothing. | 309 * @return {void} Nothing. |
| 305 */ | 310 */ |
| 306 remoting.HostList.prototype.renameHost = function(hostTableEntry) { | 311 remoting.HostList.prototype.renameHost = function(hostTableEntry) { |
| 307 for (var i = 0; i < this.hosts_.length; ++i) { | 312 for (var i = 0; i < this.hosts_.length; ++i) { |
| 308 if (this.hosts_[i].hostId == hostTableEntry.host.hostId) { | 313 if (this.hosts_[i].hostId == hostTableEntry.host.hostId) { |
| 309 this.hosts_[i].hostName = hostTableEntry.host.hostName; | 314 this.hosts_[i].hostName = hostTableEntry.host.hostName; |
| 310 break; | 315 break; |
| 311 } | 316 } |
| 312 } | 317 } |
| 313 this.save_(); | 318 this.save_(); |
| 314 | 319 |
| 315 remoting.hostListApi.put(hostTableEntry.host.hostId, | 320 remoting.hostListApi.put(hostTableEntry.host.hostId, |
| 316 hostTableEntry.host.hostName, | 321 hostTableEntry.host.hostName, |
| 317 hostTableEntry.host.publicKey, | 322 hostTableEntry.host.publicKey, |
| 318 function() {}, | 323 function() {}, |
| 319 remoting.showErrorMessage); | 324 this.onError_); |
| 320 }; | 325 }; |
| 321 | 326 |
| 322 /** | 327 /** |
| 323 * Unregister a host. | 328 * Unregister a host. |
| 324 * @param {string} hostId The id of the host to be removed. | 329 * @param {string} hostId The id of the host to be removed. |
| 325 * @param {function(void)=} opt_onDone | 330 * @param {function(void)=} opt_onDone |
| 326 * @return {void} Nothing. | 331 * @return {void} Nothing. |
| 327 */ | 332 */ |
| 328 remoting.HostList.prototype.unregisterHostById = function(hostId, opt_onDone) { | 333 remoting.HostList.prototype.unregisterHostById = function(hostId, opt_onDone) { |
| 329 var that = this; | 334 var that = this; |
| 330 var onDone = opt_onDone || base.doNothing; | 335 var onDone = opt_onDone || base.doNothing; |
| 331 | 336 |
| 332 var host = this.getHostForId(hostId); | 337 var host = this.getHostForId(hostId); |
| 333 if (!host) { | 338 if (!host) { |
| 334 console.log('Skipping host un-registration as the host is not registered ' + | 339 console.log('Skipping host un-registration as the host is not registered ' + |
| 335 'under the current account'); | 340 'under the current account'); |
| 336 onDone(); | 341 onDone(); |
| 337 return; | 342 return; |
| 338 } | 343 } |
| 339 | 344 |
| 340 var onRemoved = function() { | 345 var onRemoved = function() { |
| 341 that.refresh(function() { | 346 that.refresh(function() { |
| 342 that.display(); | 347 that.display(); |
| 343 onDone(); | 348 onDone(); |
| 344 }); | 349 }); |
| 345 }; | 350 }; |
| 346 remoting.hostListApi.remove(hostId, onRemoved, remoting.showErrorMessage); | 351 remoting.hostListApi.remove(hostId, onRemoved, this.onError_); |
| 347 }; | 352 }; |
| 348 | 353 |
| 349 /** | 354 /** |
| 350 * Set the state of the local host and localHostId if any. | 355 * Set the state of the local host and localHostId if any. |
| 351 * | 356 * |
| 352 * @param {remoting.HostController.State} state State of the local host. | 357 * @param {remoting.HostController.State} state State of the local host. |
| 353 * @param {string?} hostId ID of the local host, or null. | 358 * @param {string?} hostId ID of the local host, or null. |
| 354 * @return {void} Nothing. | 359 * @return {void} Nothing. |
| 355 */ | 360 */ |
| 356 remoting.HostList.prototype.setLocalHostStateAndId = function(state, hostId) { | 361 remoting.HostList.prototype.setLocalHostStateAndId = function(state, hostId) { |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 415 } | 420 } |
| 416 }; | 421 }; |
| 417 | 422 |
| 418 /** | 423 /** |
| 419 * Key name under which Me2Me hosts are cached. | 424 * Key name under which Me2Me hosts are cached. |
| 420 */ | 425 */ |
| 421 remoting.HostList.HOSTS_KEY = 'me2me-cached-hosts'; | 426 remoting.HostList.HOSTS_KEY = 'me2me-cached-hosts'; |
| 422 | 427 |
| 423 /** @type {remoting.HostList} */ | 428 /** @type {remoting.HostList} */ |
| 424 remoting.hostList = null; | 429 remoting.hostList = null; |
| OLD | NEW |