1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/ui/webui/options/clear_browser_data_handler.h"
6
7 #include "base/basictypes.h"
8 #include "base/string16.h"
9 #include "base/values.h"
10 #include "chrome/browser/browser_process.h"
11 #include "chrome/browser/prefs/pref_service.h"
12 #include "chrome/browser/profiles/profile.h"
13 #include "chrome/common/pref_names.h"
14 #include "content/common/notification_details.h"
15 #include "grit/chromium_strings.h"
16 #include "grit/generated_resources.h"
17 #include "grit/locale_settings.h"
18 #include "ui/base/l10n/l10n_util.h"
19
ClearBrowserDataHandler()20 ClearBrowserDataHandler::ClearBrowserDataHandler() : remover_(NULL) {
21 }
22
~ClearBrowserDataHandler()23 ClearBrowserDataHandler::~ClearBrowserDataHandler() {
24 if (remover_)
25 remover_->RemoveObserver(this);
26 }
27
Initialize()28 void ClearBrowserDataHandler::Initialize() {
29 clear_plugin_lso_data_enabled_.Init(prefs::kClearPluginLSODataEnabled,
30 g_browser_process->local_state(),
31 NULL);
32 }
33
GetLocalizedValues(DictionaryValue * localized_strings)34 void ClearBrowserDataHandler::GetLocalizedValues(
35 DictionaryValue* localized_strings) {
36 DCHECK(localized_strings);
37 RegisterTitle(localized_strings, "clearBrowserDataOverlay",
38 IDS_CLEAR_BROWSING_DATA_TITLE);
39
40 localized_strings->SetString("clearBrowserDataLabel",
41 l10n_util::GetStringUTF16(IDS_CLEAR_BROWSING_DATA_LABEL));
42 localized_strings->SetString("deleteBrowsingHistoryCheckbox",
43 l10n_util::GetStringUTF16(IDS_DEL_BROWSING_HISTORY_CHKBOX));
44 localized_strings->SetString("deleteDownloadHistoryCheckbox",
45 l10n_util::GetStringUTF16(IDS_DEL_DOWNLOAD_HISTORY_CHKBOX));
46 localized_strings->SetString("deleteCacheCheckbox",
47 l10n_util::GetStringUTF16(IDS_DEL_CACHE_CHKBOX));
48 localized_strings->SetString("deleteCookiesCheckbox",
49 l10n_util::GetStringUTF16(IDS_DEL_COOKIES_CHKBOX));
50 localized_strings->SetString("deleteCookiesFlashCheckbox",
51 l10n_util::GetStringUTF16(IDS_DEL_COOKIES_FLASH_CHKBOX));
52 localized_strings->SetString("deletePasswordsCheckbox",
53 l10n_util::GetStringUTF16(IDS_DEL_PASSWORDS_CHKBOX));
54 localized_strings->SetString("deleteFormDataCheckbox",
55 l10n_util::GetStringUTF16(IDS_DEL_FORM_DATA_CHKBOX));
56 localized_strings->SetString("clearBrowserDataCommit",
57 l10n_util::GetStringUTF16(IDS_CLEAR_BROWSING_DATA_COMMIT));
58 localized_strings->SetString("flashStorageSettings",
59 l10n_util::GetStringUTF16(IDS_FLASH_STORAGE_SETTINGS));
60 localized_strings->SetString("flash_storage_url",
61 l10n_util::GetStringUTF16(IDS_FLASH_STORAGE_URL));
62 localized_strings->SetString("clearDataDeleting",
63 l10n_util::GetStringUTF16(IDS_CLEAR_DATA_DELETING));
64
65 ListValue* time_list = new ListValue;
66 for (int i = 0; i < 5; i++) {
67 string16 label_string;
68 switch (i) {
69 case 0:
70 label_string = l10n_util::GetStringUTF16(IDS_CLEAR_DATA_HOUR);
71 break;
72 case 1:
73 label_string = l10n_util::GetStringUTF16(IDS_CLEAR_DATA_DAY);
74 break;
75 case 2:
76 label_string = l10n_util::GetStringUTF16(IDS_CLEAR_DATA_WEEK);
77 break;
78 case 3:
79 label_string = l10n_util::GetStringUTF16(IDS_CLEAR_DATA_4WEEKS);
80 break;
81 case 4:
82 label_string = l10n_util::GetStringUTF16(IDS_CLEAR_DATA_EVERYTHING);
83 break;
84 }
85 ListValue* option = new ListValue();
86 option->Append(Value::CreateIntegerValue(i));
87 option->Append(Value::CreateStringValue(label_string));
88 time_list->Append(option);
89 }
90 localized_strings->Set("clearBrowserDataTimeList", time_list);
91 }
92
RegisterMessages()93 void ClearBrowserDataHandler::RegisterMessages() {
94 // Setup handlers specific to this panel.
95 DCHECK(web_ui_);
96 web_ui_->RegisterMessageCallback("performClearBrowserData",
97 NewCallback(this, &ClearBrowserDataHandler::HandleClearBrowserData));
98 }
99
HandleClearBrowserData(const ListValue * value)100 void ClearBrowserDataHandler::HandleClearBrowserData(const ListValue* value) {
101 Profile* profile = web_ui_->GetProfile();
102 PrefService* prefs = profile->GetPrefs();
103
104 int remove_mask = 0;
105 if (prefs->GetBoolean(prefs::kDeleteBrowsingHistory))
106 remove_mask |= BrowsingDataRemover::REMOVE_HISTORY;
107 if (prefs->GetBoolean(prefs::kDeleteDownloadHistory))
108 remove_mask |= BrowsingDataRemover::REMOVE_DOWNLOADS;
109 if (prefs->GetBoolean(prefs::kDeleteCache))
110 remove_mask |= BrowsingDataRemover::REMOVE_CACHE;
111 if (prefs->GetBoolean(prefs::kDeleteCookies)) {
112 remove_mask |= BrowsingDataRemover::REMOVE_COOKIES;
113 if (*clear_plugin_lso_data_enabled_)
114 remove_mask |= BrowsingDataRemover::REMOVE_LSO_DATA;
115 }
116 if (prefs->GetBoolean(prefs::kDeletePasswords))
117 remove_mask |= BrowsingDataRemover::REMOVE_PASSWORDS;
118 if (prefs->GetBoolean(prefs::kDeleteFormData))
119 remove_mask |= BrowsingDataRemover::REMOVE_FORM_DATA;
120
121 int period_selected = prefs->GetInteger(prefs::kDeleteTimePeriod);
122
123 FundamentalValue state(true);
124 web_ui_->CallJavascriptFunction("ClearBrowserDataOverlay.setClearingState",
125 state);
126
127 // If we are still observing a previous data remover, we need to stop
128 // observing.
129 if (remover_)
130 remover_->RemoveObserver(this);
131
132 // BrowsingDataRemover deletes itself when done.
133 remover_ = new BrowsingDataRemover(profile,
134 static_cast<BrowsingDataRemover::TimePeriod>(period_selected),
135 base::Time());
136 remover_->AddObserver(this);
137 remover_->Remove(remove_mask);
138 }
139
OnBrowsingDataRemoverDone()140 void ClearBrowserDataHandler::OnBrowsingDataRemoverDone() {
141 // No need to remove ourselves as an observer as BrowsingDataRemover deletes
142 // itself after we return.
143 remover_ = NULL;
144 DCHECK(web_ui_);
145 web_ui_->CallJavascriptFunction("ClearBrowserDataOverlay.doneClearing");
146 }
147