Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(232)

Unified Diff: chrome/browser/ui/gtk/website_settings/website_settings_popup_gtk.cc

Issue 231733005: Delete the GTK+ port of Chrome. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remerge to ToT Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/gtk/website_settings/website_settings_popup_gtk.cc
diff --git a/chrome/browser/ui/gtk/website_settings/website_settings_popup_gtk.cc b/chrome/browser/ui/gtk/website_settings/website_settings_popup_gtk.cc
deleted file mode 100644
index 8c8e2efe260edf1be584218611e6edf924379b26..0000000000000000000000000000000000000000
--- a/chrome/browser/ui/gtk/website_settings/website_settings_popup_gtk.cc
+++ /dev/null
@@ -1,737 +0,0 @@
-// 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.
-
-#include "chrome/browser/ui/gtk/website_settings/website_settings_popup_gtk.h"
-
-#include "base/i18n/rtl.h"
-#include "base/strings/string_number_conversions.h"
-#include "base/strings/utf_string_conversions.h"
-#include "chrome/browser/certificate_viewer.h"
-#include "chrome/browser/chrome_notification_types.h"
-#include "chrome/browser/infobars/infobar_service.h"
-#include "chrome/browser/ui/browser.h"
-#include "chrome/browser/ui/browser_list.h"
-#include "chrome/browser/ui/gtk/browser_toolbar_gtk.h"
-#include "chrome/browser/ui/gtk/browser_window_gtk.h"
-#include "chrome/browser/ui/gtk/collected_cookies_gtk.h"
-#include "chrome/browser/ui/gtk/gtk_chrome_link_button.h"
-#include "chrome/browser/ui/gtk/gtk_theme_service.h"
-#include "chrome/browser/ui/gtk/gtk_util.h"
-#include "chrome/browser/ui/gtk/location_bar_view_gtk.h"
-#include "chrome/browser/ui/gtk/nine_box.h"
-#include "chrome/browser/ui/gtk/website_settings/permission_selector.h"
-#include "chrome/browser/ui/website_settings/website_settings.h"
-#include "chrome/browser/ui/website_settings/website_settings_utils.h"
-#include "chrome/common/url_constants.h"
-#include "content/public/browser/cert_store.h"
-#include "content/public/browser/notification_service.h"
-#include "content/public/browser/user_metrics.h"
-#include "grit/chromium_strings.h"
-#include "grit/generated_resources.h"
-#include "grit/locale_settings.h"
-#include "grit/theme_resources.h"
-#include "grit/ui_resources.h"
-#include "ui/base/gtk/gtk_hig_constants.h"
-#include "ui/base/l10n/l10n_util.h"
-#include "ui/base/resource/resource_bundle.h"
-#include "ui/gfx/image/cairo_cached_surface.h"
-#include "ui/gfx/image/image.h"
-#include "url/gurl.h"
-
-using content::OpenURLParams;
-
-namespace {
-
-// The width of the popup.
-const int kPopupWidth = 400;
-
-// Spacing between consecutive tabs in the tabstrip.
-const int kInterTabSpacing = 2;
-
-// Spacing between start of tab and tab text.
-const int kTabTextHorizontalMargin = 12;
-
-// The vertical lift of the tab's text off the bottom of the tab.
-const int kTabTextBaseline = 4;
-
-// The max width of the text labels on the connection tab.
-const int kConnectionTabTextWidth = 300;
-
-// The text color of the site identity status label for websites with a
-// verified identity.
-const GdkColor kGdkGreen = GDK_COLOR_RGB(0x29, 0x8a, 0x27);
-
-GtkWidget* CreateTextLabel(const std::string& text,
- int width,
- GtkThemeService* theme_service,
- const GdkColor& color) {
- GtkWidget* label = theme_service->BuildLabel(text, color);
- if (width > 0)
- gtk_util::SetLabelWidth(label, width);
- gtk_label_set_line_wrap_mode(GTK_LABEL(label), PANGO_WRAP_WORD_CHAR);
- return label;
-}
-
-void ClearContainer(GtkWidget* container) {
- GList* child = gtk_container_get_children(GTK_CONTAINER(container));
- for (GList* item = child; item; item = g_list_next(item))
- gtk_container_remove(GTK_CONTAINER(container), GTK_WIDGET(item->data));
-
- g_list_free(child);
-}
-
-void SetConnectionSection(GtkWidget* section_box,
- const gfx::Image& icon,
- GtkWidget* content_box) {
- DCHECK(section_box);
- ClearContainer(section_box);
- gtk_container_set_border_width(GTK_CONTAINER(section_box),
- ui::kContentAreaBorder);
-
- GtkWidget* hbox = gtk_hbox_new(FALSE, ui::kControlSpacing);
-
- GdkPixbuf* pixbuf = icon.ToGdkPixbuf();
- GtkWidget* image = gtk_image_new_from_pixbuf(pixbuf);
- gtk_box_pack_start(GTK_BOX(hbox), image, FALSE, FALSE, 0);
- gtk_misc_set_alignment(GTK_MISC(image), 0, 0);
-
- gtk_box_pack_start(GTK_BOX(hbox), content_box, TRUE, TRUE, 0);
-
- gtk_box_pack_start(GTK_BOX(section_box), hbox, TRUE, TRUE, 0);
- gtk_widget_show_all(section_box);
-}
-
-GtkWidget* CreatePermissionTabSection(std::string section_title,
- GtkWidget* section_content,
- GtkThemeService* theme_service) {
- GtkWidget* section_box = gtk_vbox_new(FALSE, ui::kControlSpacing);
-
- // Add Section title
- GtkWidget* title_hbox = gtk_hbox_new(FALSE, ui::kControlSpacing);
-
- GtkWidget* label = theme_service->BuildLabel(section_title, ui::kGdkBlack);
- PangoAttrList* attributes = pango_attr_list_new();
- pango_attr_list_insert(attributes,
- pango_attr_weight_new(PANGO_WEIGHT_BOLD));
- gtk_label_set_attributes(GTK_LABEL(label), attributes);
- pango_attr_list_unref(attributes);
- gtk_box_pack_start(GTK_BOX(section_box), title_hbox, FALSE, FALSE, 0);
-
- gtk_box_pack_start(GTK_BOX(title_hbox), label, FALSE, FALSE, 0);
-
- // Add section content
- gtk_box_pack_start(GTK_BOX(section_box), section_content, FALSE, FALSE, 0);
- return section_box;
-}
-
-// A popup that is shown for internal pages (like chrome://).
-class InternalPageInfoPopupGtk : public BubbleDelegateGtk {
- public:
- explicit InternalPageInfoPopupGtk(gfx::NativeWindow parent,
- Profile* profile);
- virtual ~InternalPageInfoPopupGtk();
-
- private:
- // BubbleDelegateGtk implementation.
- virtual void BubbleClosing(BubbleGtk* bubble, bool closed_by_escape) OVERRIDE;
-
- // The popup bubble container.
- BubbleGtk* bubble_;
-
- DISALLOW_COPY_AND_ASSIGN(InternalPageInfoPopupGtk);
-};
-
-InternalPageInfoPopupGtk::InternalPageInfoPopupGtk(
- gfx::NativeWindow parent, Profile* profile) {
- GtkWidget* contents = gtk_hbox_new(FALSE, ui::kLabelSpacing);
- gtk_container_set_border_width(GTK_CONTAINER(contents),
- ui::kContentAreaBorder);
- // Add the popup icon.
- ResourceBundle& rb = ResourceBundle::GetSharedInstance();
- GdkPixbuf* pixbuf = rb.GetNativeImageNamed(IDR_PRODUCT_LOGO_26).ToGdkPixbuf();
- GtkWidget* image = gtk_image_new_from_pixbuf(pixbuf);
- gtk_box_pack_start(GTK_BOX(contents), image, FALSE, FALSE, 0);
- gtk_misc_set_alignment(GTK_MISC(image), 0, 0);
-
- // Add the popup text.
- GtkThemeService* theme_service = GtkThemeService::GetFrom(profile);
- GtkWidget* label = theme_service->BuildLabel(
- l10n_util::GetStringUTF8(IDS_PAGE_INFO_INTERNAL_PAGE), ui::kGdkBlack);
- gtk_box_pack_start(GTK_BOX(contents), label, FALSE, FALSE, 0);
-
- gtk_widget_show_all(contents);
-
- // Create the bubble.
- BrowserWindowGtk* browser_window =
- BrowserWindowGtk::GetBrowserWindowForNativeWindow(parent);
- GtkWidget* anchor = browser_window->
- GetToolbar()->GetLocationBarView()->location_icon_widget();
- bubble_ = BubbleGtk::Show(anchor,
- NULL, // |rect|
- contents,
- BubbleGtk::ANCHOR_TOP_LEFT,
- BubbleGtk::MATCH_SYSTEM_THEME |
- BubbleGtk::POPUP_WINDOW |
- BubbleGtk::GRAB_INPUT,
- theme_service,
- this); // |delegate|
- DCHECK(bubble_);
-}
-
-InternalPageInfoPopupGtk::~InternalPageInfoPopupGtk() {
-}
-
-void InternalPageInfoPopupGtk::BubbleClosing(BubbleGtk* bubble,
- bool closed_by_escape) {
- delete this;
-}
-
-} // namespace
-
-// static
-void WebsiteSettingsPopupGtk::Show(gfx::NativeWindow parent,
- Profile* profile,
- content::WebContents* web_contents,
- const GURL& url,
- const content::SSLStatus& ssl) {
- if (InternalChromePage(url))
- new InternalPageInfoPopupGtk(parent, profile);
- else
- new WebsiteSettingsPopupGtk(parent, profile, web_contents, url, ssl);
-}
-
-WebsiteSettingsPopupGtk::WebsiteSettingsPopupGtk(
- gfx::NativeWindow parent,
- Profile* profile,
- content::WebContents* web_contents,
- const GURL& url,
- const content::SSLStatus& ssl)
- : parent_(parent),
- contents_(NULL),
- theme_service_(GtkThemeService::GetFrom(profile)),
- profile_(profile),
- web_contents_(web_contents),
- browser_(NULL),
- cert_id_(0),
- header_box_(NULL),
- cookies_section_contents_(NULL),
- permissions_section_contents_(NULL),
- identity_contents_(NULL),
- connection_contents_(NULL),
- first_visit_contents_(NULL),
- notebook_(NULL) {
- BrowserWindowGtk* browser_window =
- BrowserWindowGtk::GetBrowserWindowForNativeWindow(parent);
- browser_ = browser_window->browser();
- anchor_ = browser_window->
- GetToolbar()->GetLocationBarView()->location_icon_widget();
-
- registrar_.Add(this, chrome::NOTIFICATION_BROWSER_THEME_CHANGED,
- content::Source<ThemeService>(theme_service_));
-
- InitContents();
-
- bubble_ = BubbleGtk::Show(anchor_,
- NULL, // |rect|
- contents_,
- BubbleGtk::ANCHOR_TOP_LEFT,
- BubbleGtk::MATCH_SYSTEM_THEME |
- BubbleGtk::POPUP_WINDOW |
- BubbleGtk::GRAB_INPUT,
- theme_service_,
- this); // |delegate|
- if (!bubble_) {
- NOTREACHED();
- return;
- }
-
- presenter_.reset(new WebsiteSettings(
- this, profile, TabSpecificContentSettings::FromWebContents(web_contents),
- InfoBarService::FromWebContents(web_contents), url, ssl,
- content::CertStore::GetInstance()));
-}
-
-WebsiteSettingsPopupGtk::~WebsiteSettingsPopupGtk() {
-}
-
-void WebsiteSettingsPopupGtk::BubbleClosing(BubbleGtk* bubble,
- bool closed_by_escape) {
- if (presenter_.get()) {
- presenter_->OnUIClosing();
- presenter_.reset();
- }
-
- // Slightly delay destruction to allow the event stack to unwind and release
- // references to owned widgets.
- base::MessageLoop::current()->DeleteSoon(FROM_HERE, this);
-}
-
-void WebsiteSettingsPopupGtk::InitContents() {
- if (!contents_)
- contents_ = gtk_vbox_new(FALSE, 0);
- else
- gtk_util::RemoveAllChildren(contents_);
-
- // Create popup header.
- header_box_ = gtk_vbox_new(FALSE, ui::kControlSpacing);
- gtk_box_pack_start(GTK_BOX(contents_), header_box_, FALSE, FALSE, 0);
- gtk_container_set_border_width(GTK_CONTAINER(header_box_),
- ui::kContentAreaBorder);
-
- // Create the container for the contents of the permissions tab.
- GtkWidget* permission_tab_contents =
- gtk_vbox_new(FALSE, ui::kContentAreaSpacing);
- gtk_container_set_border_width(GTK_CONTAINER(permission_tab_contents),
- ui::kContentAreaBorder);
- cookies_section_contents_ = gtk_vbox_new(FALSE, ui::kControlSpacing);
- std::string title = l10n_util::GetStringUTF8(
- IDS_WEBSITE_SETTINGS_TITLE_SITE_DATA);
- gtk_box_pack_start(GTK_BOX(permission_tab_contents),
- CreatePermissionTabSection(title,
- cookies_section_contents_,
- theme_service_),
- FALSE, FALSE, 0);
- permissions_section_contents_ = gtk_vbox_new(FALSE, ui::kControlSpacing);
- title = l10n_util::GetStringUTF8(IDS_WEBSITE_SETTINGS_TITLE_SITE_PERMISSIONS);
- gtk_box_pack_start(GTK_BOX(permission_tab_contents),
- CreatePermissionTabSection(title,
- permissions_section_contents_,
- theme_service_),
- FALSE, FALSE, 0);
-
- // Create the container for the contents of the connection tab.
- GtkWidget* connection_tab = gtk_vbox_new(FALSE, 0);
- identity_contents_ = gtk_vbox_new(FALSE, 0);
- gtk_box_pack_start(GTK_BOX(connection_tab), identity_contents_, FALSE, FALSE,
- 0);
- gtk_box_pack_start(GTK_BOX(connection_tab), gtk_hseparator_new(), FALSE,
- FALSE, 0);
- connection_contents_ = gtk_vbox_new(FALSE, 0);
- gtk_box_pack_start(GTK_BOX(connection_tab), connection_contents_, FALSE,
- FALSE, 0);
- gtk_box_pack_start(GTK_BOX(connection_tab), gtk_hseparator_new(), FALSE,
- FALSE, 0);
- first_visit_contents_ = gtk_vbox_new(FALSE, 0);
- gtk_box_pack_start(GTK_BOX(connection_tab), first_visit_contents_, FALSE,
- FALSE, 0);
- gtk_box_pack_start(GTK_BOX(connection_tab), gtk_hseparator_new(), FALSE,
- FALSE, 0);
-
- GtkWidget* help_link = theme_service_->BuildChromeLinkButton(
- l10n_util::GetStringUTF8(IDS_PAGE_INFO_HELP_CENTER_LINK));
- GtkWidget* help_link_hbox = gtk_hbox_new(FALSE, 0);
- gtk_container_set_border_width(GTK_CONTAINER(help_link_hbox),
- ui::kContentAreaBorder);
- gtk_box_pack_start(GTK_BOX(help_link_hbox), help_link, FALSE, FALSE, 0);
- gtk_box_pack_start(GTK_BOX(connection_tab), help_link_hbox, FALSE, FALSE, 0);
- g_signal_connect(help_link, "clicked",
- G_CALLBACK(OnHelpLinkClickedThunk), this);
-
- // Create tabstrip (used only for Chrome-theme mode).
- GtkWidget* tabstrip = gtk_hbox_new(FALSE, kInterTabSpacing);
- tabstrip_alignment_ = gtk_alignment_new(0.0, 0.0, 1.0, 1.0);
- gtk_alignment_set_padding(GTK_ALIGNMENT(tabstrip_alignment_), 0, 0,
- ui::kContentAreaBorder, ui::kContentAreaBorder);
- int tab_height = ui::ResourceBundle::GetSharedInstance().GetNativeImageNamed(
- IDR_WEBSITE_SETTINGS_TAB_LEFT2).ToImageSkia()->height();
- gtk_widget_set_size_request(tabstrip_alignment_, -1, tab_height);
- g_signal_connect(tabstrip_alignment_, "expose-event",
- G_CALLBACK(&OnTabstripExposeThunk), this);
- gtk_container_add(GTK_CONTAINER(tabstrip_alignment_), tabstrip);
- gtk_box_pack_start(GTK_BOX(contents_), tabstrip_alignment_, FALSE, FALSE, 0);
-
- gtk_box_pack_start(GTK_BOX(tabstrip),
- BuildTab(IDS_WEBSITE_SETTINGS_TAB_LABEL_PERMISSIONS),
- FALSE, FALSE, 0);
- gtk_box_pack_start(GTK_BOX(tabstrip),
- BuildTab(IDS_WEBSITE_SETTINGS_TAB_LABEL_CONNECTION),
- FALSE, FALSE, 0);
-
- // Create tab container and add all tabs.
- notebook_ = gtk_notebook_new();
- gtk_notebook_set_tab_hborder(GTK_NOTEBOOK(notebook_), 0);
-
- GtkWidget* label = gtk_label_new(l10n_util::GetStringUTF8(
- IDS_WEBSITE_SETTINGS_TAB_LABEL_PERMISSIONS).c_str());
- gtk_misc_set_padding(GTK_MISC(label), kTabTextHorizontalMargin, 0);
- gtk_notebook_insert_page(GTK_NOTEBOOK(notebook_), permission_tab_contents,
- label, TAB_ID_PERMISSIONS);
-
- label = gtk_label_new(l10n_util::GetStringUTF8(
- IDS_WEBSITE_SETTINGS_TAB_LABEL_CONNECTION).c_str());
- gtk_misc_set_padding(GTK_MISC(label), kTabTextHorizontalMargin, 0);
- gtk_notebook_insert_page(GTK_NOTEBOOK(notebook_), connection_tab, label,
- TAB_ID_CONNECTION);
-
- DCHECK_EQ(gtk_notebook_get_n_pages(GTK_NOTEBOOK(notebook_)), NUM_TAB_IDS);
-
- gtk_box_pack_start(GTK_BOX(contents_), notebook_, FALSE, FALSE, 0);
-
- theme_service_->InitThemesFor(this);
- gtk_widget_show_all(contents_);
-}
-
-GtkWidget* WebsiteSettingsPopupGtk::BuildTab(int ids) {
- GtkWidget* tab = gtk_event_box_new();
- gtk_event_box_set_visible_window(GTK_EVENT_BOX(tab), FALSE);
- GtkWidget* label = gtk_label_new(l10n_util::GetStringUTF8(ids).c_str());
- gtk_widget_modify_fg(label, GTK_STATE_NORMAL, &ui::kGdkBlack);
- gtk_misc_set_padding(GTK_MISC(label),
- kTabTextHorizontalMargin, kTabTextBaseline);
- gtk_misc_set_alignment(GTK_MISC(label), 0.5, 1.0);
- gtk_container_add(GTK_CONTAINER(tab), label);
- g_signal_connect(tab, "button-press-event",
- G_CALLBACK(&OnTabButtonPressThunk), this);
- g_signal_connect(tab, "expose-event",
- G_CALLBACK(&OnTabExposeThunk), this);
- return tab;
-}
-
-void WebsiteSettingsPopupGtk::Observe(
- int type,
- const content::NotificationSource& source,
- const content::NotificationDetails& details) {
- DCHECK_EQ(chrome::NOTIFICATION_BROWSER_THEME_CHANGED, type);
-
- if (theme_service_->UsingNativeTheme()) {
- gtk_notebook_set_show_tabs(GTK_NOTEBOOK(notebook_), TRUE);
- gtk_notebook_set_show_border(GTK_NOTEBOOK(notebook_), TRUE);
- gtk_widget_set_no_show_all(tabstrip_alignment_, TRUE);
- } else {
- gtk_notebook_set_show_tabs(GTK_NOTEBOOK(notebook_), FALSE);
- gtk_notebook_set_show_border(GTK_NOTEBOOK(notebook_), FALSE);
- gtk_widget_set_no_show_all(tabstrip_alignment_, FALSE);
- gtk_widget_show_all(tabstrip_alignment_);
- }
-}
-
-void WebsiteSettingsPopupGtk::OnPermissionChanged(
- PermissionSelector* selector) {
- presenter_->OnSitePermissionChanged(selector->GetType(),
- selector->GetSetting());
-}
-
-void WebsiteSettingsPopupGtk::SetCookieInfo(
- const CookieInfoList& cookie_info_list) {
- DCHECK(cookies_section_contents_);
- ClearContainer(cookies_section_contents_);
-
- // Create cookies info rows.
- for (CookieInfoList::const_iterator it = cookie_info_list.begin();
- it != cookie_info_list.end();
- ++it) {
- // Create the cookies info box.
- GtkWidget* cookies_info = gtk_hbox_new(FALSE, 0);
-
- // Add the icon to the cookies info box
- GdkPixbuf* pixbuf = WebsiteSettingsUI::GetPermissionIcon(
- CONTENT_SETTINGS_TYPE_COOKIES, CONTENT_SETTING_ALLOW).ToGdkPixbuf();
- GtkWidget* image = gtk_image_new_from_pixbuf(pixbuf);
- gtk_misc_set_alignment(GTK_MISC(image), 0, 0);
- gtk_box_pack_start(GTK_BOX(cookies_info), image, FALSE, FALSE, 0);
-
- // Add the allowed and blocked cookies counts to the cookies info box.
- std::string info_str = l10n_util::GetStringFUTF8(
- IDS_WEBSITE_SETTINGS_SITE_DATA_STATS_LINE,
- base::UTF8ToUTF16(it->cookie_source),
- base::IntToString16(it->allowed),
- base::IntToString16(it->blocked));
-
- GtkWidget* info = theme_service_->BuildLabel(info_str, ui::kGdkBlack);
- const int kPadding = 4;
- gtk_box_pack_start(GTK_BOX(cookies_info), info, FALSE, FALSE, kPadding);
-
- // Add the cookies info box to the section box.
- gtk_box_pack_start(GTK_BOX(cookies_section_contents_),
- cookies_info,
- FALSE, FALSE, 0);
- }
-
- // Create row with links for cookie settings and for the cookies dialog.
- GtkWidget* link_hbox = gtk_hbox_new(FALSE, 0);
-
- GtkWidget* view_cookies_link = theme_service_->BuildChromeLinkButton(
- l10n_util::GetStringUTF8(IDS_WEBSITE_SETTINGS_SHOW_SITE_DATA));
- g_signal_connect(view_cookies_link, "clicked",
- G_CALLBACK(OnCookiesLinkClickedThunk), this);
- gtk_box_pack_start(GTK_BOX(link_hbox), view_cookies_link,
- FALSE, FALSE, 0);
-
- gtk_box_pack_start(GTK_BOX(cookies_section_contents_), link_hbox,
- TRUE, FALSE, 0);
-
- gtk_widget_show_all(cookies_section_contents_);
-}
-
-void WebsiteSettingsPopupGtk::SetIdentityInfo(
- const IdentityInfo& identity_info) {
- // Create popup header.
- DCHECK(header_box_);
- ClearContainer(header_box_);
-
- GtkWidget* hbox = gtk_hbox_new(FALSE, 0);
- GtkWidget* identity_label = theme_service_->BuildLabel(
- identity_info.site_identity, ui::kGdkBlack);
- gtk_label_set_selectable(GTK_LABEL(identity_label), TRUE);
- PangoAttrList* attributes = pango_attr_list_new();
- pango_attr_list_insert(attributes,
- pango_attr_weight_new(PANGO_WEIGHT_BOLD));
- gtk_label_set_attributes(GTK_LABEL(identity_label), attributes);
- pango_attr_list_unref(attributes);
- gtk_box_pack_start(GTK_BOX(hbox), identity_label, FALSE, FALSE, 0);
- close_button_.reset(CustomDrawButton::CloseButtonBubble(theme_service_));
- g_signal_connect(close_button_->widget(), "clicked",
- G_CALLBACK(OnCloseButtonClickedThunk), this);
- gtk_box_pack_start(GTK_BOX(hbox), close_button_->widget(), FALSE, FALSE, 0);
- int label_width = kPopupWidth - close_button_->SurfaceWidth();
- gtk_util::SetLabelWidth(identity_label, label_width);
- gtk_box_pack_start(GTK_BOX(header_box_), hbox, FALSE, FALSE, 0);
-
- std::string identity_status_text;
- const GdkColor* color = &ui::kGdkBlack;
-
- switch (identity_info.identity_status) {
- case WebsiteSettings::SITE_IDENTITY_STATUS_CERT:
- case WebsiteSettings::SITE_IDENTITY_STATUS_EV_CERT:
- identity_status_text =
- l10n_util::GetStringUTF8(IDS_WEBSITE_SETTINGS_IDENTITY_VERIFIED);
- color = &kGdkGreen;
- break;
- case WebsiteSettings::SITE_IDENTITY_STATUS_ADMIN_PROVIDED_CERT:
- identity_status_text =
- l10n_util::GetStringUTF8(IDS_CERT_POLICY_PROVIDED_CERT_HEADER);
- break;
- default:
- identity_status_text =
- l10n_util::GetStringUTF8(IDS_WEBSITE_SETTINGS_IDENTITY_NOT_VERIFIED);
- break;
- }
- GtkWidget* status_label = CreateTextLabel(
- identity_status_text, kPopupWidth, theme_service_, *color);
- gtk_box_pack_start(
- GTK_BOX(header_box_), status_label, FALSE, FALSE, 0);
- gtk_widget_show_all(header_box_);
-
- // Create identity section.
- GtkWidget* section_content = gtk_vbox_new(FALSE, ui::kControlSpacing);
- GtkWidget* identity_description =
- CreateTextLabel(identity_info.identity_status_description,
- kConnectionTabTextWidth, theme_service_, ui::kGdkBlack);
- gtk_box_pack_start(GTK_BOX(section_content), identity_description, FALSE,
- FALSE, 0);
- if (identity_info.cert_id) {
- cert_id_ = identity_info.cert_id;
- GtkWidget* view_cert_link = theme_service_->BuildChromeLinkButton(
- l10n_util::GetStringUTF8(IDS_PAGEINFO_CERT_INFO_BUTTON));
- g_signal_connect(view_cert_link, "clicked",
- G_CALLBACK(OnViewCertLinkClickedThunk), this);
- GtkWidget* link_hbox = gtk_hbox_new(FALSE, 0);
- gtk_box_pack_start(GTK_BOX(link_hbox), view_cert_link,
- FALSE, FALSE, 0);
- gtk_box_pack_start(GTK_BOX(section_content), link_hbox, FALSE, FALSE, 0);
- }
- SetConnectionSection(
- identity_contents_,
- WebsiteSettingsUI::GetIdentityIcon(identity_info.identity_status),
- section_content);
-
- // Create connection section.
- GtkWidget* connection_description =
- CreateTextLabel(identity_info.connection_status_description,
- kConnectionTabTextWidth, theme_service_, ui::kGdkBlack);
- section_content = gtk_vbox_new(FALSE, ui::kControlSpacing);
- gtk_box_pack_start(GTK_BOX(section_content), connection_description, FALSE,
- FALSE, 0);
- SetConnectionSection(
- connection_contents_,
- WebsiteSettingsUI::GetConnectionIcon(identity_info.connection_status),
- section_content);
-}
-
-void WebsiteSettingsPopupGtk::SetFirstVisit(const base::string16& first_visit) {
- GtkWidget* title = theme_service_->BuildLabel(
- l10n_util::GetStringUTF8(IDS_PAGE_INFO_SITE_INFO_TITLE),
- ui::kGdkBlack);
- PangoAttrList* attributes = pango_attr_list_new();
- pango_attr_list_insert(attributes,
- pango_attr_weight_new(PANGO_WEIGHT_BOLD));
- gtk_label_set_attributes(GTK_LABEL(title), attributes);
- pango_attr_list_unref(attributes);
- gtk_misc_set_alignment(GTK_MISC(title), 0, 0);
-
- GtkWidget* first_visit_label = CreateTextLabel(base::UTF16ToUTF8(first_visit),
- kConnectionTabTextWidth,
- theme_service_,
- ui::kGdkBlack);
- GtkWidget* section_contents = gtk_vbox_new(FALSE, ui::kControlSpacing);
- gtk_box_pack_start(GTK_BOX(section_contents), title, FALSE, FALSE, 0);
- gtk_box_pack_start(
- GTK_BOX(section_contents), first_visit_label, FALSE, FALSE, 0);
-
- SetConnectionSection(
- first_visit_contents_,
- WebsiteSettingsUI::GetFirstVisitIcon(first_visit),
- section_contents);
-}
-
-void WebsiteSettingsPopupGtk::SetPermissionInfo(
- const PermissionInfoList& permission_info_list) {
- DCHECK(permissions_section_contents_);
- ClearContainer(permissions_section_contents_);
- // Clear the map since the UI is reconstructed.
- selectors_.clear();
-
- for (PermissionInfoList::const_iterator permission =
- permission_info_list.begin();
- permission != permission_info_list.end();
- ++permission) {
- PermissionSelector* selector =
- new PermissionSelector(
- theme_service_,
- web_contents_ ? web_contents_->GetURL() : GURL::EmptyGURL(),
- permission->type,
- permission->setting,
- permission->default_setting,
- permission->source);
- selector->AddObserver(this);
- GtkWidget* hbox = selector->widget();
- selectors_.push_back(selector);
- gtk_box_pack_start(GTK_BOX(permissions_section_contents_), hbox, FALSE,
- FALSE, 0);
- }
-
- gtk_widget_show_all(permissions_section_contents_);
-}
-
-void WebsiteSettingsPopupGtk::SetSelectedTab(TabId tab_id) {
- DCHECK(notebook_);
- gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook_),
- static_cast<gint>(tab_id));
-}
-
-int WebsiteSettingsPopupGtk::TabstripButtonToTabIndex(GtkWidget* button) {
- GList* tabs = gtk_container_get_children(GTK_CONTAINER(button->parent));
- int i = 0;
- for (GList* it = tabs; it; it = g_list_next(it), ++i) {
- if (it->data == button)
- break;
- }
- g_list_free(tabs);
-
- return i;
-}
-
-gboolean WebsiteSettingsPopupGtk::OnTabButtonPress(
- GtkWidget* widget, GdkEvent* event) {
- gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook_),
- TabstripButtonToTabIndex(widget));
- gtk_widget_queue_draw(tabstrip_alignment_);
- return FALSE;
-}
-
-gboolean WebsiteSettingsPopupGtk::OnTabExpose(
- GtkWidget* widget, GdkEventExpose* event) {
- if (gtk_notebook_get_current_page(GTK_NOTEBOOK(notebook_)) !=
- TabstripButtonToTabIndex(widget)) {
- return FALSE;
- }
-
- NineBox nine(IDR_WEBSITE_SETTINGS_TAB_LEFT2,
- IDR_WEBSITE_SETTINGS_TAB_CENTER2,
- IDR_WEBSITE_SETTINGS_TAB_RIGHT2,
- 0, 0, 0, 0, 0, 0);
- nine.RenderToWidget(widget);
-
- return FALSE;
-}
-
-gboolean WebsiteSettingsPopupGtk::OnTabstripExpose(
- GtkWidget* widget, GdkEventExpose* event) {
- int tab_idx = gtk_notebook_get_current_page(GTK_NOTEBOOK(notebook_));
- GtkWidget* tabstrip = gtk_bin_get_child(GTK_BIN(tabstrip_alignment_));
- GList* tabs = gtk_container_get_children(GTK_CONTAINER(tabstrip));
- GtkWidget* selected_tab = GTK_WIDGET(g_list_nth_data(tabs, tab_idx));
- g_list_free(tabs);
- GtkAllocation tab_bounds;
- gtk_widget_get_allocation(selected_tab, &tab_bounds);
-
- cairo_t* cr = gdk_cairo_create(GDK_DRAWABLE(gtk_widget_get_window(widget)));
- GtkAllocation allocation;
- gtk_widget_get_allocation(widget, &allocation);
- ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
-
- // Draw the shadows that abut the selected tab.
- gfx::CairoCachedSurface* left_tab_shadow =
- rb.GetNativeImageNamed(IDR_WEBSITE_SETTINGS_TABSTRIP_LEFT).ToCairo();
- int tab_shadow_width = left_tab_shadow->Width();
- left_tab_shadow->SetSource(cr, widget,
- tab_bounds.x - tab_shadow_width, allocation.y);
- cairo_paint(cr);
-
- gfx::CairoCachedSurface* right_tab_shadow =
- rb.GetNativeImageNamed(IDR_WEBSITE_SETTINGS_TABSTRIP_RIGHT).ToCairo();
- right_tab_shadow->SetSource(cr, widget,
- tab_bounds.x + tab_bounds.width, allocation.y);
- cairo_paint(cr);
-
- // Draw the shadow for the inactive part of the tabstrip.
- gfx::CairoCachedSurface* tiling_shadow =
- rb.GetNativeImageNamed(IDR_WEBSITE_SETTINGS_TABSTRIP_CENTER).ToCairo();
-
- tiling_shadow->SetSource(cr, widget, allocation.x, allocation.y);
- cairo_pattern_set_extend(cairo_get_source(cr), CAIRO_EXTEND_REPEAT);
-
- GdkRectangle left_tiling_area =
- { allocation.x, allocation.y,
- tab_bounds.x - tab_shadow_width, allocation.height };
- GdkRectangle invalid_left_tiling_area;
- if (gdk_rectangle_intersect(&left_tiling_area, &event->area,
- &invalid_left_tiling_area)) {
- gdk_cairo_rectangle(cr, &invalid_left_tiling_area);
- cairo_fill(cr);
- }
-
- GdkRectangle right_tiling_area =
- { tab_bounds.x + tab_bounds.width + tab_shadow_width,
- allocation.y,
- allocation.width,
- allocation.height };
- GdkRectangle invalid_right_tiling_area;
- if (gdk_rectangle_intersect(&right_tiling_area, &event->area,
- &invalid_right_tiling_area)) {
- gdk_cairo_rectangle(cr, &invalid_right_tiling_area);
- cairo_fill(cr);
- }
-
- cairo_destroy(cr);
- return FALSE;
-}
-
-void WebsiteSettingsPopupGtk::OnCookiesLinkClicked(GtkWidget* widget) {
- // Count how often the Collected Cookies dialog is opened.
- content::RecordAction(
- base::UserMetricsAction("WebsiteSettings_CookiesDialogOpened"));
-
- new CollectedCookiesGtk(GTK_WINDOW(parent_), web_contents_);
- bubble_->Close();
-}
-
-void WebsiteSettingsPopupGtk::OnViewCertLinkClicked(GtkWidget* widget) {
- DCHECK_NE(cert_id_, 0);
- ShowCertificateViewerByID(web_contents_, GTK_WINDOW(parent_), cert_id_);
- bubble_->Close();
-}
-
-void WebsiteSettingsPopupGtk::OnCloseButtonClicked(GtkWidget* widget) {
- bubble_->Close();
-}
-
-void WebsiteSettingsPopupGtk::OnHelpLinkClicked(GtkWidget* widget) {
- browser_->OpenURL(OpenURLParams(GURL(chrome::kPageInfoHelpCenterURL),
- content::Referrer(),
- NEW_FOREGROUND_TAB,
- content::PAGE_TRANSITION_LINK,
- false));
- bubble_->Close();
-}

Powered by Google App Engine
This is Rietveld 408576698