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 20 ClearBrowserDataHandler::ClearBrowserDataHandler() : remover_(NULL) { 21 } 22 23 ClearBrowserDataHandler::~ClearBrowserDataHandler() { 24 if (remover_) 25 remover_->RemoveObserver(this); 26 } 27 28 void ClearBrowserDataHandler::Initialize() { 29 clear_plugin_lso_data_enabled_.Init(prefs::kClearPluginLSODataEnabled, 30 g_browser_process->local_state(), 31 NULL); 32 } 33 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 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 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 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