Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / remoting / webapp / crd / js / host_install_dialog.js
blobd10297fa74c98377be91e1218a6bf66e8631c158
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
3 // found in the LICENSE file.
5 'use strict';
7 /** @suppress {duplicate} */
8 var remoting = remoting || {};
10 /**
11  * HostInstallDialog prompts the user to install host components.
12  *
13  * @constructor
14  */
15 remoting.HostInstallDialog = function() {
16   this.continueInstallButton_ = document.getElementById(
17       'host-install-continue');
18   this.cancelInstallButton_ = document.getElementById(
19       'host-install-dismiss');
20   this.retryInstallButton_ = document.getElementById(
21       'host-install-retry');
23   this.onOkClickedHandler_ = this.onOkClicked_.bind(this);
24   this.onCancelClickedHandler_ = this.onCancelClicked_.bind(this);
25   this.onRetryClickedHandler_ = this.onRetryClicked_.bind(this);
27   this.continueInstallButton_.disabled = false;
28   this.cancelInstallButton_.disabled = false;
30   /** @private {function():void} */
31   this.onDoneHandler_ = function() {};
33   /** @private {function(!remoting.Error):void} */
34   this.onErrorHandler_ = function(error) {};
36   /** @private {remoting.HostInstaller} */
37   this.hostInstaller_ = new remoting.HostInstaller();
40 /**
41  * Starts downloading host components and shows installation prompt.
42  *
43  * @param {function():void} onDone Callback called when user clicks Ok,
44  * presumably after installing the host. The handler must verify that the host
45  * has been installed and call tryAgain() otherwise.
46  * @param {function(!remoting.Error):void} onError Callback called when user
47  *    clicks Cancel button or there is some other unexpected error.
48  * @return {void}
49  */
50 remoting.HostInstallDialog.prototype.show = function(onDone, onError) {
51   this.continueInstallButton_.addEventListener(
52       'click', this.onOkClickedHandler_, false);
53   this.cancelInstallButton_.addEventListener(
54       'click', this.onCancelClickedHandler_, false);
55   remoting.setMode(remoting.AppMode.HOST_INSTALL_PROMPT);
57   this.onDoneHandler_ = onDone;
59   this.onErrorHandler_ = onError;
61   /** @type {remoting.HostInstaller} */
62   var hostInstaller = new remoting.HostInstaller();
64   /** @type {remoting.HostInstallDialog} */
65   var that = this;
67   this.hostInstaller_.downloadAndWaitForInstall().then(function() {
68     that.continueInstallButton_.click();
69     that.hostInstaller_.cancel();
70   }, function(){
71     that.onErrorHandler_(new remoting.Error(remoting.Error.Tag.CANCELLED));
72     that.hostInstaller_.cancel();
73   });
76 /**
77  * In manual host installation, onDone handler must call this method if it
78  * detects that the host components are still unavailable. The same onDone
79  * and onError callbacks will be used when user clicks Ok or Cancel.
80  */
81 remoting.HostInstallDialog.prototype.tryAgain = function() {
82   this.retryInstallButton_.addEventListener(
83       'click', this.onRetryClickedHandler_.bind(this), false);
84   remoting.setMode(remoting.AppMode.HOST_INSTALL_PENDING);
85   this.continueInstallButton_.disabled = false;
86   this.cancelInstallButton_.disabled = false;
89 remoting.HostInstallDialog.prototype.onOkClicked_ = function() {
90   this.continueInstallButton_.removeEventListener(
91       'click', this.onOkClickedHandler_, false);
92   this.cancelInstallButton_.removeEventListener(
93       'click', this.onCancelClickedHandler_, false);
94   this.continueInstallButton_.disabled = true;
95   this.cancelInstallButton_.disabled = true;
97   this.onDoneHandler_();
100 remoting.HostInstallDialog.prototype.onCancelClicked_ = function() {
101   this.continueInstallButton_.removeEventListener(
102       'click', this.onOkClickedHandler_, false);
103   this.cancelInstallButton_.removeEventListener(
104       'click', this.onCancelClickedHandler_, false);
105   this.hostInstaller_.cancel();
106   this.onErrorHandler_(new remoting.Error(remoting.Error.Tag.CANCELLED));
109 remoting.HostInstallDialog.prototype.onRetryClicked_ = function() {
110   this.retryInstallButton_.removeEventListener(
111       'click', this.onRetryClickedHandler_.bind(this), false);
112   this.continueInstallButton_.addEventListener(
113       'click', this.onOkClickedHandler_, false);
114   this.cancelInstallButton_.addEventListener(
115       'click', this.onCancelClickedHandler_, false);
116   remoting.setMode(remoting.AppMode.HOST_INSTALL_PROMPT);