clear_browser_data_handler.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
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 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/bind.h" 9#include "base/bind_helpers.h" 10#include "base/string16.h" 11#include "base/values.h" 12#include "chrome/browser/browser_process.h" 13#include "chrome/browser/browsing_data/browsing_data_helper.h" 14#include "chrome/browser/browsing_data/browsing_data_remover.h" 15#include "chrome/browser/google/google_util.h" 16#include "chrome/browser/prefs/pref_service.h" 17#include "chrome/browser/profiles/profile.h" 18#include "chrome/common/pref_names.h" 19#include "content/public/browser/notification_details.h" 20#include "content/public/browser/web_ui.h" 21#include "grit/chromium_strings.h" 22#include "grit/generated_resources.h" 23#include "grit/locale_settings.h" 24#include "ui/base/l10n/l10n_util.h" 25 26namespace { 27const char kClearBrowsingDataLearnMoreUrl[] = 28 "https://support.google.com/chrome/?p=settings_clear_browsing_data"; 29} 30 31namespace options { 32 33ClearBrowserDataHandler::ClearBrowserDataHandler() 34 : remover_(NULL) { 35} 36 37ClearBrowserDataHandler::~ClearBrowserDataHandler() { 38 if (remover_) 39 remover_->RemoveObserver(this); 40} 41 42void ClearBrowserDataHandler::InitializeHandler() { 43 clear_plugin_lso_data_enabled_.Init(prefs::kClearPluginLSODataEnabled, 44 Profile::FromWebUI(web_ui())->GetPrefs(), 45 NULL); 46 pepper_flash_settings_enabled_.Init(prefs::kPepperFlashSettingsEnabled, 47 Profile::FromWebUI(web_ui())->GetPrefs(), 48 NULL); 49} 50 51void ClearBrowserDataHandler::GetLocalizedValues( 52 DictionaryValue* localized_strings) { 53 DCHECK(localized_strings); 54 55 static OptionsStringResource resources[] = { 56 { "clearBrowserDataLabel", IDS_CLEAR_BROWSING_DATA_LABEL }, 57 { "deleteBrowsingHistoryCheckbox", IDS_DEL_BROWSING_HISTORY_CHKBOX }, 58 { "deleteDownloadHistoryCheckbox", IDS_DEL_DOWNLOAD_HISTORY_CHKBOX }, 59 { "deleteCacheCheckbox", IDS_DEL_CACHE_CHKBOX }, 60 { "deleteCookiesCheckbox", IDS_DEL_COOKIES_CHKBOX }, 61 { "deleteCookiesFlashCheckbox", IDS_DEL_COOKIES_FLASH_CHKBOX }, 62 { "deletePasswordsCheckbox", IDS_DEL_PASSWORDS_CHKBOX }, 63 { "deleteFormDataCheckbox", IDS_DEL_FORM_DATA_CHKBOX }, 64 { "deleteHostedAppsDataCheckbox", IDS_DEL_HOSTED_APPS_DATA_CHKBOX }, 65 { "deauthorizeContentLicensesCheckbox", 66 IDS_DEAUTHORIZE_CONTENT_LICENSES_CHKBOX }, 67 { "clearBrowserDataCommit", IDS_CLEAR_BROWSING_DATA_COMMIT }, 68 { "flash_storage_url", IDS_FLASH_STORAGE_URL }, 69 }; 70 71 RegisterStrings(localized_strings, resources, arraysize(resources)); 72 RegisterTitle(localized_strings, "clearBrowserDataOverlay", 73 IDS_CLEAR_BROWSING_DATA_TITLE); 74 localized_strings->SetString( 75 "clearBrowsingDataLearnMoreUrl", 76 google_util::StringAppendGoogleLocaleParam( 77 kClearBrowsingDataLearnMoreUrl)); 78 79 ListValue* time_list = new ListValue; 80 for (int i = 0; i < 5; i++) { 81 string16 label_string; 82 switch (i) { 83 case 0: 84 label_string = l10n_util::GetStringUTF16(IDS_CLEAR_DATA_HOUR); 85 break; 86 case 1: 87 label_string = l10n_util::GetStringUTF16(IDS_CLEAR_DATA_DAY); 88 break; 89 case 2: 90 label_string = l10n_util::GetStringUTF16(IDS_CLEAR_DATA_WEEK); 91 break; 92 case 3: 93 label_string = l10n_util::GetStringUTF16(IDS_CLEAR_DATA_4WEEKS); 94 break; 95 case 4: 96 label_string = l10n_util::GetStringUTF16(IDS_CLEAR_DATA_EVERYTHING); 97 break; 98 } 99 ListValue* option = new ListValue(); 100 option->Append(Value::CreateIntegerValue(i)); 101 option->Append(Value::CreateStringValue(label_string)); 102 time_list->Append(option); 103 } 104 localized_strings->Set("clearBrowserDataTimeList", time_list); 105} 106 107void ClearBrowserDataHandler::RegisterMessages() { 108 // Setup handlers specific to this panel. 109 web_ui()->RegisterMessageCallback("performClearBrowserData", 110 base::Bind(&ClearBrowserDataHandler::HandleClearBrowserData, 111 base::Unretained(this))); 112} 113 114void ClearBrowserDataHandler::HandleClearBrowserData(const ListValue* value) { 115 DCHECK(!remover_); 116 117 Profile* profile = Profile::FromWebUI(web_ui()); 118 PrefService* prefs = profile->GetPrefs(); 119 120 int site_data_mask = BrowsingDataRemover::REMOVE_SITE_DATA; 121 // Don't try to clear LSO data if it's not supported. 122 if (!*clear_plugin_lso_data_enabled_) 123 site_data_mask &= ~BrowsingDataRemover::REMOVE_PLUGIN_DATA; 124 125 int remove_mask = 0; 126 int origin_mask = 0; 127 if (prefs->GetBoolean(prefs::kDeleteBrowsingHistory)) 128 remove_mask |= BrowsingDataRemover::REMOVE_HISTORY; 129 if (prefs->GetBoolean(prefs::kDeleteDownloadHistory)) 130 remove_mask |= BrowsingDataRemover::REMOVE_DOWNLOADS; 131 if (prefs->GetBoolean(prefs::kDeleteCache)) 132 remove_mask |= BrowsingDataRemover::REMOVE_CACHE; 133 if (prefs->GetBoolean(prefs::kDeleteCookies)) { 134 remove_mask |= site_data_mask; 135 origin_mask |= BrowsingDataHelper::UNPROTECTED_WEB; 136 } 137 if (prefs->GetBoolean(prefs::kDeletePasswords)) 138 remove_mask |= BrowsingDataRemover::REMOVE_PASSWORDS; 139 if (prefs->GetBoolean(prefs::kDeleteFormData)) 140 remove_mask |= BrowsingDataRemover::REMOVE_FORM_DATA; 141 // Clearing Content Licenses is only supported in Pepper Flash. 142 if (prefs->GetBoolean(prefs::kDeauthorizeContentLicenses) && 143 *pepper_flash_settings_enabled_) { 144 remove_mask |= BrowsingDataRemover::REMOVE_CONTENT_LICENSES; 145 } 146 if (prefs->GetBoolean(prefs::kDeleteHostedAppsData)) { 147 remove_mask |= site_data_mask; 148 origin_mask |= BrowsingDataHelper::PROTECTED_WEB; 149 } 150 151 // BrowsingDataRemover deletes itself when done. 152 int period_selected = prefs->GetInteger(prefs::kDeleteTimePeriod); 153 remover_ = BrowsingDataRemover::CreateForPeriod(profile, 154 static_cast<BrowsingDataRemover::TimePeriod>(period_selected)); 155 remover_->AddObserver(this); 156 remover_->Remove(remove_mask, origin_mask); 157} 158 159void ClearBrowserDataHandler::OnBrowsingDataRemoverDone() { 160 // No need to remove ourselves as an observer as BrowsingDataRemover deletes 161 // itself after we return. 162 remover_ = NULL; 163 web_ui()->CallJavascriptFunction("ClearBrowserDataOverlay.doneClearing"); 164} 165 166} // namespace options 167