| // Copyright 2013 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 Common OOBE controller methods. |
| */ |
| |
| <include src="screen.js"></include> |
| <include src="../user_images_grid.js"></include> |
| <include src="apps_menu.js"></include> |
| <include src="bubble.js"></include> |
| <include src="display_manager.js"></include> |
| <include src="header_bar.js"></include> |
| <include src="network_dropdown.js"></include> |
| <include src="oobe_screen_reset.js"></include> |
| <include src="oobe_screen_autolaunch.js"></include> |
| <include src="oobe_screen_enable_kiosk.js"></include> |
| <include src="oobe_screen_terms_of_service.js"></include> |
| <include src="oobe_screen_user_image.js"></include> |
| <include src="screen_account_picker.js"></include> |
| <include src="screen_app_launch_splash.js"></include> |
| <include src="screen_error_message.js"></include> |
| <include src="screen_gaia_signin.js"></include> |
| <include src="screen_locally_managed_user_creation.js"></include> |
| <include src="screen_password_changed.js"></include> |
| <include src="screen_tpm_error.js"></include> |
| <include src="screen_wrong_hwid.js"></include> |
| <include src="screen_confirm_password.js"></include> |
| <include src="screen_message_box.js"></include> |
| <include src="user_pod_row.js"></include> |
| <include src="resource_loader.js"></include> |
| |
| cr.define('cr.ui', function() { |
| var DisplayManager = cr.ui.login.DisplayManager; |
| |
| /** |
| * Constructs an Out of box controller. It manages initialization of screens, |
| * transitions, error messages display. |
| * @extends {DisplayManager} |
| * @constructor |
| */ |
| function Oobe() { |
| } |
| |
| cr.addSingletonGetter(Oobe); |
| |
| Oobe.prototype = { |
| __proto__: DisplayManager.prototype, |
| }; |
| |
| /** |
| * Handle accelerators. These are passed from native code instead of a JS |
| * event handler in order to make sure that embedded iframes cannot swallow |
| * them. |
| * @param {string} name Accelerator name. |
| */ |
| Oobe.handleAccelerator = function(name) { |
| Oobe.getInstance().handleAccelerator(name); |
| }; |
| |
| /** |
| * Shows the given screen. |
| * @param {Object} screen Screen params dict, e.g. {id: screenId, data: data} |
| */ |
| Oobe.showScreen = function(screen) { |
| Oobe.getInstance().showScreen(screen); |
| }; |
| |
| /** |
| * Updates version label visibilty. |
| * @param {boolean} show True if version label should be visible. |
| */ |
| Oobe.showVersion = function(show) { |
| Oobe.getInstance().showVersion(show); |
| }; |
| |
| /** |
| * Update body class to switch between OOBE UI and Login UI. |
| */ |
| Oobe.showOobeUI = function(showOobe) { |
| if (showOobe) { |
| document.body.classList.add('oobe-display'); |
| } else { |
| document.body.classList.remove('oobe-display'); |
| Oobe.getInstance().prepareForLoginDisplay_(); |
| } |
| |
| // Don't show header bar for OOBE. |
| Oobe.getInstance().headerHidden = showOobe; |
| }; |
| |
| /** |
| * Enables keyboard driven flow. |
| */ |
| Oobe.enableKeyboardFlow = function(value) { |
| // Don't show header bar for OOBE. |
| Oobe.getInstance().forceKeyboardFlow = value; |
| }; |
| |
| /** |
| * Disables signin UI. |
| */ |
| Oobe.disableSigninUI = function() { |
| DisplayManager.disableSigninUI(); |
| }; |
| |
| /** |
| * Shows signin UI. |
| * @param {string} opt_email An optional email for signin UI. |
| */ |
| Oobe.showSigninUI = function(opt_email) { |
| DisplayManager.showSigninUI(opt_email); |
| }; |
| |
| /** |
| * Resets sign-in input fields. |
| * @param {boolean} forceOnline Whether online sign-in should be forced. |
| * If |forceOnline| is false previously used sign-in type will be used. |
| */ |
| Oobe.resetSigninUI = function(forceOnline) { |
| DisplayManager.resetSigninUI(forceOnline); |
| }; |
| |
| /** |
| * Shows sign-in error bubble. |
| * @param {number} loginAttempts Number of login attemps tried. |
| * @param {string} message Error message to show. |
| * @param {string} link Text to use for help link. |
| * @param {number} helpId Help topic Id associated with help link. |
| */ |
| Oobe.showSignInError = function(loginAttempts, message, link, helpId) { |
| DisplayManager.showSignInError(loginAttempts, message, link, helpId); |
| }; |
| |
| /** |
| * Shows password changed screen that offers migration. |
| * @param {boolean} showError Whether to show the incorrect password error. |
| */ |
| Oobe.showPasswordChangedScreen = function(showError) { |
| DisplayManager.showPasswordChangedScreen(showError); |
| }; |
| |
| /** |
| * Shows dialog to create managed user. |
| */ |
| Oobe.showManagedUserCreationScreen = function() { |
| DisplayManager.showManagedUserCreationScreen(); |
| }; |
| |
| /** |
| * Shows TPM error screen. |
| */ |
| Oobe.showTpmError = function() { |
| DisplayManager.showTpmError(); |
| }; |
| |
| /** |
| * Clears error bubble as well as optional menus that could be open. |
| */ |
| Oobe.clearErrors = function() { |
| var accessibilityMenu = $('accessibility-menu'); |
| if (accessibilityMenu) |
| accessibilityMenu.hide(); |
| DisplayManager.clearErrors(); |
| }; |
| |
| /** |
| * Displays animations on successful authentication, that have to happen |
| * before login UI is dismissed. |
| */ |
| Oobe.animateAuthenticationSuccess = function() { |
| login.HeaderBar.animateOut(function() { |
| chrome.send('unlockOnLoginSuccess'); |
| }); |
| }; |
| |
| /** |
| * Displays animations that have to happen once login UI is fully displayed. |
| */ |
| Oobe.animateOnceFullyDisplayed = function() { |
| login.HeaderBar.animateIn(); |
| }; |
| |
| /** |
| * Handles login success notification. |
| */ |
| Oobe.onLoginSuccess = function(username) { |
| if (Oobe.getInstance().currentScreen.id == SCREEN_ACCOUNT_PICKER) { |
| // TODO(nkostylev): Enable animation back when session start jank |
| // is reduced. See http://crosbug.com/11116 http://crosbug.com/18307 |
| // $('pod-row').startAuthenticatedAnimation(); |
| } |
| }; |
| |
| /** |
| * Sets text content for a div with |labelId|. |
| * @param {string} labelId Id of the label div. |
| * @param {string} labelText Text for the label. |
| */ |
| Oobe.setLabelText = function(labelId, labelText) { |
| DisplayManager.setLabelText(labelId, labelText); |
| }; |
| |
| /** |
| * Sets the text content of the enterprise info message. |
| * If the text is empty, the entire notification will be hidden. |
| * @param {string} messageText The message text. |
| */ |
| Oobe.setEnterpriseInfo = function(messageText) { |
| DisplayManager.setEnterpriseInfo(messageText); |
| }; |
| |
| /** |
| * Updates the device requisition string shown in the requisition prompt. |
| * @param {string} requisition The device requisition. |
| */ |
| Oobe.updateDeviceRequisition = function(requisition) { |
| Oobe.getInstance().updateDeviceRequisition(requisition); |
| }; |
| |
| /** |
| * Enforces focus on user pod of locked user. |
| */ |
| Oobe.forceLockedUserPodFocus = function() { |
| login.AccountPickerScreen.forceLockedUserPodFocus(); |
| }; |
| |
| /** |
| * Clears password field in user-pod. |
| */ |
| Oobe.clearUserPodPassword = function() { |
| DisplayManager.clearUserPodPassword(); |
| }; |
| |
| /** |
| * Restores input focus to currently selected pod. |
| */ |
| Oobe.refocusCurrentPod = function() { |
| DisplayManager.refocusCurrentPod(); |
| }; |
| |
| /** |
| * Login for autotests. |
| * @param {string} username Login username. |
| * @param {string} password Login password. |
| */ |
| Oobe.loginForTesting = function(username, password) { |
| chrome.send('skipToLoginForTesting'); |
| Oobe.showSigninUI(username); |
| chrome.send('completeLogin', [username, password]); |
| }; |
| |
| /** |
| * Authenticate for autotests. |
| * @param {string} username Login username. |
| * @param {string} password Login password. |
| */ |
| Oobe.authenticateForTesting = function(username, password) { |
| chrome.send('authenticateUser', [username, password]); |
| }; |
| |
| // Export |
| return { |
| Oobe: Oobe |
| }; |
| }); |
| |
| var Oobe = cr.ui.Oobe; |
| |
| // Allow selection events on components with editable text (password field) |
| // bug (http://code.google.com/p/chromium/issues/detail?id=125863) |
| disableTextSelectAndDrag(function(e) { |
| var src = e.target; |
| return src instanceof HTMLTextAreaElement || |
| src instanceof HTMLInputElement && |
| /text|password|search/.test(src.type); |
| }); |
| |
| // Register assets for async loading. |
| [{ |
| id: SCREEN_OOBE_ENROLLMENT, |
| html: [{ url: 'chrome://oobe/enrollment.html', targetID: 'inner-container' }], |
| css: ['chrome://oobe/enrollment.css'], |
| js: ['chrome://oobe/enrollment.js'] |
| }].forEach(cr.ui.login.ResourceLoader.registerAssets); |
| |
| document.addEventListener('DOMContentLoaded', function() { |
| 'use strict'; |
| |
| // Immediately load async assets. |
| // TODO(dconnelly): remove this at some point and only load as needed. |
| // See crbug.com/236426 |
| cr.ui.login.ResourceLoader.loadAssets(SCREEN_OOBE_ENROLLMENT, function() { |
| // This screen is async-loaded so we manually trigger i18n processing. |
| i18nTemplate.process($('oauth-enrollment'), loadTimeData); |
| // Delayed binding since this isn't defined yet. |
| login.OAuthEnrollmentScreen.register(); |
| }); |
| |
| // Delayed binding since this isn't defined yet. |
| cr.ui.Oobe.initialize(); |
| }); |