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

Side by Side Diff: chrome/browser/ui/webui/options/clear_browser_data_handler.cc

Issue 1527653004: Move browsing data counters helper functions to an 'utils' file. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Default flag value. Created 5 years 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
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 #include "chrome/browser/ui/webui/options/clear_browser_data_handler.h" 5 #include "chrome/browser/ui/webui/options/clear_browser_data_handler.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/bind_helpers.h" 9 #include "base/bind_helpers.h"
10 #include "base/command_line.h"
11 #include "base/metrics/histogram_macros.h" 10 #include "base/metrics/histogram_macros.h"
12 #include "base/metrics/sparse_histogram.h" 11 #include "base/metrics/sparse_histogram.h"
13 #include "base/prefs/pref_service.h" 12 #include "base/prefs/pref_service.h"
14 #include "base/strings/string16.h" 13 #include "base/strings/string16.h"
15 #include "base/strings/string_number_conversions.h" 14 #include "base/strings/string_number_conversions.h"
16 #include "base/values.h" 15 #include "base/values.h"
17 #include "chrome/app/chrome_command_ids.h" 16 #include "chrome/app/chrome_command_ids.h"
18 #include "chrome/browser/browser_process.h" 17 #include "chrome/browser/browser_process.h"
19 #include "chrome/browser/browsing_data/autofill_counter.h" 18 #include "chrome/browser/browsing_data/autofill_counter.h"
20 #include "chrome/browser/browsing_data/browsing_data_counter.h" 19 #include "chrome/browser/browsing_data/browsing_data_counter.h"
20 #include "chrome/browser/browsing_data/browsing_data_counter_utils.h"
21 #include "chrome/browser/browsing_data/browsing_data_helper.h" 21 #include "chrome/browser/browsing_data/browsing_data_helper.h"
22 #include "chrome/browser/browsing_data/browsing_data_remover.h" 22 #include "chrome/browser/browsing_data/browsing_data_remover.h"
23 #include "chrome/browser/browsing_data/cache_counter.h" 23 #include "chrome/browser/browsing_data/cache_counter.h"
24 #include "chrome/browser/browsing_data/history_counter.h" 24 #include "chrome/browser/browsing_data/history_counter.h"
25 #include "chrome/browser/browsing_data/passwords_counter.h" 25 #include "chrome/browser/browsing_data/passwords_counter.h"
26 #include "chrome/browser/prefs/incognito_mode_prefs.h" 26 #include "chrome/browser/prefs/incognito_mode_prefs.h"
27 #include "chrome/browser/profiles/profile.h" 27 #include "chrome/browser/profiles/profile.h"
28 #include "chrome/browser/sync/profile_sync_service_factory.h" 28 #include "chrome/browser/sync/profile_sync_service_factory.h"
29 #include "chrome/browser/ui/accelerator_utils.h" 29 #include "chrome/browser/ui/accelerator_utils.h"
30 #include "chrome/common/chrome_switches.h"
31 #include "chrome/common/pref_names.h" 30 #include "chrome/common/pref_names.h"
32 #include "chrome/grit/generated_resources.h" 31 #include "chrome/grit/generated_resources.h"
33 #include "chrome/grit/locale_settings.h" 32 #include "chrome/grit/locale_settings.h"
34 #include "components/google/core/browser/google_util.h" 33 #include "components/google/core/browser/google_util.h"
35 #include "content/public/browser/notification_details.h" 34 #include "content/public/browser/notification_details.h"
36 #include "content/public/browser/web_ui.h" 35 #include "content/public/browser/web_ui.h"
37 #include "ui/base/accelerators/accelerator.h" 36 #include "ui/base/accelerators/accelerator.h"
38 #include "ui/base/l10n/l10n_util.h" 37 #include "ui/base/l10n/l10n_util.h"
39 #include "ui/base/text/bytes_formatting.h"
40 #include "ui/events/keycodes/keyboard_codes.h" 38 #include "ui/events/keycodes/keyboard_codes.h"
41 39
42 namespace { 40 namespace {
43 41
44 const char kClearBrowsingDataLearnMoreUrl[] = 42 const char kClearBrowsingDataLearnMoreUrl[] =
45 "https://support.google.com/chrome/?p=settings_clear_browsing_data"; 43 "https://support.google.com/chrome/?p=settings_clear_browsing_data";
46 44
47 bool AreCountersEnabled() {
48 if (base::CommandLine::ForCurrentProcess()->HasSwitch(
49 switches::kEnableClearBrowsingDataCounters)) {
50 return true;
51 }
52
53 if (base::CommandLine::ForCurrentProcess()->HasSwitch(
54 switches::kDisableClearBrowsingDataCounters)) {
55 return false;
56 }
57
58 // Enabled by default.
59 return true;
60 }
61
62 // A helper function to display the size of cache in units of MB or higher.
63 // We need this, as 1 MB is the lowest nonzero cache size displayed by the
64 // counter.
65 base::string16 FormatBytesMBOrHigher(BrowsingDataCounter::ResultInt bytes) {
66 if (ui::GetByteDisplayUnits(bytes) >= ui::DataUnits::DATA_UNITS_MEBIBYTE)
67 return ui::FormatBytes(bytes);
68
69 return ui::FormatBytesWithUnits(
70 bytes, ui::DataUnits::DATA_UNITS_MEBIBYTE, true);
71 }
72
73 } // namespace 45 } // namespace
74 46
75 namespace options { 47 namespace options {
76 48
77 ClearBrowserDataHandler::ClearBrowserDataHandler() 49 ClearBrowserDataHandler::ClearBrowserDataHandler()
78 : remover_(nullptr), 50 : remover_(nullptr),
79 sync_service_(nullptr) { 51 sync_service_(nullptr) {
80 } 52 }
81 53
82 ClearBrowserDataHandler::~ClearBrowserDataHandler() { 54 ClearBrowserDataHandler::~ClearBrowserDataHandler() {
83 if (remover_) 55 if (remover_)
84 remover_->RemoveObserver(this); 56 remover_->RemoveObserver(this);
85 if (sync_service_) 57 if (sync_service_)
86 sync_service_->RemoveObserver(this); 58 sync_service_->RemoveObserver(this);
87 } 59 }
88 60
89 void ClearBrowserDataHandler::InitializeHandler() { 61 void ClearBrowserDataHandler::InitializeHandler() {
90 PrefService* prefs = Profile::FromWebUI(web_ui())->GetPrefs(); 62 PrefService* prefs = Profile::FromWebUI(web_ui())->GetPrefs();
91 clear_plugin_lso_data_enabled_.Init(prefs::kClearPluginLSODataEnabled, prefs); 63 clear_plugin_lso_data_enabled_.Init(prefs::kClearPluginLSODataEnabled, prefs);
92 pepper_flash_settings_enabled_.Init(prefs::kPepperFlashSettingsEnabled, 64 pepper_flash_settings_enabled_.Init(prefs::kPepperFlashSettingsEnabled,
93 prefs); 65 prefs);
94 allow_deleting_browser_history_.Init( 66 allow_deleting_browser_history_.Init(
95 prefs::kAllowDeletingBrowserHistory, 67 prefs::kAllowDeletingBrowserHistory,
96 prefs, 68 prefs,
97 base::Bind(&ClearBrowserDataHandler::OnBrowsingHistoryPrefChanged, 69 base::Bind(&ClearBrowserDataHandler::OnBrowsingHistoryPrefChanged,
98 base::Unretained(this))); 70 base::Unretained(this)));
99 71
100 if (AreCountersEnabled()) { 72 if (browsing_data::AreCountersEnabled()) {
101 AddCounter(make_scoped_ptr(new PasswordsCounter())); 73 AddCounter(make_scoped_ptr(new PasswordsCounter()));
102 AddCounter(make_scoped_ptr(new HistoryCounter())); 74 AddCounter(make_scoped_ptr(new HistoryCounter()));
103 AddCounter(make_scoped_ptr(new CacheCounter())); 75 AddCounter(make_scoped_ptr(new CacheCounter()));
104 AddCounter(make_scoped_ptr(new AutofillCounter())); 76 AddCounter(make_scoped_ptr(new AutofillCounter()));
105 77
106 sync_service_ = 78 sync_service_ =
107 ProfileSyncServiceFactory::GetForProfile(Profile::FromWebUI(web_ui())); 79 ProfileSyncServiceFactory::GetForProfile(Profile::FromWebUI(web_ui()));
108 if (sync_service_) 80 if (sync_service_)
109 sync_service_->AddObserver(this); 81 sync_service_->AddObserver(this);
110 } 82 }
111 } 83 }
112 84
113 void ClearBrowserDataHandler::InitializePage() { 85 void ClearBrowserDataHandler::InitializePage() {
114 web_ui()->CallJavascriptFunction( 86 web_ui()->CallJavascriptFunction(
115 "ClearBrowserDataOverlay.createFooter", 87 "ClearBrowserDataOverlay.createFooter",
116 base::FundamentalValue(AreCountersEnabled()), 88 base::FundamentalValue(browsing_data::AreCountersEnabled()),
117 base::FundamentalValue(sync_service_ && sync_service_->IsSyncActive())); 89 base::FundamentalValue(sync_service_ && sync_service_->IsSyncActive()));
118 UpdateInfoBannerVisibility(); 90 UpdateInfoBannerVisibility();
119 OnBrowsingHistoryPrefChanged(); 91 OnBrowsingHistoryPrefChanged();
120 bool removal_in_progress = !!remover_; 92 bool removal_in_progress = !!remover_;
121 web_ui()->CallJavascriptFunction("ClearBrowserDataOverlay.setClearing", 93 web_ui()->CallJavascriptFunction("ClearBrowserDataOverlay.setClearing",
122 base::FundamentalValue(removal_in_progress)); 94 base::FundamentalValue(removal_in_progress));
123 95
124 web_ui()->CallJavascriptFunction( 96 web_ui()->CallJavascriptFunction(
125 "ClearBrowserDataOverlay.markInitializationComplete"); 97 "ClearBrowserDataOverlay.markInitializationComplete");
126 } 98 }
(...skipping 14 matching lines...) Expand all
141 DCHECK_NE(ui::VKEY_UNKNOWN, acc.key_code()); 113 DCHECK_NE(ui::VKEY_UNKNOWN, acc.key_code());
142 text = l10n_util::GetStringFUTF16(IDS_CLEAR_BROWSING_DATA_INFO_BAR_TEXT, 114 text = l10n_util::GetStringFUTF16(IDS_CLEAR_BROWSING_DATA_INFO_BAR_TEXT,
143 acc.GetShortcutText()); 115 acc.GetShortcutText());
144 } 116 }
145 } 117 }
146 118
147 web_ui()->CallJavascriptFunction("ClearBrowserDataOverlay.setBannerText", 119 web_ui()->CallJavascriptFunction("ClearBrowserDataOverlay.setBannerText",
148 base::StringValue(text)); 120 base::StringValue(text));
149 } 121 }
150 122
151 // static
152 base::string16 ClearBrowserDataHandler::GetCounterTextFromResult(
153 const BrowsingDataCounter::Result* result) {
154 base::string16 text;
155 std::string pref_name = result->source()->GetPrefName();
156
157 if (!result->Finished()) {
158 // The counter is still counting.
159 text = l10n_util::GetStringUTF16(IDS_CLEAR_BROWSING_DATA_CALCULATING);
160
161 } else if (pref_name == prefs::kDeletePasswords) {
162 // Passwords counter.
163 BrowsingDataCounter::ResultInt passwords_count =
164 static_cast<const BrowsingDataCounter::FinishedResult*>(
165 result)->Value();
166 text = l10n_util::GetPluralStringFUTF16(
167 IDS_DEL_PASSWORDS_COUNTER, passwords_count);
168
169 } else if (pref_name == prefs::kDeleteCache) {
170 // Cache counter.
171 BrowsingDataCounter::ResultInt cache_size_bytes =
172 static_cast<const BrowsingDataCounter::FinishedResult*>(
173 result)->Value();
174
175 PrefService* prefs = result->source()->GetProfile()->GetPrefs();
176 BrowsingDataRemover::TimePeriod time_period =
177 static_cast<BrowsingDataRemover::TimePeriod>(
178 prefs->GetInteger(prefs::kDeleteTimePeriod));
179
180 // Three cases: Nonzero result for the entire cache, nonzero result for
181 // a subset of cache (i.e. a finite time interval), and almost zero (< 1MB).
182 static const int kBytesInAMegabyte = 1024 * 1024;
183 if (cache_size_bytes >= kBytesInAMegabyte) {
184 base::string16 formatted_size = FormatBytesMBOrHigher(cache_size_bytes);
185 text = time_period == BrowsingDataRemover::EVERYTHING
186 ? formatted_size
187 : l10n_util::GetStringFUTF16(IDS_DEL_CACHE_COUNTER_UPPER_ESTIMATE,
188 formatted_size);
189 } else {
190 text = l10n_util::GetStringUTF16(IDS_DEL_CACHE_COUNTER_ALMOST_EMPTY);
191 }
192
193 } else if (pref_name == prefs::kDeleteBrowsingHistory) {
194 // History counter.
195 const HistoryCounter::HistoryResult* history_result =
196 static_cast<const HistoryCounter::HistoryResult*>(result);
197 BrowsingDataCounter::ResultInt local_item_count = history_result->Value();
198 bool has_synced_visits = history_result->has_synced_visits();
199
200 text = has_synced_visits
201 ? l10n_util::GetPluralStringFUTF16(
202 IDS_DEL_BROWSING_HISTORY_COUNTER_SYNCED, local_item_count)
203 : l10n_util::GetPluralStringFUTF16(
204 IDS_DEL_BROWSING_HISTORY_COUNTER, local_item_count);
205
206 } else if (pref_name == prefs::kDeleteFormData) {
207 // Autofill counter.
208 const AutofillCounter::AutofillResult* autofill_result =
209 static_cast<const AutofillCounter::AutofillResult*>(result);
210 AutofillCounter::ResultInt num_suggestions = autofill_result->Value();
211 AutofillCounter::ResultInt num_credit_cards =
212 autofill_result->num_credit_cards();
213 AutofillCounter::ResultInt num_addresses = autofill_result->num_addresses();
214
215 std::vector<base::string16> displayed_strings;
216
217 if (num_credit_cards) {
218 displayed_strings.push_back(l10n_util::GetPluralStringFUTF16(
219 IDS_DEL_AUTOFILL_COUNTER_CREDIT_CARDS, num_credit_cards));
220 }
221 if (num_addresses) {
222 displayed_strings.push_back(l10n_util::GetPluralStringFUTF16(
223 IDS_DEL_AUTOFILL_COUNTER_ADDRESSES, num_addresses));
224 }
225 if (num_suggestions) {
226 // We use a different wording for autocomplete suggestions based on the
227 // length of the entire string.
228 switch (displayed_strings.size()) {
229 case 0:
230 displayed_strings.push_back(l10n_util::GetPluralStringFUTF16(
231 IDS_DEL_AUTOFILL_COUNTER_SUGGESTIONS, num_suggestions));
232 break;
233 case 1:
234 displayed_strings.push_back(l10n_util::GetPluralStringFUTF16(
235 IDS_DEL_AUTOFILL_COUNTER_SUGGESTIONS_LONG, num_suggestions));
236 break;
237 case 2:
238 displayed_strings.push_back(l10n_util::GetPluralStringFUTF16(
239 IDS_DEL_AUTOFILL_COUNTER_SUGGESTIONS_SHORT, num_suggestions));
240 break;
241 default:
242 NOTREACHED();
243 }
244 }
245
246 // Construct the resulting string from the sections in |displayed_strings|.
247 switch (displayed_strings.size()) {
248 case 0:
249 text = l10n_util::GetStringUTF16(IDS_DEL_AUTOFILL_COUNTER_EMPTY);
250 break;
251 case 1:
252 text = displayed_strings[0];
253 break;
254 case 2:
255 text = l10n_util::GetStringFUTF16(IDS_DEL_AUTOFILL_COUNTER_TWO_TYPES,
256 displayed_strings[0],
257 displayed_strings[1]);
258 break;
259 case 3:
260 text = l10n_util::GetStringFUTF16(IDS_DEL_AUTOFILL_COUNTER_THREE_TYPES,
261 displayed_strings[0],
262 displayed_strings[1],
263 displayed_strings[2]);
264 break;
265 default:
266 NOTREACHED();
267 }
268 }
269
270 return text;
271 }
272
273 void ClearBrowserDataHandler::OnPageOpened(const base::ListValue* value) { 123 void ClearBrowserDataHandler::OnPageOpened(const base::ListValue* value) {
274 for (BrowsingDataCounter* counter : counters_) { 124 for (BrowsingDataCounter* counter : counters_) {
275 DCHECK(AreCountersEnabled()); 125 DCHECK(browsing_data::AreCountersEnabled());
276 counter->Restart(); 126 counter->Restart();
277 } 127 }
278 } 128 }
279 129
280 void ClearBrowserDataHandler::GetLocalizedValues( 130 void ClearBrowserDataHandler::GetLocalizedValues(
281 base::DictionaryValue* localized_strings) { 131 base::DictionaryValue* localized_strings) {
282 DCHECK(localized_strings); 132 DCHECK(localized_strings);
283 133
284 static OptionsStringResource resources[] = { 134 static OptionsStringResource resources[] = {
285 { "clearBrowserDataLabel", IDS_CLEAR_BROWSING_DATA_LABEL }, 135 { "clearBrowserDataLabel", IDS_CLEAR_BROWSING_DATA_LABEL },
286 { "clearBrowserDataSyncWarning", IDS_CLEAR_BROWSING_DATA_SYNCED_DELETION }, 136 { "clearBrowserDataSyncWarning", IDS_CLEAR_BROWSING_DATA_SYNCED_DELETION },
287 { "clearBrowserDataSupportString", AreCountersEnabled() 137 { "clearBrowserDataSupportString", browsing_data::AreCountersEnabled()
288 ? IDS_CLEAR_BROWSING_DATA_SOME_STUFF_REMAINS_SIMPLE 138 ? IDS_CLEAR_BROWSING_DATA_SOME_STUFF_REMAINS_SIMPLE
289 : IDS_CLEAR_BROWSING_DATA_SOME_STUFF_REMAINS }, 139 : IDS_CLEAR_BROWSING_DATA_SOME_STUFF_REMAINS },
290 { "deleteBrowsingHistoryCheckbox", IDS_DEL_BROWSING_HISTORY_CHKBOX }, 140 { "deleteBrowsingHistoryCheckbox", IDS_DEL_BROWSING_HISTORY_CHKBOX },
291 { "deleteDownloadHistoryCheckbox", IDS_DEL_DOWNLOAD_HISTORY_CHKBOX }, 141 { "deleteDownloadHistoryCheckbox", IDS_DEL_DOWNLOAD_HISTORY_CHKBOX },
292 { "deleteCacheCheckbox", IDS_DEL_CACHE_CHKBOX }, 142 { "deleteCacheCheckbox", IDS_DEL_CACHE_CHKBOX },
293 { "deleteCookiesCheckbox", IDS_DEL_COOKIES_CHKBOX }, 143 { "deleteCookiesCheckbox", IDS_DEL_COOKIES_CHKBOX },
294 { "deleteCookiesFlashCheckbox", IDS_DEL_COOKIES_FLASH_CHKBOX }, 144 { "deleteCookiesFlashCheckbox", IDS_DEL_COOKIES_FLASH_CHKBOX },
295 { "deletePasswordsCheckbox", IDS_DEL_PASSWORDS_CHKBOX }, 145 { "deletePasswordsCheckbox", IDS_DEL_PASSWORDS_CHKBOX },
296 { "deleteFormDataCheckbox", IDS_DEL_FORM_DATA_CHKBOX }, 146 { "deleteFormDataCheckbox", IDS_DEL_FORM_DATA_CHKBOX },
297 { "deleteHostedAppsDataCheckbox", IDS_DEL_HOSTED_APPS_DATA_CHKBOX }, 147 { "deleteHostedAppsDataCheckbox", IDS_DEL_HOSTED_APPS_DATA_CHKBOX },
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
447 } 297 }
448 298
449 void ClearBrowserDataHandler::OnBrowsingHistoryPrefChanged() { 299 void ClearBrowserDataHandler::OnBrowsingHistoryPrefChanged() {
450 web_ui()->CallJavascriptFunction( 300 web_ui()->CallJavascriptFunction(
451 "ClearBrowserDataOverlay.setAllowDeletingHistory", 301 "ClearBrowserDataOverlay.setAllowDeletingHistory",
452 base::FundamentalValue(*allow_deleting_browser_history_)); 302 base::FundamentalValue(*allow_deleting_browser_history_));
453 } 303 }
454 304
455 void ClearBrowserDataHandler::AddCounter( 305 void ClearBrowserDataHandler::AddCounter(
456 scoped_ptr<BrowsingDataCounter> counter) { 306 scoped_ptr<BrowsingDataCounter> counter) {
457 DCHECK(AreCountersEnabled()); 307 DCHECK(browsing_data::AreCountersEnabled());
458 308
459 counter->Init( 309 counter->Init(
460 Profile::FromWebUI(web_ui()), 310 Profile::FromWebUI(web_ui()),
461 base::Bind(&ClearBrowserDataHandler::UpdateCounterText, 311 base::Bind(&ClearBrowserDataHandler::UpdateCounterText,
462 base::Unretained(this))); 312 base::Unretained(this)));
463 counters_.push_back(counter.Pass()); 313 counters_.push_back(counter.Pass());
464 } 314 }
465 315
466 void ClearBrowserDataHandler::UpdateCounterText( 316 void ClearBrowserDataHandler::UpdateCounterText(
467 scoped_ptr<BrowsingDataCounter::Result> result) { 317 scoped_ptr<BrowsingDataCounter::Result> result) {
468 DCHECK(AreCountersEnabled()); 318 DCHECK(browsing_data::AreCountersEnabled());
469 web_ui()->CallJavascriptFunction( 319 web_ui()->CallJavascriptFunction(
470 "ClearBrowserDataOverlay.updateCounter", 320 "ClearBrowserDataOverlay.updateCounter",
471 base::StringValue(result->source()->GetPrefName()), 321 base::StringValue(result->source()->GetPrefName()),
472 base::StringValue(GetCounterTextFromResult(result.get()))); 322 base::StringValue(browsing_data::GetCounterTextFromResult(result.get())));
473 } 323 }
474 324
475 void ClearBrowserDataHandler::OnStateChanged() { 325 void ClearBrowserDataHandler::OnStateChanged() {
476 web_ui()->CallJavascriptFunction( 326 web_ui()->CallJavascriptFunction(
477 "ClearBrowserDataOverlay.updateSyncWarning", 327 "ClearBrowserDataOverlay.updateSyncWarning",
478 base::FundamentalValue(sync_service_ && sync_service_->IsSyncActive())); 328 base::FundamentalValue(sync_service_ && sync_service_->IsSyncActive()));
479 } 329 }
480 330
481 } // namespace options 331 } // namespace options
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698