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

Unified Diff: chrome/browser/ui/views/page_info/page_info_popup_view.cc

Issue 2737413004: Add a Certificate Viewer link to the Page Info dropdown (Closed)
Patch Set: Add Cocoa, Fix MaxViews, Add Flag Created 3 years, 9 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/views/page_info/page_info_popup_view.cc
diff --git a/chrome/browser/ui/views/page_info/page_info_popup_view.cc b/chrome/browser/ui/views/page_info/page_info_popup_view.cc
index c1b73ff459d28444d0364d5c46c54b595f4e59cf..aa3798e2cd3077421d8d06879d51fb2e7999321b 100644
--- a/chrome/browser/ui/views/page_info/page_info_popup_view.cc
+++ b/chrome/browser/ui/views/page_info/page_info_popup_view.cc
@@ -7,8 +7,9 @@
#include <stddef.h>
#include <algorithm>
-#include <vector>
+#include <utility>
+#include "base/command_line.h"
#include "base/i18n/rtl.h"
#include "base/macros.h"
#include "base/memory/ptr_util.h"
@@ -28,6 +29,7 @@
#include "chrome/browser/ui/views/page_info/chosen_object_row.h"
#include "chrome/browser/ui/views/page_info/non_accessible_image_view.h"
#include "chrome/browser/ui/views/page_info/permission_selector_row.h"
+#include "chrome/common/chrome_switches.h"
#include "chrome/common/url_constants.h"
#include "chrome/grit/chromium_strings.h"
#include "chrome/grit/generated_resources.h"
@@ -87,8 +89,8 @@ const int kHeaderLabelSpacing = 4;
// Site Settings Section -------------------------------------------------------
-// Spacing above and below the cookies view.
-const int kCookiesViewVerticalPadding = 6;
+// Spacing above and below the cookies and certificate views.
+const int kSubViewsVerticalPadding = 6;
// Spacing between a permission image and the text.
const int kPermissionImageSpacing = 6;
@@ -105,6 +107,7 @@ const int STYLED_LABEL_SECURITY_DETAILS = 1338;
const int STYLED_LABEL_RESET_CERTIFICATE_DECISIONS = 1339;
const int LINK_COOKIE_DIALOG = 1340;
const int LINK_SITE_SETTINGS = 1341;
+const int LINK_CERTIFICATE_VIEWER = 1342;
// The default, ui::kTitleFontSizeDelta, is too large for the page info
// bubble (e.g. +3). Use +1 to obtain a smaller font.
@@ -387,6 +390,8 @@ PageInfoPopupView::PageInfoPopupView(
header_(nullptr),
separator_(nullptr),
site_settings_view_(nullptr),
+ certificate_view_(nullptr),
+ certificate_viewer_link_(nullptr),
cookies_view_(nullptr),
cookie_dialog_link_(nullptr),
permissions_view_(nullptr),
@@ -562,7 +567,7 @@ void PageInfoPopupView::SetCookieInfo(const CookieInfoList& cookie_info_list) {
column_set->AddColumn(views::GridLayout::LEADING, views::GridLayout::FILL,
0, views::GridLayout::USE_PREF, 0, 0);
- layout->AddPaddingRow(0, kCookiesViewVerticalPadding);
+ layout->AddPaddingRow(0, kSubViewsVerticalPadding);
layout->StartRow(1, cookies_view_column);
PageInfoUI::PermissionInfo info;
@@ -576,8 +581,8 @@ void PageInfoPopupView::SetCookieInfo(const CookieInfoList& cookie_info_list) {
icon->SetImage(image.ToImageSkia());
layout->AddView(
icon, 1, 2, views::GridLayout::FILL,
- // TODO: The vertical alignment may change to CENTER once Harmony is
- // implemented. See https://crbug.com/512442#c48
+ // TODO(lgarron): The vertical alignment may change to CENTER once
+ // Harmony is implemented. See https://crbug.com/512442#c48
views::GridLayout::LEADING);
views::Label* cookies_label = new views::Label(
@@ -589,7 +594,7 @@ void PageInfoPopupView::SetCookieInfo(const CookieInfoList& cookie_info_list) {
layout->AddView(cookie_dialog_link_);
- layout->AddPaddingRow(0, kCookiesViewVerticalPadding);
+ layout->AddPaddingRow(0, kSubViewsVerticalPadding);
}
layout->Layout(cookies_view_);
@@ -681,6 +686,63 @@ void PageInfoPopupView::SetIdentityInfo(const IdentityInfo& identity_info) {
if (identity_info.show_ssl_decision_revoke_button)
header_->AddResetDecisionsLabel();
+
+ if (base::CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kShowCertButton)) {
+ certificate_view_ = new views::View();
+ views::GridLayout* layout = static_cast<views::GridLayout*>(
+ certificate_view_->GetLayoutManager());
+ if (!layout) {
+ layout = new views::GridLayout(certificate_view_);
+ certificate_view_->SetLayoutManager(layout);
+
+ const int certificate_view_column = 0;
+ views::ColumnSet* column_set =
+ layout->AddColumnSet(certificate_view_column);
+ column_set->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL,
+ 0, views::GridLayout::FIXED,
+ kPermissionIconColumnWidth, 0);
+ column_set->AddPaddingColumn(0, kPermissionImageSpacing);
+ column_set->AddColumn(views::GridLayout::LEADING,
+ views::GridLayout::FILL, 0,
+ views::GridLayout::USE_PREF, 0, 0);
+
+ layout->AddPaddingRow(0, kSubViewsVerticalPadding);
+
+ layout->StartRow(1, certificate_view_column);
+
+ views::ImageView* icon = new NonAccessibleImageView();
+ const gfx::Image& image = PageInfoUI::GetCertificateIcon();
+ icon->SetImage(image.ToImageSkia());
+ layout->AddView(
+ icon, 1, 2, views::GridLayout::FILL,
+ // TODO(lgarron): The vertical alignment may change to CENTER once
+ // Harmony is implemented. See https://crbug.com/512442#c48
+ views::GridLayout::LEADING);
+
+ views::Label* certificate_label = new views::Label(
+ l10n_util::GetStringUTF16(IDS_PAGE_INFO_CERTIFICATE),
+ CONTEXT_BODY_TEXT_LARGE);
+ layout->AddView(certificate_label);
+ layout->StartRow(1, certificate_view_column);
+ layout->SkipColumns(1);
+
+ // The text of link to the Certificate Viewer varies depending on the
+ // validity of the Certificate.
+ certificate_viewer_link_ = new views::Link(l10n_util::GetStringUTF16(
+ (identity_info.identity_status ==
+ PageInfo::SITE_IDENTITY_STATUS_ERROR)
+ ? IDS_PAGE_INFO_CERTIFICATE_INVALID_LINK
+ : IDS_PAGE_INFO_CERTIFICATE_VALID_LINK));
+ certificate_viewer_link_->set_id(LINK_CERTIFICATE_VIEWER);
+ certificate_viewer_link_->set_listener(this);
+
+ layout->AddView(certificate_viewer_link_);
+ }
+
+ layout->Layout(certificate_view_);
+ site_settings_view_->AddChildViewAt(certificate_view_, 0);
+ }
}
header_->SetDetails(security_description->details);
@@ -705,7 +767,7 @@ views::View* PageInfoPopupView::CreateSiteSettingsView(int side_margin) {
}
void PageInfoPopupView::HandleLinkClickedAsync(views::Link* source) {
- // Both switch cases require accessing web_contents(), so we check it here.
+ // All switch cases require accessing web_contents(), so we check it here.
if (web_contents() == nullptr || web_contents()->IsBeingDestroyed())
return;
switch (source->id()) {
@@ -727,6 +789,14 @@ void PageInfoPopupView::HandleLinkClickedAsync(views::Link* source) {
PageInfo::PAGE_INFO_COOKIES_DIALOG_OPENED);
new CollectedCookiesViews(web_contents());
break;
+ case LINK_CERTIFICATE_VIEWER: {
+ gfx::NativeWindow top_window = web_contents()->GetTopLevelNativeWindow();
+ if (certificate_ && top_window) {
+ presenter_->RecordPageInfoAction(
+ PageInfo::PAGE_INFO_CERTIFICATE_DIALOG_OPENED);
+ ShowCertificateViewer(web_contents(), top_window, certificate_.get());
+ }
+ } break;
default:
NOTREACHED();
}

Powered by Google App Engine
This is Rietveld 408576698