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

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

Issue 275483005: Fix initial focus, and the way elements are disabled on the 'Clear browsing data' dialog. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 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
« no previous file with comments | « no previous file | chrome/browser/ui/webui/options/clear_browser_data_browsertest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 7
8 /** 8 /**
9 * ClearBrowserDataOverlay class 9 * ClearBrowserDataOverlay class
10 * Encapsulated handling of the 'Clear Browser Data' overlay page. 10 * Encapsulated handling of the 'Clear Browser Data' overlay page.
(...skipping 13 matching lines...) Expand all
24 24
25 /** 25 /**
26 * Whether deleting history and downloads is allowed. 26 * Whether deleting history and downloads is allowed.
27 * @type {boolean} 27 * @type {boolean}
28 * @private 28 * @private
29 */ 29 */
30 allowDeletingHistory_: true, 30 allowDeletingHistory_: true,
31 31
32 /** 32 /**
33 * Whether or not clearing browsing data is currently in progress. 33 * Whether or not clearing browsing data is currently in progress.
34 * @type {boolean} 34 *
35 * This is null until we get the authoritative value in the first call to
36 * setClearing(). In this intermediary state, the commit button is disabled,
37 * but everything else can still be enabled.
38 *
39 * @type {?boolean}
35 * @private 40 * @private
36 */ 41 */
37 isClearingInProgress_: true, 42 isClearingInProgress_: null,
Dan Beam 2014/05/19 17:39:07 overall I think it's pretty dubious to have a vari
engedy 2014/05/19 21:32:59 I have introduces a third boolean that indicates w
38 43
39 /** 44 /**
40 * Initialize the page. 45 * Initialize the page.
41 */ 46 */
42 initializePage: function() { 47 initializePage: function() {
43 // Call base class implementation to starts preference initialization. 48 // Call base class implementation to starts preference initialization.
44 OptionsPage.prototype.initializePage.call(this); 49 OptionsPage.prototype.initializePage.call(this);
45 50
46 var f = this.updateCommitButtonState_.bind(this); 51 var f = this.updateStateOfControls_.bind(this);
47 var types = ['browser.clear_data.browsing_history', 52 var types = ['browser.clear_data.browsing_history',
48 'browser.clear_data.download_history', 53 'browser.clear_data.download_history',
49 'browser.clear_data.cache', 54 'browser.clear_data.cache',
50 'browser.clear_data.cookies', 55 'browser.clear_data.cookies',
51 'browser.clear_data.passwords', 56 'browser.clear_data.passwords',
52 'browser.clear_data.form_data', 57 'browser.clear_data.form_data',
53 'browser.clear_data.hosted_apps_data', 58 'browser.clear_data.hosted_apps_data',
54 'browser.clear_data.content_licenses']; 59 'browser.clear_data.content_licenses'];
55 types.forEach(function(type) { 60 types.forEach(function(type) {
56 Preferences.getInstance().addEventListener(type, f); 61 Preferences.getInstance().addEventListener(type, f);
57 }); 62 });
58 63
59 var checkboxes = document.querySelectorAll( 64 var checkboxes = document.querySelectorAll(
60 '#cbd-content-area input[type=checkbox]'); 65 '#cbd-content-area input[type=checkbox]');
61 for (var i = 0; i < checkboxes.length; i++) { 66 for (var i = 0; i < checkboxes.length; i++) {
62 checkboxes[i].onclick = f; 67 checkboxes[i].onclick = f;
63 } 68 }
64 69
65 // At this point, assume that we are currently in the process of clearing
66 // data, so as to prevent the controls from being hazardously enabled for
67 // a very short time before ClearBrowserDataOverlay.setClearing() is
68 // called by the native side with the authoritative state.
69 this.setClearing(true);
70
71 this.createStuffRemainsFooter_(); 70 this.createStuffRemainsFooter_();
72 71
73 $('clear-browser-data-dismiss').onclick = function(event) { 72 $('clear-browser-data-dismiss').onclick = function(event) {
74 ClearBrowserDataOverlay.dismiss(); 73 ClearBrowserDataOverlay.dismiss();
75 }; 74 };
76 $('clear-browser-data-commit').onclick = function(event) { 75 $('clear-browser-data-commit').onclick = function(event) {
77 ClearBrowserDataOverlay.setClearing(true); 76 ClearBrowserDataOverlay.setClearing(true);
78 chrome.send('performClearBrowserData'); 77 chrome.send('performClearBrowserData');
79 }; 78 };
80 79
81 var show = loadTimeData.getBoolean('showDeleteBrowsingHistoryCheckboxes'); 80 // For managed profiles, hide the checkboxes controlling whether or not
82 this.showDeleteHistoryCheckboxes_(show); 81 // browsing and download history should be cleared. Note that this is
82 // different than just disabling them as a result of enterprise policies.
83 if (!loadTimeData.getBoolean('showDeleteBrowsingHistoryCheckboxes')) {
84 $('delete-browsing-history-container').hidden = true;
85 $('delete-download-history-container').hidden = true;
86 }
Dan Beam 2014/05/19 17:39:07 can this be in |updateStateOfControls_|?
engedy 2014/05/19 21:32:59 I would prefer keeping this separate. This is a lo
87
88 this.updateStateOfControls_();
83 }, 89 },
84 90
85 /** 91 /**
86 * Create a footer that explains that some content is not cleared by the 92 * Create a footer that explains that some content is not cleared by the
87 * clear browsing history dialog. 93 * clear browsing history dialog.
88 */ 94 */
89 createStuffRemainsFooter_: function() { 95 createStuffRemainsFooter_: function() {
90 // The localized string is of the form "Saved [content settings] and 96 // The localized string is of the form "Saved [content settings] and
91 // {search engines} will not be cleared and may reflect your browsing 97 // {search engines} will not be cleared and may reflect your browsing
92 // habits.". The following parses out the parts in brackts and braces and 98 // habits.". The following parses out the parts in brackts and braces and
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 function(event) { 132 function(event) {
127 OptionsPage.navigateToPage('content'); 133 OptionsPage.navigateToPage('content');
128 } 134 }
129 $('open-search-engines-from-clear-browsing-data').onclick = 135 $('open-search-engines-from-clear-browsing-data').onclick =
130 function(event) { 136 function(event) {
131 OptionsPage.navigateToPage('searchEngines'); 137 OptionsPage.navigateToPage('searchEngines');
132 } 138 }
133 }, 139 },
134 140
135 /** 141 /**
136 * Sets the enabled state of the checkboxes and buttons based on whether or 142 * Sets whether or not we are in the process of clearing data.
137 * not we are in the process of clearing data. 143 * @param {boolean} clearing Whether the browsing data is currently being
138 * @param {boolean} clearing Whether the browsing history is currently 144 * cleared.
139 * being cleared.
140 */ 145 */
141 setClearing: function(clearing) { 146 setClearing: function(clearing) {
142 $('delete-browsing-history-checkbox').disabled = clearing;
143 $('delete-download-history-checkbox').disabled = clearing;
144 $('delete-cache-checkbox').disabled = clearing;
145 $('delete-cookies-checkbox').disabled = clearing;
146 $('delete-passwords-checkbox').disabled = clearing;
147 $('delete-form-data-checkbox').disabled = clearing;
148 $('delete-hosted-apps-data-checkbox').disabled = clearing;
149 $('deauthorize-content-licenses-checkbox').disabled = clearing;
150 $('clear-browser-data-time-period').disabled = clearing;
151 $('cbd-throbber').style.visibility = clearing ? 'visible' : 'hidden';
152 $('clear-browser-data-dismiss').disabled = clearing;
153
154 // The enabled state of the commit button is further based on whether or
155 // not any of the check boxes are checked.
156 this.isClearingInProgress_ = clearing; 147 this.isClearingInProgress_ = clearing;
157 this.updateCommitButtonState_(); 148 this.updateStateOfControls_();
158 }, 149 },
159 150
160 /** 151 /**
161 * Sets the enabled state of the commit button. 152 * Sets whether deleting history and downloads is disallowed by enterprise
153 * policies. This is called on initialization and in response to a change in
154 * the corresponding preference.
155 * @param {boolean} allowed Whether to allow deleting history and downloads.
162 */ 156 */
163 updateCommitButtonState_: function() { 157 setAllowDeletingHistory: function(allowed) {
Dan Beam 2014/05/19 17:39:07 nit: setAllowDeletingHistory_ + @private if only u
engedy 2014/05/19 21:32:59 Done.
158 this.allowDeletingHistory_ = allowed;
159 this.updateStateOfControls_();
160 },
161
162 /**
163 * Updates the enabled/disabled/hidden status of all controls on the dialog.
Dan Beam 2014/05/19 17:39:07 @private
engedy 2014/05/19 21:32:59 Done.
164 */
165 updateStateOfControls_: function() {
166 // The commit button is enabled if at least one data type selected to be
167 // cleared, and if we are not already in the process of clearing.
Dan Beam 2014/05/19 17:39:07 can we do the |isClearingInProgress_| check first?
engedy 2014/05/19 21:32:59 Done.
164 var checkboxes = document.querySelectorAll( 168 var checkboxes = document.querySelectorAll(
165 '#cbd-content-area input[type=checkbox]'); 169 '#cbd-content-area input[type=checkbox]');
166 var isChecked = false; 170 var isChecked = false;
167 for (var i = 0; i < checkboxes.length; i++) { 171 for (var i = 0; i < checkboxes.length; i++) {
168 if (checkboxes[i].checked) { 172 if (checkboxes[i].checked) {
169 isChecked = true; 173 isChecked = true;
170 break; 174 break;
171 } 175 }
172 } 176 }
177 // To prevent the commit button from being hazardously enabled for a very
178 // short time before setClearing() is called the first time by the native
179 // side, also disable the button if |isClearingInProgress_| is null.
173 $('clear-browser-data-commit').disabled = 180 $('clear-browser-data-commit').disabled =
174 !isChecked || this.isClearingInProgress_; 181 !isChecked || (this.isClearingInProgress_ !== false);
175 },
176 182
177 setAllowDeletingHistory: function(allowed) { 183 // The checkboxes for clearing history/downloads are enabled unless they
178 this.allowDeletingHistory_ = allowed; 184 // are disallowed by policies, or we are in the process of clearing data.
179 }, 185 // To prevent flickering, these, and the rest of the controls can safely
186 // be enabled for a short time before the first call to setClearing().
187 var enabled = this.allowDeletingHistory_ && !this.isClearingInProgress_;
188 $('delete-browsing-history-checkbox').disabled = !enabled;
189 $('delete-download-history-checkbox').disabled = !enabled;
190 if (!this.allowDeletingHistory_) {
191 $('delete-browsing-history-checkbox').checked = false;
192 $('delete-download-history-checkbox').checked = false;
193 }
180 194
181 showDeleteHistoryCheckboxes_: function(show) { 195 // Enable everything else unless we are in the process of clearing.
182 if (!show) { 196 var clearing = !!this.isClearingInProgress_;
183 $('delete-browsing-history-container').hidden = true; 197 $('delete-cache-checkbox').disabled = clearing;
184 $('delete-download-history-container').hidden = true; 198 $('delete-cookies-checkbox').disabled = clearing;
185 } 199 $('delete-passwords-checkbox').disabled = clearing;
186 }, 200 $('delete-form-data-checkbox').disabled = clearing;
187 201 $('delete-hosted-apps-data-checkbox').disabled = clearing;
188 /** @override */ 202 $('deauthorize-content-licenses-checkbox').disabled = clearing;
189 didShowPage: function() { 203 $('clear-browser-data-time-period').disabled = clearing;
190 var allowed = ClearBrowserDataOverlay.getInstance().allowDeletingHistory_; 204 $('cbd-throbber').style.visibility = clearing ? 'visible' : 'hidden';
191 ClearBrowserDataOverlay.updateHistoryCheckboxes(allowed); 205 $('clear-browser-data-dismiss').disabled = clearing;
192 }, 206 }
193 }; 207 };
194 208
195 // 209 //
196 // Chrome callbacks 210 // Chrome callbacks
197 // 211 //
198 /** 212 ClearBrowserDataOverlay.setAllowDeletingHistory = function(allowed) {
199 * Updates the disabled status of the browsing-history and downloads
200 * checkboxes, also unchecking them if they are disabled. This is called in
201 * response to a change in the corresponding preference.
202 */
203 ClearBrowserDataOverlay.updateHistoryCheckboxes = function(allowed) {
204 $('delete-browsing-history-checkbox').disabled = !allowed;
205 $('delete-download-history-checkbox').disabled = !allowed;
206 if (!allowed) {
207 $('delete-browsing-history-checkbox').checked = false;
208 $('delete-download-history-checkbox').checked = false;
209 }
210 ClearBrowserDataOverlay.getInstance().setAllowDeletingHistory(allowed); 213 ClearBrowserDataOverlay.getInstance().setAllowDeletingHistory(allowed);
211 }; 214 };
212 215
213 ClearBrowserDataOverlay.setClearing = function(clearing) { 216 ClearBrowserDataOverlay.setClearing = function(clearing) {
214 ClearBrowserDataOverlay.getInstance().setClearing(clearing); 217 ClearBrowserDataOverlay.getInstance().setClearing(clearing);
215 }; 218 };
216 219
217 ClearBrowserDataOverlay.setBannerVisibility = function(args) { 220 ClearBrowserDataOverlay.setBannerVisibility = function(args) {
218 var visible = args[0]; 221 var visible = args[0];
219 $('clear-browser-data-info-banner').hidden = !visible; 222 $('clear-browser-data-info-banner').hidden = !visible;
220 }; 223 };
221 224
222 ClearBrowserDataOverlay.doneClearing = function() { 225 ClearBrowserDataOverlay.doneClearing = function() {
223 // The delay gives the user some feedback that the clearing 226 // The delay gives the user some feedback that the clearing
224 // actually worked. Otherwise the dialog just vanishes instantly in most 227 // actually worked. Otherwise the dialog just vanishes instantly in most
225 // cases. 228 // cases.
226 window.setTimeout(function() { 229 window.setTimeout(function() {
230 ClearBrowserDataOverlay.getInstance().setClearing(false);
Dan Beam 2014/05/19 17:39:07 nit: ClearBrowserDataOverlay.setClearing(false);
engedy 2014/05/19 21:32:59 Done.
227 ClearBrowserDataOverlay.dismiss(); 231 ClearBrowserDataOverlay.dismiss();
228 }, 200); 232 }, 200);
229 }; 233 };
230 234
231 ClearBrowserDataOverlay.dismiss = function() { 235 ClearBrowserDataOverlay.dismiss = function() {
232 var topmostVisiblePage = OptionsPage.getTopmostVisiblePage(); 236 var topmostVisiblePage = OptionsPage.getTopmostVisiblePage();
233 if (topmostVisiblePage && topmostVisiblePage.name == 'clearBrowserData') 237 if (topmostVisiblePage && topmostVisiblePage.name == 'clearBrowserData')
234 OptionsPage.closeOverlay(); 238 OptionsPage.closeOverlay();
235 this.setClearing(false);
236 }; 239 };
237 240
238 // Export 241 // Export
239 return { 242 return {
240 ClearBrowserDataOverlay: ClearBrowserDataOverlay 243 ClearBrowserDataOverlay: ClearBrowserDataOverlay
241 }; 244 };
242 }); 245 });
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/ui/webui/options/clear_browser_data_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698