1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // This is the Gtk implementation of the collected Cookies dialog. 6 7 #ifndef CHROME_BROWSER_UI_GTK_COLLECTED_COOKIES_GTK_H_ 8 #define CHROME_BROWSER_UI_GTK_COLLECTED_COOKIES_GTK_H_ 9 10 #include <gtk/gtk.h> 11 12 #include "base/compiler_specific.h" 13 #include "base/memory/scoped_ptr.h" 14 #include "chrome/browser/ui/gtk/constrained_window_gtk.h" 15 #include "chrome/browser/ui/gtk/gtk_tree.h" 16 #include "chrome/common/content_settings.h" 17 #include "content/public/browser/notification_observer.h" 18 #include "content/public/browser/notification_registrar.h" 19 #include "ui/base/gtk/gtk_signal.h" 20 21 class CookiesTreeModel; 22 23 namespace content { 24 class WebContents; 25 } 26 27 // CollectedCookiesGtk is a dialog that displays the allowed and blocked 28 // cookies of the current tab contents. To display the dialog, invoke 29 // ShowCollectedCookiesDialog() on the delegate of the web contents's 30 // content settings tab helper. 31 32 class CollectedCookiesGtk : public gtk_tree::TreeAdapter::Delegate, 33 public content::NotificationObserver { 34 public: 35 CollectedCookiesGtk(GtkWindow* parent, content::WebContents* web_contents); 36 37 private: 38 virtual ~CollectedCookiesGtk(); 39 40 // Initialize all widgets of this dialog. 41 void Init(); 42 43 // True if the selection contains at least one host node. 44 bool SelectionContainsHostNode(GtkTreeSelection* selection, 45 gtk_tree::TreeAdapter* adapter); 46 47 // Enable the allow/block buttons if at least one host node is selected. 48 void EnableControls(); 49 50 // Add exceptions for all origin nodes within the selection. 51 void AddExceptions(GtkTreeSelection* selection, 52 gtk_tree::TreeAdapter* adapter, 53 ContentSetting setting); 54 55 // Notification Observer implementation. 56 virtual void Observe(int type, 57 const content::NotificationSource& source, 58 const content::NotificationDetails& details) OVERRIDE; 59 60 // Create the information panes for the allowed and blocked cookies. 61 GtkWidget* CreateAllowedPane(); 62 GtkWidget* CreateBlockedPane(); 63 64 // Show information about selected cookie in the cookie info view. 65 void ShowCookieInfo(gint current_page); 66 void ShowSelectionInfo(GtkTreeSelection* selection, 67 gtk_tree::TreeAdapter* adapter); 68 69 70 // Callbacks. 71 CHROMEGTK_CALLBACK_2(CollectedCookiesGtk, void, OnTreeViewRowExpanded, 72 GtkTreeIter*, GtkTreePath*); 73 CHROMEGTK_CALLBACK_0(CollectedCookiesGtk, void, OnTreeViewSelectionChange); 74 CHROMEGTK_CALLBACK_0(CollectedCookiesGtk, void, OnClose); 75 CHROMEGTK_CALLBACK_0(CollectedCookiesGtk, void, OnBlockAllowedButtonClicked); 76 CHROMEGTK_CALLBACK_0(CollectedCookiesGtk, void, OnAllowBlockedButtonClicked); 77 CHROMEGTK_CALLBACK_0(CollectedCookiesGtk, void, 78 OnForSessionBlockedButtonClicked); 79 CHROMEGTK_CALLBACK_2(CollectedCookiesGtk, void, OnSwitchPage, 80 gpointer, guint); 81 CHROMEGTK_CALLBACK_0(CollectedCookiesGtk, void, OnDestroy); 82 83 content::NotificationRegistrar registrar_; 84 85 GtkWidget* window_; 86 87 // Widgets of the dialog. 88 GtkWidget* dialog_; 89 90 GtkWidget* allowed_description_label_; 91 GtkWidget* blocked_description_label_; 92 93 GtkWidget* block_allowed_cookie_button_; 94 95 GtkWidget* allow_blocked_cookie_button_; 96 GtkWidget* for_session_blocked_cookie_button_; 97 GtkWidget* close_button_; 98 99 // The table listing the cookies. 100 GtkWidget* notebook_; 101 GtkWidget* allowed_tree_; 102 GtkWidget* blocked_tree_; 103 104 GtkTreeSelection* allowed_selection_; 105 GtkTreeSelection* blocked_selection_; 106 107 // The infobar widget. 108 GtkWidget* infobar_; 109 GtkWidget* infobar_label_; 110 111 // Displays information about selected cookie. 112 GtkWidget* cookie_info_view_; 113 114 // The web contents. 115 content::WebContents* web_contents_; 116 117 bool status_changed_; 118 119 // The Cookies Table model. 120 scoped_ptr<CookiesTreeModel> allowed_cookies_tree_model_; 121 scoped_ptr<CookiesTreeModel> blocked_cookies_tree_model_; 122 scoped_ptr<gtk_tree::TreeAdapter> allowed_cookies_tree_adapter_; 123 scoped_ptr<gtk_tree::TreeAdapter> blocked_cookies_tree_adapter_; 124 125 DISALLOW_COPY_AND_ASSIGN(CollectedCookiesGtk); 126 }; 127 128 #endif // CHROME_BROWSER_UI_GTK_COLLECTED_COOKIES_GTK_H_ 129