diff options
Diffstat (limited to 'chrome/browser/ui/webui/options2/clear_browser_data_handler.cc')
-rw-r--r-- | chrome/browser/ui/webui/options2/clear_browser_data_handler.cc | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/chrome/browser/ui/webui/options2/clear_browser_data_handler.cc b/chrome/browser/ui/webui/options2/clear_browser_data_handler.cc new file mode 100644 index 0000000..a861780 --- /dev/null +++ b/chrome/browser/ui/webui/options2/clear_browser_data_handler.cc @@ -0,0 +1,143 @@ +// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/ui/webui/options2/clear_browser_data_handler.h" + +#include "base/basictypes.h" +#include "base/bind.h" +#include "base/bind_helpers.h" +#include "base/string16.h" +#include "base/values.h" +#include "chrome/browser/browser_process.h" +#include "chrome/browser/prefs/pref_service.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/common/pref_names.h" +#include "content/public/browser/notification_details.h" +#include "grit/chromium_strings.h" +#include "grit/generated_resources.h" +#include "grit/locale_settings.h" +#include "ui/base/l10n/l10n_util.h" + +ClearBrowserDataHandler::ClearBrowserDataHandler() : remover_(NULL) { +} + +ClearBrowserDataHandler::~ClearBrowserDataHandler() { + if (remover_) + remover_->RemoveObserver(this); +} + +void ClearBrowserDataHandler::Initialize() { + clear_plugin_lso_data_enabled_.Init(prefs::kClearPluginLSODataEnabled, + Profile::FromWebUI(web_ui_)->GetPrefs(), + NULL); +} + +void ClearBrowserDataHandler::GetLocalizedValues( + DictionaryValue* localized_strings) { + DCHECK(localized_strings); + + static OptionsStringResource resources[] = { + { "clearBrowserDataLabel", IDS_CLEAR_BROWSING_DATA_LABEL }, + { "deleteBrowsingHistoryCheckbox", IDS_DEL_BROWSING_HISTORY_CHKBOX }, + { "deleteDownloadHistoryCheckbox", IDS_DEL_DOWNLOAD_HISTORY_CHKBOX }, + { "deleteCacheCheckbox", IDS_DEL_CACHE_CHKBOX }, + { "deleteCookiesCheckbox", IDS_DEL_COOKIES_CHKBOX }, + { "deleteCookiesFlashCheckbox", IDS_DEL_COOKIES_FLASH_CHKBOX }, + { "deletePasswordsCheckbox", IDS_DEL_PASSWORDS_CHKBOX }, + { "deleteFormDataCheckbox", IDS_DEL_FORM_DATA_CHKBOX }, + { "clearBrowserDataCommit", IDS_CLEAR_BROWSING_DATA_COMMIT }, + { "flashStorageSettings", IDS_FLASH_STORAGE_SETTINGS }, + { "flash_storage_url", IDS_FLASH_STORAGE_URL }, + { "clearDataDeleting", IDS_CLEAR_DATA_DELETING }, + }; + + RegisterStrings(localized_strings, resources, arraysize(resources)); + RegisterTitle(localized_strings, "clearBrowserDataOverlay", + IDS_CLEAR_BROWSING_DATA_TITLE); + + ListValue* time_list = new ListValue; + for (int i = 0; i < 5; i++) { + string16 label_string; + switch (i) { + case 0: + label_string = l10n_util::GetStringUTF16(IDS_CLEAR_DATA_HOUR); + break; + case 1: + label_string = l10n_util::GetStringUTF16(IDS_CLEAR_DATA_DAY); + break; + case 2: + label_string = l10n_util::GetStringUTF16(IDS_CLEAR_DATA_WEEK); + break; + case 3: + label_string = l10n_util::GetStringUTF16(IDS_CLEAR_DATA_4WEEKS); + break; + case 4: + label_string = l10n_util::GetStringUTF16(IDS_CLEAR_DATA_EVERYTHING); + break; + } + ListValue* option = new ListValue(); + option->Append(Value::CreateIntegerValue(i)); + option->Append(Value::CreateStringValue(label_string)); + time_list->Append(option); + } + localized_strings->Set("clearBrowserDataTimeList", time_list); +} + +void ClearBrowserDataHandler::RegisterMessages() { + // Setup handlers specific to this panel. + DCHECK(web_ui_); + web_ui_->RegisterMessageCallback("performClearBrowserData", + base::Bind(&ClearBrowserDataHandler::HandleClearBrowserData, + base::Unretained(this))); +} + +void ClearBrowserDataHandler::HandleClearBrowserData(const ListValue* value) { + Profile* profile = Profile::FromWebUI(web_ui_); + PrefService* prefs = profile->GetPrefs(); + + int remove_mask = 0; + if (prefs->GetBoolean(prefs::kDeleteBrowsingHistory)) + remove_mask |= BrowsingDataRemover::REMOVE_HISTORY; + if (prefs->GetBoolean(prefs::kDeleteDownloadHistory)) + remove_mask |= BrowsingDataRemover::REMOVE_DOWNLOADS; + if (prefs->GetBoolean(prefs::kDeleteCache)) + remove_mask |= BrowsingDataRemover::REMOVE_CACHE; + if (prefs->GetBoolean(prefs::kDeleteCookies)) { + int site_data_mask = BrowsingDataRemover::REMOVE_SITE_DATA; + // Don't try to clear LSO data if it's not supported. + if (!*clear_plugin_lso_data_enabled_) + site_data_mask &= ~BrowsingDataRemover::REMOVE_PLUGIN_DATA; + remove_mask |= site_data_mask; + } + if (prefs->GetBoolean(prefs::kDeletePasswords)) + remove_mask |= BrowsingDataRemover::REMOVE_PASSWORDS; + if (prefs->GetBoolean(prefs::kDeleteFormData)) + remove_mask |= BrowsingDataRemover::REMOVE_FORM_DATA; + + int period_selected = prefs->GetInteger(prefs::kDeleteTimePeriod); + + base::FundamentalValue state(true); + web_ui_->CallJavascriptFunction("ClearBrowserDataOverlay.setClearingState", + state); + + // If we are still observing a previous data remover, we need to stop + // observing. + if (remover_) + remover_->RemoveObserver(this); + + // BrowsingDataRemover deletes itself when done. + remover_ = new BrowsingDataRemover(profile, + static_cast<BrowsingDataRemover::TimePeriod>(period_selected), + base::Time()); + remover_->AddObserver(this); + remover_->Remove(remove_mask); +} + +void ClearBrowserDataHandler::OnBrowsingDataRemoverDone() { + // No need to remove ourselves as an observer as BrowsingDataRemover deletes + // itself after we return. + remover_ = NULL; + DCHECK(web_ui_); + web_ui_->CallJavascriptFunction("ClearBrowserDataOverlay.doneClearing"); +} |