From 25364e14c155d8eb3015f6be95af264a82ea2158 Mon Sep 17 00:00:00 2001 From: "evan@chromium.org" Date: Fri, 22 May 2009 01:37:19 +0000 Subject: 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 . git-svn-id: svn://svn.chromium.org/chrome/trunk/src@16694 0039d316-1c4b-4281-b951-d872f2087c98 --- chrome/browser/gtk/browser_window_gtk.cc | 3 +- .../browser/gtk/clear_browsing_data_dialog_gtk.cc | 197 +++++++++++++++++++++ .../browser/gtk/clear_browsing_data_dialog_gtk.h | 57 ++++++ 3 files changed, 256 insertions(+), 1 deletion(-) create mode 100644 chrome/browser/gtk/clear_browsing_data_dialog_gtk.cc create mode 100644 chrome/browser/gtk/clear_browsing_data_dialog_gtk.h (limited to 'chrome/browser/gtk') 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(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_ -- cgit v1.1