| // Copyright (c) 2012 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. |
| |
| /** |
| * @fileoverview Login UI header bar implementation. |
| */ |
| |
| cr.define('login', function() { |
| /** |
| * Creates a header bar element. |
| * @constructor |
| * @extends {HTMLDivElement} |
| */ |
| var HeaderBar = cr.ui.define('div'); |
| |
| HeaderBar.prototype = { |
| __proto__: HTMLDivElement.prototype, |
| |
| // Whether guest button should be shown when header bar is in normal mode. |
| showGuest_: false, |
| |
| // Current UI state of the sign-in screen. |
| signinUIState_: SIGNIN_UI_STATE.HIDDEN, |
| |
| // Whether to show kiosk apps menu. |
| hasApps_: false, |
| |
| /** @override */ |
| decorate: function() { |
| $('shutdown-header-bar-item').addEventListener('click', |
| this.handleShutdownClick_); |
| $('shutdown-button').addEventListener('click', |
| this.handleShutdownClick_); |
| $('add-user-button').addEventListener('click', |
| this.handleAddUserClick_); |
| $('cancel-add-user-button').addEventListener('click', |
| this.handleCancelAddUserClick_); |
| $('guest-user-header-bar-item').addEventListener('click', |
| this.handleGuestClick_); |
| $('guest-user-button').addEventListener('click', |
| this.handleGuestClick_); |
| $('sign-out-user-button').addEventListener('click', |
| this.handleSignoutClick_); |
| $('cancel-multiple-sign-in-button').addEventListener('click', |
| this.handleCancelMultipleSignInClick_); |
| if (Oobe.getInstance().displayType == DISPLAY_TYPE.LOGIN || |
| Oobe.getInstance().displayType == DISPLAY_TYPE.OOBE) |
| login.AppsMenuButton.decorate($('show-apps-button')); |
| }, |
| |
| /** |
| * Tab index value for all button elements. |
| * @type {number} |
| */ |
| set buttonsTabIndex(tabIndex) { |
| var buttons = this.getElementsByTagName('button'); |
| for (var i = 0, button; button = buttons[i]; ++i) { |
| button.tabIndex = tabIndex; |
| } |
| }, |
| |
| /** |
| * Disables the header bar and all of its elements. |
| * @type {boolean} |
| */ |
| set disabled(value) { |
| var buttons = this.getElementsByTagName('button'); |
| for (var i = 0, button; button = buttons[i]; ++i) |
| if (!button.classList.contains('button-restricted')) |
| button.disabled = value; |
| }, |
| |
| /** |
| * Add user button click handler. |
| * @private |
| */ |
| handleAddUserClick_: function(e) { |
| Oobe.showSigninUI(); |
| // Prevent further propagation of click event. Otherwise, the click event |
| // handler of document object will set wallpaper to user's wallpaper when |
| // there is only one existing user. See http://crbug.com/166477 |
| e.stopPropagation(); |
| }, |
| |
| /** |
| * Cancel add user button click handler. |
| * @private |
| */ |
| handleCancelAddUserClick_: function(e) { |
| // Let screen handle cancel itself if that is capable of doing so. |
| if (Oobe.getInstance().currentScreen && |
| Oobe.getInstance().currentScreen.cancel) { |
| Oobe.getInstance().currentScreen.cancel(); |
| return; |
| } |
| |
| $('pod-row').loadLastWallpaper(); |
| |
| Oobe.showScreen({id: SCREEN_ACCOUNT_PICKER}); |
| Oobe.resetSigninUI(true); |
| }, |
| |
| /** |
| * Guest button click handler. |
| * @private |
| */ |
| handleGuestClick_: function(e) { |
| Oobe.disableSigninUI(); |
| chrome.send('launchIncognito'); |
| e.stopPropagation(); |
| }, |
| |
| /** |
| * Sign out button click handler. |
| * @private |
| */ |
| handleSignoutClick_: function(e) { |
| this.disabled = true; |
| chrome.send('signOutUser'); |
| e.stopPropagation(); |
| }, |
| |
| /** |
| * Shutdown button click handler. |
| * @private |
| */ |
| handleShutdownClick_: function(e) { |
| chrome.send('shutdownSystem'); |
| e.stopPropagation(); |
| }, |
| |
| /** |
| * Cancel user adding button handler. |
| * @private |
| */ |
| handleCancelMultipleSignInClick_: function(e) { |
| chrome.send('cancelUserAdding'); |
| e.stopPropagation(); |
| }, |
| |
| /** |
| * If true then "Browse as Guest" button is shown. |
| * @type {boolean} |
| */ |
| set showGuestButton(value) { |
| this.showGuest_ = value; |
| this.updateUI_(); |
| }, |
| |
| /** |
| * Update current header bar UI. |
| * @type {number} state Current state of the sign-in screen |
| * (see SIGNIN_UI_STATE). |
| */ |
| set signinUIState(state) { |
| this.signinUIState_ = state; |
| this.updateUI_(); |
| }, |
| |
| /** |
| * Whether the Cancel button is enabled during Gaia sign-in. |
| * @type {boolean} |
| */ |
| set allowCancel(value) { |
| this.allowCancel_ = value; |
| this.updateUI_(); |
| }, |
| |
| /** |
| * Update whether there are kiosk apps. |
| * @type {boolean} |
| */ |
| set hasApps(value) { |
| this.hasApps_ = value; |
| this.updateUI_(); |
| }, |
| |
| /** |
| * Updates visibility state of action buttons. |
| * @private |
| */ |
| updateUI_: function() { |
| var gaiaIsActive = (this.signinUIState_ == SIGNIN_UI_STATE.GAIA_SIGNIN); |
| var accountPickerIsActive = |
| (this.signinUIState_ == SIGNIN_UI_STATE.ACCOUNT_PICKER); |
| var managedUserCreationDialogIsActive = |
| (this.signinUIState_ == SIGNIN_UI_STATE.MANAGED_USER_CREATION_FLOW); |
| var wrongHWIDWarningIsActive = |
| (this.signinUIState_ == SIGNIN_UI_STATE.WRONG_HWID_WARNING); |
| var isMultiProfilesUI = |
| (Oobe.getInstance().displayType == DISPLAY_TYPE.USER_ADDING); |
| |
| $('add-user-button').hidden = !accountPickerIsActive || isMultiProfilesUI; |
| $('cancel-add-user-button').hidden = accountPickerIsActive || |
| !this.allowCancel_ || |
| wrongHWIDWarningIsActive || |
| isMultiProfilesUI; |
| $('guest-user-header-bar-item').hidden = gaiaIsActive || |
| managedUserCreationDialogIsActive || |
| !this.showGuest_ || |
| wrongHWIDWarningIsActive || |
| isMultiProfilesUI; |
| $('add-user-header-bar-item').hidden = |
| $('add-user-button').hidden && $('cancel-add-user-button').hidden; |
| $('apps-header-bar-item').hidden = !this.hasApps_ || |
| (!gaiaIsActive && !accountPickerIsActive); |
| $('cancel-multiple-sign-in-item').hidden = !isMultiProfilesUI; |
| |
| if (!$('apps-header-bar-item').hidden) |
| $('show-apps-button').didShow(); |
| }, |
| |
| /** |
| * Animates Header bar to hide from the screen. |
| * @param {function()} callback will be called once animation is finished. |
| */ |
| animateOut: function(callback) { |
| var launcher = this; |
| launcher.addEventListener( |
| 'webkitTransitionEnd', function f(e) { |
| launcher.removeEventListener('webkitTransitionEnd', f); |
| callback(); |
| }); |
| this.classList.remove('login-header-bar-animate-slow'); |
| this.classList.add('login-header-bar-animate-fast'); |
| this.classList.add('login-header-bar-hidden'); |
| }, |
| |
| /** |
| * Animates Header bar to slowly appear on the screen. |
| */ |
| animateIn: function() { |
| this.classList.remove('login-header-bar-animate-fast'); |
| this.classList.add('login-header-bar-animate-slow'); |
| this.classList.remove('login-header-bar-hidden'); |
| }, |
| }; |
| |
| /** |
| * Convenience wrapper of animateOut. |
| */ |
| HeaderBar.animateOut = function(callback) { |
| $('login-header-bar').animateOut(callback); |
| }; |
| |
| /** |
| * Convenience wrapper of animateIn. |
| */ |
| HeaderBar.animateIn = function() { |
| $('login-header-bar').animateIn(); |
| } |
| |
| return { |
| HeaderBar: HeaderBar |
| }; |
| }); |