Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(776)

Side by Side Diff: chrome/browser/resources/options/manage_profile_overlay.js

Issue 15734006: Restructure user-creation flow and surface errors (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Fix Mac browser test Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 cr.define('options', function() { 5 cr.define('options', function() {
6 var OptionsPage = options.OptionsPage; 6 var OptionsPage = options.OptionsPage;
7 var ArrayDataModel = cr.ui.ArrayDataModel; 7 var ArrayDataModel = cr.ui.ArrayDataModel;
8 8
9 /** 9 /**
10 * ManageProfileOverlay class 10 * ManageProfileOverlay class
(...skipping 30 matching lines...) Expand all
41 OptionsPage.prototype.initializePage.call(this); 41 OptionsPage.prototype.initializePage.call(this);
42 42
43 var self = this; 43 var self = this;
44 options.ProfilesIconGrid.decorate($('manage-profile-icon-grid')); 44 options.ProfilesIconGrid.decorate($('manage-profile-icon-grid'));
45 options.ProfilesIconGrid.decorate($('create-profile-icon-grid')); 45 options.ProfilesIconGrid.decorate($('create-profile-icon-grid'));
46 self.registerCommonEventHandlers_('create', 46 self.registerCommonEventHandlers_('create',
47 self.submitCreateProfile_.bind(self)); 47 self.submitCreateProfile_.bind(self));
48 self.registerCommonEventHandlers_('manage', 48 self.registerCommonEventHandlers_('manage',
49 self.submitManageChanges_.bind(self)); 49 self.submitManageChanges_.bind(self));
50 50
51 // Override the create-profile-ok handler, to avoid closing the overlay
52 // until we finish creating the profile.
53 $('create-profile-ok').onclick = function(event) {
54 ManageProfileOverlay.getInstance().hideErrorBubble_('create');
55 $('create-profile-ok').disabled = true;
56 self.submitCreateProfile_();
57 };
58
51 if (loadTimeData.getBoolean('managedUsersEnabled')) { 59 if (loadTimeData.getBoolean('managedUsersEnabled')) {
52 $('create-profile-limited-container').hidden = false; 60 $('create-profile-limited-container').hidden = false;
53 } 61 }
54 $('manage-profile-cancel').onclick = 62 $('manage-profile-cancel').onclick =
55 $('delete-profile-cancel').onclick = 63 $('delete-profile-cancel').onclick =
56 $('create-profile-cancel').onclick = function(event) { 64 $('create-profile-cancel').onclick = function(event) {
57 OptionsPage.closeOverlay(); 65 OptionsPage.closeOverlay();
58 }; 66 };
59 $('delete-profile-ok').onclick = function(event) { 67 $('delete-profile-ok').onclick = function(event) {
60 OptionsPage.closeOverlay(); 68 OptionsPage.closeOverlay();
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
222 $('add-shortcut-button').hidden = hasShortcuts; 230 $('add-shortcut-button').hidden = hasShortcuts;
223 $('remove-shortcut-button').hidden = !hasShortcuts; 231 $('remove-shortcut-button').hidden = !hasShortcuts;
224 }, 232 },
225 233
226 /** 234 /**
227 * Display the error bubble, with |errorText| in the bubble. 235 * Display the error bubble, with |errorText| in the bubble.
228 * @param {string} errorText The localized string id to display as an error. 236 * @param {string} errorText The localized string id to display as an error.
229 * @param {string} mode A label that specifies the type of dialog 237 * @param {string} mode A label that specifies the type of dialog
230 * box which is currently being viewed (i.e. 'create' or 238 * box which is currently being viewed (i.e. 'create' or
231 * 'manage'). 239 * 'manage').
240 * @param {boolean} disableOKButton True if the dialog's OK button should be
241 * disabled when the error bubble is shown. It will be re-enabled when
242 * the error bubble is hidden.
232 * @private 243 * @private
233 */ 244 */
234 showErrorBubble_: function(errorText, mode) { 245 showErrorBubble_: function(errorText, mode, disableOKButton) {
235 var nameErrorEl = $(mode + '-profile-error-bubble'); 246 var nameErrorEl = $(mode + '-profile-error-bubble');
236 nameErrorEl.hidden = false; 247 nameErrorEl.hidden = false;
237 nameErrorEl.textContent = loadTimeData.getString(errorText); 248 nameErrorEl.textContent = loadTimeData.getString(errorText);
238 249
239 $(mode + '-profile-ok').disabled = true; 250 if (disableOKButton)
251 $(mode + '-profile-ok').disabled = true;
240 }, 252 },
241 253
242 /** 254 /**
243 * Hide the error bubble. 255 * Hide the error bubble.
244 * @param {string} mode A label that specifies the type of dialog 256 * @param {string} mode A label that specifies the type of dialog
245 * box which is currently being viewed (i.e. 'create' or 257 * box which is currently being viewed (i.e. 'create' or
246 * 'manage'). 258 * 'manage').
247 * @private 259 * @private
248 */ 260 */
249 hideErrorBubble_: function(mode) { 261 hideErrorBubble_: function(mode) {
250 $(mode + '-profile-error-bubble').hidden = true; 262 $(mode + '-profile-error-bubble').hidden = true;
251 $(mode + '-profile-ok').disabled = false; 263 $(mode + '-profile-ok').disabled = false;
252 }, 264 },
253 265
254 /** 266 /**
255 * oninput callback for <input> field. 267 * oninput callback for <input> field.
256 * @param {Event} event The event object. 268 * @param {Event} event The event object.
257 * @param {string} mode A label that specifies the type of dialog 269 * @param {string} mode A label that specifies the type of dialog
258 * box which is currently being viewed (i.e. 'create' or 270 * box which is currently being viewed (i.e. 'create' or
259 * 'manage'). 271 * 'manage').
260 * @private 272 * @private
261 */ 273 */
262 onNameChanged_: function(event, mode) { 274 onNameChanged_: function(event, mode) {
263 var newName = event.target.value; 275 var newName = event.target.value;
264 var oldName = this.profileInfo_.name; 276 var oldName = this.profileInfo_.name;
265 277
266 if (newName == oldName) { 278 if (newName == oldName) {
267 this.hideErrorBubble_(mode); 279 this.hideErrorBubble_(mode);
268 } else if (this.profileNames_[newName] != undefined) { 280 } else if (this.profileNames_[newName] != undefined) {
269 this.showErrorBubble_('manageProfilesDuplicateNameError', mode); 281 this.showErrorBubble_('manageProfilesDuplicateNameError', mode, true);
270 } else { 282 } else {
271 this.hideErrorBubble_(mode); 283 this.hideErrorBubble_(mode);
272 284
273 var nameIsValid = $(mode + '-profile-name').validity.valid; 285 var nameIsValid = $(mode + '-profile-name').validity.valid;
274 $(mode + '-profile-ok').disabled = !nameIsValid; 286 $(mode + '-profile-ok').disabled = !nameIsValid;
275 } 287 }
276 }, 288 },
277 289
278 /** 290 /**
279 * Called when the user clicks "OK" or hits enter. Saves the newly changed 291 * Called when the user clicks "OK" or hits enter. Saves the newly changed
(...skipping 13 matching lines...) Expand all
293 * using the information in the dialog. 305 * using the information in the dialog.
294 * @private 306 * @private
295 */ 307 */
296 submitCreateProfile_: function() { 308 submitCreateProfile_: function() {
297 // Get the user's chosen name and icon, or default if they do not 309 // Get the user's chosen name and icon, or default if they do not
298 // wish to customize their profile. 310 // wish to customize their profile.
299 var name = $('create-profile-name').value; 311 var name = $('create-profile-name').value;
300 var iconUrl = $('create-profile-icon-grid').selectedItem; 312 var iconUrl = $('create-profile-icon-grid').selectedItem;
301 var createShortcut = $('create-shortcut').checked; 313 var createShortcut = $('create-shortcut').checked;
302 var isManaged = $('create-profile-limited').checked; 314 var isManaged = $('create-profile-limited').checked;
315
316 // 'createProfile' is handled by the BrowserOptionsHandler.
303 chrome.send('createProfile', 317 chrome.send('createProfile',
304 [name, iconUrl, createShortcut, isManaged]); 318 [name, iconUrl, createShortcut, isManaged]);
305 }, 319 },
306 320
307 /** 321 /**
308 * Called when the selected icon in the icon grid changes. 322 * Called when the selected icon in the icon grid changes.
309 * @param {string} mode A label that specifies the type of dialog 323 * @param {string} mode A label that specifies the type of dialog
310 * box which is currently being viewed (i.e. 'create' or 324 * box which is currently being viewed (i.e. 'create' or
311 * 'manage'). 325 * 'manage').
312 * @private 326 * @private
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
411 didShowPage: function() { 425 didShowPage: function() {
412 chrome.send('requestSignedInText'); 426 chrome.send('requestSignedInText');
413 chrome.send('requestDefaultProfileIcons'); 427 chrome.send('requestDefaultProfileIcons');
414 chrome.send('requestNewProfileDefaults'); 428 chrome.send('requestNewProfileDefaults');
415 429
416 $('manage-profile-overlay-create').hidden = false; 430 $('manage-profile-overlay-create').hidden = false;
417 $('manage-profile-overlay-manage').hidden = true; 431 $('manage-profile-overlay-manage').hidden = true;
418 $('manage-profile-overlay-delete').hidden = true; 432 $('manage-profile-overlay-delete').hidden = true;
419 $('create-profile-instructions').textContent = 433 $('create-profile-instructions').textContent =
420 loadTimeData.getStringF('createProfileInstructions'); 434 loadTimeData.getStringF('createProfileInstructions');
421 ManageProfileOverlay.getInstance().hideErrorBubble_('create'); 435 this.hideErrorBubble_();
422 436
423 var shortcutsEnabled = loadTimeData.getBoolean('profileShortcutsEnabled'); 437 var shortcutsEnabled = loadTimeData.getBoolean('profileShortcutsEnabled');
424 $('create-shortcut-container').hidden = !shortcutsEnabled; 438 $('create-shortcut-container').hidden = !shortcutsEnabled;
425 $('create-shortcut').checked = shortcutsEnabled; 439 $('create-shortcut').checked = shortcutsEnabled;
426 440
427 $('create-profile-name-label').hidden = true; 441 $('create-profile-name-label').hidden = true;
428 $('create-profile-name').hidden = true; 442 $('create-profile-name').hidden = true;
429 $('create-profile-ok').disabled = true; 443 $('create-profile-ok').disabled = true;
430 }, 444 },
431 445
446 /** @override */
447 showErrorBubble_: function(errorText) {
448 ManageProfileOverlay.getInstance().showErrorBubble_(errorText,
449 'create',
450 false);
451 },
452
453 /** @override */
454 hideErrorBubble_: function() {
455 ManageProfileOverlay.getInstance().hideErrorBubble_('create');
456 },
457
458 /**
459 * Shows an error message describing a local error (most likely a disk
460 * error) when creating a new profile. Called by BrowserOptions via the
461 * BrowserOptionsHandler.
462 * @private
463 */
464 onLocalError_: function() {
465 $('create-profile-ok').disabled = false;
466 this.showErrorBubble_('createProfileLocalError');
467 },
468
469 /**
470 * For new limited users, shows a confirmation page after successfully
471 * creating a new profile; otherwise, the handler will open a new window.
472 * @private
473 */
474 onSuccess_: function(isManaged) {
475 OptionsPage.closeOverlay();
476 $('create-profile-ok').disabled = false;
477 if (isManaged) {
478 // TODO(pamg): Fill out this stub.
479 console.log('Success - show confirmation');
James Hawkins 2013/05/29 17:22:44 nit: Remove the log.
480 }
481 },
482
432 /** 483 /**
433 * Updates the signed-in or not-signed-in UI when in create mode. Called by 484 * Updates the signed-in or not-signed-in UI when in create mode. Called by
434 * the handler in response to the 'requestSignedInText' message. 485 * the handler in response to the 'requestSignedInText' message.
435 * @param {string} text The text to show for a signed-in user. An empty 486 * @param {string} text The text to show for a signed-in user. An empty
436 * string indicates that the user is not signed in. 487 * string indicates that the user is not signed in.
437 * @private 488 * @private
438 */ 489 */
439 updateSignedInStatus_: function(text) { 490 updateSignedInStatus_: function(text) {
440 var isSignedIn = text !== ''; 491 var isSignedIn = text !== '';
441 $('create-profile-limited-signed-in').hidden = !isSignedIn; 492 $('create-profile-limited-signed-in').hidden = !isSignedIn;
442 $('create-profile-limited-not-signed-in').hidden = isSignedIn; 493 $('create-profile-limited-not-signed-in').hidden = isSignedIn;
443 $('create-profile-limited').disabled = !isSignedIn; 494 $('create-profile-limited').disabled = !isSignedIn;
444 495
445 $('create-profile-limited-signed-in-label').textContent = text; 496 $('create-profile-limited-signed-in-label').textContent = text;
446 }, 497 },
447 }; 498 };
448 499
449 // Forward public APIs to private implementations. 500 // Forward public APIs to private implementations.
450 [ 501 [
502 'onLocalError',
503 'onSuccess',
451 'updateSignedInStatus', 504 'updateSignedInStatus',
452 ].forEach(function(name) { 505 ].forEach(function(name) {
453 CreateProfileOverlay[name] = function() { 506 CreateProfileOverlay[name] = function() {
454 var instance = CreateProfileOverlay.getInstance(); 507 var instance = CreateProfileOverlay.getInstance();
455 return instance[name + '_'].apply(instance, arguments); 508 return instance[name + '_'].apply(instance, arguments);
456 }; 509 };
457 }); 510 });
458 511
459 // Export 512 // Export
460 return { 513 return {
461 ManageProfileOverlay: ManageProfileOverlay, 514 ManageProfileOverlay: ManageProfileOverlay,
462 CreateProfileOverlay: CreateProfileOverlay, 515 CreateProfileOverlay: CreateProfileOverlay,
463 }; 516 };
464 }); 517 });
OLDNEW
« no previous file with comments | « chrome/browser/resources/options/browser_options.js ('k') | chrome/browser/ui/bookmarks/bookmark_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698