// 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); };