// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This is the Gtk implementation of the collected Cookies dialog.
#ifndef CHROME_BROWSER_UI_GTK_COLLECTED_COOKIES_GTK_H_
#define CHROME_BROWSER_UI_GTK_COLLECTED_COOKIES_GTK_H_
#pragma once
#include <gtk/gtk.h>
#include "base/memory/scoped_ptr.h"
#include "chrome/browser/ui/gtk/constrained_window_gtk.h"
#include "chrome/browser/ui/gtk/gtk_tree.h"
#include "chrome/common/content_settings.h"
#include "content/common/notification_observer.h"
#include "content/common/notification_registrar.h"
#include "ui/base/gtk/gtk_signal.h"
class CookiesTreeModel;
// CollectedCookiesGtk is a dialog that displays the allowed and blocked
// cookies of the current tab contents. To display the dialog, invoke
// ShowCollectedCookiesDialog() on the delegate of the tab contents.
class CollectedCookiesGtk : public ConstrainedDialogDelegate,
gtk_tree::TreeAdapter::Delegate,
NotificationObserver {
public:
CollectedCookiesGtk(GtkWindow* parent, TabContents* tab_contents);
// ConstrainedDialogDelegate methods.
virtual GtkWidget* GetWidgetRoot();
virtual GtkWidget* GetFocusWidget();
virtual void DeleteDelegate();
private:
virtual ~CollectedCookiesGtk();
// Initialize all widgets of this dialog.
void Init();
// True if the selection contains at least one origin node.
bool SelectionContainsOriginNode(GtkTreeSelection* selection,
gtk_tree::TreeAdapter* adapter);
// Enable the allow/block buttons if at least one origin node is selected.
void EnableControls();
// Add exceptions for all origin nodes within the selection.
void AddExceptions(GtkTreeSelection* selection,
gtk_tree::TreeAdapter* adapter,
ContentSetting setting);
// Notification Observer implementation.
virtual void Observe(NotificationType type,
const NotificationSource& source,
const NotificationDetails& details);
// Create the information panes for the allowed and blocked cookies.
GtkWidget* CreateAllowedPane();
GtkWidget* CreateBlockedPane();
// Show information about selected cookie in the cookie info view.
void ShowCookieInfo(gint current_page);
void ShowSelectionInfo(GtkTreeSelection* selection,
gtk_tree::TreeAdapter* adapter);
// Callbacks.
CHROMEGTK_CALLBACK_2(CollectedCookiesGtk, void, OnTreeViewRowExpanded,
GtkTreeIter*, GtkTreePath*);
CHROMEGTK_CALLBACK_0(CollectedCookiesGtk, void, OnTreeViewSelectionChange);
CHROMEGTK_CALLBACK_0(CollectedCookiesGtk, void, OnClose);
CHROMEGTK_CALLBACK_0(CollectedCookiesGtk, void, OnBlockAllowedButtonClicked);
CHROMEGTK_CALLBACK_0(CollectedCookiesGtk, void, OnAllowBlockedButtonClicked);
CHROMEGTK_CALLBACK_0(CollectedCookiesGtk, void,
OnForSessionBlockedButtonClicked);
CHROMEGTK_CALLBACK_2(CollectedCookiesGtk, void, OnSwitchPage,
gpointer, guint);
NotificationRegistrar registrar_;
ConstrainedWindow* window_;
// Widgets of the dialog.
GtkWidget* dialog_;
GtkWidget* allowed_description_label_;
GtkWidget* blocked_description_label_;
GtkWidget* block_allowed_cookie_button_;
GtkWidget* allow_blocked_cookie_button_;
GtkWidget* for_session_blocked_cookie_button_;
GtkWidget* close_button_;
// The table listing the cookies.
GtkWidget* notebook_;
GtkWidget* allowed_tree_;
GtkWidget* blocked_tree_;
GtkTreeSelection* allowed_selection_;
GtkTreeSelection* blocked_selection_;
// The infobar widget.
GtkWidget* infobar_;
GtkWidget* infobar_label_;
// Displays information about selected cookie.
GtkWidget* cookie_info_view_;
// The tab contents.
TabContents* tab_contents_;
bool status_changed_;
// The Cookies Table model.
scoped_ptr<CookiesTreeModel> allowed_cookies_tree_model_;
scoped_ptr<CookiesTreeModel> blocked_cookies_tree_model_;
scoped_ptr<gtk_tree::TreeAdapter> allowed_cookies_tree_adapter_;
scoped_ptr<gtk_tree::TreeAdapter> blocked_cookies_tree_adapter_;
DISALLOW_COPY_AND_ASSIGN(CollectedCookiesGtk);
};
#endif // CHROME_BROWSER_UI_GTK_COLLECTED_COOKIES_GTK_H_