Index: chrome/browser/ui/views/page_info/page_info_bubble_view.cc |
diff --git a/chrome/browser/ui/views/page_info/page_info_bubble_view.cc b/chrome/browser/ui/views/page_info/page_info_bubble_view.cc |
index 12777bad3ac4687db742565dd5eea693085828a5..08d71151a68b59e17363838462501d1e5b359531 100644 |
--- a/chrome/browser/ui/views/page_info/page_info_bubble_view.cc |
+++ b/chrome/browser/ui/views/page_info/page_info_bubble_view.cc |
@@ -7,7 +7,7 @@ |
#include <stddef.h> |
#include <algorithm> |
-#include <vector> |
+#include <utility> |
#include "base/i18n/rtl.h" |
#include "base/macros.h" |
@@ -89,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; |
@@ -107,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. |
@@ -389,7 +390,6 @@ PageInfoBubbleView::PageInfoBubbleView( |
header_(nullptr), |
separator_(nullptr), |
site_settings_view_(nullptr), |
- cookies_view_(nullptr), |
cookie_dialog_link_(nullptr), |
permissions_view_(nullptr), |
weak_factory_(this) { |
@@ -541,60 +541,8 @@ void PageInfoBubbleView::SetCookieInfo(const CookieInfoList& cookie_info_list) { |
base::string16 label_text = l10n_util::GetPluralStringFUTF16( |
IDS_PAGE_INFO_NUM_COOKIES, total_allowed); |
- if (!cookie_dialog_link_) { |
- cookie_dialog_link_ = new views::Link(label_text); |
- cookie_dialog_link_->set_id(LINK_COOKIE_DIALOG); |
- cookie_dialog_link_->set_listener(this); |
- } else { |
- cookie_dialog_link_->SetText(label_text); |
- } |
- |
- views::GridLayout* layout = |
- static_cast<views::GridLayout*>(cookies_view_->GetLayoutManager()); |
- if (!layout) { |
- layout = new views::GridLayout(cookies_view_); |
- cookies_view_->SetLayoutManager(layout); |
- |
- const int cookies_view_column = 0; |
- views::ColumnSet* column_set = layout->AddColumnSet(cookies_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, kCookiesViewVerticalPadding); |
- |
- layout->StartRow(1, cookies_view_column); |
- PageInfoUI::PermissionInfo info; |
- info.type = CONTENT_SETTINGS_TYPE_COOKIES; |
- info.setting = CONTENT_SETTING_ALLOW; |
- info.is_incognito = |
- Profile::FromBrowserContext(web_contents()->GetBrowserContext()) |
- ->IsOffTheRecord(); |
- views::ImageView* icon = new NonAccessibleImageView(); |
- const gfx::Image& image = PageInfoUI::GetPermissionIcon(info); |
- 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 |
- views::GridLayout::LEADING); |
- |
- views::Label* cookies_label = new views::Label( |
- l10n_util::GetStringUTF16(IDS_PAGE_INFO_TITLE_SITE_DATA), |
- CONTEXT_BODY_TEXT_LARGE); |
- layout->AddView(cookies_label); |
- layout->StartRow(1, cookies_view_column); |
- layout->SkipColumns(1); |
- |
- layout->AddView(cookie_dialog_link_); |
- |
- layout->AddPaddingRow(0, kCookiesViewVerticalPadding); |
- } |
- |
- layout->Layout(cookies_view_); |
+ cookie_dialog_link_->SetText(label_text); |
+ Layout(); |
SizeToContents(); |
} |
@@ -683,6 +631,31 @@ void PageInfoBubbleView::SetIdentityInfo(const IdentityInfo& identity_info) { |
if (identity_info.show_ssl_decision_revoke_button) |
header_->AddResetDecisionsLabel(); |
+ |
+ if (PageInfoUI::ShouldShowCertificateLink()) { |
+ // The text of link to the Certificate Viewer varies depending on the |
+ // validity of the Certificate. |
+ const bool valid_identity = (identity_info.identity_status != |
+ PageInfo::SITE_IDENTITY_STATUS_ERROR); |
+ const base::string16 link_title = l10n_util::GetStringUTF16( |
+ valid_identity ? IDS_PAGE_INFO_CERTIFICATE_VALID_LINK |
+ : IDS_PAGE_INFO_CERTIFICATE_INVALID_LINK); |
+ |
+ // Create the link to add to the Certificate Section. |
+ views::Link* link_inspect = new views::Link(link_title); |
lgarron
2017/04/28 23:16:43
Nit: `inspect_link`
(You might have been trying t
elawrence
2017/04/29 12:38:58
Done.
|
+ link_inspect->set_id(LINK_CERTIFICATE_VIEWER); |
+ if (valid_identity) { |
+ link_inspect->SetTooltipText(l10n_util::GetStringFUTF16( |
+ IDS_PAGE_INFO_CERTIFICATE_VALID_LINK_TOOLTIP, |
+ base::UTF8ToUTF16(certificate_->issuer().GetDisplayName()))); |
+ } |
+ |
+ // Add the Certificate Section. |
+ site_settings_view_->AddChildViewAt( |
lgarron
2017/04/28 23:16:43
This doesn't seem to wrap (at least on MacViews) -
elawrence
2017/04/29 12:38:58
Acknowledged.
|
+ CreateInspectSection(PageInfoUI::GetCertificateIcon(), |
+ IDS_PAGE_INFO_CERTIFICATE, link_inspect), |
+ 0); |
+ } |
} |
header_->SetDetails(security_description->details); |
@@ -699,15 +672,69 @@ views::View* PageInfoBubbleView::CreateSiteSettingsView(int side_margin) { |
box_layout->set_cross_axis_alignment( |
views::BoxLayout::CROSS_AXIS_ALIGNMENT_STRETCH); |
- // Add cookies view. |
- cookies_view_ = new views::View(); |
- site_settings_view->AddChildView(cookies_view_); |
+ // Create the link and icon for the Certificate section. |
+ cookie_dialog_link_ = new views::Link( |
+ l10n_util::GetPluralStringFUTF16(IDS_PAGE_INFO_NUM_COOKIES, 0)); |
+ cookie_dialog_link_->set_id(LINK_COOKIE_DIALOG); |
+ |
+ PageInfoUI::PermissionInfo info; |
+ info.type = CONTENT_SETTINGS_TYPE_COOKIES; |
+ info.setting = CONTENT_SETTING_ALLOW; |
+ info.is_incognito = |
+ Profile::FromBrowserContext(web_contents()->GetBrowserContext()) |
+ ->IsOffTheRecord(); |
+ |
+ const gfx::ImageSkia icon = PageInfoUI::GetPermissionIcon(info).AsImageSkia(); |
+ // Add the Cookies section. |
+ site_settings_view->AddChildView(CreateInspectSection( |
+ icon, IDS_PAGE_INFO_TITLE_SITE_DATA, cookie_dialog_link_)); |
return site_settings_view; |
} |
+views::View* PageInfoBubbleView::CreateInspectSection( |
+ const gfx::ImageSkia& image_icon, |
+ const int title_id, |
+ views::Link* link) { |
+ views::View* new_view = new views::View(); |
+ |
+ views::GridLayout* layout = new views::GridLayout(new_view); |
+ new_view->SetLayoutManager(layout); |
+ |
+ const int column = 0; |
+ views::ColumnSet* column_set = layout->AddColumnSet(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, column); |
+ |
+ views::ImageView* icon = new NonAccessibleImageView(); |
+ icon->SetImage(image_icon); |
+ 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* title_label = new views::Label( |
+ l10n_util::GetStringUTF16(title_id), CONTEXT_BODY_TEXT_LARGE); |
+ layout->AddView(title_label); |
+ layout->StartRow(1, column); |
+ layout->SkipColumns(1); |
+ |
+ link->set_listener(this); |
+ layout->AddView(link); |
+ return new_view; |
+} |
+ |
void PageInfoBubbleView::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()) { |
@@ -729,6 +756,15 @@ void PageInfoBubbleView::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(); |
} |