1ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 2ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// found in the LICENSE file. 45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)<include src="../../../../ui/login/screen.js"> 55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)<include src="../../../../ui/login/bubble.js"> 65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)<include src="../../../../ui/login/login_ui_tools.js"> 75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)<include src="../../../../ui/login/display_manager.js"> 85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)<include src="control_bar.js"> 95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)<include src="../../../../ui/login/account_picker/screen_account_picker.js"> 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)<include src="../../../../ui/login/account_picker/user_pod_row.js"> 115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)<include src="../../../../ui/login/resource_loader.js"> 125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)<include src="user_manager_tutorial.js"> 13ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 14ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochcr.define('cr.ui', function() { 15ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch var DisplayManager = cr.ui.login.DisplayManager; 16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) var UserManagerTutorial = cr.ui.login.UserManagerTutorial; 17ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 18ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch /** 19ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * Constructs an Out of box controller. It manages initialization of screens, 20ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * transitions, error messages display. 21ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * @extends {DisplayManager} 22ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * @constructor 23ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch */ 24ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch function Oobe() { 25ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 26ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 27ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch cr.addSingletonGetter(Oobe); 28ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 29ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch Oobe.prototype = { 30ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch __proto__: DisplayManager.prototype, 31ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch }; 32ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 33ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch /** 34ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * Shows the given screen. 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param {bool} showGuest Whether the 'Browse as Guest' button is displayed. 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param {bool} showAddPerson Whether the 'Add Person' button is displayed. 37ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch */ 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Oobe.showUserManagerScreen = function(showGuest, showAddPerson) { 39ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch Oobe.getInstance().showScreen({id: 'account-picker', 40ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch data: {disableAddUser: false}}); 41ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // The ChromeOS account-picker will hide the AddUser button if a user is 42ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // logged in and the screen is "locked", so we must re-enabled it 43ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch $('add-user-header-bar-item').hidden = false; 44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Hide control options if the user does not have the right permissions. 4603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) $('guest-user-button').hidden = !showGuest; 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci $('add-user-button').hidden = !showAddPerson; 4803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) $('login-header-bar').hidden = false; 4903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 500529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Disable the context menu, as the Print/Inspect element items don't 510529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // make sense when displayed as a widget. 520529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch document.addEventListener('contextmenu', function(e) {e.preventDefault();}); 530529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) var hash = window.location.hash; 55a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (hash && hash == '#tutorial') 56a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) UserManagerTutorial.startTutorial(); 57ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch }; 58ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 59ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch /** 60a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) * Open a new browser for the given profile. 61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) * @param {string} email The user's email, if signed in. 62a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) * @param {string} displayName The user's display name. 63ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch */ 64ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch Oobe.launchUser = function(email, displayName) { 65ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch chrome.send('launchUser', [email, displayName]); 66ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch }; 67ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 68ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch /** 69ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * Disables signin UI. 70ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch */ 71ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch Oobe.disableSigninUI = function() { 72ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch DisplayManager.disableSigninUI(); 73ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch }; 74ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 75ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch /** 76ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * Shows signin UI. 77ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * @param {string} opt_email An optional email for signin UI. 78ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch */ 79ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch Oobe.showSigninUI = function(opt_email) { 80ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch DisplayManager.showSigninUI(opt_email); 81ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch }; 82ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 83ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch /** 84a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) * Shows sign-in error bubble. 85a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) * @param {number} loginAttempts Number of login attemps tried. 86a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) * @param {string} message Error message to show. 87a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) * @param {string} link Text to use for help link. 88a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) * @param {number} helpId Help topic Id associated with help link. 89a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) */ 90a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) Oobe.showSignInError = function(loginAttempts, message, link, helpId) { 91a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) DisplayManager.showSignInError(loginAttempts, message, link, helpId); 92a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) }; 93a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 94a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) /** 95ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * Clears error bubble as well as optional menus that could be open. 96ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch */ 97ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch Oobe.clearErrors = function() { 98ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch DisplayManager.clearErrors(); 99ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch }; 100ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 101ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch /** 102ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * Clears password field in user-pod. 103ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch */ 104ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch Oobe.clearUserPodPassword = function() { 105ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch DisplayManager.clearUserPodPassword(); 106ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch }; 107ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 108ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch /** 109ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * Restores input focus to currently selected pod. 110ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch */ 111ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch Oobe.refocusCurrentPod = function() { 112ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch DisplayManager.refocusCurrentPod(); 113ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch }; 114ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 115a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) /** 116a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) * Show the user manager tutorial 117a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) * @param {string} email The user's email, if signed in. 118a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) * @param {string} displayName The user's display name. 119a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) */ 120a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Oobe.showUserManagerTutorial = function() { 121a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) UserManagerTutorial.startTutorial(); 122a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) }; 123a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 124ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // Export 125ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return { 126ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch Oobe: Oobe 127ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch }; 128ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch}); 129ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 130ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochcr.define('UserManager', function() { 131ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 'use strict'; 132ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 133ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch function initialize() { 134f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) cr.ui.login.DisplayManager.initialize(); 135a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) cr.ui.login.UserManagerTutorial.initialize(); 136ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch login.AccountPickerScreen.register(); 137ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch cr.ui.Bubble.decorate($('bubble')); 138ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch login.HeaderBar.decorate($('login-header-bar')); 13903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 14003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Hide the header bar until the showUserManagerMethod can apply function 14103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // parameters that affect widget visiblity. 14203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) $('login-header-bar').hidden = true; 1431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci chrome.send('userManagerInitialize', [window.location.hash]); 145ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 146ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 147ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // Return an object with all of the exports. 148ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return { 149ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch initialize: initialize 150ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch }; 151ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch}); 152ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 153ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochvar Oobe = cr.ui.Oobe; 154ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 155ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// Allow selection events on components with editable text (password field) 156ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// bug (http://code.google.com/p/chromium/issues/detail?id=125863) 157ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben MurdochdisableTextSelectAndDrag(function(e) { 158ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch var src = e.target; 159ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return src instanceof HTMLTextAreaElement || 160ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch src instanceof HTMLInputElement && 161ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch /text|password|search/.test(src.type); 162ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch}); 163ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 164ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochdocument.addEventListener('DOMContentLoaded', UserManager.initialize); 165