summaryrefslogtreecommitdiffstats
path: root/chrome/browser
diff options
context:
space:
mode:
authormattm@chromium.org <mattm@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-11-11 23:07:58 +0000
committermattm@chromium.org <mattm@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-11-11 23:07:58 +0000
commit42062e78622add4b84f872707530670d4894d5c9 (patch)
tree57555878cc6583012dbc2db4c3842282d1ec6ac5 /chrome/browser
parentdda7d9c65875b7650f36fa8c2a03b5813dc3ecd3 (diff)
downloadchromium_src-42062e78622add4b84f872707530670d4894d5c9.zip
chromium_src-42062e78622add4b84f872707530670d4894d5c9.tar.gz
chromium_src-42062e78622add4b84f872707530670d4894d5c9.tar.bz2
Linux: Convert Cookies options page from a list into a tree.
Add gtk_tree::TreeAdapter class. BUG=26713 TEST=compare behavior to windows impl Review URL: http://codereview.chromium.org/371079 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@31732 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser')
-rw-r--r--chrome/browser/cookies_tree_model.cc2
-rw-r--r--chrome/browser/cookies_tree_model.h3
-rw-r--r--chrome/browser/gtk/options/cookies_view.cc254
-rw-r--r--chrome/browser/gtk/options/cookies_view.h67
-rw-r--r--chrome/browser/gtk/options/cookies_view_unittest.cc497
5 files changed, 287 insertions, 536 deletions
diff --git a/chrome/browser/cookies_tree_model.cc b/chrome/browser/cookies_tree_model.cc
index 1ec6e3f..4819c98 100644
--- a/chrome/browser/cookies_tree_model.cc
+++ b/chrome/browser/cookies_tree_model.cc
@@ -222,7 +222,7 @@ void CookiesTreeModel::DeleteAllCookies() {
NotifyObserverTreeNodeChanged(root);
}
-void CookiesTreeModel::DeleteCookieNode(CookieTreeCookieNode* cookie_node) {
+void CookiesTreeModel::DeleteCookieNode(CookieTreeNode* cookie_node) {
cookie_node->DeleteStoredObjects();
// find the parent and index
CookieTreeNode* parent_node = cookie_node->GetParent();
diff --git a/chrome/browser/cookies_tree_model.h b/chrome/browser/cookies_tree_model.h
index c1f26308..16606dc 100644
--- a/chrome/browser/cookies_tree_model.h
+++ b/chrome/browser/cookies_tree_model.h
@@ -184,7 +184,7 @@ class CookiesTreeModel : public TreeNodeModel<CookieTreeNode> {
// CookiesTreeModel methods:
void DeleteCookie(const net::CookieMonster::CookieListPair& cookie);
void DeleteAllCookies();
- void DeleteCookieNode(CookieTreeCookieNode* cookie_node);
+ void DeleteCookieNode(CookieTreeNode* cookie_node);
private:
enum CookieIconIndex {
@@ -204,4 +204,3 @@ class CookiesTreeModel : public TreeNodeModel<CookieTreeNode> {
};
#endif // CHROME_BROWSER_COOKIES_TREE_MODEL_H_
-
diff --git a/chrome/browser/gtk/options/cookies_view.cc b/chrome/browser/gtk/options/cookies_view.cc
index ee0d213..69ac82c 100644
--- a/chrome/browser/gtk/options/cookies_view.cc
+++ b/chrome/browser/gtk/options/cookies_view.cc
@@ -4,6 +4,7 @@
#include "chrome/browser/gtk/options/cookies_view.h"
+#include <gdk/gdkkeysyms.h>
#include <set>
#include <string>
@@ -12,7 +13,7 @@
#include "base/i18n/time_formatting.h"
#include "base/message_loop.h"
#include "base/string_util.h"
-#include "chrome/browser/cookies_table_model.h"
+#include "chrome/browser/cookies_tree_model.h"
#include "chrome/common/gtk_util.h"
#include "grit/generated_resources.h"
@@ -21,10 +22,6 @@ namespace {
// Initial size for dialog.
const int kDialogDefaultWidth = 550;
const int kDialogDefaultHeight = 550;
-const int kSiteColumnInitialSize = 300;
-
-// Delay after entering filter text before filtering occurs.
-const int kSearchFilterDelayMs = 100;
// Response ids for our custom buttons.
enum {
@@ -70,8 +67,7 @@ void CookiesView::Show(Profile* profile) {
}
CookiesView::CookiesView(Profile* profile)
- : profile_(profile),
- filter_update_factory_(this) {
+ : profile_(profile) {
Init();
}
@@ -115,29 +111,6 @@ void CookiesView::Init() {
g_signal_connect(dialog_, "response", G_CALLBACK(OnResponse), this);
g_signal_connect(dialog_, "destroy", G_CALLBACK(OnWindowDestroy), this);
- // Filtering controls.
- GtkWidget* filter_hbox = gtk_hbox_new(FALSE, gtk_util::kControlSpacing);
- filter_entry_ = gtk_entry_new();
- g_signal_connect(G_OBJECT(filter_entry_), "activate",
- G_CALLBACK(OnFilterEntryActivated), this);
- g_signal_connect(G_OBJECT(filter_entry_), "changed",
- G_CALLBACK(OnFilterEntryChanged), this);
- gtk_box_pack_start(GTK_BOX(filter_hbox), filter_entry_,
- TRUE, TRUE, 0);
- filter_clear_button_ = gtk_button_new_with_mnemonic(
- gtk_util::ConvertAcceleratorsFromWindowsStyle(
- l10n_util::GetStringUTF8(IDS_COOKIES_CLEAR_SEARCH_LABEL)).c_str());
- g_signal_connect(G_OBJECT(filter_clear_button_), "clicked",
- G_CALLBACK(OnFilterClearButtonClicked), this);
- gtk_box_pack_start(GTK_BOX(filter_hbox), filter_clear_button_,
- FALSE, FALSE, 0);
-
- GtkWidget* filter_controls = gtk_util::CreateLabeledControlsGroup(NULL,
- l10n_util::GetStringUTF8(IDS_COOKIES_SEARCH_LABEL).c_str(), filter_hbox,
- NULL);
- gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog_)->vbox), filter_controls,
- FALSE, FALSE, 0);
-
// Cookie list.
GtkWidget* cookie_list_vbox = gtk_vbox_new(FALSE, gtk_util::kControlSpacing);
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog_)->vbox), cookie_list_vbox,
@@ -157,48 +130,32 @@ void CookiesView::Init() {
GTK_SHADOW_ETCHED_IN);
gtk_box_pack_start(GTK_BOX(cookie_list_vbox), scroll_window, TRUE, TRUE, 0);
- list_store_ = gtk_list_store_new(COL_COUNT,
- G_TYPE_STRING,
- G_TYPE_STRING);
- list_sort_ = gtk_tree_model_sort_new_with_model(GTK_TREE_MODEL(list_store_));
- gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(list_sort_),
- COL_SITE, CompareSite, this, NULL);
- gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(list_sort_),
- COL_COOKIE_NAME, CompareCookieName, this,
- NULL);
- gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(list_sort_),
- COL_SITE, GTK_SORT_ASCENDING);
- tree_ = gtk_tree_view_new_with_model(GTK_TREE_MODEL(list_sort_));
- g_object_unref(list_store_);
- g_object_unref(list_sort_);
+ cookies_tree_model_.reset(new CookiesTreeModel(profile_));
+ cookies_tree_adapter_.reset(
+ new gtk_tree::TreeAdapter(this, cookies_tree_model_.get()));
+ tree_ = gtk_tree_view_new_with_model(
+ GTK_TREE_MODEL(cookies_tree_adapter_->tree_store()));
gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(tree_), TRUE);
gtk_container_add(GTK_CONTAINER(scroll_window), tree_);
- GtkTreeViewColumn* site_column = gtk_tree_view_column_new();
- GtkCellRenderer* site_renderer = gtk_cell_renderer_text_new();
- gtk_tree_view_column_pack_start(site_column, site_renderer, TRUE);
- gtk_tree_view_column_add_attribute(site_column, site_renderer, "text",
- COL_SITE);
+ GtkTreeViewColumn* title_column = gtk_tree_view_column_new();
+ GtkCellRenderer* pixbuf_renderer = gtk_cell_renderer_pixbuf_new();
+ gtk_tree_view_column_pack_start(title_column, pixbuf_renderer, FALSE);
+ gtk_tree_view_column_add_attribute(title_column, pixbuf_renderer, "pixbuf",
+ gtk_tree::TreeAdapter::COL_ICON);
+ GtkCellRenderer* title_renderer = gtk_cell_renderer_text_new();
+ gtk_tree_view_column_pack_start(title_column, title_renderer, TRUE);
+ gtk_tree_view_column_add_attribute(title_column, title_renderer, "text",
+ gtk_tree::TreeAdapter::COL_TITLE);
gtk_tree_view_column_set_title(
- site_column, l10n_util::GetStringUTF8(
+ title_column, l10n_util::GetStringUTF8(
IDS_COOKIES_DOMAIN_COLUMN_HEADER).c_str());
- gtk_tree_view_column_set_sort_column_id(site_column, COL_SITE);
- gtk_tree_view_column_set_sizing(site_column, GTK_TREE_VIEW_COLUMN_FIXED);
- gtk_tree_view_column_set_resizable(site_column, TRUE);
- gtk_tree_view_column_set_fixed_width(site_column, kSiteColumnInitialSize);
- gtk_tree_view_append_column(GTK_TREE_VIEW(tree_), site_column);
-
- GtkTreeViewColumn* name_column = gtk_tree_view_column_new_with_attributes(
- l10n_util::GetStringUTF8(
- IDS_COOKIES_NAME_COLUMN_HEADER).c_str(),
- gtk_cell_renderer_text_new(),
- "text", COL_COOKIE_NAME,
- NULL);
- gtk_tree_view_column_set_sort_column_id(name_column, COL_COOKIE_NAME);
- gtk_tree_view_append_column(GTK_TREE_VIEW(tree_), name_column);
+ gtk_tree_view_append_column(GTK_TREE_VIEW(tree_), title_column);
+ g_signal_connect(G_OBJECT(tree_), "key-press-event",
+ G_CALLBACK(OnTreeViewKeyPress), this);
selection_ = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_));
- gtk_tree_selection_set_mode(selection_, GTK_SELECTION_MULTIPLE);
+ gtk_tree_selection_set_mode(selection_, GTK_SELECTION_SINGLE);
g_signal_connect(G_OBJECT(selection_), "changed",
G_CALLBACK(OnSelectionChanged), this);
@@ -228,14 +185,12 @@ void CookiesView::Init() {
InitCookieDetailRow(row++, IDS_COOKIES_COOKIE_EXPIRES_LABEL,
&cookie_expires_entry_);
- // Initialize model.
- cookies_table_model_.reset(new CookiesTableModel(profile_));
- cookies_table_adapter_.reset(
- new gtk_tree::TableAdapter(this, list_store_,
- cookies_table_model_.get()));
- cookies_table_adapter_->OnModelChanged();
+ // Populate the view.
+ cookies_tree_adapter_->Init();
+ gtk_tree_view_expand_all(GTK_TREE_VIEW(tree_));
+ EnableControls();
- if (cookies_table_model_->RowCount() > 0)
+ if (cookies_tree_model_->GetChildCount(cookies_tree_model_->GetRoot()))
gtk_tree::SelectAndFocusRowNum(0, GTK_TREE_VIEW(tree_));
}
@@ -274,18 +229,26 @@ void CookiesView::InitCookieDetailRow(int row, int label_id,
}
void CookiesView::EnableControls() {
- int num_selected = gtk_tree_selection_count_selected_rows(selection_);
- gtk_widget_set_sensitive(remove_button_, num_selected > 0);
+ GtkTreeIter iter;
+ bool selected = gtk_tree_selection_get_selected(selection_, NULL, &iter);
+ gtk_widget_set_sensitive(remove_button_, selected);
gtk_widget_set_sensitive(
- remove_all_button_, cookies_table_model_->RowCount() > 0);
-
- const gchar* filter_text = gtk_entry_get_text(GTK_ENTRY(filter_entry_));
- gtk_widget_set_sensitive(filter_clear_button_, filter_text && *filter_text);
-
- if (num_selected == 1)
- PopulateCookieDetails();
- else
+ remove_all_button_,
+ cookies_tree_model_->GetChildCount(cookies_tree_model_->GetRoot()));
+
+ if (selected) {
+ CookieTreeNode::DetailedInfo detailed_info =
+ static_cast<CookieTreeNode*>(
+ cookies_tree_adapter_->GetNode(&iter))->GetDetailedInfo();
+ if (detailed_info.node_type == CookieTreeNode::DetailedInfo::TYPE_COOKIE) {
+ PopulateCookieDetails(detailed_info.cookie->first,
+ detailed_info.cookie->second);
+ } else {
+ ClearCookieDetails();
+ }
+ } else {
ClearCookieDetails();
+ }
}
void CookiesView::SetCookieDetailsSensitivity(gboolean enabled) {
@@ -298,20 +261,9 @@ void CookiesView::SetCookieDetailsSensitivity(gboolean enabled) {
gtk_widget_set_sensitive(cookie_expires_entry_, enabled);
}
-void CookiesView::PopulateCookieDetails() {
- GList* list = gtk_tree_selection_get_selected_rows(selection_, NULL);
- if (!list) {
- NOTREACHED();
- return;
- }
- int selected_index = gtk_tree::GetTreeSortChildRowNumForPath(
- list_sort_, static_cast<GtkTreePath*>(list->data));
- g_list_foreach(list, (GFunc)gtk_tree_path_free, NULL);
- g_list_free(list);
-
- const std::string& domain = cookies_table_model_->GetDomainAt(selected_index);
- const net::CookieMonster::CanonicalCookie& cookie =
- cookies_table_model_->GetCookieAt(selected_index);
+void CookiesView::PopulateCookieDetails(
+ const std::string& domain,
+ const net::CookieMonster::CanonicalCookie& cookie) {
gtk_entry_set_text(GTK_ENTRY(cookie_name_entry_), cookie.Name().c_str());
gtk_entry_set_text(GTK_ENTRY(cookie_content_entry_), cookie.Value().c_str());
gtk_entry_set_text(GTK_ENTRY(cookie_domain_entry_), domain.c_str());
@@ -349,20 +301,31 @@ void CookiesView::ClearCookieDetails() {
SetCookieDetailsSensitivity(FALSE);
}
-void CookiesView::RemoveSelectedCookies() {
- GList* list = gtk_tree_selection_get_selected_rows(selection_, NULL);
- std::set<int> selected_rows;
- GList* node;
- for (node = list; node != NULL; node = node->next) {
- selected_rows.insert(gtk_tree::GetTreeSortChildRowNumForPath(
- list_sort_, static_cast<GtkTreePath*>(node->data)));
- }
- g_list_foreach(list, (GFunc)gtk_tree_path_free, NULL);
- g_list_free(list);
-
- for (std::set<int>::reverse_iterator selected = selected_rows.rbegin();
- selected != selected_rows.rend(); ++selected) {
- cookies_table_model_->RemoveCookies(*selected, 1);
+void CookiesView::RemoveSelectedItems() {
+ GtkTreeIter iter;
+ bool selected = gtk_tree_selection_get_selected(selection_, NULL, &iter);
+ if (selected) {
+ GtkTreePath* path = gtk_tree_model_get_path(
+ GTK_TREE_MODEL(cookies_tree_adapter_->tree_store()),
+ &iter);
+ CookieTreeNode* node = static_cast<CookieTreeNode*>(
+ cookies_tree_adapter_->GetNode(&iter));
+ cookies_tree_model_->DeleteCookieNode(node);
+ // After removing a node, try to select the "next" node.
+ // We call gtk_tree_model_get_iter to check if there is still a node at the
+ // pointed to by path. If not, we try to select the previous node in that
+ // subtree. If that subtree is empty, we then try to select the parent.
+ if (gtk_tree_model_get_iter(
+ GTK_TREE_MODEL(cookies_tree_adapter_->tree_store()),
+ &iter,
+ path)) {
+ gtk_tree_selection_select_iter(selection_, &iter);
+ } else if (gtk_tree_path_prev(path)) {
+ gtk_tree_selection_select_path(selection_, path);
+ } else if (gtk_tree_path_up(path)) {
+ gtk_tree_selection_select_path(selection_, path);
+ }
+ gtk_tree_path_free(path);
}
}
@@ -379,46 +342,13 @@ void CookiesView::OnAnyModelUpdate() {
EnableControls();
}
-void CookiesView::SetColumnValues(int row, GtkTreeIter* iter) {
- std::wstring site = cookies_table_model_->GetText(
- row, IDS_COOKIES_DOMAIN_COLUMN_HEADER);
- std::wstring name = cookies_table_model_->GetText(
- row, IDS_COOKIES_NAME_COLUMN_HEADER);
- gtk_list_store_set(list_store_, iter,
- COL_SITE, WideToUTF8(site).c_str(),
- COL_COOKIE_NAME, WideToUTF8(name).c_str(),
- -1);
-}
-
-// Compare the value of the given column at the given rows.
-gint CookiesView::CompareRows(GtkTreeModel* model, GtkTreeIter* a,
- GtkTreeIter* b, int column_id) {
- int row1 = gtk_tree::GetRowNumForIter(model, a);
- int row2 = gtk_tree::GetRowNumForIter(model, b);
- return cookies_table_model_->CompareValues(row1, row2, column_id);
-}
-
-// static
-gint CookiesView::CompareSite(GtkTreeModel* model, GtkTreeIter* a,
- GtkTreeIter* b, gpointer window) {
- return static_cast<CookiesView*>(window)->CompareRows(
- model, a, b, IDS_COOKIES_DOMAIN_COLUMN_HEADER);
-}
-
-// static
-gint CookiesView::CompareCookieName(GtkTreeModel* model, GtkTreeIter* a,
- GtkTreeIter* b, gpointer window) {
- return static_cast<CookiesView*>(window)->CompareRows(
- model, a, b, IDS_COOKIES_NAME_COLUMN_HEADER);
-}
-
// static
void CookiesView::OnResponse(GtkDialog* dialog, int response_id,
CookiesView* window) {
if (response_id == RESPONSE_REMOVE) {
- window->RemoveSelectedCookies();
+ window->RemoveSelectedItems();
} else if (response_id == RESPONSE_REMOVE_ALL) {
- window->cookies_table_model_->RemoveAllShownCookies();
+ window->cookies_tree_model_->DeleteAllCookies();
} else {
gtk_widget_destroy(window->dialog_);
}
@@ -436,32 +366,12 @@ void CookiesView::OnSelectionChanged(GtkTreeSelection *selection,
window->EnableControls();
}
-void CookiesView::UpdateFilterResults() {
- const gchar* text = gtk_entry_get_text(GTK_ENTRY(filter_entry_));
- if (text)
- cookies_table_model_->UpdateSearchResults(UTF8ToWide(text));
-}
-
// static
-void CookiesView::OnFilterEntryActivated(GtkEntry* entry, CookiesView* window) {
- window->filter_update_factory_.RevokeAll();
- window->UpdateFilterResults();
-}
-
-// static
-void CookiesView::OnFilterEntryChanged(GtkEditable* editable,
- CookiesView* window) {
- window->filter_update_factory_.RevokeAll();
- MessageLoop::current()->PostDelayedTask(FROM_HERE,
- window->filter_update_factory_.NewRunnableMethod(
- &CookiesView::UpdateFilterResults), kSearchFilterDelayMs);
- window->EnableControls();
-}
-
-// static
-void CookiesView::OnFilterClearButtonClicked(GtkButton* button,
- CookiesView* window) {
- gtk_entry_set_text(GTK_ENTRY(window->filter_entry_), "");
- window->filter_update_factory_.RevokeAll();
- window->UpdateFilterResults();
+gboolean CookiesView::OnTreeViewKeyPress(
+ GtkWidget* tree_view, GdkEventKey* key, CookiesView* window) {
+ if (key->keyval == GDK_Delete) {
+ window->RemoveSelectedItems();
+ return TRUE;
+ }
+ return FALSE;
}
diff --git a/chrome/browser/gtk/options/cookies_view.h b/chrome/browser/gtk/options/cookies_view.h
index 24adbbd..dea3da2 100644
--- a/chrome/browser/gtk/options/cookies_view.h
+++ b/chrome/browser/gtk/options/cookies_view.h
@@ -13,9 +13,10 @@
#include "base/scoped_ptr.h"
#include "base/task.h"
#include "chrome/common/gtk_tree.h"
+#include "net/base/cookie_monster.h"
#include "testing/gtest/include/gtest/gtest_prod.h"
-class CookiesTableModel;
+class CookiesTreeModel;
class CookiesViewTest;
class Profile;
@@ -25,26 +26,18 @@ class Profile;
// Once the CookiesView is shown, it is responsible for deleting itself when the
// user closes the dialog.
-class CookiesView : public gtk_tree::TableAdapter::Delegate {
+class CookiesView : public gtk_tree::TreeAdapter::Delegate {
public:
virtual ~CookiesView();
// Create (if necessary) and show the cookie manager window.
static void Show(Profile* profile);
- // gtk_tree::TableAdapter::Delegate implementation.
+ // gtk_tree::TreeAdapter::Delegate implementation.
virtual void OnAnyModelUpdateStart();
virtual void OnAnyModelUpdate();
- virtual void SetColumnValues(int row, GtkTreeIter* iter);
private:
- // Column ids for |list_store_|.
- enum {
- COL_SITE,
- COL_COOKIE_NAME,
- COL_COUNT,
- };
-
explicit CookiesView(Profile* profile);
// Initialize the dialog contents and layout.
@@ -63,23 +56,14 @@ class CookiesView : public gtk_tree::TableAdapter::Delegate {
void SetCookieDetailsSensitivity(gboolean enabled);
// Show the details of the currently selected cookie.
- void PopulateCookieDetails();
+ void PopulateCookieDetails(const std::string& domain,
+ const net::CookieMonster::CanonicalCookie& cookie);
// Reset the cookie details display.
void ClearCookieDetails();
// Remove any cookies that are currently selected.
- void RemoveSelectedCookies();
-
- // Compare the value of the given column at the given rows.
- gint CompareRows(GtkTreeModel* model, GtkTreeIter* a, GtkTreeIter* b,
- int column_id);
-
- // List sorting callbacks.
- static gint CompareSite(GtkTreeModel* model, GtkTreeIter* a, GtkTreeIter* b,
- gpointer window);
- static gint CompareCookieName(GtkTreeModel* model, GtkTreeIter* a,
- GtkTreeIter* b, gpointer window);
+ void RemoveSelectedItems();
// Callback for dialog buttons.
static void OnResponse(GtkDialog* dialog, int response_id,
@@ -92,29 +76,20 @@ class CookiesView : public gtk_tree::TableAdapter::Delegate {
static void OnSelectionChanged(GtkTreeSelection *selection,
CookiesView* window);
- // Filter the list against the text in |filter_entry_|.
- void UpdateFilterResults();
-
- // Callbacks for user actions filtering the list.
- static void OnFilterEntryActivated(GtkEntry* entry, CookiesView* window);
- static void OnFilterEntryChanged(GtkEditable* editable, CookiesView* window);
- static void OnFilterClearButtonClicked(GtkButton* button,
- CookiesView* window);
+ // Callback for when user presses a key with the table focused.
+ static gboolean OnTreeViewKeyPress(GtkWidget* tree_view, GdkEventKey* key,
+ CookiesView* window);
// The parent widget.
GtkWidget* dialog_;
// Widgets of the dialog.
GtkWidget* description_label_;
- GtkWidget* filter_entry_;
- GtkWidget* filter_clear_button_;
GtkWidget* remove_button_;
GtkWidget* remove_all_button_;
// The table listing the cookies.
GtkWidget* tree_;
- GtkListStore* list_store_;
- GtkTreeModel* list_sort_;
GtkTreeSelection* selection_;
// The cookie details widgets.
@@ -131,28 +106,18 @@ class CookiesView : public gtk_tree::TableAdapter::Delegate {
Profile* profile_;
// The Cookies Table model.
- scoped_ptr<CookiesTableModel> cookies_table_model_;
- scoped_ptr<gtk_tree::TableAdapter> cookies_table_adapter_;
-
- // A factory to construct Runnable Methods so that we can be called back to
- // re-evaluate the model after the search query string changes.
- ScopedRunnableMethodFactory<CookiesView> filter_update_factory_;
+ scoped_ptr<CookiesTreeModel> cookies_tree_model_;
+ scoped_ptr<gtk_tree::TreeAdapter> cookies_tree_adapter_;
friend class CookiesViewTest;
FRIEND_TEST(CookiesViewTest, Empty);
+ FRIEND_TEST(CookiesViewTest, Noop);
FRIEND_TEST(CookiesViewTest, RemoveAll);
- FRIEND_TEST(CookiesViewTest, RemoveAllWithAllSelected);
+ FRIEND_TEST(CookiesViewTest, RemoveAllWithDefaultSelected);
FRIEND_TEST(CookiesViewTest, Remove);
- FRIEND_TEST(CookiesViewTest, RemoveMultiple);
+ FRIEND_TEST(CookiesViewTest, RemoveCookiesByDomain);
+ FRIEND_TEST(CookiesViewTest, RemoveByDomain);
FRIEND_TEST(CookiesViewTest, RemoveDefaultSelection);
- FRIEND_TEST(CookiesViewTest, Filter);
- FRIEND_TEST(CookiesViewTest, FilterRemoveAll);
- FRIEND_TEST(CookiesViewTest, FilterRemove);
- FRIEND_TEST(CookiesViewTest, Sort);
- FRIEND_TEST(CookiesViewTest, SortRemove);
- FRIEND_TEST(CookiesViewTest, SortFilterRemove);
- FRIEND_TEST(CookiesViewTest, SortRemoveMultiple);
- FRIEND_TEST(CookiesViewTest, SortRemoveDefaultSelection);
DISALLOW_COPY_AND_ASSIGN(CookiesView);
};
diff --git a/chrome/browser/gtk/options/cookies_view_unittest.cc b/chrome/browser/gtk/options/cookies_view_unittest.cc
index ab6589f..63e7d42 100644
--- a/chrome/browser/gtk/options/cookies_view_unittest.cc
+++ b/chrome/browser/gtk/options/cookies_view_unittest.cc
@@ -98,24 +98,59 @@ class CookiesViewTest : public testing::Test {
return JoinString(parts, ',');
}
+ static gboolean GetDisplayedCookiesHelper(GtkTreeModel *model,
+ GtkTreePath *path,
+ GtkTreeIter *iter,
+ gpointer user_data) {
+ gchar* title;
+ gtk_tree_model_get(model, iter,
+ gtk_tree::TreeAdapter::COL_TITLE, &title,
+ -1);
+ std::string str;
+ str.append(gtk_tree_path_get_depth(path) - 1, '_');
+ str += title;
+ g_free(title);
+ std::vector<std::string>* parts =
+ reinterpret_cast<std::vector<std::string>*>(user_data);
+ parts->push_back(str);
+ return FALSE;
+ }
+
// Get the cookie names displayed in the dialog in the order they are
// displayed, as a comma seperated string.
// Ex: EXPECT_STREQ("X,Y", GetDisplayedCookies(cookies_view).c_str());
std::string GetDisplayedCookies(const CookiesView& cookies_view) {
+ GtkTreeStore* tree_store = cookies_view.cookies_tree_adapter_->tree_store();
std::vector<std::string> parts;
+ gtk_tree_model_foreach(GTK_TREE_MODEL(tree_store),
+ GetDisplayedCookiesHelper, &parts);
+ return JoinString(parts, ',');
+ }
+
+ bool SelectByPath(const CookiesView& cookies_view, const char* path_str) {
+ GtkTreePath* path = gtk_tree_path_new_from_string(path_str);
+ if (!path)
+ return false;
+ gtk_tree_selection_select_path(cookies_view.selection_, path);
+ gtk_tree_path_free(path);
+ return true;
+ }
+
+ std::string GetSelectedPath(const CookiesView& cookies_view) {
+ std::string result;
GtkTreeIter iter;
- if (!gtk_tree_model_get_iter_first(cookies_view.list_sort_, &iter))
- return std::string();
- while (true) {
- gchar* name;
- gtk_tree_model_get(cookies_view.list_sort_, &iter,
- CookiesView::COL_COOKIE_NAME, &name, -1);
- parts.push_back(name);
- g_free(name);
- if (!gtk_tree_model_iter_next(cookies_view.list_sort_, &iter))
- break;
+ bool selected = gtk_tree_selection_get_selected(cookies_view.selection_,
+ NULL, &iter);
+ if (selected) {
+ gchar* path_str = gtk_tree_model_get_string_from_iter(
+ GTK_TREE_MODEL(cookies_view.cookies_tree_adapter_->tree_store()),
+ &iter);
+ if (path_str) {
+ result = path_str;
+ g_free(path_str);
+ }
}
- return JoinString(parts, ',');
+ return result;
}
protected:
@@ -128,8 +163,26 @@ TEST_F(CookiesViewTest, Empty) {
EXPECT_EQ(FALSE, GTK_WIDGET_SENSITIVE(cookies_view.remove_all_button_));
EXPECT_EQ(FALSE, GTK_WIDGET_SENSITIVE(cookies_view.remove_button_));
CheckDetailsSensitivity(FALSE, cookies_view);
- EXPECT_EQ(0, gtk_tree_model_iter_n_children(
- GTK_TREE_MODEL(cookies_view.list_store_), NULL));
+ EXPECT_STREQ("", GetDisplayedCookies(cookies_view).c_str());
+}
+
+TEST_F(CookiesViewTest, Noop) {
+ net::CookieMonster* monster = profile_->GetCookieMonster();
+ monster->SetCookie(GURL("http://foo0"), "C=1");
+ monster->SetCookie(GURL("http://foo0"), "D=1");
+ monster->SetCookie(GURL("http://foo1"), "B=1");
+ monster->SetCookie(GURL("http://foo1"), "A=1");
+ monster->SetCookie(GURL("http://foo1"), "E=1");
+ monster->SetCookie(GURL("http://foo2"), "G=1");
+ monster->SetCookie(GURL("http://foo2"), "X=1");
+ CookiesView cookies_view(profile_.get());
+ EXPECT_STREQ("foo0,_Cookies,__C,__D,"
+ "foo1,_Cookies,__A,__B,__E,"
+ "foo2,_Cookies,__G,__X",
+ GetDisplayedCookies(cookies_view).c_str());
+ EXPECT_EQ(TRUE, GTK_WIDGET_SENSITIVE(cookies_view.remove_all_button_));
+ EXPECT_EQ(TRUE, GTK_WIDGET_SENSITIVE(cookies_view.remove_button_));
+ CheckDetailsSensitivity(FALSE, cookies_view);
}
TEST_F(CookiesViewTest, RemoveAll) {
@@ -146,8 +199,8 @@ TEST_F(CookiesViewTest, RemoveAll) {
EXPECT_EQ(TRUE, GTK_WIDGET_SENSITIVE(cookies_view.remove_all_button_));
EXPECT_EQ(FALSE, GTK_WIDGET_SENSITIVE(cookies_view.remove_button_));
CheckDetailsSensitivity(FALSE, cookies_view);
- EXPECT_EQ(2, gtk_tree_model_iter_n_children(
- GTK_TREE_MODEL(cookies_view.list_store_), NULL));
+ EXPECT_STREQ("foo,_Cookies,__A,foo2,_Cookies,__B",
+ GetDisplayedCookies(cookies_view).c_str());
}
gtk_button_clicked(GTK_BUTTON(cookies_view.remove_all_button_));
@@ -157,28 +210,25 @@ TEST_F(CookiesViewTest, RemoveAll) {
EXPECT_EQ(FALSE, GTK_WIDGET_SENSITIVE(cookies_view.remove_all_button_));
EXPECT_EQ(FALSE, GTK_WIDGET_SENSITIVE(cookies_view.remove_button_));
CheckDetailsSensitivity(FALSE, cookies_view);
- EXPECT_EQ(0, gtk_tree_model_iter_n_children(
- GTK_TREE_MODEL(cookies_view.list_store_), NULL));
+ EXPECT_STREQ("", GetDisplayedCookies(cookies_view).c_str());
}
}
-// When removing all items, if multiple items were selected the
-// OnSelectionChanged callback could get called while the gtk list view and the
-// CookiesTableModel were inconsistent. Test that it doesn't crash.
-TEST_F(CookiesViewTest, RemoveAllWithAllSelected) {
+TEST_F(CookiesViewTest, RemoveAllWithDefaultSelected) {
net::CookieMonster* monster = profile_->GetCookieMonster();
monster->SetCookie(GURL("http://foo"), "A=1");
monster->SetCookie(GURL("http://foo2"), "B=1");
CookiesView cookies_view(profile_.get());
- gtk_tree_selection_select_all(cookies_view.selection_);
+ EXPECT_STREQ("0", GetSelectedPath(cookies_view).c_str());
+ EXPECT_EQ(1, gtk_tree_selection_count_selected_rows(cookies_view.selection_));
{
SCOPED_TRACE("Before removing");
EXPECT_EQ(TRUE, GTK_WIDGET_SENSITIVE(cookies_view.remove_all_button_));
EXPECT_EQ(TRUE, GTK_WIDGET_SENSITIVE(cookies_view.remove_button_));
CheckDetailsSensitivity(FALSE, cookies_view);
- EXPECT_EQ(2, gtk_tree_model_iter_n_children(
- GTK_TREE_MODEL(cookies_view.list_store_), NULL));
+ EXPECT_STREQ("foo,_Cookies,__A,foo2,_Cookies,__B",
+ GetDisplayedCookies(cookies_view).c_str());
}
gtk_button_clicked(GTK_BUTTON(cookies_view.remove_all_button_));
@@ -188,8 +238,9 @@ TEST_F(CookiesViewTest, RemoveAllWithAllSelected) {
EXPECT_EQ(FALSE, GTK_WIDGET_SENSITIVE(cookies_view.remove_all_button_));
EXPECT_EQ(FALSE, GTK_WIDGET_SENSITIVE(cookies_view.remove_button_));
CheckDetailsSensitivity(FALSE, cookies_view);
- EXPECT_EQ(0, gtk_tree_model_iter_n_children(
- GTK_TREE_MODEL(cookies_view.list_store_), NULL));
+ EXPECT_STREQ("", GetDisplayedCookies(cookies_view).c_str());
+ EXPECT_EQ(0,
+ gtk_tree_selection_count_selected_rows(cookies_view.selection_));
}
}
@@ -197,23 +248,18 @@ TEST_F(CookiesViewTest, Remove) {
net::CookieMonster* monster = profile_->GetCookieMonster();
monster->SetCookie(GURL("http://foo1"), "A=1");
monster->SetCookie(GURL("http://foo2"), "B=1");
- monster->SetCookie(GURL("http://foo3"), "C=1");
+ monster->SetCookie(GURL("http://foo2"), "C=1");
CookiesView cookies_view(profile_.get());
- // Reset the selection of the first row.
- gtk_tree_selection_unselect_all(cookies_view.selection_);
-
- GtkTreeIter iter;
- gtk_tree_model_iter_nth_child(cookies_view.list_sort_, &iter, NULL, 1);
- gtk_tree_selection_select_iter(cookies_view.selection_, &iter);
+ ASSERT_TRUE(SelectByPath(cookies_view, "1:0:0"));
{
SCOPED_TRACE("First selection");
EXPECT_EQ(TRUE, GTK_WIDGET_SENSITIVE(cookies_view.remove_all_button_));
EXPECT_EQ(TRUE, GTK_WIDGET_SENSITIVE(cookies_view.remove_button_));
CheckDetailsSensitivity(TRUE, cookies_view);
- EXPECT_EQ(3, gtk_tree_model_iter_n_children(
- GTK_TREE_MODEL(cookies_view.list_store_), NULL));
+ EXPECT_STREQ("foo1,_Cookies,__A,foo2,_Cookies,__B,__C",
+ GetDisplayedCookies(cookies_view).c_str());
}
gtk_button_clicked(GTK_BUTTON(cookies_view.remove_button_));
@@ -221,361 +267,192 @@ TEST_F(CookiesViewTest, Remove) {
{
SCOPED_TRACE("First selection removed");
EXPECT_STREQ("A,C", GetMonsterCookies(monster).c_str());
- EXPECT_STREQ("A,C", GetDisplayedCookies(cookies_view).c_str());
+ EXPECT_STREQ("foo1,_Cookies,__A,foo2,_Cookies,__C",
+ GetDisplayedCookies(cookies_view).c_str());
EXPECT_EQ(TRUE, GTK_WIDGET_SENSITIVE(cookies_view.remove_all_button_));
- EXPECT_EQ(FALSE, GTK_WIDGET_SENSITIVE(cookies_view.remove_button_));
- CheckDetailsSensitivity(FALSE, cookies_view);
+ EXPECT_EQ(TRUE, GTK_WIDGET_SENSITIVE(cookies_view.remove_button_));
+ EXPECT_STREQ("1:0:0", GetSelectedPath(cookies_view).c_str());
+ CheckDetailsSensitivity(TRUE, cookies_view);
}
- gtk_tree_model_iter_nth_child(cookies_view.list_sort_, &iter, NULL, 1);
- gtk_tree_selection_select_iter(cookies_view.selection_, &iter);
EXPECT_EQ(TRUE, GTK_WIDGET_SENSITIVE(cookies_view.remove_button_));
gtk_button_clicked(GTK_BUTTON(cookies_view.remove_button_));
{
SCOPED_TRACE("Second selection");
EXPECT_STREQ("A", GetMonsterCookies(monster).c_str());
- EXPECT_STREQ("A", GetDisplayedCookies(cookies_view).c_str());
+ EXPECT_STREQ("foo1,_Cookies,__A,foo2,_Cookies",
+ GetDisplayedCookies(cookies_view).c_str());
EXPECT_EQ(TRUE, GTK_WIDGET_SENSITIVE(cookies_view.remove_all_button_));
- EXPECT_EQ(FALSE, GTK_WIDGET_SENSITIVE(cookies_view.remove_button_));
+ EXPECT_EQ(TRUE, GTK_WIDGET_SENSITIVE(cookies_view.remove_button_));
+ EXPECT_STREQ("1:0", GetSelectedPath(cookies_view).c_str());
CheckDetailsSensitivity(FALSE, cookies_view);
- EXPECT_EQ(1, gtk_tree_model_iter_n_children(
- GTK_TREE_MODEL(cookies_view.list_store_), NULL));
}
- gtk_tree_model_iter_nth_child(cookies_view.list_sort_, &iter, NULL, 0);
- gtk_tree_selection_select_iter(cookies_view.selection_, &iter);
+ ASSERT_TRUE(SelectByPath(cookies_view, "0:0:0"));
EXPECT_EQ(TRUE, GTK_WIDGET_SENSITIVE(cookies_view.remove_button_));
gtk_button_clicked(GTK_BUTTON(cookies_view.remove_button_));
{
SCOPED_TRACE("Second selection removed");
EXPECT_EQ(0u, monster->GetAllCookies().size());
- EXPECT_EQ(FALSE, GTK_WIDGET_SENSITIVE(cookies_view.remove_all_button_));
- EXPECT_EQ(FALSE, GTK_WIDGET_SENSITIVE(cookies_view.remove_button_));
+ EXPECT_EQ(TRUE, GTK_WIDGET_SENSITIVE(cookies_view.remove_all_button_));
+ EXPECT_EQ(TRUE, GTK_WIDGET_SENSITIVE(cookies_view.remove_button_));
+ EXPECT_STREQ("0:0", GetSelectedPath(cookies_view).c_str());
CheckDetailsSensitivity(FALSE, cookies_view);
- EXPECT_EQ(0, gtk_tree_model_iter_n_children(
- GTK_TREE_MODEL(cookies_view.list_store_), NULL));
+ EXPECT_STREQ("foo1,_Cookies,foo2,_Cookies",
+ GetDisplayedCookies(cookies_view).c_str());
}
}
-TEST_F(CookiesViewTest, RemoveMultiple) {
+TEST_F(CookiesViewTest, RemoveCookiesByDomain) {
net::CookieMonster* monster = profile_->GetCookieMonster();
monster->SetCookie(GURL("http://foo0"), "C=1");
- monster->SetCookie(GURL("http://foo1"), "D=1");
- monster->SetCookie(GURL("http://foo2"), "B=1");
- monster->SetCookie(GURL("http://foo3"), "A=1");
- monster->SetCookie(GURL("http://foo4"), "E=1");
- monster->SetCookie(GURL("http://foo5"), "G=1");
- monster->SetCookie(GURL("http://foo6"), "X=1");
+ monster->SetCookie(GURL("http://foo0"), "D=1");
+ monster->SetCookie(GURL("http://foo1"), "B=1");
+ monster->SetCookie(GURL("http://foo1"), "A=1");
+ monster->SetCookie(GURL("http://foo1"), "E=1");
+ monster->SetCookie(GURL("http://foo2"), "G=1");
+ monster->SetCookie(GURL("http://foo2"), "X=1");
CookiesView cookies_view(profile_.get());
+ EXPECT_STREQ("foo0,_Cookies,__C,__D,"
+ "foo1,_Cookies,__A,__B,__E,"
+ "foo2,_Cookies,__G,__X",
+ GetDisplayedCookies(cookies_view).c_str());
- // Reset the selection of the first row.
- gtk_tree_selection_unselect_all(cookies_view.selection_);
-
- GtkTreeIter iter;
- gtk_tree_model_iter_nth_child(cookies_view.list_sort_, &iter, NULL, 1);
- gtk_tree_selection_select_iter(cookies_view.selection_, &iter);
- gtk_tree_model_iter_nth_child(cookies_view.list_sort_, &iter, NULL, 3);
- gtk_tree_selection_select_iter(cookies_view.selection_, &iter);
- gtk_tree_model_iter_nth_child(cookies_view.list_sort_, &iter, NULL, 4);
- gtk_tree_selection_select_iter(cookies_view.selection_, &iter);
- gtk_tree_model_iter_nth_child(cookies_view.list_sort_, &iter, NULL, 5);
- gtk_tree_selection_select_iter(cookies_view.selection_, &iter);
+ ASSERT_TRUE(SelectByPath(cookies_view, "1:0"));
EXPECT_EQ(TRUE, GTK_WIDGET_SENSITIVE(cookies_view.remove_all_button_));
EXPECT_EQ(TRUE, GTK_WIDGET_SENSITIVE(cookies_view.remove_button_));
gtk_button_clicked(GTK_BUTTON(cookies_view.remove_button_));
- EXPECT_STREQ("C,B,X", GetMonsterCookies(monster).c_str());
- EXPECT_STREQ("C,B,X", GetDisplayedCookies(cookies_view).c_str());
+ EXPECT_STREQ("C,D,G,X", GetMonsterCookies(monster).c_str());
+ EXPECT_STREQ("foo0,_Cookies,__C,__D,"
+ "foo1,"
+ "foo2,_Cookies,__G,__X",
+ GetDisplayedCookies(cookies_view).c_str());
EXPECT_EQ(TRUE, GTK_WIDGET_SENSITIVE(cookies_view.remove_all_button_));
- EXPECT_EQ(FALSE, GTK_WIDGET_SENSITIVE(cookies_view.remove_button_));
- EXPECT_EQ(0, gtk_tree_selection_count_selected_rows(cookies_view.selection_));
-}
-
-TEST_F(CookiesViewTest, RemoveDefaultSelection) {
- net::CookieMonster* monster = profile_->GetCookieMonster();
- monster->SetCookie(GURL("http://foo1"), "A=1");
- monster->SetCookie(GURL("http://foo2"), "B=1");
- monster->SetCookie(GURL("http://foo3"), "C=1");
- // Now CookiesView select the first row when it is opened.
- CookiesView cookies_view(profile_.get());
-
- {
- SCOPED_TRACE("First selection");
- EXPECT_EQ(TRUE, GTK_WIDGET_SENSITIVE(cookies_view.remove_all_button_));
- EXPECT_EQ(TRUE, GTK_WIDGET_SENSITIVE(cookies_view.remove_button_));
- CheckDetailsSensitivity(TRUE, cookies_view);
- EXPECT_EQ(3, gtk_tree_model_iter_n_children(
- GTK_TREE_MODEL(cookies_view.list_store_), NULL));
- }
+ EXPECT_EQ(TRUE, GTK_WIDGET_SENSITIVE(cookies_view.remove_button_));
+ EXPECT_STREQ("1", GetSelectedPath(cookies_view).c_str());
+ ASSERT_TRUE(SelectByPath(cookies_view, "0:0"));
gtk_button_clicked(GTK_BUTTON(cookies_view.remove_button_));
- {
- SCOPED_TRACE("First selection removed");
- EXPECT_STREQ("B,C", GetMonsterCookies(monster).c_str());
- EXPECT_STREQ("B,C", GetDisplayedCookies(cookies_view).c_str());
- EXPECT_EQ(TRUE, GTK_WIDGET_SENSITIVE(cookies_view.remove_all_button_));
- EXPECT_EQ(FALSE, GTK_WIDGET_SENSITIVE(cookies_view.remove_button_));
- CheckDetailsSensitivity(FALSE, cookies_view);
- }
-}
-
-TEST_F(CookiesViewTest, Filter) {
- net::CookieMonster* monster = profile_->GetCookieMonster();
- monster->SetCookie(GURL("http://foo1"), "A=1");
- monster->SetCookie(GURL("http://bar1"), "B=1");
- monster->SetCookie(GURL("http://foo2"), "C=1");
- monster->SetCookie(GURL("http://bar2"), "D=1");
- CookiesView cookies_view(profile_.get());
- EXPECT_EQ(4, gtk_tree_model_iter_n_children(
- GTK_TREE_MODEL(cookies_view.list_store_), NULL));
- EXPECT_EQ(TRUE, GTK_WIDGET_SENSITIVE(cookies_view.remove_all_button_));
-
- gtk_entry_set_text(GTK_ENTRY(cookies_view.filter_entry_), "bar");
- // Entering text doesn't immediately filter the results.
- EXPECT_EQ(4, gtk_tree_model_iter_n_children(
- GTK_TREE_MODEL(cookies_view.list_store_), NULL));
+ EXPECT_STREQ("G,X", GetMonsterCookies(monster).c_str());
+ EXPECT_STREQ("foo0,"
+ "foo1,"
+ "foo2,_Cookies,__G,__X",
+ GetDisplayedCookies(cookies_view).c_str());
EXPECT_EQ(TRUE, GTK_WIDGET_SENSITIVE(cookies_view.remove_all_button_));
+ EXPECT_EQ(TRUE, GTK_WIDGET_SENSITIVE(cookies_view.remove_button_));
+ EXPECT_STREQ("0", GetSelectedPath(cookies_view).c_str());
- // Results are filtered immediately if you activate (hit enter in the entry.)
- gtk_widget_activate(cookies_view.filter_entry_);
- EXPECT_STREQ("B,D", GetDisplayedCookies(cookies_view).c_str());
- EXPECT_EQ(TRUE, GTK_WIDGET_SENSITIVE(cookies_view.remove_all_button_));
+ ASSERT_TRUE(SelectByPath(cookies_view, "2:0"));
+ gtk_button_clicked(GTK_BUTTON(cookies_view.remove_button_));
- gtk_entry_set_text(GTK_ENTRY(cookies_view.filter_entry_), "bar2");
- gtk_widget_activate(cookies_view.filter_entry_);
- EXPECT_STREQ("D", GetDisplayedCookies(cookies_view).c_str());
+ EXPECT_STREQ("", GetMonsterCookies(monster).c_str());
+ EXPECT_STREQ("foo0,"
+ "foo1,"
+ "foo2",
+ GetDisplayedCookies(cookies_view).c_str());
EXPECT_EQ(TRUE, GTK_WIDGET_SENSITIVE(cookies_view.remove_all_button_));
-
- gtk_entry_set_text(GTK_ENTRY(cookies_view.filter_entry_), "bar22");
- gtk_widget_activate(cookies_view.filter_entry_);
- EXPECT_EQ(0, gtk_tree_model_iter_n_children(
- GTK_TREE_MODEL(cookies_view.list_store_), NULL));
- EXPECT_EQ(FALSE, GTK_WIDGET_SENSITIVE(cookies_view.remove_all_button_));
+ EXPECT_EQ(TRUE, GTK_WIDGET_SENSITIVE(cookies_view.remove_button_));
+ EXPECT_STREQ("2", GetSelectedPath(cookies_view).c_str());
}
-TEST_F(CookiesViewTest, FilterRemoveAll) {
+TEST_F(CookiesViewTest, RemoveByDomain) {
net::CookieMonster* monster = profile_->GetCookieMonster();
+ monster->SetCookie(GURL("http://foo0"), "C=1");
+ monster->SetCookie(GURL("http://foo0"), "D=1");
+ monster->SetCookie(GURL("http://foo1"), "B=1");
monster->SetCookie(GURL("http://foo1"), "A=1");
- monster->SetCookie(GURL("http://bar1"), "B=1");
- monster->SetCookie(GURL("http://foo2"), "C=1");
- monster->SetCookie(GURL("http://bar2"), "D=1");
+ monster->SetCookie(GURL("http://foo1"), "E=1");
+ monster->SetCookie(GURL("http://foo2"), "G=1");
+ monster->SetCookie(GURL("http://foo2"), "X=1");
CookiesView cookies_view(profile_.get());
- gtk_entry_set_text(GTK_ENTRY(cookies_view.filter_entry_), "bar");
- gtk_widget_activate(cookies_view.filter_entry_);
- EXPECT_STREQ("B,D,A,C", GetMonsterCookies(monster).c_str());
- EXPECT_STREQ("B,D", GetDisplayedCookies(cookies_view).c_str());
- EXPECT_EQ(TRUE, GTK_WIDGET_SENSITIVE(cookies_view.remove_all_button_));
+ EXPECT_STREQ("foo0,_Cookies,__C,__D,"
+ "foo1,_Cookies,__A,__B,__E,"
+ "foo2,_Cookies,__G,__X",
+ GetDisplayedCookies(cookies_view).c_str());
- gtk_button_clicked(GTK_BUTTON(cookies_view.remove_all_button_));
- EXPECT_STREQ("A,C", GetMonsterCookies(monster).c_str());
- EXPECT_STREQ("", GetDisplayedCookies(cookies_view).c_str());
- EXPECT_EQ(FALSE, GTK_WIDGET_SENSITIVE(cookies_view.remove_all_button_));
+ ASSERT_TRUE(SelectByPath(cookies_view, "1"));
- gtk_entry_set_text(GTK_ENTRY(cookies_view.filter_entry_), "");
- gtk_widget_activate(cookies_view.filter_entry_);
- EXPECT_STREQ("A,C", GetMonsterCookies(monster).c_str());
- EXPECT_STREQ("A,C", GetDisplayedCookies(cookies_view).c_str());
EXPECT_EQ(TRUE, GTK_WIDGET_SENSITIVE(cookies_view.remove_all_button_));
-}
+ EXPECT_EQ(TRUE, GTK_WIDGET_SENSITIVE(cookies_view.remove_button_));
-TEST_F(CookiesViewTest, FilterRemove) {
- net::CookieMonster* monster = profile_->GetCookieMonster();
- monster->SetCookie(GURL("http://foo1"), "A=1");
- monster->SetCookie(GURL("http://bar1"), "B=1");
- monster->SetCookie(GURL("http://foo2"), "C=1");
- monster->SetCookie(GURL("http://bar2"), "D=1");
- CookiesView cookies_view(profile_.get());
- gtk_entry_set_text(GTK_ENTRY(cookies_view.filter_entry_), "bar");
- gtk_widget_activate(cookies_view.filter_entry_);
- EXPECT_STREQ("B,D,A,C", GetMonsterCookies(monster).c_str());
- EXPECT_STREQ("B,D", GetDisplayedCookies(cookies_view).c_str());
- EXPECT_EQ(FALSE, GTK_WIDGET_SENSITIVE(cookies_view.remove_button_));
+ gtk_button_clicked(GTK_BUTTON(cookies_view.remove_button_));
- GtkTreeIter iter;
- gtk_tree_model_iter_nth_child(cookies_view.list_sort_, &iter, NULL, 0);
- gtk_tree_selection_select_iter(cookies_view.selection_, &iter);
+ EXPECT_STREQ("C,D,G,X", GetMonsterCookies(monster).c_str());
+ EXPECT_STREQ("foo0,_Cookies,__C,__D,"
+ "foo2,_Cookies,__G,__X",
+ GetDisplayedCookies(cookies_view).c_str());
+ EXPECT_EQ(TRUE, GTK_WIDGET_SENSITIVE(cookies_view.remove_all_button_));
EXPECT_EQ(TRUE, GTK_WIDGET_SENSITIVE(cookies_view.remove_button_));
+ EXPECT_STREQ("1", GetSelectedPath(cookies_view).c_str());
+ ASSERT_TRUE(SelectByPath(cookies_view, "0"));
gtk_button_clicked(GTK_BUTTON(cookies_view.remove_button_));
- EXPECT_STREQ("D,A,C", GetMonsterCookies(monster).c_str());
- EXPECT_STREQ("D", GetDisplayedCookies(cookies_view).c_str());
- EXPECT_EQ(FALSE, GTK_WIDGET_SENSITIVE(cookies_view.remove_button_));
-
- gtk_tree_model_iter_nth_child(cookies_view.list_sort_, &iter, NULL, 0);
- gtk_tree_selection_select_iter(cookies_view.selection_, &iter);
+ EXPECT_STREQ("G,X", GetMonsterCookies(monster).c_str());
+ EXPECT_STREQ("foo2,_Cookies,__G,__X",
+ GetDisplayedCookies(cookies_view).c_str());
+ EXPECT_EQ(TRUE, GTK_WIDGET_SENSITIVE(cookies_view.remove_all_button_));
EXPECT_EQ(TRUE, GTK_WIDGET_SENSITIVE(cookies_view.remove_button_));
+ EXPECT_STREQ("0", GetSelectedPath(cookies_view).c_str());
gtk_button_clicked(GTK_BUTTON(cookies_view.remove_button_));
- EXPECT_STREQ("A,C", GetMonsterCookies(monster).c_str());
+ EXPECT_STREQ("", GetMonsterCookies(monster).c_str());
EXPECT_STREQ("", GetDisplayedCookies(cookies_view).c_str());
+ EXPECT_EQ(FALSE, GTK_WIDGET_SENSITIVE(cookies_view.remove_all_button_));
EXPECT_EQ(FALSE, GTK_WIDGET_SENSITIVE(cookies_view.remove_button_));
+ EXPECT_EQ(0, gtk_tree_selection_count_selected_rows(cookies_view.selection_));
}
-TEST_F(CookiesViewTest, Sort) {
- net::CookieMonster* monster = profile_->GetCookieMonster();
- monster->SetCookie(GURL("http://foo1"), "X=1");
- monster->SetCookie(GURL("http://bar1"), "Z=1");
- monster->SetCookie(GURL("http://foo2"), "C=1");
- monster->SetCookie(GURL("http://bar2"), "D=1");
- CookiesView cookies_view(profile_.get());
- EXPECT_STREQ("Z,D,X,C", GetMonsterCookies(monster).c_str());
- EXPECT_STREQ("Z,D,X,C", GetDisplayedCookies(cookies_view).c_str());
-
- gtk_tree_sortable_set_sort_column_id(
- GTK_TREE_SORTABLE(cookies_view.list_sort_),
- CookiesView::COL_SITE,
- GTK_SORT_ASCENDING);
- EXPECT_STREQ("Z,D,X,C", GetDisplayedCookies(cookies_view).c_str());
-
- gtk_tree_sortable_set_sort_column_id(
- GTK_TREE_SORTABLE(cookies_view.list_sort_),
- CookiesView::COL_SITE,
- GTK_SORT_DESCENDING);
- EXPECT_STREQ("C,X,D,Z", GetDisplayedCookies(cookies_view).c_str());
-
- gtk_tree_sortable_set_sort_column_id(
- GTK_TREE_SORTABLE(cookies_view.list_sort_),
- CookiesView::COL_COOKIE_NAME,
- GTK_SORT_ASCENDING);
- EXPECT_STREQ("C,D,X,Z", GetDisplayedCookies(cookies_view).c_str());
-
- gtk_tree_sortable_set_sort_column_id(
- GTK_TREE_SORTABLE(cookies_view.list_sort_),
- CookiesView::COL_COOKIE_NAME,
- GTK_SORT_DESCENDING);
- EXPECT_STREQ("Z,X,D,C", GetDisplayedCookies(cookies_view).c_str());
-}
-
-TEST_F(CookiesViewTest, SortRemove) {
+TEST_F(CookiesViewTest, RemoveDefaultSelection) {
net::CookieMonster* monster = profile_->GetCookieMonster();
+ monster->SetCookie(GURL("http://foo0"), "C=1");
+ monster->SetCookie(GURL("http://foo0"), "D=1");
monster->SetCookie(GURL("http://foo1"), "B=1");
- monster->SetCookie(GURL("http://bar1"), "Z=1");
- monster->SetCookie(GURL("http://foo2"), "C=1");
- monster->SetCookie(GURL("http://bar2"), "A=1");
+ monster->SetCookie(GURL("http://foo1"), "A=1");
+ monster->SetCookie(GURL("http://foo1"), "E=1");
+ monster->SetCookie(GURL("http://foo2"), "G=1");
+ monster->SetCookie(GURL("http://foo2"), "X=1");
CookiesView cookies_view(profile_.get());
- EXPECT_STREQ("Z,A,B,C", GetMonsterCookies(monster).c_str());
- EXPECT_STREQ("Z,A,B,C", GetDisplayedCookies(cookies_view).c_str());
+ EXPECT_STREQ("foo0,_Cookies,__C,__D,"
+ "foo1,_Cookies,__A,__B,__E,"
+ "foo2,_Cookies,__G,__X",
+ GetDisplayedCookies(cookies_view).c_str());
- gtk_tree_sortable_set_sort_column_id(
- GTK_TREE_SORTABLE(cookies_view.list_sort_),
- CookiesView::COL_COOKIE_NAME,
- GTK_SORT_DESCENDING);
- EXPECT_STREQ("Z,C,B,A", GetDisplayedCookies(cookies_view).c_str());
- // Reset the selection of the first row.
- gtk_tree_selection_unselect_all(cookies_view.selection_);
-
- GtkTreeIter iter;
- gtk_tree_model_iter_nth_child(cookies_view.list_sort_, &iter, NULL, 3);
- gtk_tree_selection_select_iter(cookies_view.selection_, &iter);
+ EXPECT_EQ(TRUE, GTK_WIDGET_SENSITIVE(cookies_view.remove_all_button_));
EXPECT_EQ(TRUE, GTK_WIDGET_SENSITIVE(cookies_view.remove_button_));
- gtk_button_clicked(GTK_BUTTON(cookies_view.remove_button_));
- EXPECT_STREQ("Z,B,C", GetMonsterCookies(monster).c_str());
- EXPECT_STREQ("Z,C,B", GetDisplayedCookies(cookies_view).c_str());
-}
-TEST_F(CookiesViewTest, SortFilterRemove) {
- net::CookieMonster* monster = profile_->GetCookieMonster();
- monster->SetCookie(GURL("http://foo1"), "B=1");
- monster->SetCookie(GURL("http://bar1"), "Z=1");
- monster->SetCookie(GURL("http://foo2"), "C=1");
- monster->SetCookie(GURL("http://bar2"), "A=1");
- CookiesView cookies_view(profile_.get());
- EXPECT_STREQ("Z,A,B,C", GetMonsterCookies(monster).c_str());
- EXPECT_STREQ("Z,A,B,C", GetDisplayedCookies(cookies_view).c_str());
-
- gtk_entry_set_text(GTK_ENTRY(cookies_view.filter_entry_), "bar");
- gtk_widget_activate(cookies_view.filter_entry_);
- gtk_tree_sortable_set_sort_column_id(
- GTK_TREE_SORTABLE(cookies_view.list_sort_),
- CookiesView::COL_COOKIE_NAME,
- GTK_SORT_ASCENDING);
- EXPECT_STREQ("A,Z", GetDisplayedCookies(cookies_view).c_str());
-
- GtkTreeIter iter;
- gtk_tree_model_iter_nth_child(cookies_view.list_sort_, &iter, NULL, 1);
- gtk_tree_selection_select_iter(cookies_view.selection_, &iter);
- EXPECT_EQ(TRUE, GTK_WIDGET_SENSITIVE(cookies_view.remove_button_));
gtk_button_clicked(GTK_BUTTON(cookies_view.remove_button_));
- EXPECT_STREQ("A,B,C", GetMonsterCookies(monster).c_str());
- EXPECT_STREQ("A", GetDisplayedCookies(cookies_view).c_str());
- gtk_tree_model_iter_nth_child(cookies_view.list_sort_, &iter, NULL, 0);
- gtk_tree_selection_select_iter(cookies_view.selection_, &iter);
- EXPECT_EQ(TRUE, GTK_WIDGET_SENSITIVE(cookies_view.remove_button_));
- gtk_button_clicked(GTK_BUTTON(cookies_view.remove_button_));
- EXPECT_STREQ("B,C", GetMonsterCookies(monster).c_str());
- EXPECT_STREQ("", GetDisplayedCookies(cookies_view).c_str());
-}
-
-TEST_F(CookiesViewTest, SortRemoveMultiple) {
- net::CookieMonster* monster = profile_->GetCookieMonster();
- monster->SetCookie(GURL("http://foo0"), "C=1");
- monster->SetCookie(GURL("http://foo1"), "D=1");
- monster->SetCookie(GURL("http://foo2"), "B=1");
- monster->SetCookie(GURL("http://foo3"), "A=1");
- monster->SetCookie(GURL("http://foo4"), "E=1");
- monster->SetCookie(GURL("http://foo5"), "G=1");
- monster->SetCookie(GURL("http://foo6"), "X=1");
- CookiesView cookies_view(profile_.get());
- gtk_tree_sortable_set_sort_column_id(
- GTK_TREE_SORTABLE(cookies_view.list_sort_),
- CookiesView::COL_COOKIE_NAME,
- GTK_SORT_DESCENDING);
- EXPECT_STREQ("X,G,E,D,C,B,A", GetDisplayedCookies(cookies_view).c_str());
- EXPECT_STREQ("C,D,B,A,E,G,X", GetMonsterCookies(monster).c_str());
-
- GtkTreeIter iter;
- gtk_tree_model_iter_nth_child(cookies_view.list_sort_, &iter, NULL, 1);
- gtk_tree_selection_select_iter(cookies_view.selection_, &iter);
- gtk_tree_model_iter_nth_child(cookies_view.list_sort_, &iter, NULL, 3);
- gtk_tree_selection_select_iter(cookies_view.selection_, &iter);
- gtk_tree_model_iter_nth_child(cookies_view.list_sort_, &iter, NULL, 4);
- gtk_tree_selection_select_iter(cookies_view.selection_, &iter);
- gtk_tree_model_iter_nth_child(cookies_view.list_sort_, &iter, NULL, 5);
- gtk_tree_selection_select_iter(cookies_view.selection_, &iter);
+ EXPECT_STREQ("B,A,E,G,X", GetMonsterCookies(monster).c_str());
+ EXPECT_STREQ("foo1,_Cookies,__A,__B,__E,"
+ "foo2,_Cookies,__G,__X",
+ GetDisplayedCookies(cookies_view).c_str());
EXPECT_EQ(TRUE, GTK_WIDGET_SENSITIVE(cookies_view.remove_all_button_));
EXPECT_EQ(TRUE, GTK_WIDGET_SENSITIVE(cookies_view.remove_button_));
gtk_button_clicked(GTK_BUTTON(cookies_view.remove_button_));
- EXPECT_STREQ("X,E,A", GetDisplayedCookies(cookies_view).c_str());
- EXPECT_STREQ("A,E,X", GetMonsterCookies(monster).c_str());
- EXPECT_EQ(TRUE, GTK_WIDGET_SENSITIVE(cookies_view.remove_all_button_));
- EXPECT_EQ(FALSE, GTK_WIDGET_SENSITIVE(cookies_view.remove_button_));
- EXPECT_EQ(0, gtk_tree_selection_count_selected_rows(cookies_view.selection_));
-}
+ EXPECT_STREQ("G,X", GetMonsterCookies(monster).c_str());
+ EXPECT_STREQ("foo2,_Cookies,__G,__X",
+ GetDisplayedCookies(cookies_view).c_str());
-TEST_F(CookiesViewTest, SortRemoveDefaultSelection) {
- net::CookieMonster* monster = profile_->GetCookieMonster();
- monster->SetCookie(GURL("http://foo1"), "Z=1");
- monster->SetCookie(GURL("http://bar1"), "X=1");
- monster->SetCookie(GURL("http://foo2"), "W=1");
- monster->SetCookie(GURL("http://bar2"), "Y=1");
- CookiesView cookies_view(profile_.get());
- EXPECT_STREQ("X,Y,Z,W", GetMonsterCookies(monster).c_str());
- EXPECT_STREQ("X,Y,Z,W", GetDisplayedCookies(cookies_view).c_str());
+ EXPECT_EQ(TRUE, GTK_WIDGET_SENSITIVE(cookies_view.remove_all_button_));
+ EXPECT_EQ(TRUE, GTK_WIDGET_SENSITIVE(cookies_view.remove_button_));
- gtk_tree_sortable_set_sort_column_id(
- GTK_TREE_SORTABLE(cookies_view.list_sort_),
- CookiesView::COL_COOKIE_NAME,
- GTK_SORT_ASCENDING);
- EXPECT_STREQ("W,X,Y,Z", GetDisplayedCookies(cookies_view).c_str());
+ gtk_button_clicked(GTK_BUTTON(cookies_view.remove_button_));
- GtkTreeIter iter;
- gtk_tree_model_iter_nth_child(cookies_view.list_sort_, &iter, NULL, 3);
- gtk_tree_selection_select_iter(cookies_view.selection_, &iter);
+ EXPECT_STREQ("", GetMonsterCookies(monster).c_str());
+ EXPECT_STREQ("", GetDisplayedCookies(cookies_view).c_str());
- EXPECT_EQ(TRUE, GTK_WIDGET_SENSITIVE(cookies_view.remove_button_));
- gtk_button_clicked(GTK_BUTTON(cookies_view.remove_button_));
- EXPECT_STREQ("Y,W", GetMonsterCookies(monster).c_str());
- EXPECT_STREQ("W,Y", GetDisplayedCookies(cookies_view).c_str());
+ EXPECT_EQ(FALSE, GTK_WIDGET_SENSITIVE(cookies_view.remove_all_button_));
+ EXPECT_EQ(FALSE, GTK_WIDGET_SENSITIVE(cookies_view.remove_button_));
}