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