Disable view source for Developer Tools.
[chromium-blink-merge.git] / chrome / browser / resources / user_manager / control_bar.js
blob2fe4ac45c2fb38413c9b48de96f8d0e2b967a5a6
1 // Copyright 2013 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 /**
6  * @fileoverview Desktop User Chooser UI control bar implementation.
7  */
9 cr.define('login', function() {
10   /**
11    * Creates a header bar element.
12    * @constructor
13    * @extends {HTMLDivElement}
14    */
15   var HeaderBar = cr.ui.define('div');
17   HeaderBar.prototype = {
18     __proto__: HTMLDivElement.prototype,
20     // Whether guest button should be shown when header bar is in normal mode.
21     showGuest_: true,
23     // Current UI state of the sign-in screen.
24     signinUIState_: SIGNIN_UI_STATE.ACCOUNT_PICKER,
26     // Whether to show kiosk apps menu.
27     hasApps_: false,
29     /** @override */
30     decorate: function() {
31       $('add-user-button').addEventListener('click',
32           this.handleAddUserClick_);
33       $('cancel-add-user-button').addEventListener('click',
34           this.handleCancelAddUserClick_);
35       $('guest-user-header-bar-item').addEventListener('click',
36           this.handleGuestClick_);
37       $('guest-user-button').addEventListener('click',
38           this.handleGuestClick_);
39       this.updateUI_();
40     },
42     /**
43      * Tab index value for all button elements.
44      * @type {number}
45      */
46     set buttonsTabIndex(tabIndex) {
47       var buttons = this.getElementsByTagName('button');
48       for (var i = 0, button; button = buttons[i]; ++i) {
49         button.tabIndex = tabIndex;
50       }
51     },
53     /**
54      * Disables the header bar and all of its elements.
55      * @type {boolean}
56      */
57     set disabled(value) {
58       var buttons = this.getElementsByTagName('button');
59       for (var i = 0, button; button = buttons[i]; ++i)
60         if (!button.classList.contains('button-restricted'))
61           button.disabled = value;
62     },
64     /**
65      * Add user button click handler.
66      * @private
67      */
68     handleAddUserClick_: function(e) {
69       chrome.send('addUser');
70       // Prevent further propagation of click event. Otherwise, the click event
71       // handler of document object will set wallpaper to user's wallpaper when
72       // there is only one existing user. See http://crbug.com/166477
73       e.stopPropagation();
74     },
76     /**
77      * Cancel add user button click handler.
78      * @private
79      */
80     handleCancelAddUserClick_: function(e) {
81       // Let screen handle cancel itself if that is capable of doing so.
82       if (Oobe.getInstance().currentScreen &&
83           Oobe.getInstance().currentScreen.cancel) {
84         Oobe.getInstance().currentScreen.cancel();
85         return;
86       }
88       Oobe.showScreen({id: SCREEN_ACCOUNT_PICKER});
89       Oobe.resetSigninUI(true);
90     },
92     /**
93      * Guest button click handler.
94      * @private
95      */
96     handleGuestClick_: function(e) {
97       chrome.send('launchGuest');
98       e.stopPropagation();
99     },
101     /**
102      * If true then "Browse as Guest" button is shown.
103      * @type {boolean}
104      */
105     set showGuestButton(value) {
106       this.showGuest_ = value;
107       this.updateUI_();
108     },
110     /**
111      * Update current header bar UI.
112      * @type {number} state Current state of the sign-in screen
113      *                      (see SIGNIN_UI_STATE).
114      */
115     set signinUIState(state) {
116       this.signinUIState_ = state;
117       this.updateUI_();
118     },
120     /**
121      * Whether the Cancel button is enabled during Gaia sign-in.
122      * @type {boolean}
123      */
124     set allowCancel(value) {
125       this.allowCancel_ = value;
126       this.updateUI_();
127     },
129     /**
130      * Updates visibility state of action buttons.
131      * @private
132      */
133     updateUI_: function() {
134       $('add-user-button').hidden = false;
135       $('cancel-add-user-button').hidden = !this.allowCancel_;
136       $('guest-user-header-bar-item').hidden = false;
137       $('add-user-header-bar-item').hidden = false;
138     },
140     /**
141      * Animates Header bar to hide from the screen.
142      * @param {function()} callback will be called once animation is finished.
143      */
144     animateOut: function(callback) {
145       var launcher = this;
146       launcher.addEventListener(
147           'webkitTransitionEnd', function f(e) {
148             launcher.removeEventListener('webkitTransitionEnd', f);
149             callback();
150           });
151       this.classList.remove('login-header-bar-animate-slow');
152       this.classList.add('login-header-bar-animate-fast');
153       this.classList.add('login-header-bar-hidden');
154     },
156     /**
157      * Animates Header bar to slowly appear on the screen.
158      */
159     animateIn: function() {
160       this.classList.remove('login-header-bar-animate-fast');
161       this.classList.add('login-header-bar-animate-slow');
162       this.classList.remove('login-header-bar-hidden');
163     },
164   };
166   /**
167    * Convenience wrapper of animateOut.
168    */
169   HeaderBar.animateOut = function(callback) {
170     $('login-header-bar').animateOut(callback);
171   };
173   /**
174    * Convenience wrapper of animateIn.
175    */
176   HeaderBar.animateIn = function() {
177     $('login-header-bar').animateIn();
178   }
180   return {
181     HeaderBar: HeaderBar
182   };