Home | History | Annotate | Download | only in gtk
      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