Index: ui/login/account_picker/user_pod_row.js |
diff --git a/ui/login/account_picker/user_pod_row.js b/ui/login/account_picker/user_pod_row.js |
index 32811a6dfa53af36ab1c16139e54c2e68d431867..0d7a4adbc25298950721c8c2f9ba739c582ffe40 100644 |
--- a/ui/login/account_picker/user_pod_row.js |
+++ b/ui/login/account_picker/user_pod_row.js |
@@ -954,23 +954,6 @@ cr.define('login', function() { |
}, |
/** |
- * Gets action box menu, remove user warning text div. |
- * @type {!HTMLInputElement} |
- */ |
- get actionBoxRemoveUserWarningTextElement() { |
- return this.querySelector('.action-box-remove-user-warning-text'); |
- }, |
- |
- /** |
- * Gets action box menu, remove legacy supervised user warning text div. |
- * @type {!HTMLInputElement} |
- */ |
- get actionBoxRemoveLegacySupervisedUserWarningTextElement() { |
- return this.querySelector( |
- '.action-box-remove-legacy-supervised-user-warning-text'); |
- }, |
- |
- /** |
* Gets action box menu, remove user command item div. |
* @type {!HTMLInputElement} |
*/ |
@@ -1425,6 +1408,125 @@ cr.define('login', function() { |
this.actionBoxAreaElement.classList.add('menu-moved-up'); |
} |
chrome.send('logRemoveUserWarningShown'); |
+ |
+ // Show extra statistics information for desktop users |
+ var message; |
+ if (this.user.isDesktopUser) { |
+ this.classList.remove('has-errors'); |
+ var isSyncedUser = this.user.emailAddress !== ""; |
+ if (!this.user.isProfileLoaded) { |
+ message = loadTimeData.getString( |
+ isSyncedUser ? 'removeUserWarningTextSyncNoStats' : |
+ 'removeUserWarningTextNonSyncNoStats'); |
+ this.updateRemoveWarningDialogSetMessage_(this.user.profilePath, |
+ message); |
+ } else { |
+ message = loadTimeData.getString( |
+ isSyncedUser ? 'removeUserWarningTextSyncCalculating' : |
+ 'removeUserWarningTextNonSyncCalculating'); |
+ substitute = loadTimeData.getString( |
+ 'removeUserWarningTextCalculating'); |
+ this.updateRemoveWarningDialogSetMessage_(this.user.profilePath, |
+ message, substitute); |
+ } |
+ |
+ // set a global handler for the callback |
+ window.updateRemoveWarningDialog = |
+ this.updateRemoveWarningDialog_.bind(this); |
+ chrome.send('removeUserWarningLoadStats', [this.user.profilePath]); |
+ } |
+ }, |
+ |
+ /** |
+ * Refresh the statistics in the remove user warning dialog. |
+ * @param {string} profilePath The filepath of the URL (must be verified). |
+ * @param {Object} profileStats Statistics associated with profileURL. |
+ */ |
+ updateRemoveWarningDialog_: function(profilePath, profileStats) { |
+ if (profilePath !== this.user.profilePath) |
+ return; |
+ // Converting profileStats into id attribute by an object. |
+ var stats_id_map = { |
+ 'BrowsingHistory': 'action-box-remove-user-warning-history', |
+ 'Passwords': 'action-box-remove-user-warning-passwords', |
+ 'Bookmarks': 'action-box-remove-user-warning-bookmarks', |
+ 'Settings': 'action-box-remove-user-warning-settings', |
+ } |
+ // Load individual statistics |
+ var num_stats_loaded = 0; |
+ var total_count = 0; |
+ var failed = false; |
+ for (var key in profileStats) { |
+ if (stats_id_map.hasOwnProperty(key)) { |
+ if (profileStats[key].success) { |
+ var count = profileStats[key].count; |
+ this.querySelector("." + stats_id_map[key]).textContent = count; |
+ total_count += count; |
+ } else { |
+ failed = true; |
+ this.querySelector("." + stats_id_map[key]).textContent = ''; |
+ } |
+ num_stats_loaded++; |
+ } |
+ } |
+ |
+ // this.classList is used for selecting the appropriate dialog. |
+ this.classList.toggle('has-errors', failed); |
+ if (total_count > 0) { |
+ this.classList.remove('has-no-stats'); |
+ } |
+ |
+ // Write total number if all statistics are loaded. |
+ if (num_stats_loaded === Object.keys(stats_id_map).length) { |
+ if (total_count === 0) { |
+ this.classList.add('has-no-stats'); |
+ var isSyncedUser = this.user.emailAddress !== ""; |
+ var message = loadTimeData.getString( |
+ isSyncedUser ? 'removeUserWarningTextSyncNoStats' : |
+ 'removeUserWarningTextNonSyncNoStats'); |
+ this.updateRemoveWarningDialogSetMessage_(this.user.profilePath, |
+ message); |
+ } else { |
+ window.updateRemoveWarningDialogSetMessage = |
+ this.updateRemoveWarningDialogSetMessage_.bind(this); |
+ chrome.send('getRemoveWarningDialogMessage',[{ |
+ profilePath: this.user.profilePath, |
+ isSyncedUser: this.user.emailAddress !== "", |
+ hasErrors: failed, |
+ totalCount: total_count |
+ }]); |
+ } |
+ } |
+ }, |
+ |
+ /** |
+ * Refresh the message in the remove user warning dialog. |
+ * @param {string} profilePath The filepath of the URL (must be verified). |
+ * @param {string} message The message to be written. |
+ * @param {number|string=} count The number or string to replace $1 in |
+ * |message|. Can be omitted if $1 is not present in |message|. |
+ */ |
+ updateRemoveWarningDialogSetMessage_: function(profilePath, message, |
+ count) { |
+ if (profilePath !== this.user.profilePath) |
+ return; |
+ // Add localized messages where $1 will be replaced with |
+ // <span class="total-count"></span>. |
+ var element = this.querySelector('.action-box-remove-user-warning-text'); |
+ while (element.firstChild) |
+ element.removeChild(element.firstChild); |
+ |
+ messageParts = message.split('$1'); |
+ var numParts = messageParts.length; |
+ for (var j = 0; j < numParts; j++) { |
+ element.appendChild(document.createTextNode(messageParts[j])); |
+ if (j < numParts - 1) { |
+ var elementToAdd = document.createElement('span'); |
+ elementToAdd.classList.add('total-count'); |
+ elementToAdd.textContent = count; |
+ element.appendChild(elementToAdd); |
+ } |
+ } |
}, |
/** |
@@ -1958,18 +2060,17 @@ cr.define('login', function() { |
var isLockedUser = this.user.needsSignin; |
var isLegacySupervisedUser = this.user.legacySupervisedUser; |
var isChildUser = this.user.childUser; |
+ var isSyncedUser = this.user.emailAddress !== ""; |
+ var isProfileLoaded = this.user.isProfileLoaded; |
this.classList.toggle('locked', isLockedUser); |
this.classList.toggle('legacy-supervised', isLegacySupervisedUser); |
this.classList.toggle('child', isChildUser); |
+ this.classList.toggle('synced', isSyncedUser); |
+ this.classList.toggle('has-no-stats', !isProfileLoaded); |
if (this.isAuthTypeUserClick) |
this.passwordLabelElement.textContent = this.authValue; |
- this.actionBoxRemoveUserWarningTextElement.hidden = |
- isLegacySupervisedUser; |
- this.actionBoxRemoveLegacySupervisedUserWarningTextElement.hidden = |
- !isLegacySupervisedUser; |
- |
this.passwordElement.setAttribute('aria-label', loadTimeData.getStringF( |
'passwordFieldAccessibleName', this.user_.emailAddress)); |