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

Unified Diff: chrome/browser/resources/options/managed_user_import.js

Issue 125993002: Add error handling for supervised user import flow. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address review comments. Created 6 years, 11 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/resources/options/managed_user_import.js
diff --git a/chrome/browser/resources/options/managed_user_import.js b/chrome/browser/resources/options/managed_user_import.js
index 70a54dd2cabfc54e54649f882a613e911981fca3..9f36a77ed081f920c51455d8286eee255fe5ce7b 100644
--- a/chrome/browser/resources/options/managed_user_import.js
+++ b/chrome/browser/resources/options/managed_user_import.js
@@ -7,6 +7,95 @@ cr.define('options', function() {
var ArrayDataModel = cr.ui.ArrayDataModel;
/**
+ * ManagedUserList class.
+ * Handles requests for retrieving a list of existing managed users which are
+ * supervised by the current profile. This list is cached in order to make it
+ * possible to serve future requests immediately. The first request will be
+ * handled asynchronously.
+ * @constructor
+ * @class
+ */
+ function ManagedUserList() {
+ this.callbacks_ = [];
+ this.errbacks_ = [];
+ this.requestInProgress_ = false;
+ this.managedUsers = null;
+ };
+
+ cr.addSingletonGetter(ManagedUserList);
+
+ /**
+ * Resets to the initial state of no pending requests.
+ * @private
+ */
+ ManagedUserList.prototype.reset_ = function() {
+ this.callbacks_ = [];
+ this.errbacks_ = [];
+ this.requestInProgress_ = false;
+ }
+
+ /**
+ * Receives a list of managed users and passes the list to each of the
+ * callbacks.
+ * @param {Array.<Object>} managedUsers An array of managed user objects.
+ * Each object is of the form:
+ * managedUser = {
+ * id: "Managed User ID",
+ * name: "Managed User Name",
+ * iconURL: "chrome://path/to/icon/image",
+ * onCurrentDevice: true or false,
+ * needAvatar: true or false
+ * }
+ */
+ ManagedUserList.receiveExistingManagedUsers = function(managedUsers) {
+ var instance = ManagedUserList.getInstance();
+ var i;
+ for (i = 0; i < instance.callbacks_.length; i++) {
+ instance.callbacks_[i](managedUsers);
+ }
+ this.managedUsers = managedUsers;
+ instance.reset_();
+ };
+
+ /**
+ * Called when there is a signin error when retrieving the list of managed
+ * users. Calls the error callbacks which will display an appropriate error
+ * message to the user.
+ */
+ ManagedUserList.onSigninError = function() {
+ var instance = ManagedUserList.getInstance();
+ var i;
+ for (i = 0; i < instance.errbacks_.length; i++) {
+ instance.errbacks_[i]();
+ }
+ // Reset the list of managed users in order to avoid showing stale data.
+ instance.managedUsers = null;
+ instance.reset_();
+ };
+
+ /**
+ * Handles the request for the list of existing managed users. If the data is
+ * already available, it will call |callback| immediately. Otherwise, it
+ * retrieves the list of existing managed users which is then processed in
+ * receiveExistingManagedUsers().
+ * @param {Object} callback The callback function which is called on success.
+ * @param {Object} errback the callback function which is called on error.
+ */
+ ManagedUserList.requestExistingManagedUsers = function(callback, errback) {
+ var instance = ManagedUserList.getInstance();
+ instance.callbacks_.push(callback);
+ instance.errbacks_.push(errback);
+ if (!instance.requestInProgress_) {
+ if (instance.managedUsers != null) {
+ ManagedUserList.receiveExistingManagedUsers(instance.managedUsers);
+ return;
+ }
+ instance.requestInProgress_ = true;
+ chrome.send('requestManagedUserImportUpdate');
+ }
+ };
+
+ /**
* ManagedUserImportOverlay class.
* Encapsulated handling of the 'Import existing managed user' overlay page.
* @constructor
@@ -75,7 +164,8 @@ cr.define('options', function() {
* @override
*/
didShowPage: function() {
- chrome.send('requestManagedUserImportUpdate');
+ ManagedUserList.requestExistingManagedUsers(
+ this.receiveExistingManagedUsers_, this.onSigninError_.bind(this));
this.updateImportInProgress_(false);
$('managed-user-import-error-bubble').hidden = true;
@@ -157,8 +247,7 @@ cr.define('options', function() {
},
/**
- * Adds all the existing |managedUsers| to the list. If |managedUsers|
- * is undefined, then the list is cleared.
+ * Sets the data model of the managed user list to |managedUsers|.
* @param {Array.<Object>} managedUsers An array of managed user objects.
* Each object is of the form:
* managedUser = {
@@ -171,11 +260,6 @@ cr.define('options', function() {
* @private
*/
receiveExistingManagedUsers_: function(managedUsers) {
- if (!managedUsers) {
- $('managed-user-list').dataModel = null;
- return;
- }
-
managedUsers.sort(function(a, b) {
return a.name.localeCompare(b.name);
});
@@ -184,14 +268,15 @@ cr.define('options', function() {
if (managedUsers.length == 0) {
this.onError_(loadTimeData.getString('noExistingManagedUsers'));
$('managed-user-import-ok').disabled = true;
+ } else {
+ // Hide the error bubble.
+ $('managed-user-import-error-bubble').hidden = true;
}
},
- /**
- * @private
- */
- hideErrorBubble_: function() {
- $('managed-user-import-error-bubble').hidden = true;
+ onSigninError_: function() {
+ $('managed-user-list').dataModel = null;
+ this.onError_(loadTimeData.getString('managedUserImportSigninError'));
},
/**
@@ -220,10 +305,7 @@ cr.define('options', function() {
// Forward public APIs to private implementations.
[
- 'hideErrorBubble',
- 'onError',
'onSuccess',
- 'receiveExistingManagedUsers',
].forEach(function(name) {
ManagedUserImportOverlay[name] = function() {
var instance = ManagedUserImportOverlay.getInstance();
@@ -234,5 +316,6 @@ cr.define('options', function() {
// Export
return {
ManagedUserImportOverlay: ManagedUserImportOverlay,
+ ManagedUserList: ManagedUserList,
};
});

Powered by Google App Engine
This is Rietveld 408576698