| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| 'use strict'; |
| |
| /** @suppress {duplicate} */ |
| var remoting = remoting || {}; |
| |
| /** |
| * HostInstallDialog prompts the user to install host components. |
| * |
| * @constructor |
| */ |
| remoting.HostInstallDialog = function() { |
| this.continueInstallButton_ = document.getElementById( |
| 'host-install-continue'); |
| this.cancelInstallButton_ = document.getElementById( |
| 'host-install-dismiss'); |
| this.retryInstallButton_ = document.getElementById( |
| 'host-install-retry'); |
| |
| this.onOkClickedHandler_ = this.onOkClicked_.bind(this); |
| this.onCancelClickedHandler_ = this.onCancelClicked_.bind(this); |
| this.onRetryClickedHandler_ = this.onRetryClicked_.bind(this); |
| |
| this.continueInstallButton_.disabled = false; |
| this.cancelInstallButton_.disabled = false; |
| |
| /** @private*/ |
| this.onDoneHandler_ = function() {} |
| |
| /** @param {remoting.Error} error @private */ |
| this.onErrorHandler_ = function(error) {} |
| }; |
| |
| /** @type {Object.<string,string>} */ |
| remoting.HostInstallDialog.hostDownloadUrls = { |
| 'Win32' : 'http://dl.google.com/dl/edgedl/chrome-remote-desktop/' + |
| 'chromeremotedesktophost.msi', |
| 'MacIntel' : 'https://dl.google.com/chrome-remote-desktop/' + |
| 'chromeremotedesktop.dmg', |
| 'Linux x86_64' : 'https://dl.google.com/linux/direct/' + |
| 'chrome-remote-desktop_current_amd64.deb', |
| 'Linux i386' : 'https://dl.google.com/linux/direct/' + |
| 'chrome-remote-desktop_current_i386.deb' |
| }; |
| |
| /** |
| * Starts downloading host components and shows installation prompt. |
| * |
| * @param {function():void} onDone Callback called when user clicks Ok, |
| * presumably after installing the host. The handler must verify that the host |
| * has been installed and call tryAgain() otherwise. |
| * @param {function(remoting.Error):void} onError Callback called when user |
| * clicks Cancel button or there is some other unexpected error. |
| * @return {void} |
| */ |
| remoting.HostInstallDialog.prototype.show = function(onDone, onError) { |
| this.continueInstallButton_.addEventListener( |
| 'click', this.onOkClickedHandler_, false); |
| this.cancelInstallButton_.addEventListener( |
| 'click', this.onCancelClickedHandler_, false); |
| remoting.setMode(remoting.AppMode.HOST_INSTALL_PROMPT); |
| |
| var hostPackageUrl = |
| remoting.HostInstallDialog.hostDownloadUrls[navigator.platform]; |
| if (hostPackageUrl === undefined) { |
| this.onErrorHandler_(remoting.Error.CANCELLED); |
| return; |
| } |
| |
| // Start downloading the package. |
| if (remoting.isAppsV2) { |
| // TODO(jamiewalch): Use chrome.downloads when it is available to |
| // apps v2 (http://crbug.com/174046) |
| window.open(hostPackageUrl); |
| } else { |
| window.location = hostPackageUrl; |
| } |
| |
| /** @type {function():void} */ |
| this.onDoneHandler_ = onDone; |
| |
| /** @type {function(remoting.Error):void} */ |
| this.onErrorHandler_ = onError; |
| } |
| |
| /** |
| * In manual host installation, onDone handler must call this method if it |
| * detects that the host components are still unavailable. The same onDone |
| * and onError callbacks will be used when user clicks Ok or Cancel. |
| */ |
| remoting.HostInstallDialog.prototype.tryAgain = function() { |
| this.retryInstallButton_.addEventListener( |
| 'click', this.onRetryClickedHandler_.bind(this), false); |
| remoting.setMode(remoting.AppMode.HOST_INSTALL_PENDING); |
| this.continueInstallButton_.disabled = false; |
| this.cancelInstallButton_.disabled = false; |
| }; |
| |
| remoting.HostInstallDialog.prototype.onOkClicked_ = function() { |
| this.continueInstallButton_.removeEventListener( |
| 'click', this.onOkClickedHandler_, false); |
| this.cancelInstallButton_.removeEventListener( |
| 'click', this.onCancelClickedHandler_, false); |
| this.continueInstallButton_.disabled = true; |
| this.cancelInstallButton_.disabled = true; |
| |
| this.onDoneHandler_(); |
| } |
| |
| remoting.HostInstallDialog.prototype.onCancelClicked_ = function() { |
| this.continueInstallButton_.removeEventListener( |
| 'click', this.onOkClickedHandler_, false); |
| this.cancelInstallButton_.removeEventListener( |
| 'click', this.onCancelClickedHandler_, false); |
| this.onErrorHandler_(remoting.Error.CANCELLED); |
| } |
| |
| remoting.HostInstallDialog.prototype.onRetryClicked_ = function() { |
| this.retryInstallButton_.removeEventListener( |
| 'click', this.onRetryClickedHandler_.bind(this), false); |
| this.continueInstallButton_.addEventListener( |
| 'click', this.onOkClickedHandler_, false); |
| this.cancelInstallButton_.addEventListener( |
| 'click', this.onCancelClickedHandler_, false); |
| remoting.setMode(remoting.AppMode.HOST_INSTALL_PROMPT); |
| }; |