Home | History | Annotate | Download | only in options
      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