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 'use strict'; | 5 'use strict'; |
| 6 | 6 |
| 7 /** @suppress {duplicate} */ | 7 /** @suppress {duplicate} */ |
| 8 var remoting = remoting || {}; | 8 var remoting = remoting || {}; |
| 9 | 9 |
| 10 /** | 10 /** |
| 11 * HostInstallDialog prompts the user to install host components. | 11 * HostInstallDialog prompts the user to install host components. |
| 12 * | 12 * |
| 13 * @constructor | 13 * @constructor |
| 14 */ | 14 */ |
| 15 remoting.HostInstallDialog = function() { | 15 remoting.HostInstallDialog = function() { |
| 16 this.continueInstallButton_ = document.getElementById( | 16 this.continueInstallButton_ = document.getElementById( |
| 17 'host-install-continue'); | 17 'host-install-continue'); |
| 18 this.cancelInstallButton_ = document.getElementById( | 18 this.cancelInstallButton_ = document.getElementById( |
| 19 'host-install-dismiss'); | 19 'host-install-dismiss'); |
| 20 this.retryInstallButton_ = document.getElementById( | 20 this.retryInstallButton_ = document.getElementById( |
| 21 'host-install-retry'); | 21 'host-install-retry'); |
| 22 | 22 |
| 23 this.onOkClickedHandler_ = this.onOkClicked_.bind(this); | 23 this.onOkClickedHandler_ = this.onOkClicked_.bind(this); |
| 24 this.onCancelClickedHandler_ = this.onCancelClicked_.bind(this); | 24 this.onCancelClickedHandler_ = this.onCancelClicked_.bind(this); |
| 25 this.onRetryClickedHandler_ = this.onRetryClicked_.bind(this); | 25 this.onRetryClickedHandler_ = this.onRetryClicked_.bind(this); |
| 26 | 26 |
| 27 this.continueInstallButton_.disabled = false; | 27 this.continueInstallButton_.disabled = false; |
| 28 this.cancelInstallButton_.disabled = false; | 28 this.cancelInstallButton_.disabled = false; |
| 29 | 29 |
| 30 /** @param {remoting.HostController.AsyncResult} asyncResult @private*/ | 30 /** @private*/ |
|
Sergey Ulanov
2014/05/24 01:50:34
nit: space before */
| |
| 31 this.onDoneHandler_ = function(asyncResult) {} | 31 this.onDoneHandler_ = function() {} |
| 32 | 32 |
| 33 /** @param {remoting.Error} error @private */ | 33 /** @param {remoting.Error} error @private */ |
| 34 this.onErrorHandler_ = function(error) {} | 34 this.onErrorHandler_ = function(error) {} |
| 35 }; | 35 }; |
| 36 | 36 |
| 37 /** @type {Object.<string,string>} */ | 37 /** @type {Object.<string,string>} */ |
| 38 remoting.HostInstallDialog.hostDownloadUrls = { | 38 remoting.HostInstallDialog.hostDownloadUrls = { |
| 39 'Win32' : 'http://dl.google.com/dl/edgedl/chrome-remote-desktop/' + | 39 'Win32' : 'http://dl.google.com/dl/edgedl/chrome-remote-desktop/' + |
| 40 'chromeremotedesktophost.msi', | 40 'chromeremotedesktophost.msi', |
| 41 'MacIntel' : 'https://dl.google.com/chrome-remote-desktop/' + | 41 'MacIntel' : 'https://dl.google.com/chrome-remote-desktop/' + |
| 42 'chromeremotedesktop.dmg', | 42 'chromeremotedesktop.dmg', |
| 43 'Linux x86_64' : 'https://dl.google.com/linux/direct/' + | 43 'Linux x86_64' : 'https://dl.google.com/linux/direct/' + |
| 44 'chrome-remote-desktop_current_amd64.deb', | 44 'chrome-remote-desktop_current_amd64.deb', |
| 45 'Linux i386' : 'https://dl.google.com/linux/direct/' + | 45 'Linux i386' : 'https://dl.google.com/linux/direct/' + |
| 46 'chrome-remote-desktop_current_i386.deb' | 46 'chrome-remote-desktop_current_i386.deb' |
| 47 }; | 47 }; |
| 48 | 48 |
| 49 /** | 49 /** |
| 50 * Starts downloading host components and shows installation prompt. | 50 * Starts downloading host components and shows installation prompt. |
| 51 * | 51 * |
| 52 * @param {remoting.HostPlugin} hostPlugin Used to install the host on Windows. | 52 * @param {function():void} onDone Callback called when user clicks Ok, |
| 53 * @param {function(remoting.HostController.AsyncResult):void} onDone Callback | 53 * presumably after installing the host. The handler must verify that the host |
| 54 * called when user clicks Ok, presumably after installing the host. The | 54 * has been installed and call tryAgain() otherwise. |
| 55 * handler must verify that the host has been installed and call tryAgain() | |
| 56 * otherwise. | |
| 57 * @param {function(remoting.Error):void} onError Callback called when user | 55 * @param {function(remoting.Error):void} onError Callback called when user |
| 58 * clicks Cancel button or there is some other unexpected error. | 56 * clicks Cancel button or there is some other unexpected error. |
| 59 * @return {void} | 57 * @return {void} |
| 60 */ | 58 */ |
| 61 remoting.HostInstallDialog.prototype.show = function( | 59 remoting.HostInstallDialog.prototype.show = function(onDone, onError) { |
| 62 hostPlugin, onDone, onError) { | 60 this.continueInstallButton_.addEventListener( |
| 63 // On Windows, host installation is automatic (handled by the NPAPI plugin) | 61 'click', this.onOkClickedHandler_, false); |
| 64 // and we don't show the dialog. On Mac and Linux, we show the dialog and the | 62 this.cancelInstallButton_.addEventListener( |
| 65 // user is expected to manually install the host before clicking OK. | 63 'click', this.onCancelClickedHandler_, false); |
| 66 // TODO (weitaosu): Make host installation automatic for IT2Me (like Me2Me) on | 64 remoting.setMode(remoting.AppMode.HOST_INSTALL_PROMPT); |
| 67 // Windows. Currently hostController is always null for IT2Me. | |
| 68 if (navigator.platform == 'Win32' && hostPlugin != null) { | |
| 69 // Currently we show two dialogs (each with a UAC prompt) when a user | |
| 70 // enables the host for the first time, one for installing the host (by the | |
| 71 // plugin) and the other for starting the host (by the native messaging | |
| 72 // host). We'd like to reduce it to one but don't have a good solution | |
| 73 // right now. | |
| 74 // We also show the same message on the two dialogs because. We don't want | |
| 75 // to confuse the user by saying "Installing Remote Desktop" because in | |
| 76 // their mind "Remote Desktop" (the webapp) has already been installed. | |
| 77 remoting.showSetupProcessingMessage(/*i18n-content*/'HOST_SETUP_STARTING'); | |
| 78 | 65 |
| 79 hostPlugin.installHost(onDone); | 66 var hostPackageUrl = |
| 67 remoting.HostInstallDialog.hostDownloadUrls[navigator.platform]; | |
| 68 if (hostPackageUrl === undefined) { | |
| 69 this.onErrorHandler_(remoting.Error.CANCELLED); | |
| 70 return; | |
| 71 } | |
| 72 | |
| 73 // Start downloading the package. | |
| 74 if (remoting.isAppsV2) { | |
| 75 // TODO(jamiewalch): Use chrome.downloads when it is available to | |
| 76 // apps v2 (http://crbug.com/174046) | |
| 77 window.open(hostPackageUrl); | |
| 80 } else { | 78 } else { |
| 81 this.continueInstallButton_.addEventListener( | 79 window.location = hostPackageUrl; |
| 82 'click', this.onOkClickedHandler_, false); | 80 } |
| 83 this.cancelInstallButton_.addEventListener( | |
| 84 'click', this.onCancelClickedHandler_, false); | |
| 85 remoting.setMode(remoting.AppMode.HOST_INSTALL_PROMPT); | |
| 86 | 81 |
| 87 var hostPackageUrl = | 82 /** @type {function():void} */ |
| 88 remoting.HostInstallDialog.hostDownloadUrls[navigator.platform]; | 83 this.onDoneHandler_ = onDone; |
| 89 if (hostPackageUrl === undefined) { | |
| 90 this.onErrorHandler_(remoting.Error.CANCELLED); | |
| 91 return; | |
| 92 } | |
| 93 | 84 |
| 94 // Start downloading the package. | 85 /** @type {function(remoting.Error):void} */ |
| 95 if (remoting.isAppsV2) { | 86 this.onErrorHandler_ = onError; |
| 96 // TODO(jamiewalch): Use chrome.downloads when it is available to | |
| 97 // apps v2 (http://crbug.com/174046) | |
| 98 window.open(hostPackageUrl); | |
| 99 } else { | |
| 100 window.location = hostPackageUrl; | |
| 101 } | |
| 102 | |
| 103 /** @type {function(remoting.HostController.AsyncResult):void} */ | |
| 104 this.onDoneHandler_ = onDone; | |
| 105 | |
| 106 /** @type {function(remoting.Error):void} */ | |
| 107 this.onErrorHandler_ = onError; | |
| 108 } | |
| 109 } | 87 } |
| 110 | 88 |
| 111 /** | 89 /** |
| 112 * In manual host installation, onDone handler must call this method if it | 90 * In manual host installation, onDone handler must call this method if it |
| 113 * detects that the host components are still unavailable. The same onDone | 91 * detects that the host components are still unavailable. The same onDone |
| 114 * and onError callbacks will be used when user clicks Ok or Cancel. | 92 * and onError callbacks will be used when user clicks Ok or Cancel. |
| 115 */ | 93 */ |
| 116 remoting.HostInstallDialog.prototype.tryAgain = function() { | 94 remoting.HostInstallDialog.prototype.tryAgain = function() { |
| 117 this.retryInstallButton_.addEventListener( | 95 this.retryInstallButton_.addEventListener( |
| 118 'click', this.onRetryClickedHandler_.bind(this), false); | 96 'click', this.onRetryClickedHandler_.bind(this), false); |
| 119 remoting.setMode(remoting.AppMode.HOST_INSTALL_PENDING); | 97 remoting.setMode(remoting.AppMode.HOST_INSTALL_PENDING); |
| 120 this.continueInstallButton_.disabled = false; | 98 this.continueInstallButton_.disabled = false; |
| 121 this.cancelInstallButton_.disabled = false; | 99 this.cancelInstallButton_.disabled = false; |
| 122 }; | 100 }; |
| 123 | 101 |
| 124 remoting.HostInstallDialog.prototype.onOkClicked_ = function() { | 102 remoting.HostInstallDialog.prototype.onOkClicked_ = function() { |
| 125 this.continueInstallButton_.removeEventListener( | 103 this.continueInstallButton_.removeEventListener( |
| 126 'click', this.onOkClickedHandler_, false); | 104 'click', this.onOkClickedHandler_, false); |
| 127 this.cancelInstallButton_.removeEventListener( | 105 this.cancelInstallButton_.removeEventListener( |
| 128 'click', this.onCancelClickedHandler_, false); | 106 'click', this.onCancelClickedHandler_, false); |
| 129 this.continueInstallButton_.disabled = true; | 107 this.continueInstallButton_.disabled = true; |
| 130 this.cancelInstallButton_.disabled = true; | 108 this.cancelInstallButton_.disabled = true; |
| 131 | 109 |
| 132 this.onDoneHandler_(remoting.HostController.AsyncResult.OK); | 110 this.onDoneHandler_(); |
| 133 } | 111 } |
| 134 | 112 |
| 135 remoting.HostInstallDialog.prototype.onCancelClicked_ = function() { | 113 remoting.HostInstallDialog.prototype.onCancelClicked_ = function() { |
| 136 this.continueInstallButton_.removeEventListener( | 114 this.continueInstallButton_.removeEventListener( |
| 137 'click', this.onOkClickedHandler_, false); | 115 'click', this.onOkClickedHandler_, false); |
| 138 this.cancelInstallButton_.removeEventListener( | 116 this.cancelInstallButton_.removeEventListener( |
| 139 'click', this.onCancelClickedHandler_, false); | 117 'click', this.onCancelClickedHandler_, false); |
| 140 this.onErrorHandler_(remoting.Error.CANCELLED); | 118 this.onErrorHandler_(remoting.Error.CANCELLED); |
| 141 } | 119 } |
| 142 | 120 |
| 143 remoting.HostInstallDialog.prototype.onRetryClicked_ = function() { | 121 remoting.HostInstallDialog.prototype.onRetryClicked_ = function() { |
| 144 this.retryInstallButton_.removeEventListener( | 122 this.retryInstallButton_.removeEventListener( |
| 145 'click', this.onRetryClickedHandler_.bind(this), false); | 123 'click', this.onRetryClickedHandler_.bind(this), false); |
| 146 this.continueInstallButton_.addEventListener( | 124 this.continueInstallButton_.addEventListener( |
| 147 'click', this.onOkClickedHandler_, false); | 125 'click', this.onOkClickedHandler_, false); |
| 148 this.cancelInstallButton_.addEventListener( | 126 this.cancelInstallButton_.addEventListener( |
| 149 'click', this.onCancelClickedHandler_, false); | 127 'click', this.onCancelClickedHandler_, false); |
| 150 remoting.setMode(remoting.AppMode.HOST_INSTALL_PROMPT); | 128 remoting.setMode(remoting.AppMode.HOST_INSTALL_PROMPT); |
| 151 }; | 129 }; |
| OLD | NEW |