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 cr.define('options', function() {
6 var OptionsPage = options.OptionsPage;
7 var ArrayDataModel = cr.ui.ArrayDataModel;
10 * ManagedUserImportOverlay class.
11 * Encapsulated handling of the 'Import existing managed user' overlay page.
15 function ManagedUserImportOverlay() {
16 var title = loadTimeData.getString('managedUserImportTitle');
17 OptionsPage.call(this, 'managedUserImport',
18 title, 'managed-user-import');
21 cr.addSingletonGetter(ManagedUserImportOverlay);
23 ManagedUserImportOverlay.prototype = {
24 // Inherit from OptionsPage.
25 __proto__: OptionsPage.prototype,
28 canShowPage: function() {
29 return !BrowserOptions.getCurrentProfile().isManaged;
33 * Initialize the page.
35 initializePage: function() {
36 // Call base class implementation to start preference initialization.
37 OptionsPage.prototype.initializePage.call(this);
39 var managedUserList = $('managed-user-list');
40 options.managedUserOptions.ManagedUserList.decorate(managedUserList);
42 var avatarGrid = $('select-avatar-grid');
43 options.ProfilesIconGrid.decorate(avatarGrid);
44 var avatarIcons = loadTimeData.getValue('avatarIcons');
45 avatarGrid.dataModel = new ArrayDataModel(avatarIcons);
47 managedUserList.addEventListener('change', function(event) {
48 var managedUser = managedUserList.selectedItem;
52 $('managed-user-import-ok').disabled =
53 managedUserList.selectedItem.onCurrentDevice;
57 $('managed-user-import-cancel').onclick = function(event) {
58 OptionsPage.closeOverlay();
59 self.updateImportInProgress_(false);
61 // 'cancelCreateProfile' is handled by CreateProfileHandler.
62 chrome.send('cancelCreateProfile');
65 $('managed-user-import-ok').onclick =
66 this.showAvatarGridOrSubmit_.bind(this);
68 $('create-new-user-link').onclick = function(event) {
69 OptionsPage.closeOverlay();
70 OptionsPage.navigateToPage('createProfile');
77 didShowPage: function() {
78 chrome.send('requestManagedUserImportUpdate');
80 this.updateImportInProgress_(false);
81 $('managed-user-import-error-bubble').hidden = true;
82 $('managed-user-import-ok').disabled = true;
83 $('select-avatar-grid').hidden = true;
84 $('managed-user-list').hidden = false;
86 $('managed-user-import-ok').textContent =
87 loadTimeData.getString('managedUserImportOk');
88 $('managed-user-import-text').textContent =
89 loadTimeData.getString('managedUserImportText');
90 $('managed-user-import-title').textContent =
91 loadTimeData.getString('managedUserImportTitle');
95 * Called when the user clicks the "OK" button. In case the managed
96 * user being imported has no avatar in sync, it shows the avatar
97 * icon grid. In case the avatar grid is visible or the managed user
98 * already has an avatar stored in sync, it proceeds with importing
102 showAvatarGridOrSubmit_: function() {
103 var managedUser = $('managed-user-list').selectedItem;
107 $('managed-user-import-error-bubble').hidden = true;
109 if ($('select-avatar-grid').hidden && managedUser.needAvatar) {
110 this.showAvatarGridHelper_();
114 var avatarUrl = managedUser.needAvatar ?
115 $('select-avatar-grid').selectedItem : managedUser.iconURL;
117 this.updateImportInProgress_(true);
119 // 'createProfile' is handled by CreateProfileHandler.
120 chrome.send('createProfile', [managedUser.name, avatarUrl,
121 false, true, managedUser.id]);
125 * Hides the 'managed user list' and shows the avatar grid instead.
126 * It also updates the overlay text and title to instruct the user
127 * to choose an avatar for the supervised user.
130 showAvatarGridHelper_: function() {
131 $('managed-user-list').hidden = true;
132 $('select-avatar-grid').hidden = false;
133 $('select-avatar-grid').redraw();
134 $('select-avatar-grid').selectedItem =
135 loadTimeData.getValue('avatarIcons')[0];
137 $('managed-user-import-ok').textContent =
138 loadTimeData.getString('managedUserSelectAvatarOk');
139 $('managed-user-import-text').textContent =
140 loadTimeData.getString('managedUserSelectAvatarText');
141 $('managed-user-import-title').textContent =
142 loadTimeData.getString('managedUserSelectAvatarTitle');
146 * Updates the UI according to the importing state.
147 * @param {boolean} inProgress True to indicate that
148 * importing is in progress and false otherwise.
151 updateImportInProgress_: function(inProgress) {
152 $('managed-user-import-ok').disabled = inProgress;
153 $('managed-user-list').disabled = inProgress;
154 $('select-avatar-grid').disabled = inProgress;
155 $('create-new-user-link').disabled = inProgress;
156 $('managed-user-import-throbber').hidden = !inProgress;
160 * Adds all the existing |managedUsers| to the list. If |managedUsers|
161 * is undefined, then the list is cleared.
162 * @param {Array.<Object>} managedUsers An array of managed user objects.
163 * Each object is of the form:
165 * id: "Managed User ID",
166 * name: "Managed User Name",
167 * iconURL: "chrome://path/to/icon/image",
168 * onCurrentDevice: true or false,
169 * needAvatar: true or false
173 receiveExistingManagedUsers_: function(managedUsers) {
175 $('managed-user-list').dataModel = null;
179 managedUsers.sort(function(a, b) {
180 return a.name.localeCompare(b.name);
183 $('managed-user-list').dataModel = new ArrayDataModel(managedUsers);
184 if (managedUsers.length == 0)
185 this.onError_(loadTimeData.getString('noExistingManagedUsers'));
191 hideErrorBubble_: function() {
192 $('managed-user-import-error-bubble').hidden = true;
196 * Displays an error message if an error occurs while
197 * importing a managed user.
198 * Called by BrowserOptions via the BrowserOptionsHandler.
199 * @param {string} error The error message to display.
202 onError_: function(error) {
203 var errorBubble = $('managed-user-import-error-bubble');
204 errorBubble.hidden = false;
205 errorBubble.textContent = error;
206 this.updateImportInProgress_(false);
210 * Closes the overlay if importing the managed user was successful.
213 onSuccess_: function() {
214 this.updateImportInProgress_(false);
215 OptionsPage.closeOverlay();
219 // Forward public APIs to private implementations.
224 'receiveExistingManagedUsers',
225 ].forEach(function(name) {
226 ManagedUserImportOverlay[name] = function() {
227 var instance = ManagedUserImportOverlay.getInstance();
228 return instance[name + '_'].apply(instance, arguments);
234 ManagedUserImportOverlay: ManagedUserImportOverlay,