root/chrome/browser/ui/gtk/website_settings/website_settings_popup_gtk.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


// Copyright (c) 2012 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.

#ifndef CHROME_BROWSER_UI_GTK_WEBSITE_SETTINGS_WEBSITE_SETTINGS_POPUP_GTK_H_
#define CHROME_BROWSER_UI_GTK_WEBSITE_SETTINGS_WEBSITE_SETTINGS_POPUP_GTK_H_

#include <gtk/gtk.h>

#include "base/basictypes.h"
#include "base/compiler_specific.h"
#include "base/memory/scoped_ptr.h"
#include "base/memory/scoped_vector.h"
#include "chrome/browser/ui/gtk/bubble/bubble_gtk.h"
#include "chrome/browser/ui/gtk/website_settings/permission_selector_observer.h"
#include "chrome/browser/ui/website_settings/website_settings_ui.h"
#include "content/public/browser/notification_observer.h"
#include "content/public/browser/notification_registrar.h"

class Browser;
class CustomDrawButton;
class GtkThemeService;
class GURL;
class PermissionSelector;
class Profile;
class WebsiteSettings;

namespace content {
struct SSLStatus;
class WebContents;
}

// GTK implementation of the website settings UI.
class WebsiteSettingsPopupGtk : public WebsiteSettingsUI,
                                public PermissionSelectorObserver,
                                public BubbleDelegateGtk,
                                public content::NotificationObserver {
 public:
  // Creates a |WebsiteSettingsPopupGtk| and displays the UI. The |url|
  // contains the omnibox URL of the currently active tab, |parent| contains
  // the currently active window, |profile| contains the currently active
  // profile and |ssl| contains the |SSLStatus| of the connection to the
  // website in the currently active tab that is wrapped by the
  // |web_contents|.
  static void Show(gfx::NativeWindow parent,
                   Profile* profile,
                   content::WebContents* web_contents,
                   const GURL& url,
                   const content::SSLStatus& ssl);

  virtual ~WebsiteSettingsPopupGtk();

 private:
  WebsiteSettingsPopupGtk(gfx::NativeWindow parent,
                          Profile* profile,
                          content::WebContents* web_contents,
                          const GURL& url,
                          const content::SSLStatus& ssl);

  // WebsiteSettingsUI implementations.
  virtual void SetCookieInfo(const CookieInfoList& cookie_info_list) OVERRIDE;
  virtual void SetPermissionInfo(
      const PermissionInfoList& permission_info_list) OVERRIDE;
  virtual void SetIdentityInfo(const IdentityInfo& identity_info) OVERRIDE;
  virtual void SetFirstVisit(const base::string16& first_visit) OVERRIDE;
  virtual void SetSelectedTab(WebsiteSettingsUI::TabId tab_id) OVERRIDE;

  // PermissionSelectorObserver implementations.
  virtual void OnPermissionChanged(PermissionSelector* selector) OVERRIDE;

  // BubbleDelegateGtk implementation.
  virtual void BubbleClosing(BubbleGtk* bubble, bool closed_by_escape) OVERRIDE;

  // content::NotificationObserver implementation.
  virtual void Observe(int type,
                       const content::NotificationSource& source,
                       const content::NotificationDetails& details) OVERRIDE;

  // Layouts the different sections retrieved from the model.
  void InitContents();

  // Creates a tab for the tabstrip with label indicated by |ids|. This tab
  // is not used in GTK theme mode.
  GtkWidget* BuildTab(int ids);

  // Gives the index in the notebook for the given tab widget.
  int TabstripButtonToTabIndex(GtkWidget* tab);

  // Callbacks for the link buttons.
  CHROMEGTK_CALLBACK_1(WebsiteSettingsPopupGtk, gboolean,
                       OnTabButtonPress, GdkEvent*);
  CHROMEGTK_CALLBACK_1(WebsiteSettingsPopupGtk, gboolean,
                       OnTabExpose, GdkEventExpose*);
  CHROMEGTK_CALLBACK_1(WebsiteSettingsPopupGtk, gboolean,
                       OnTabstripExpose, GdkEventExpose*);
  CHROMEGTK_CALLBACK_0(WebsiteSettingsPopupGtk, void, OnCookiesLinkClicked);
  CHROMEGTK_CALLBACK_0(WebsiteSettingsPopupGtk, void, OnViewCertLinkClicked);
  CHROMEGTK_CALLBACK_0(WebsiteSettingsPopupGtk, void, OnCloseButtonClicked);
  CHROMEGTK_CALLBACK_0(WebsiteSettingsPopupGtk, void, OnHelpLinkClicked);

  // Parent window.
  GtkWindow* parent_;

  // The container that contains the content of the popup.
  GtkWidget* contents_;

  // The widget relative to which the popup is positioned.
  GtkWidget* anchor_;

  // Provides colors and stuff.
  GtkThemeService* theme_service_;

  // The popup bubble container.
  BubbleGtk* bubble_;

  Profile* profile_;

  content::WebContents* web_contents_;

  // The browser object of the current window. This is needed to open the
  // settings page in a new tab.
  Browser* browser_;

  // For secure connection |cert_id_| is set to the ID of the server
  // certificate. For non secure connections |cert_id_| is 0.
  int cert_id_;

  // Container for the popup header content.
  GtkWidget* header_box_;

  // Close button for the bubble.
  scoped_ptr<CustomDrawButton> close_button_;

  // Container for the cookies and site data section content.
  GtkWidget* cookies_section_contents_;

  // Container for the permissions section content.
  GtkWidget* permissions_section_contents_;

  // Container for the remote host (website) identity section of the connection
  // tab.
  GtkWidget* identity_contents_;

  // Container for the connection section of the connection tab.
  GtkWidget* connection_contents_;

  // Container for the information about the first visit date of the website.
  GtkWidget* first_visit_contents_;

  // The widget that wraps the tabstrip.
  GtkWidget* tabstrip_alignment_;

  // The widget that contains the tabs display on the popup.
  GtkWidget* notebook_;

  // The UI translates user actions to specific events and forwards them to the
  // |presenter_|. The |presenter_| handles these events and updates the UI.
  scoped_ptr<WebsiteSettings> presenter_;

  // The permission selectors that allow the user to change individual
  // permissions.
  ScopedVector<PermissionSelector> selectors_;

  content::NotificationRegistrar registrar_;

  DISALLOW_COPY_AND_ASSIGN(WebsiteSettingsPopupGtk);
};

#endif  // CHROME_BROWSER_UI_GTK_WEBSITE_SETTINGS_WEBSITE_SETTINGS_POPUP_GTK_H_

/* [<][>][^][v][top][bottom][index][help] */