OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #import "chrome/browser/ui/cocoa/page_info/page_info_bubble_controller.h" | 5 #import "chrome/browser/ui/cocoa/page_info/page_info_bubble_controller.h" |
6 | 6 |
7 #import <AppKit/AppKit.h> | 7 #import <AppKit/AppKit.h> |
8 | 8 |
9 #include <cmath> | 9 #include <cmath> |
10 | 10 |
11 #include "base/command_line.h" | |
11 #include "base/i18n/rtl.h" | 12 #include "base/i18n/rtl.h" |
12 #include "base/mac/bind_objc_block.h" | 13 #include "base/mac/bind_objc_block.h" |
13 #include "base/memory/ptr_util.h" | 14 #include "base/memory/ptr_util.h" |
14 #include "base/strings/sys_string_conversions.h" | 15 #include "base/strings/sys_string_conversions.h" |
15 #import "chrome/browser/certificate_viewer.h" | 16 #import "chrome/browser/certificate_viewer.h" |
16 #include "chrome/browser/infobars/infobar_service.h" | 17 #include "chrome/browser/infobars/infobar_service.h" |
17 #include "chrome/browser/profiles/profile.h" | 18 #include "chrome/browser/profiles/profile.h" |
18 #include "chrome/browser/ui/browser_dialogs.h" | 19 #include "chrome/browser/ui/browser_dialogs.h" |
19 #import "chrome/browser/ui/cocoa/browser_window_controller.h" | 20 #import "chrome/browser/ui/cocoa/browser_window_controller.h" |
20 #import "chrome/browser/ui/cocoa/info_bubble_view.h" | 21 #import "chrome/browser/ui/cocoa/info_bubble_view.h" |
21 #import "chrome/browser/ui/cocoa/info_bubble_window.h" | 22 #import "chrome/browser/ui/cocoa/info_bubble_window.h" |
22 #import "chrome/browser/ui/cocoa/location_bar/location_bar_view_mac.h" | 23 #import "chrome/browser/ui/cocoa/location_bar/location_bar_view_mac.h" |
23 #import "chrome/browser/ui/cocoa/page_info/permission_selector_button.h" | 24 #import "chrome/browser/ui/cocoa/page_info/permission_selector_button.h" |
24 #include "chrome/browser/ui/page_info/permission_menu_model.h" | 25 #include "chrome/browser/ui/page_info/permission_menu_model.h" |
25 #import "chrome/browser/ui/tab_dialogs.h" | 26 #import "chrome/browser/ui/tab_dialogs.h" |
27 #include "chrome/common/chrome_switches.h" | |
26 #include "chrome/common/url_constants.h" | 28 #include "chrome/common/url_constants.h" |
27 #include "chrome/grit/chromium_strings.h" | 29 #include "chrome/grit/chromium_strings.h" |
28 #include "chrome/grit/generated_resources.h" | 30 #include "chrome/grit/generated_resources.h" |
29 #include "chrome/grit/theme_resources.h" | 31 #include "chrome/grit/theme_resources.h" |
30 #include "components/strings/grit/components_chromium_strings.h" | 32 #include "components/strings/grit/components_chromium_strings.h" |
31 #include "components/strings/grit/components_strings.h" | 33 #include "components/strings/grit/components_strings.h" |
32 #include "content/public/browser/page_navigator.h" | 34 #include "content/public/browser/page_navigator.h" |
33 #include "content/public/browser/ssl_host_state_delegate.h" | 35 #include "content/public/browser/ssl_host_state_delegate.h" |
34 #include "content/public/browser/web_contents.h" | 36 #include "content/public/browser/web_contents.h" |
35 #include "content/public/common/url_constants.h" | 37 #include "content/public/common/url_constants.h" |
(...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
338 | 340 |
339 securityDetailsField_ = [self addText:base::string16() | 341 securityDetailsField_ = [self addText:base::string16() |
340 withSize:[NSFont smallSystemFontSize] | 342 withSize:[NSFont smallSystemFontSize] |
341 bold:NO | 343 bold:NO |
342 toView:securitySectionView | 344 toView:securitySectionView |
343 atPoint:controlOrigin]; | 345 atPoint:controlOrigin]; |
344 | 346 |
345 // These will be created only if necessary. | 347 // These will be created only if necessary. |
346 resetDecisionsField_ = nil; | 348 resetDecisionsField_ = nil; |
347 resetDecisionsButton_ = nil; | 349 resetDecisionsButton_ = nil; |
350 certificateView_ = nil; | |
348 | 351 |
349 NSString* connectionHelpButtonText = l10n_util::GetNSString(IDS_LEARN_MORE); | 352 NSString* connectionHelpButtonText = l10n_util::GetNSString(IDS_LEARN_MORE); |
350 connectionHelpButton_ = [self addLinkButtonWithText:connectionHelpButtonText | 353 connectionHelpButton_ = [self addLinkButtonWithText:connectionHelpButtonText |
351 toView:securitySectionView]; | 354 toView:securitySectionView]; |
352 [connectionHelpButton_ setTarget:self]; | 355 [connectionHelpButton_ setTarget:self]; |
353 [connectionHelpButton_ setAction:@selector(openConnectionHelp:)]; | 356 [connectionHelpButton_ setAction:@selector(openConnectionHelp:)]; |
354 | 357 |
355 return securitySectionView.get(); | 358 return securitySectionView.get(); |
356 } | 359 } |
357 | 360 |
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
520 } | 523 } |
521 | 524 |
522 // Resize the height based on contents. | 525 // Resize the height based on contents. |
523 [self setHeightOfView:securitySectionView_ to:yPos + kSectionVerticalPadding]; | 526 [self setHeightOfView:securitySectionView_ to:yPos + kSectionVerticalPadding]; |
524 } | 527 } |
525 | 528 |
526 - (void)layoutSiteSettingsSection { | 529 - (void)layoutSiteSettingsSection { |
527 // Start the layout with the first element. Margins are handled by the caller. | 530 // Start the layout with the first element. Margins are handled by the caller. |
528 CGFloat yPos = 0; | 531 CGFloat yPos = 0; |
529 | 532 |
533 if (certificateView_) { | |
534 yPos = [self setYPositionOfView:certificateView_ | |
535 to:yPos + kSectionVerticalPadding]; | |
536 } | |
537 | |
530 yPos = | 538 yPos = |
531 [self setYPositionOfView:cookiesView_ to:yPos + kSectionVerticalPadding]; | 539 [self setYPositionOfView:cookiesView_ to:yPos + kSectionVerticalPadding]; |
532 | 540 |
533 if (permissionsPresent_) { | 541 if (permissionsPresent_) { |
534 // Put the permission info just below the link button. | 542 // Put the permission info just below the link button. |
535 yPos = [self setYPositionOfView:permissionsView_ to:yPos]; | 543 yPos = [self setYPositionOfView:permissionsView_ to:yPos]; |
536 } | 544 } |
537 | 545 |
538 yPos = [self layoutViewAtRTLStart:siteSettingsButton_ withYPosition:yPos]; | 546 yPos = [self layoutViewAtRTLStart:siteSettingsButton_ withYPosition:yPos]; |
539 | 547 |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
674 buttonFrame.size.width = maxTitleWidth; | 682 buttonFrame.size.width = maxTitleWidth; |
675 | 683 |
676 [button setFrame:buttonFrame]; | 684 [button setFrame:buttonFrame]; |
677 [button setButtonType:NSMomentaryPushInButton]; | 685 [button setButtonType:NSMomentaryPushInButton]; |
678 [button setBezelStyle:NSRegularSquareBezelStyle]; | 686 [button setBezelStyle:NSRegularSquareBezelStyle]; |
679 [view addSubview:button.get()]; | 687 [view addSubview:button.get()]; |
680 | 688 |
681 return button.get(); | 689 return button.get(); |
682 } | 690 } |
683 | 691 |
684 // Set the content of the identity and identity status fields. | 692 // Set the content of the identity and identity status fields, and add the |
693 // Certificate view if applicable. | |
685 - (void)setIdentityInfo:(const PageInfoUI::IdentityInfo&)identityInfo { | 694 - (void)setIdentityInfo:(const PageInfoUI::IdentityInfo&)identityInfo { |
686 std::unique_ptr<PageInfoUI::SecurityDescription> security_description = | 695 std::unique_ptr<PageInfoUI::SecurityDescription> security_description = |
687 identityInfo.GetSecurityDescription(); | 696 identityInfo.GetSecurityDescription(); |
688 [securitySummaryField_ | 697 [securitySummaryField_ |
689 setStringValue:base::SysUTF16ToNSString(security_description->summary)]; | 698 setStringValue:base::SysUTF16ToNSString(security_description->summary)]; |
690 | 699 |
691 [securityDetailsField_ | 700 [securityDetailsField_ |
692 setStringValue:SysUTF16ToNSString(security_description->details)]; | 701 setStringValue:SysUTF16ToNSString(security_description->details)]; |
693 | 702 |
694 certificate_ = identityInfo.certificate; | 703 certificate_ = identityInfo.certificate; |
695 | 704 |
696 if (certificate_ && identityInfo.show_ssl_decision_revoke_button) { | 705 if (certificate_) { |
697 resetDecisionsField_ = | 706 if (identityInfo.show_ssl_decision_revoke_button) { |
698 [self addText:base::string16() | 707 resetDecisionsField_ = |
699 withSize:[NSFont smallSystemFontSize] | 708 [self addText:base::string16() |
700 bold:NO | 709 withSize:[NSFont smallSystemFontSize] |
701 toView:securitySectionView_ | 710 bold:NO |
702 atPoint:NSMakePoint(kSectionHorizontalPadding, 0)]; | 711 toView:securitySectionView_ |
703 [resetDecisionsField_ | 712 atPoint:NSMakePoint(kSectionHorizontalPadding, 0)]; |
704 setStringValue:l10n_util::GetNSString( | 713 [resetDecisionsField_ |
705 IDS_PAGEINFO_INVALID_CERTIFICATE_DESCRIPTION)]; | 714 setStringValue:l10n_util::GetNSString( |
706 [self sizeTextFieldHeightToFit:resetDecisionsField_]; | 715 IDS_PAGEINFO_INVALID_CERTIFICATE_DESCRIPTION)]; |
716 [self sizeTextFieldHeightToFit:resetDecisionsField_]; | |
707 | 717 |
708 resetDecisionsButton_ = | 718 resetDecisionsButton_ = |
709 [self addLinkButtonWithText: | 719 [self addLinkButtonWithText: |
710 l10n_util::GetNSString( | 720 l10n_util::GetNSString( |
711 IDS_PAGEINFO_RESET_INVALID_CERTIFICATE_DECISIONS_BUTTON) | 721 IDS_PAGEINFO_RESET_INVALID_CERTIFICATE_DECISIONS_BUTTON) |
712 toView:securitySectionView_]; | 722 toView:securitySectionView_]; |
713 [resetDecisionsButton_ setTarget:self]; | 723 [resetDecisionsButton_ setTarget:self]; |
714 [resetDecisionsButton_ setAction:@selector(resetCertificateDecisions:)]; | 724 [resetDecisionsButton_ setAction:@selector(resetCertificateDecisions:)]; |
715 } | 725 } |
726 | |
727 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | |
lgarron
2017/04/05 02:06:26
Could you move this check into a platform-independ
| |
728 switches::kShowCertButton)) { | |
729 if (!certificateView_) { | |
730 certificateView_ = [[[FlippedView alloc] | |
731 initWithFrame:[contentView_ frame]] autorelease]; | |
732 [certificateView_ setAutoresizingMask:NSViewWidthSizable]; | |
733 [siteSettingsSectionView_ addSubview:certificateView_]; | |
734 } | |
735 | |
736 base::string16 label_text = l10n_util::GetStringUTF16( | |
737 (identityInfo.identity_status == PageInfo::SITE_IDENTITY_STATUS_ERROR) | |
738 ? IDS_PAGE_INFO_CERTIFICATE_INVALID_LINK | |
739 : IDS_PAGE_INFO_CERTIFICATE_VALID_LINK); | |
740 | |
741 base::string16 sectionTitle = | |
742 l10n_util::GetStringUTF16(IDS_PAGE_INFO_CERTIFICATE); | |
743 bool isRTL = base::i18n::IsRTL(); | |
744 | |
745 [certificateView_ setSubviews:[NSArray array]]; | |
746 NSPoint controlOrigin = NSMakePoint(kSectionHorizontalPadding, 0); | |
747 | |
748 CGFloat viewWidth = NSWidth([certificateView_ frame]); | |
749 | |
750 // Reset X for the certificate image. | |
751 if (isRTL) { | |
752 controlOrigin.x = viewWidth - kPermissionImageSize - | |
753 kPermissionImageSpacing - kSectionHorizontalPadding; | |
754 } | |
755 | |
756 NSImage* image = PageInfoUI::GetCertificateIcon().ToNSImage(); | |
757 NSImageView* imageView = [self addImageWithSize:[image size] | |
758 toView:certificateView_ | |
759 atPoint:controlOrigin]; | |
760 [imageView setImage:image]; | |
761 | |
762 NSButton* certificateButton = | |
763 [self addLinkButtonWithText:base::SysUTF16ToNSString(label_text) | |
764 toView:certificateView_]; | |
765 [certificateButton setTarget:self]; | |
766 [certificateButton setAction:@selector(showCertificateInfo:)]; | |
767 | |
768 if (isRTL) { | |
769 controlOrigin.x -= kPermissionImageSpacing; | |
770 NSTextField* certificateLabel = [self addText:sectionTitle | |
771 withSize:[NSFont systemFontSize] | |
772 bold:NO | |
773 toView:certificateView_ | |
774 atPoint:controlOrigin]; | |
775 [certificateLabel sizeToFit]; | |
776 | |
777 NSPoint certificateLabelOrigin = [certificateLabel frame].origin; | |
778 certificateLabelOrigin.x -= NSWidth([certificateLabel frame]); | |
779 [certificateLabel setFrameOrigin:certificateLabelOrigin]; | |
780 | |
781 // Align the icon with the text. | |
782 [self alignPermissionIcon:imageView withTextField:certificateLabel]; | |
783 | |
784 controlOrigin.y += NSHeight([certificateLabel frame]); | |
785 controlOrigin.x -= | |
786 NSWidth([certificateButton frame]) - kLinkButtonXAdjustment; | |
787 [certificateButton setFrameOrigin:controlOrigin]; | |
788 } else { | |
789 controlOrigin.x += kPermissionImageSize + kPermissionImageSpacing; | |
790 NSTextField* certificateLabel = [self addText:sectionTitle | |
791 withSize:[NSFont systemFontSize] | |
792 bold:NO | |
793 toView:certificateView_ | |
794 atPoint:controlOrigin]; | |
795 [certificateLabel sizeToFit]; | |
796 | |
797 controlOrigin.y += NSHeight([certificateLabel frame]); | |
798 controlOrigin.x -= kLinkButtonXAdjustment; | |
799 [certificateButton setFrameOrigin:controlOrigin]; | |
800 | |
801 // Align the icon with the text. | |
802 [self alignPermissionIcon:imageView withTextField:certificateLabel]; | |
803 } | |
804 | |
805 controlOrigin.y += NSHeight([certificateButton frame]); | |
806 [certificateView_ | |
807 setFrameSize:NSMakeSize(NSWidth([certificateView_ frame]), | |
808 controlOrigin.y)]; | |
809 } | |
810 } // if (certificate_) | |
716 | 811 |
717 [self performLayout]; | 812 [self performLayout]; |
718 } | 813 } |
719 | 814 |
720 // Add a pop-up button for |permissionInfo| to the given view. | 815 // Add a pop-up button for |permissionInfo| to the given view. |
721 - (NSPopUpButton*)addPopUpButtonForPermission: | 816 - (NSPopUpButton*)addPopUpButtonForPermission: |
722 (const PageInfoUI::PermissionInfo&)permissionInfo | 817 (const PageInfoUI::PermissionInfo&)permissionInfo |
723 toView:(NSView*)view | 818 toView:(NSView*)view |
724 atPoint:(NSPoint)point { | 819 atPoint:(NSPoint)point { |
725 GURL url = webContents_ ? webContents_->GetURL() : GURL(); | 820 GURL url = webContents_ ? webContents_->GetURL() : GURL(); |
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
998 // cookies. | 1093 // cookies. |
999 DCHECK_EQ(cookieInfoList.size(), 2u); | 1094 DCHECK_EQ(cookieInfoList.size(), 2u); |
1000 | 1095 |
1001 int totalAllowed = 0; | 1096 int totalAllowed = 0; |
1002 for (const auto& i : cookieInfoList) { | 1097 for (const auto& i : cookieInfoList) { |
1003 totalAllowed += i.allowed; | 1098 totalAllowed += i.allowed; |
1004 } | 1099 } |
1005 base::string16 label_text = | 1100 base::string16 label_text = |
1006 l10n_util::GetPluralStringFUTF16(IDS_PAGE_INFO_NUM_COOKIES, totalAllowed); | 1101 l10n_util::GetPluralStringFUTF16(IDS_PAGE_INFO_NUM_COOKIES, totalAllowed); |
1007 | 1102 |
1008 base::string16 sectionTitle = | |
1009 l10n_util::GetStringUTF16(IDS_PAGE_INFO_TITLE_SITE_DATA); | |
1010 bool isRTL = base::i18n::IsRTL(); | 1103 bool isRTL = base::i18n::IsRTL(); |
1011 | 1104 |
1012 [cookiesView_ setSubviews:[NSArray array]]; | 1105 [cookiesView_ setSubviews:[NSArray array]]; |
1013 NSPoint controlOrigin = NSMakePoint(kSectionHorizontalPadding, 0); | 1106 NSPoint controlOrigin = NSMakePoint(kSectionHorizontalPadding, 0); |
1014 | 1107 |
1015 CGFloat viewWidth = NSWidth([cookiesView_ frame]); | 1108 CGFloat viewWidth = NSWidth([cookiesView_ frame]); |
1016 | 1109 |
1017 // Reset X for the cookie image. | 1110 // Reset X for the cookie image. |
1018 if (isRTL) { | 1111 if (isRTL) { |
1019 controlOrigin.x = viewWidth - kPermissionImageSize - | 1112 controlOrigin.x = viewWidth - kPermissionImageSize - |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1083 } | 1176 } |
1084 | 1177 |
1085 - (void)setPermissionInfo:(const PermissionInfoList&)permissionInfoList | 1178 - (void)setPermissionInfo:(const PermissionInfoList&)permissionInfoList |
1086 andChosenObjects:(ChosenObjectInfoList)chosenObjectInfoList { | 1179 andChosenObjects:(ChosenObjectInfoList)chosenObjectInfoList { |
1087 [permissionsView_ setSubviews:[NSArray array]]; | 1180 [permissionsView_ setSubviews:[NSArray array]]; |
1088 NSPoint controlOrigin = NSMakePoint(kSectionHorizontalPadding, 0); | 1181 NSPoint controlOrigin = NSMakePoint(kSectionHorizontalPadding, 0); |
1089 | 1182 |
1090 permissionsPresent_ = YES; | 1183 permissionsPresent_ = YES; |
1091 | 1184 |
1092 if (permissionInfoList.size() > 0 || chosenObjectInfoList.size() > 0) { | 1185 if (permissionInfoList.size() > 0 || chosenObjectInfoList.size() > 0) { |
1093 base::string16 sectionTitle = | |
1094 l10n_util::GetStringUTF16(IDS_PAGE_INFO_TITLE_SITE_PERMISSIONS); | |
1095 | |
1096 for (const auto& permission : permissionInfoList) { | 1186 for (const auto& permission : permissionInfoList) { |
1097 controlOrigin.y += kPermissionsVerticalSpacing; | 1187 controlOrigin.y += kPermissionsVerticalSpacing; |
1098 NSPoint rowBottomRight = [self addPermission:permission | 1188 NSPoint rowBottomRight = [self addPermission:permission |
1099 toView:permissionsView_ | 1189 toView:permissionsView_ |
1100 atPoint:controlOrigin]; | 1190 atPoint:controlOrigin]; |
1101 controlOrigin.y = rowBottomRight.y; | 1191 controlOrigin.y = rowBottomRight.y; |
1102 } | 1192 } |
1103 | 1193 |
1104 for (auto& object : chosenObjectInfoList) { | 1194 for (auto& object : chosenObjectInfoList) { |
1105 controlOrigin.y += kPermissionsVerticalSpacing; | 1195 controlOrigin.y += kPermissionsVerticalSpacing; |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1194 void PageInfoUIBridge::SetCookieInfo(const CookieInfoList& cookie_info_list) { | 1284 void PageInfoUIBridge::SetCookieInfo(const CookieInfoList& cookie_info_list) { |
1195 [bubble_controller_ setCookieInfo:cookie_info_list]; | 1285 [bubble_controller_ setCookieInfo:cookie_info_list]; |
1196 } | 1286 } |
1197 | 1287 |
1198 void PageInfoUIBridge::SetPermissionInfo( | 1288 void PageInfoUIBridge::SetPermissionInfo( |
1199 const PermissionInfoList& permission_info_list, | 1289 const PermissionInfoList& permission_info_list, |
1200 ChosenObjectInfoList chosen_object_info_list) { | 1290 ChosenObjectInfoList chosen_object_info_list) { |
1201 [bubble_controller_ setPermissionInfo:permission_info_list | 1291 [bubble_controller_ setPermissionInfo:permission_info_list |
1202 andChosenObjects:std::move(chosen_object_info_list)]; | 1292 andChosenObjects:std::move(chosen_object_info_list)]; |
1203 } | 1293 } |
OLD | NEW |