1// Copyright (c) 2011 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#pragma once
10
11#include <gtk/gtk.h>
12
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/common/notification_observer.h"
18#include "content/common/notification_registrar.h"
19#include "ui/base/gtk/gtk_signal.h"
20
21class CookiesTreeModel;
22
23// CollectedCookiesGtk is a dialog that displays the allowed and blocked
24// cookies of the current tab contents.  To display the dialog, invoke
25// ShowCollectedCookiesDialog() on the delegate of the tab contents.
26
27class CollectedCookiesGtk : public ConstrainedDialogDelegate,
28                                   gtk_tree::TreeAdapter::Delegate,
29                                   NotificationObserver {
30 public:
31  CollectedCookiesGtk(GtkWindow* parent, TabContents* tab_contents);
32
33  // ConstrainedDialogDelegate methods.
34  virtual GtkWidget* GetWidgetRoot();
35  virtual GtkWidget* GetFocusWidget();
36  virtual void DeleteDelegate();
37
38 private:
39  virtual ~CollectedCookiesGtk();
40
41  // Initialize all widgets of this dialog.
42  void Init();
43
44  // True if the selection contains at least one origin node.
45  bool SelectionContainsOriginNode(GtkTreeSelection* selection,
46                                   gtk_tree::TreeAdapter* adapter);
47
48  // Enable the allow/block buttons if at least one origin node is selected.
49  void EnableControls();
50
51  // Add exceptions for all origin nodes within the selection.
52  void AddExceptions(GtkTreeSelection* selection,
53                     gtk_tree::TreeAdapter* adapter,
54                     ContentSetting setting);
55
56  // Notification Observer implementation.
57  virtual void Observe(NotificationType type,
58                       const NotificationSource& source,
59                       const NotificationDetails& details);
60
61  // Create the information panes for the allowed and blocked cookies.
62  GtkWidget* CreateAllowedPane();
63  GtkWidget* CreateBlockedPane();
64
65  // Show information about selected cookie in the cookie info view.
66  void ShowCookieInfo(gint current_page);
67  void ShowSelectionInfo(GtkTreeSelection* selection,
68                         gtk_tree::TreeAdapter* adapter);
69
70
71  // Callbacks.
72  CHROMEGTK_CALLBACK_2(CollectedCookiesGtk, void, OnTreeViewRowExpanded,
73                       GtkTreeIter*, GtkTreePath*);
74  CHROMEGTK_CALLBACK_0(CollectedCookiesGtk, void, OnTreeViewSelectionChange);
75  CHROMEGTK_CALLBACK_0(CollectedCookiesGtk, void, OnClose);
76  CHROMEGTK_CALLBACK_0(CollectedCookiesGtk, void, OnBlockAllowedButtonClicked);
77  CHROMEGTK_CALLBACK_0(CollectedCookiesGtk, void, OnAllowBlockedButtonClicked);
78  CHROMEGTK_CALLBACK_0(CollectedCookiesGtk, void,
79                       OnForSessionBlockedButtonClicked);
80  CHROMEGTK_CALLBACK_2(CollectedCookiesGtk, void, OnSwitchPage,
81                       gpointer, guint);
82
83  NotificationRegistrar registrar_;
84
85  ConstrainedWindow* 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 tab contents.
115  TabContents* tab_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