Chromium Code Reviews| Index: chrome/browser/ui/cocoa/page_info/page_info_bubble_controller.mm |
| diff --git a/chrome/browser/ui/cocoa/page_info/page_info_bubble_controller.mm b/chrome/browser/ui/cocoa/page_info/page_info_bubble_controller.mm |
| index 9c68f3f8ecfc2b208c42c3663275c8ce3be787fc..ab2b5e484c74e7f839a9322a9f21f36dae430f07 100644 |
| --- a/chrome/browser/ui/cocoa/page_info/page_info_bubble_controller.mm |
| +++ b/chrome/browser/ui/cocoa/page_info/page_info_bubble_controller.mm |
| @@ -8,6 +8,7 @@ |
| #include <cmath> |
| +#include "base/command_line.h" |
| #include "base/i18n/rtl.h" |
| #include "base/mac/bind_objc_block.h" |
| #include "base/memory/ptr_util.h" |
| @@ -23,6 +24,7 @@ |
| #import "chrome/browser/ui/cocoa/page_info/permission_selector_button.h" |
| #include "chrome/browser/ui/page_info/permission_menu_model.h" |
| #import "chrome/browser/ui/tab_dialogs.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" |
| @@ -345,6 +347,7 @@ bool IsInternalURL(const GURL& url) { |
| // These will be created only if necessary. |
| resetDecisionsField_ = nil; |
| resetDecisionsButton_ = nil; |
| + certificateView_ = nil; |
| NSString* connectionHelpButtonText = l10n_util::GetNSString(IDS_LEARN_MORE); |
| connectionHelpButton_ = [self addLinkButtonWithText:connectionHelpButtonText |
| @@ -527,6 +530,11 @@ bool IsInternalURL(const GURL& url) { |
| // Start the layout with the first element. Margins are handled by the caller. |
| CGFloat yPos = 0; |
| + if (certificateView_) { |
| + yPos = [self setYPositionOfView:certificateView_ |
| + to:yPos + kSectionVerticalPadding]; |
| + } |
| + |
| yPos = |
| [self setYPositionOfView:cookiesView_ to:yPos + kSectionVerticalPadding]; |
| @@ -681,7 +689,8 @@ bool IsInternalURL(const GURL& url) { |
| return button.get(); |
| } |
| -// Set the content of the identity and identity status fields. |
| +// Set the content of the identity and identity status fields, and add the |
| +// Certificate view if applicable. |
| - (void)setIdentityInfo:(const PageInfoUI::IdentityInfo&)identityInfo { |
| std::unique_ptr<PageInfoUI::SecurityDescription> security_description = |
| identityInfo.GetSecurityDescription(); |
| @@ -693,26 +702,112 @@ bool IsInternalURL(const GURL& url) { |
| certificate_ = identityInfo.certificate; |
| - if (certificate_ && identityInfo.show_ssl_decision_revoke_button) { |
| - resetDecisionsField_ = |
| - [self addText:base::string16() |
| - withSize:[NSFont smallSystemFontSize] |
| - bold:NO |
| - toView:securitySectionView_ |
| - atPoint:NSMakePoint(kSectionHorizontalPadding, 0)]; |
| - [resetDecisionsField_ |
| - setStringValue:l10n_util::GetNSString( |
| - IDS_PAGEINFO_INVALID_CERTIFICATE_DESCRIPTION)]; |
| - [self sizeTextFieldHeightToFit:resetDecisionsField_]; |
| - |
| - resetDecisionsButton_ = |
| - [self addLinkButtonWithText: |
| - l10n_util::GetNSString( |
| - IDS_PAGEINFO_RESET_INVALID_CERTIFICATE_DECISIONS_BUTTON) |
| - toView:securitySectionView_]; |
| - [resetDecisionsButton_ setTarget:self]; |
| - [resetDecisionsButton_ setAction:@selector(resetCertificateDecisions:)]; |
| - } |
| + if (certificate_) { |
| + if (identityInfo.show_ssl_decision_revoke_button) { |
| + resetDecisionsField_ = |
| + [self addText:base::string16() |
| + withSize:[NSFont smallSystemFontSize] |
| + bold:NO |
| + toView:securitySectionView_ |
| + atPoint:NSMakePoint(kSectionHorizontalPadding, 0)]; |
| + [resetDecisionsField_ |
| + setStringValue:l10n_util::GetNSString( |
| + IDS_PAGEINFO_INVALID_CERTIFICATE_DESCRIPTION)]; |
| + [self sizeTextFieldHeightToFit:resetDecisionsField_]; |
| + |
| + resetDecisionsButton_ = |
| + [self addLinkButtonWithText: |
| + l10n_util::GetNSString( |
| + IDS_PAGEINFO_RESET_INVALID_CERTIFICATE_DECISIONS_BUTTON) |
| + toView:securitySectionView_]; |
| + [resetDecisionsButton_ setTarget:self]; |
| + [resetDecisionsButton_ setAction:@selector(resetCertificateDecisions:)]; |
| + } |
| + |
| + if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
|
lgarron
2017/04/05 02:06:26
Could you move this check into a platform-independ
|
| + switches::kShowCertButton)) { |
| + if (!certificateView_) { |
| + certificateView_ = [[[FlippedView alloc] |
| + initWithFrame:[contentView_ frame]] autorelease]; |
| + [certificateView_ setAutoresizingMask:NSViewWidthSizable]; |
| + [siteSettingsSectionView_ addSubview:certificateView_]; |
| + } |
| + |
| + base::string16 label_text = l10n_util::GetStringUTF16( |
| + (identityInfo.identity_status == PageInfo::SITE_IDENTITY_STATUS_ERROR) |
| + ? IDS_PAGE_INFO_CERTIFICATE_INVALID_LINK |
| + : IDS_PAGE_INFO_CERTIFICATE_VALID_LINK); |
| + |
| + base::string16 sectionTitle = |
| + l10n_util::GetStringUTF16(IDS_PAGE_INFO_CERTIFICATE); |
| + bool isRTL = base::i18n::IsRTL(); |
| + |
| + [certificateView_ setSubviews:[NSArray array]]; |
| + NSPoint controlOrigin = NSMakePoint(kSectionHorizontalPadding, 0); |
| + |
| + CGFloat viewWidth = NSWidth([certificateView_ frame]); |
| + |
| + // Reset X for the certificate image. |
| + if (isRTL) { |
| + controlOrigin.x = viewWidth - kPermissionImageSize - |
| + kPermissionImageSpacing - kSectionHorizontalPadding; |
| + } |
| + |
| + NSImage* image = PageInfoUI::GetCertificateIcon().ToNSImage(); |
| + NSImageView* imageView = [self addImageWithSize:[image size] |
| + toView:certificateView_ |
| + atPoint:controlOrigin]; |
| + [imageView setImage:image]; |
| + |
| + NSButton* certificateButton = |
| + [self addLinkButtonWithText:base::SysUTF16ToNSString(label_text) |
| + toView:certificateView_]; |
| + [certificateButton setTarget:self]; |
| + [certificateButton setAction:@selector(showCertificateInfo:)]; |
| + |
| + if (isRTL) { |
| + controlOrigin.x -= kPermissionImageSpacing; |
| + NSTextField* certificateLabel = [self addText:sectionTitle |
| + withSize:[NSFont systemFontSize] |
| + bold:NO |
| + toView:certificateView_ |
| + atPoint:controlOrigin]; |
| + [certificateLabel sizeToFit]; |
| + |
| + NSPoint certificateLabelOrigin = [certificateLabel frame].origin; |
| + certificateLabelOrigin.x -= NSWidth([certificateLabel frame]); |
| + [certificateLabel setFrameOrigin:certificateLabelOrigin]; |
| + |
| + // Align the icon with the text. |
| + [self alignPermissionIcon:imageView withTextField:certificateLabel]; |
| + |
| + controlOrigin.y += NSHeight([certificateLabel frame]); |
| + controlOrigin.x -= |
| + NSWidth([certificateButton frame]) - kLinkButtonXAdjustment; |
| + [certificateButton setFrameOrigin:controlOrigin]; |
| + } else { |
| + controlOrigin.x += kPermissionImageSize + kPermissionImageSpacing; |
| + NSTextField* certificateLabel = [self addText:sectionTitle |
| + withSize:[NSFont systemFontSize] |
| + bold:NO |
| + toView:certificateView_ |
| + atPoint:controlOrigin]; |
| + [certificateLabel sizeToFit]; |
| + |
| + controlOrigin.y += NSHeight([certificateLabel frame]); |
| + controlOrigin.x -= kLinkButtonXAdjustment; |
| + [certificateButton setFrameOrigin:controlOrigin]; |
| + |
| + // Align the icon with the text. |
| + [self alignPermissionIcon:imageView withTextField:certificateLabel]; |
| + } |
| + |
| + controlOrigin.y += NSHeight([certificateButton frame]); |
| + [certificateView_ |
| + setFrameSize:NSMakeSize(NSWidth([certificateView_ frame]), |
| + controlOrigin.y)]; |
| + } |
| + } // if (certificate_) |
| [self performLayout]; |
| } |
| @@ -1005,8 +1100,6 @@ bool IsInternalURL(const GURL& url) { |
| base::string16 label_text = |
| l10n_util::GetPluralStringFUTF16(IDS_PAGE_INFO_NUM_COOKIES, totalAllowed); |
| - base::string16 sectionTitle = |
| - l10n_util::GetStringUTF16(IDS_PAGE_INFO_TITLE_SITE_DATA); |
| bool isRTL = base::i18n::IsRTL(); |
| [cookiesView_ setSubviews:[NSArray array]]; |
| @@ -1090,9 +1183,6 @@ bool IsInternalURL(const GURL& url) { |
| permissionsPresent_ = YES; |
| if (permissionInfoList.size() > 0 || chosenObjectInfoList.size() > 0) { |
| - base::string16 sectionTitle = |
| - l10n_util::GetStringUTF16(IDS_PAGE_INFO_TITLE_SITE_PERMISSIONS); |
| - |
| for (const auto& permission : permissionInfoList) { |
| controlOrigin.y += kPermissionsVerticalSpacing; |
| NSPoint rowBottomRight = [self addPermission:permission |