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

Unified Diff: chrome/browser/ui/cocoa/page_info/page_info_bubble_controller.mm

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/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

Powered by Google App Engine
This is Rietveld 408576698