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