Handle authentication failures in the v2 app by restarting the app
[chromium-blink-merge.git] / remoting / webapp / base / js / auth_dialog.js
blobcdb62d056e3b9c54d2993f28479de8b2f47dbc23
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 /** @suppress {duplicate} */
6 var remoting = remoting || {};
8 (function() {
10 'use strict';
12 var instance_ = null;
14 /**
15  * @constructor
16  * @implements {remoting.WindowShape.ClientUI}
17  * @implements {remoting.Identity.ConsentDialog}
18  * @param {HTMLElement} rootElement The dialog DOM element.
19  * @private
20  */
21 remoting.AuthDialog = function(rootElement) {
22   /**
23    * @type {HTMLElement}
24    * @private
25    */
26   this.rootElement_ = rootElement;
28   /**
29    * @type {HTMLElement}
30    * @private
31    */
32   this.borderElement_ = rootElement.querySelector('#auth-dialog-border');
34   /**
35    * @type {HTMLElement}
36    * @private
37    */
38   this.authButton_ = rootElement.querySelector('#auth-button');
40   /**
41    * @type {base.Deferred}
42    * @private
43    */
44   this.onAuthButtonDeferred_ = null;
46   this.authButton_.addEventListener('click', this.onClick_.bind(this), false);
47   remoting.windowShape.addCallback(this);
50 /**
51  * @param {Array.<{left: number, top: number, width: number, height: number}>}
52  *     rects List of rectangles.
53  */
54 remoting.AuthDialog.prototype.addToRegion = function(rects) {
55   var rect =
56       /** @type {ClientRect} */(this.borderElement_.getBoundingClientRect());
57   rects.push({left: rect.left,
58               top: rect.top,
59               width: rect.width,
60               height: rect.height});
63 /** @private */
64 remoting.AuthDialog.prototype.onClick_ = function() {
65   this.rootElement_.hidden = true;
66   this.onAuthButtonDeferred_.resolve();
67   this.onAuthButtonDeferred_ = null;
68   remoting.windowShape.updateClientWindowShape();
71 /**
72  * @return {Promise} A Promise object that resolves when the user clicks on the
73  *   auth button.
74  */
75 remoting.AuthDialog.prototype.show = function() {
76   if (this.isVisible()) {
77     return Promise.reject('Auth dialog is already showing.');
78   }
79   this.rootElement_.hidden = false;
80   base.debug.assert(this.onAuthButtonDeferred_ === null);
81   remoting.windowShape.updateClientWindowShape();
82   this.onAuthButtonDeferred_ = new base.Deferred();
83   return this.onAuthButtonDeferred_.promise();
86 /**
87  * @return {boolean} whether the auth dialog is visible or not.
88  */
89 remoting.AuthDialog.prototype.isVisible = function() {
90   return !this.rootElement_.hidden;
93 /**
94  * @return {remoting.AuthDialog}
95  */
96 remoting.AuthDialog.getInstance = function() {
97   if (!instance_) {
98     var rootElement = document.getElementById('auth-dialog');
99     instance_ = new remoting.AuthDialog(rootElement);
100   }
101   return instance_;
104 })();