summaryrefslogtreecommitdiffstats
path: root/chrome/browser/gtk
diff options
context:
space:
mode:
authorevan@chromium.org <evan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-05-22 01:37:19 +0000
committerevan@chromium.org <evan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-05-22 01:37:19 +0000
commit25364e14c155d8eb3015f6be95af264a82ea2158 (patch)
tree4c5048d9ba7f979894d1e9c4d1723cc8e85759db /chrome/browser/gtk
parent3af08941db12e58b76361cda8cf313d529471b35 (diff)
downloadchromium_src-25364e14c155d8eb3015f6be95af264a82ea2158.zip
chromium_src-25364e14c155d8eb3015f6be95af264a82ea2158.tar.gz
chromium_src-25364e14c155d8eb3015f6be95af264a82ea2158.tar.bz2
Implement clear browsing data dialog in linux
As well, refactored code on the windows side to reuse some functionality for the deletion range specified by its time period. BUG=11192 (http://crbug.com/11192) TEST=Looks pretty Review URL: http://codereview.chromium.org/113558 Patch from Mohamed Mansour <m0.interactive@gmail.com>. git-svn-id: svn://svn.chromium.org/chrome/trunk/src@16694 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/gtk')
-rw-r--r--chrome/browser/gtk/browser_window_gtk.cc3
-rw-r--r--chrome/browser/gtk/clear_browsing_data_dialog_gtk.cc197
-rw-r--r--chrome/browser/gtk/clear_browsing_data_dialog_gtk.h57
3 files changed, 256 insertions, 1 deletions
diff --git a/chrome/browser/gtk/browser_window_gtk.cc b/chrome/browser/gtk/browser_window_gtk.cc
index 1067340..3a97c6c 100644
--- a/chrome/browser/gtk/browser_window_gtk.cc
+++ b/chrome/browser/gtk/browser_window_gtk.cc
@@ -21,6 +21,7 @@
#include "chrome/browser/gtk/about_chrome_dialog.h"
#include "chrome/browser/gtk/bookmark_bar_gtk.h"
#include "chrome/browser/gtk/browser_toolbar_gtk.h"
+#include "chrome/browser/gtk/clear_browsing_data_dialog_gtk.h"
#include "chrome/browser/gtk/go_button_gtk.h"
#include "chrome/browser/gtk/import_dialog_gtk.h"
#include "chrome/browser/gtk/infobar_container_gtk.h"
@@ -569,7 +570,7 @@ void BrowserWindowGtk::ShowReportBugDialog() {
}
void BrowserWindowGtk::ShowClearBrowsingDataDialog() {
- NOTIMPLEMENTED();
+ ClearBrowsingDataDialogGtk::Show(window_, browser_->profile());
}
void BrowserWindowGtk::ShowImportDialog() {
diff --git a/chrome/browser/gtk/clear_browsing_data_dialog_gtk.cc b/chrome/browser/gtk/clear_browsing_data_dialog_gtk.cc
new file mode 100644
index 0000000..35f8432
--- /dev/null
+++ b/chrome/browser/gtk/clear_browsing_data_dialog_gtk.cc
@@ -0,0 +1,197 @@
+// Copyright (c) 2009 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/gtk/clear_browsing_data_dialog_gtk.h"
+
+#include "app/l10n_util.h"
+#include "app/resource_bundle.h"
+#include "chrome/browser/profile.h"
+#include "chrome/common/pref_names.h"
+#include "chrome/common/pref_service.h"
+#include "grit/generated_resources.h"
+
+// static
+void ClearBrowsingDataDialogGtk::Show(GtkWindow* parent, Profile* profile) {
+ new ClearBrowsingDataDialogGtk(parent, profile);
+}
+
+ClearBrowsingDataDialogGtk::ClearBrowsingDataDialogGtk(GtkWindow* parent,
+ Profile* profile) :
+ profile_(profile), remover_(NULL) {
+ // Build the dialog.
+ GtkWidget* dialog = gtk_dialog_new_with_buttons(
+ l10n_util::GetStringUTF8(IDS_CLEAR_BROWSING_DATA_TITLE).c_str(),
+ parent,
+ (GtkDialogFlags) (GTK_DIALOG_MODAL | GTK_DIALOG_NO_SEPARATOR),
+ GTK_STOCK_CANCEL,
+ GTK_RESPONSE_REJECT,
+ l10n_util::GetStringUTF8(IDS_CLEAR_BROWSING_DATA_COMMIT).c_str(),
+ GTK_RESPONSE_ACCEPT,
+ NULL);
+
+ GtkWidget* content_area = GTK_DIALOG(dialog)->vbox;
+ gtk_box_set_spacing(GTK_BOX(content_area), 18);
+
+ GtkWidget* vbox = gtk_vbox_new(FALSE, 6);
+ gtk_container_add(GTK_CONTAINER(content_area), vbox);
+
+ // Label on top of the checkboxes.
+ GtkWidget* description = gtk_label_new(
+ l10n_util::GetStringUTF8(IDS_CLEAR_BROWSING_DATA_LABEL).c_str());
+ gtk_misc_set_alignment(GTK_MISC(description), 0, 0);
+ gtk_box_pack_start(GTK_BOX(vbox), description, FALSE, FALSE, 0);
+
+ // History checkbox.
+ del_history_checkbox_ = gtk_check_button_new_with_label(
+ l10n_util::GetStringUTF8(IDS_DEL_BROWSING_HISTORY_CHKBOX).c_str());
+ gtk_box_pack_start(GTK_BOX(vbox), del_history_checkbox_, FALSE, FALSE, 0);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(del_history_checkbox_),
+ profile_->GetPrefs()->GetBoolean(prefs::kDeleteBrowsingHistory));
+ g_signal_connect(del_history_checkbox_, "toggled",
+ G_CALLBACK(HandleOnClickedWidget), this);
+
+ // Downloads checkbox.
+ del_downloads_checkbox_ = gtk_check_button_new_with_label(
+ l10n_util::GetStringUTF8(IDS_DEL_DOWNLOAD_HISTORY_CHKBOX).c_str());
+ gtk_box_pack_start(GTK_BOX(vbox), del_downloads_checkbox_, FALSE, FALSE, 0);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(del_downloads_checkbox_),
+ profile_->GetPrefs()->GetBoolean(prefs::kDeleteDownloadHistory));
+ g_signal_connect(del_downloads_checkbox_, "toggled",
+ G_CALLBACK(HandleOnClickedWidget), this);
+
+ // Cache checkbox.
+ del_cache_checkbox_ = gtk_check_button_new_with_label(
+ l10n_util::GetStringUTF8(IDS_DEL_CACHE_CHKBOX).c_str());
+ gtk_box_pack_start(GTK_BOX(vbox), del_cache_checkbox_, FALSE, FALSE, 0);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(del_cache_checkbox_),
+ profile_->GetPrefs()->GetBoolean(prefs::kDeleteCache));
+ g_signal_connect(del_cache_checkbox_, "toggled",
+ G_CALLBACK(HandleOnClickedWidget), this);
+
+ // Cookies checkbox.
+ del_cookies_checkbox_ = gtk_check_button_new_with_label(
+ l10n_util::GetStringUTF8(IDS_DEL_COOKIES_CHKBOX).c_str());
+ gtk_box_pack_start(GTK_BOX(vbox), del_cookies_checkbox_, FALSE, FALSE, 0);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(del_cookies_checkbox_),
+ profile_->GetPrefs()->GetBoolean(prefs::kDeleteCookies));
+ g_signal_connect(del_cookies_checkbox_, "toggled",
+ G_CALLBACK(HandleOnClickedWidget), this);
+
+ // Passwords checkbox.
+ del_passwords_checkbox_ = gtk_check_button_new_with_label(
+ l10n_util::GetStringUTF8(IDS_DEL_PASSWORDS_CHKBOX).c_str());
+ gtk_box_pack_start(GTK_BOX(vbox), del_passwords_checkbox_, FALSE, FALSE, 0);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(del_passwords_checkbox_),
+ profile_->GetPrefs()->GetBoolean(prefs::kDeletePasswords));
+ g_signal_connect(del_passwords_checkbox_, "toggled",
+ G_CALLBACK(HandleOnClickedWidget), this);
+
+ // Form data checkbox.
+ del_form_data_checkbox_ = gtk_check_button_new_with_label(
+ l10n_util::GetStringUTF8(IDS_DEL_FORM_DATA_CHKBOX).c_str());
+ gtk_box_pack_start(GTK_BOX(vbox), del_form_data_checkbox_, FALSE, FALSE, 0);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(del_form_data_checkbox_),
+ profile_->GetPrefs()->GetBoolean(prefs::kDeleteFormData));
+ g_signal_connect(del_form_data_checkbox_, "toggled",
+ G_CALLBACK(HandleOnClickedWidget), this);
+
+ // Create a horizontal layout for the combo box and label.
+ GtkWidget* combo_hbox = gtk_hbox_new(FALSE, 6);
+ GtkWidget* time_period_label_ = gtk_label_new(
+ l10n_util::GetStringUTF8(IDS_CLEAR_BROWSING_DATA_TIME_LABEL).c_str());
+ gtk_box_pack_start(GTK_BOX(combo_hbox), time_period_label_, FALSE, FALSE, 0);
+
+ // Time period combo box items.
+ time_period_combobox_ = gtk_combo_box_new_text();
+ gtk_combo_box_append_text(GTK_COMBO_BOX(time_period_combobox_),
+ l10n_util::GetStringUTF8(IDS_CLEAR_DATA_DAY).c_str());
+ gtk_combo_box_append_text(GTK_COMBO_BOX(time_period_combobox_),
+ l10n_util::GetStringUTF8(IDS_CLEAR_DATA_WEEK).c_str());
+ gtk_combo_box_append_text(GTK_COMBO_BOX(time_period_combobox_),
+ l10n_util::GetStringUTF8(IDS_CLEAR_DATA_4WEEKS).c_str());
+ gtk_combo_box_append_text(GTK_COMBO_BOX(time_period_combobox_),
+ l10n_util::GetStringUTF8(IDS_CLEAR_DATA_EVERYTHING).c_str());
+ gtk_combo_box_set_active(GTK_COMBO_BOX(time_period_combobox_),
+ profile_->GetPrefs()->GetInteger(prefs::kDeleteTimePeriod));
+ gtk_box_pack_start(GTK_BOX(combo_hbox),
+ time_period_combobox_, FALSE, FALSE, 0);
+ g_signal_connect(time_period_combobox_, "changed",
+ G_CALLBACK(HandleOnClickedWidget), this);
+
+ // Add the combo/label time period box to the vertical layout.
+ gtk_box_pack_start(GTK_BOX(vbox), combo_hbox, FALSE, FALSE, 0);
+
+ g_signal_connect(dialog, "response",
+ G_CALLBACK(HandleOnResponseDialog), this);
+ gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE);
+ gtk_widget_show_all(dialog);
+}
+
+void ClearBrowsingDataDialogGtk::OnDialogResponse(GtkWidget* widget,
+ int response) {
+ if (response == GTK_RESPONSE_ACCEPT) {
+ int period_selected = gtk_combo_box_get_active(
+ GTK_COMBO_BOX(time_period_combobox_));
+
+ int items = 0;
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(del_history_checkbox_)))
+ items |= BrowsingDataRemover::REMOVE_HISTORY;
+ if (gtk_toggle_button_get_active(
+ GTK_TOGGLE_BUTTON(del_downloads_checkbox_))) {
+ items |= BrowsingDataRemover::REMOVE_DOWNLOADS;
+ }
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(del_cookies_checkbox_)))
+ items |= BrowsingDataRemover::REMOVE_COOKIES;
+ if (gtk_toggle_button_get_active(
+ GTK_TOGGLE_BUTTON(del_passwords_checkbox_))) {
+ items |= BrowsingDataRemover::REMOVE_PASSWORDS;
+ }
+ if (gtk_toggle_button_get_active(
+ GTK_TOGGLE_BUTTON(del_form_data_checkbox_))) {
+ items |= BrowsingDataRemover::REMOVE_FORM_DATA;
+ }
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(del_cache_checkbox_)))
+ items |= BrowsingDataRemover::REMOVE_CACHE;
+
+ // BrowsingDataRemover deletes itself when done.
+ remover_ = new BrowsingDataRemover(profile_,
+ static_cast<BrowsingDataRemover::TimePeriod>(period_selected),
+ base::Time());
+ remover_->Remove(items);
+ }
+
+ delete this;
+ gtk_widget_destroy(GTK_WIDGET(widget));
+}
+
+void ClearBrowsingDataDialogGtk::OnDialogWidgetClicked(GtkWidget* widget) {
+ if (widget == del_history_checkbox_) {
+ profile_->GetPrefs()->SetBoolean(prefs::kDeleteBrowsingHistory,
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)) ?
+ true : false);
+ } else if (widget == del_downloads_checkbox_) {
+ profile_->GetPrefs()->SetBoolean(prefs::kDeleteDownloadHistory,
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)) ?
+ true : false);
+ } else if (widget == del_cache_checkbox_) {
+ profile_->GetPrefs()->SetBoolean(prefs::kDeleteCache,
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)) ?
+ true : false);
+ } else if (widget == del_cookies_checkbox_) {
+ profile_->GetPrefs()->SetBoolean(prefs::kDeleteCookies,
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)) ?
+ true : false);
+ } else if (widget == del_passwords_checkbox_) {
+ profile_->GetPrefs()->SetBoolean(prefs::kDeletePasswords,
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)) ?
+ true : false);
+ } else if (widget == del_form_data_checkbox_) {
+ profile_->GetPrefs()->SetBoolean(prefs::kDeleteFormData,
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)) ?
+ true : false);
+ } else if (widget == time_period_combobox_) {
+ profile_->GetPrefs()->SetInteger(prefs::kDeleteTimePeriod,
+ gtk_combo_box_get_active(GTK_COMBO_BOX(widget)));
+ }
+}
diff --git a/chrome/browser/gtk/clear_browsing_data_dialog_gtk.h b/chrome/browser/gtk/clear_browsing_data_dialog_gtk.h
new file mode 100644
index 0000000..eddc8bb
--- /dev/null
+++ b/chrome/browser/gtk/clear_browsing_data_dialog_gtk.h
@@ -0,0 +1,57 @@
+// Copyright (c) 2009 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.
+
+#ifndef CHROME_BROWSER_GTK_CLEAR_BROWSING_DATA_DIALOG_GTK_H_
+#define CHROME_BROWSER_GTK_CLEAR_BROWSING_DATA_DIALOG_GTK_H_
+
+#include "chrome/browser/browsing_data_remover.h"
+
+class Profile;
+typedef struct _GtkWindow GtkWindow;
+
+class ClearBrowsingDataDialogGtk {
+ public:
+ // Displays the dialog box to clear browsing data from |profile|.
+ static void Show(GtkWindow* parent, Profile* profile);
+
+ private:
+ ClearBrowsingDataDialogGtk(GtkWindow* parent, Profile* profile);
+ ~ClearBrowsingDataDialogGtk() { }
+
+ // Handler to respond to Ok and Cancel responses from the dialog.
+ static void HandleOnResponseDialog(GtkWidget* widget,
+ int response,
+ ClearBrowsingDataDialogGtk* user_data) {
+ user_data->OnDialogResponse(widget, response);
+ }
+
+ // Handler to respond to widget clicked actions from the dialog.
+ static void HandleOnClickedWidget(GtkWidget* widget,
+ ClearBrowsingDataDialogGtk* user_data) {
+ user_data->OnDialogWidgetClicked(widget);
+ }
+ void OnDialogResponse(GtkWidget* widget, int response);
+ void OnDialogWidgetClicked(GtkWidget* widget);
+
+ // UI elements.
+ GtkWidget* del_history_checkbox_;
+ GtkWidget* del_downloads_checkbox_;
+ GtkWidget* del_cache_checkbox_;
+ GtkWidget* del_cookies_checkbox_;
+ GtkWidget* del_passwords_checkbox_;
+ GtkWidget* del_form_data_checkbox_;
+ GtkWidget* time_period_combobox_;
+
+ // Our current profile.
+ Profile* profile_;
+
+ // If non-null it means removal is in progress. BrowsingDataRemover takes care
+ // of deleting itself when done.
+ BrowsingDataRemover* remover_;
+
+ DISALLOW_COPY_AND_ASSIGN(ClearBrowsingDataDialogGtk);
+};
+
+
+#endif // CHROME_BROWSER_GTK_CLEAR_BROWSING_DATA_DIALOG_GTK_H_