Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(33)

Side by Side Diff: chrome/browser/gtk/collected_cookies_gtk.cc

Issue 2808053: Buttons for the collected cookies dialog to add content exceptions. (Closed)
Patch Set: compile fix Created 10 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/gtk/collected_cookies_gtk.h" 5 #include "chrome/browser/gtk/collected_cookies_gtk.h"
6 6
7 #include "app/gtk_util.h" 7 #include "app/gtk_util.h"
8 #include "app/l10n_util.h" 8 #include "app/l10n_util.h"
9 #include "chrome/browser/cookies_tree_model.h" 9 #include "chrome/browser/cookies_tree_model.h"
10 #include "chrome/browser/gtk/gtk_util.h" 10 #include "chrome/browser/gtk/gtk_util.h"
11 #include "chrome/browser/profile.h"
11 #include "chrome/browser/tab_contents/tab_contents.h" 12 #include "chrome/browser/tab_contents/tab_contents.h"
12 #include "chrome/common/notification_service.h" 13 #include "chrome/common/notification_service.h"
13 #include "grit/generated_resources.h" 14 #include "grit/generated_resources.h"
14 15
15 namespace { 16 namespace {
16 // Height of the cookie tree view. 17 // Height of the cookie tree view.
17 const int kTreeViewHeight = 150; 18 const int kTreeViewHeight = 150;
18 } // namespace 19 } // namespace
19 20
20 CollectedCookiesGtk::CollectedCookiesGtk(GtkWindow* parent, 21 CollectedCookiesGtk::CollectedCookiesGtk(GtkWindow* parent,
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 GtkCellRenderer* title_renderer = gtk_cell_renderer_text_new(); 77 GtkCellRenderer* title_renderer = gtk_cell_renderer_text_new();
77 gtk_tree_view_column_pack_start(title_column, title_renderer, TRUE); 78 gtk_tree_view_column_pack_start(title_column, title_renderer, TRUE);
78 gtk_tree_view_column_add_attribute(title_column, title_renderer, "text", 79 gtk_tree_view_column_add_attribute(title_column, title_renderer, "text",
79 gtk_tree::TreeAdapter::COL_TITLE); 80 gtk_tree::TreeAdapter::COL_TITLE);
80 gtk_tree_view_column_set_title( 81 gtk_tree_view_column_set_title(
81 title_column, l10n_util::GetStringUTF8( 82 title_column, l10n_util::GetStringUTF8(
82 IDS_COOKIES_DOMAIN_COLUMN_HEADER).c_str()); 83 IDS_COOKIES_DOMAIN_COLUMN_HEADER).c_str());
83 gtk_tree_view_append_column(GTK_TREE_VIEW(allowed_tree_), title_column); 84 gtk_tree_view_append_column(GTK_TREE_VIEW(allowed_tree_), title_column);
84 g_signal_connect(allowed_tree_, "row-expanded", 85 g_signal_connect(allowed_tree_, "row-expanded",
85 G_CALLBACK(OnTreeViewRowExpandedThunk), this); 86 G_CALLBACK(OnTreeViewRowExpandedThunk), this);
87 allowed_selection_ =
88 gtk_tree_view_get_selection(GTK_TREE_VIEW(allowed_tree_));
89 gtk_tree_selection_set_mode(allowed_selection_, GTK_SELECTION_MULTIPLE);
90 g_signal_connect(allowed_selection_, "changed",
91 G_CALLBACK(OnTreeViewSelectionChangeThunk), this);
92
93 GtkWidget* button_box = gtk_hbutton_box_new();
94 gtk_button_box_set_layout(GTK_BUTTON_BOX(button_box), GTK_BUTTONBOX_START);
95 gtk_box_set_spacing(GTK_BOX(button_box), gtk_util::kControlSpacing);
96 gtk_box_pack_start(GTK_BOX(dialog_), button_box, FALSE, FALSE, 0);
97 block_allowed_cookie_button_ = gtk_button_new_with_label(
98 l10n_util::GetStringUTF8(IDS_COLLECTED_COOKIES_BLOCK_BUTTON).c_str());
99 g_signal_connect(block_allowed_cookie_button_, "clicked",
100 G_CALLBACK(OnBlockAllowedButtonClickedThunk), this);
101 gtk_container_add(GTK_CONTAINER(button_box), block_allowed_cookie_button_);
86 102
87 // Blocked Cookie list. 103 // Blocked Cookie list.
88 cookie_list_vbox = gtk_vbox_new(FALSE, gtk_util::kControlSpacing); 104 cookie_list_vbox = gtk_vbox_new(FALSE, gtk_util::kControlSpacing);
89 gtk_box_pack_start(GTK_BOX(dialog_), cookie_list_vbox, TRUE, TRUE, 0); 105 gtk_box_pack_start(GTK_BOX(dialog_), cookie_list_vbox, TRUE, TRUE, 0);
90 106
91 label = gtk_label_new( 107 label = gtk_label_new(
92 l10n_util::GetStringUTF8(IDS_COLLECTED_COOKIES_BLOCKED_COOKIES_LABEL). 108 l10n_util::GetStringUTF8(IDS_COLLECTED_COOKIES_BLOCKED_COOKIES_LABEL).
93 c_str()); 109 c_str());
94 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); 110 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
95 gtk_box_pack_start(GTK_BOX(cookie_list_vbox), label, FALSE, FALSE, 0); 111 gtk_box_pack_start(GTK_BOX(cookie_list_vbox), label, FALSE, FALSE, 0);
(...skipping 25 matching lines...) Expand all
121 title_renderer = gtk_cell_renderer_text_new(); 137 title_renderer = gtk_cell_renderer_text_new();
122 gtk_tree_view_column_pack_start(title_column, title_renderer, TRUE); 138 gtk_tree_view_column_pack_start(title_column, title_renderer, TRUE);
123 gtk_tree_view_column_add_attribute(title_column, title_renderer, "text", 139 gtk_tree_view_column_add_attribute(title_column, title_renderer, "text",
124 gtk_tree::TreeAdapter::COL_TITLE); 140 gtk_tree::TreeAdapter::COL_TITLE);
125 gtk_tree_view_column_set_title( 141 gtk_tree_view_column_set_title(
126 title_column, l10n_util::GetStringUTF8( 142 title_column, l10n_util::GetStringUTF8(
127 IDS_COOKIES_DOMAIN_COLUMN_HEADER).c_str()); 143 IDS_COOKIES_DOMAIN_COLUMN_HEADER).c_str());
128 gtk_tree_view_append_column(GTK_TREE_VIEW(blocked_tree_), title_column); 144 gtk_tree_view_append_column(GTK_TREE_VIEW(blocked_tree_), title_column);
129 g_signal_connect(blocked_tree_, "row-expanded", 145 g_signal_connect(blocked_tree_, "row-expanded",
130 G_CALLBACK(OnTreeViewRowExpandedThunk), this); 146 G_CALLBACK(OnTreeViewRowExpandedThunk), this);
147 blocked_selection_ =
148 gtk_tree_view_get_selection(GTK_TREE_VIEW(blocked_tree_));
149 gtk_tree_selection_set_mode(blocked_selection_, GTK_SELECTION_MULTIPLE);
150 g_signal_connect(blocked_selection_, "changed",
151 G_CALLBACK(OnTreeViewSelectionChangeThunk), this);
152
153 button_box = gtk_hbutton_box_new();
154 gtk_button_box_set_layout(GTK_BUTTON_BOX(button_box), GTK_BUTTONBOX_START);
155 gtk_box_set_spacing(GTK_BOX(button_box), gtk_util::kControlSpacing);
156 gtk_box_pack_start(GTK_BOX(dialog_), button_box, FALSE, FALSE, 0);
157 allow_blocked_cookie_button_ = gtk_button_new_with_label(
158 l10n_util::GetStringUTF8(IDS_COLLECTED_COOKIES_ALLOW_BUTTON).c_str());
159 g_signal_connect(allow_blocked_cookie_button_, "clicked",
160 G_CALLBACK(OnAllowBlockedButtonClickedThunk), this);
161 gtk_container_add(GTK_CONTAINER(button_box), allow_blocked_cookie_button_);
162 for_session_blocked_cookie_button_ = gtk_button_new_with_label(
163 l10n_util::GetStringUTF8(IDS_COLLECTED_COOKIES_SESSION_ONLY_BUTTON).
164 c_str());
165 g_signal_connect(for_session_blocked_cookie_button_, "clicked",
166 G_CALLBACK(OnForSessionBlockedButtonClickedThunk), this);
167 gtk_container_add(GTK_CONTAINER(button_box),
168 for_session_blocked_cookie_button_);
131 169
132 // Close button. 170 // Close button.
133 GtkWidget* button_box = gtk_hbutton_box_new(); 171 button_box = gtk_hbutton_box_new();
134 gtk_button_box_set_layout(GTK_BUTTON_BOX(button_box), GTK_BUTTONBOX_END); 172 gtk_button_box_set_layout(GTK_BUTTON_BOX(button_box), GTK_BUTTONBOX_END);
135 gtk_box_set_spacing(GTK_BOX(button_box), gtk_util::kControlSpacing); 173 gtk_box_set_spacing(GTK_BOX(button_box), gtk_util::kControlSpacing);
136 gtk_box_pack_end(GTK_BOX(dialog_), button_box, FALSE, TRUE, 0); 174 gtk_box_pack_end(GTK_BOX(dialog_), button_box, FALSE, TRUE, 0);
137 GtkWidget* close = gtk_button_new_from_stock(GTK_STOCK_CLOSE); 175 GtkWidget* close = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
138 gtk_button_set_label(GTK_BUTTON(close), 176 gtk_button_set_label(GTK_BUTTON(close),
139 l10n_util::GetStringUTF8(IDS_CLOSE).c_str()); 177 l10n_util::GetStringUTF8(IDS_CLOSE).c_str());
140 g_signal_connect(close, "clicked", G_CALLBACK(OnCloseThunk), this); 178 g_signal_connect(close, "clicked", G_CALLBACK(OnCloseThunk), this);
141 gtk_box_pack_end(GTK_BOX(button_box), close, FALSE, TRUE, 0); 179 gtk_box_pack_end(GTK_BOX(button_box), close, FALSE, TRUE, 0);
142 180
143 // Show the dialog. 181 // Show the dialog.
144 allowed_cookies_tree_adapter_->Init(); 182 allowed_cookies_tree_adapter_->Init();
145 blocked_cookies_tree_adapter_->Init(); 183 blocked_cookies_tree_adapter_->Init();
184 EnableControls();
146 window_ = tab_contents_->CreateConstrainedDialog(this); 185 window_ = tab_contents_->CreateConstrainedDialog(this);
147 } 186 }
148 187
149 CollectedCookiesGtk::~CollectedCookiesGtk() { 188 CollectedCookiesGtk::~CollectedCookiesGtk() {
150 gtk_widget_destroy(dialog_); 189 gtk_widget_destroy(dialog_);
151 } 190 }
152 191
153 GtkWidget* CollectedCookiesGtk::GetWidgetRoot() { 192 GtkWidget* CollectedCookiesGtk::GetWidgetRoot() {
154 return dialog_; 193 return dialog_;
155 } 194 }
156 195
157 void CollectedCookiesGtk::DeleteDelegate() { 196 void CollectedCookiesGtk::DeleteDelegate() {
158 delete this; 197 delete this;
159 } 198 }
160 199
200 bool CollectedCookiesGtk::SelectionContainsOriginNode(
201 GtkTreeSelection* selection, gtk_tree::TreeAdapter* adapter) {
202 // Check whether at least one "origin" node is selected.
203 GtkTreeModel* model;
204 GList* paths =
205 gtk_tree_selection_get_selected_rows(selection, &model);
206 bool contains_origin_node = false;
207 for (GList* item = paths; item; item = item->next) {
208 GtkTreeIter iter;
209 gtk_tree_model_get_iter(
210 model, &iter, reinterpret_cast<GtkTreePath*>(item->data));
211 CookieTreeNode* node =
212 static_cast<CookieTreeNode*>(adapter->GetNode(&iter));
213 if (node->GetDetailedInfo().node_type !=
214 CookieTreeNode::DetailedInfo::TYPE_ORIGIN)
215 continue;
216 CookieTreeOriginNode* origin_node = static_cast<CookieTreeOriginNode*>(
217 node);
218 if (!origin_node->CanCreateContentException())
219 continue;
220 contains_origin_node = true;
221 }
222 g_list_foreach(paths, reinterpret_cast<GFunc>(gtk_tree_path_free), NULL);
223 g_list_free(paths);
224 return contains_origin_node;
225 }
226
227 void CollectedCookiesGtk::EnableControls() {
228 // Update button states.
229 bool enable_for_allowed_cookies =
230 SelectionContainsOriginNode(allowed_selection_,
231 allowed_cookies_tree_adapter_.get());
232 gtk_widget_set_sensitive(block_allowed_cookie_button_,
233 enable_for_allowed_cookies);
234
235 bool enable_for_blocked_cookies =
236 SelectionContainsOriginNode(blocked_selection_,
237 blocked_cookies_tree_adapter_.get());
238 gtk_widget_set_sensitive(allow_blocked_cookie_button_,
239 enable_for_blocked_cookies);
240 gtk_widget_set_sensitive(for_session_blocked_cookie_button_,
241 enable_for_blocked_cookies);
242 }
243
161 void CollectedCookiesGtk::Observe(NotificationType type, 244 void CollectedCookiesGtk::Observe(NotificationType type,
162 const NotificationSource& source, 245 const NotificationSource& source,
163 const NotificationDetails& details) { 246 const NotificationDetails& details) {
164 DCHECK(type == NotificationType::COLLECTED_COOKIES_SHOWN); 247 DCHECK(type == NotificationType::COLLECTED_COOKIES_SHOWN);
165 DCHECK_EQ(Source<TabSpecificContentSettings>(source).ptr(), 248 DCHECK_EQ(Source<TabSpecificContentSettings>(source).ptr(),
166 tab_contents_->GetTabSpecificContentSettings()); 249 tab_contents_->GetTabSpecificContentSettings());
167 window_->CloseConstrainedWindow(); 250 window_->CloseConstrainedWindow();
168 } 251 }
169 252
170 void CollectedCookiesGtk::OnClose(GtkWidget* close_button) { 253 void CollectedCookiesGtk::OnClose(GtkWidget* close_button) {
171 window_->CloseConstrainedWindow(); 254 window_->CloseConstrainedWindow();
172 } 255 }
173 256
257 void CollectedCookiesGtk::AddExceptions(GtkTreeSelection* selection,
258 gtk_tree::TreeAdapter* adapter,
259 ContentSetting setting) {
260 GtkTreeModel* model;
261 GList* paths =
262 gtk_tree_selection_get_selected_rows(selection, &model);
263 for (GList* item = paths; item; item = item->next) {
264 GtkTreeIter iter;
265 gtk_tree_model_get_iter(
266 model, &iter, reinterpret_cast<GtkTreePath*>(item->data));
267 CookieTreeOriginNode* node = static_cast<CookieTreeOriginNode*>(
268 adapter->GetNode(&iter));
269 if (!node->CanCreateContentException()) {
270 node->CreateContentException(
271 tab_contents_->profile()->GetHostContentSettingsMap(), setting);
272 }
273 }
274 g_list_foreach(paths, reinterpret_cast<GFunc>(gtk_tree_path_free), NULL);
275 g_list_free(paths);
276 }
277
278 void CollectedCookiesGtk::OnBlockAllowedButtonClicked(GtkWidget* button) {
279 AddExceptions(allowed_selection_, allowed_cookies_tree_adapter_.get(),
280 CONTENT_SETTING_BLOCK);
281 }
282
283 void CollectedCookiesGtk::OnAllowBlockedButtonClicked(GtkWidget* button) {
284 AddExceptions(blocked_selection_, blocked_cookies_tree_adapter_.get(),
285 CONTENT_SETTING_ALLOW);
286 }
287
288 void CollectedCookiesGtk::OnForSessionBlockedButtonClicked(GtkWidget* button) {
289 AddExceptions(blocked_selection_, blocked_cookies_tree_adapter_.get(),
290 CONTENT_SETTING_SESSION_ONLY);
291 }
292
174 void CollectedCookiesGtk::OnTreeViewRowExpanded(GtkWidget* tree_view, 293 void CollectedCookiesGtk::OnTreeViewRowExpanded(GtkWidget* tree_view,
175 GtkTreeIter* iter, 294 GtkTreeIter* iter,
176 GtkTreePath* path) { 295 GtkTreePath* path) {
177 // When a row in the tree is expanded, expand all the children too. 296 // When a row in the tree is expanded, expand all the children too.
178 g_signal_handlers_block_by_func( 297 g_signal_handlers_block_by_func(
179 tree_view, reinterpret_cast<gpointer>(OnTreeViewRowExpandedThunk), this); 298 tree_view, reinterpret_cast<gpointer>(OnTreeViewRowExpandedThunk), this);
180 gtk_tree_view_expand_row(GTK_TREE_VIEW(tree_view), path, TRUE); 299 gtk_tree_view_expand_row(GTK_TREE_VIEW(tree_view), path, TRUE);
181 g_signal_handlers_unblock_by_func( 300 g_signal_handlers_unblock_by_func(
182 tree_view, reinterpret_cast<gpointer>(OnTreeViewRowExpandedThunk), this); 301 tree_view, reinterpret_cast<gpointer>(OnTreeViewRowExpandedThunk), this);
183 } 302 }
303
304 void CollectedCookiesGtk::OnTreeViewSelectionChange(GtkWidget* selection) {
305 EnableControls();
306 }
OLDNEW
« no previous file with comments | « chrome/browser/gtk/collected_cookies_gtk.h ('k') | chrome/browser/views/collected_cookies_win.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698