• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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