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