diff options
author | mattm@chromium.org <mattm@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-11-11 23:07:58 +0000 |
---|---|---|
committer | mattm@chromium.org <mattm@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-11-11 23:07:58 +0000 |
commit | 42062e78622add4b84f872707530670d4894d5c9 (patch) | |
tree | 57555878cc6583012dbc2db4c3842282d1ec6ac5 /chrome/browser | |
parent | dda7d9c65875b7650f36fa8c2a03b5813dc3ecd3 (diff) | |
download | chromium_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.cc | 2 | ||||
-rw-r--r-- | chrome/browser/cookies_tree_model.h | 3 | ||||
-rw-r--r-- | chrome/browser/gtk/options/cookies_view.cc | 254 | ||||
-rw-r--r-- | chrome/browser/gtk/options/cookies_view.h | 67 | ||||
-rw-r--r-- | chrome/browser/gtk/options/cookies_view_unittest.cc | 497 |
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_)); } |