| 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/website_settings_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/i18n/rtl.h" | 11 #include "base/i18n/rtl.h" |
| 12 #include "base/mac/bind_objc_block.h" | 12 #include "base/mac/bind_objc_block.h" |
| 13 #include "base/memory/ptr_util.h" | 13 #include "base/memory/ptr_util.h" |
| 14 #include "base/strings/sys_string_conversions.h" | 14 #include "base/strings/sys_string_conversions.h" |
| 15 #import "chrome/browser/certificate_viewer.h" | 15 #import "chrome/browser/certificate_viewer.h" |
| (...skipping 26 matching lines...) Expand all Loading... |
| 42 #import "ui/base/cocoa/controls/hyperlink_button_cell.h" | 42 #import "ui/base/cocoa/controls/hyperlink_button_cell.h" |
| 43 #import "ui/base/cocoa/flipped_view.h" | 43 #import "ui/base/cocoa/flipped_view.h" |
| 44 #import "ui/base/cocoa/hover_image_button.h" | 44 #import "ui/base/cocoa/hover_image_button.h" |
| 45 #include "ui/base/l10n/l10n_util.h" | 45 #include "ui/base/l10n/l10n_util.h" |
| 46 #include "ui/base/material_design/material_design_controller.h" | 46 #include "ui/base/material_design/material_design_controller.h" |
| 47 #include "ui/base/resource/resource_bundle.h" | 47 #include "ui/base/resource/resource_bundle.h" |
| 48 #import "ui/gfx/mac/coordinate_conversion.h" | 48 #import "ui/gfx/mac/coordinate_conversion.h" |
| 49 #include "ui/gfx/scoped_ns_graphics_context_save_gstate_mac.h" | 49 #include "ui/gfx/scoped_ns_graphics_context_save_gstate_mac.h" |
| 50 #include "ui/resources/grit/ui_resources.h" | 50 #include "ui/resources/grit/ui_resources.h" |
| 51 | 51 |
| 52 using ChosenObjectInfoPtr = | 52 using ChosenObjectInfoPtr = std::unique_ptr<PageInfoUI::ChosenObjectInfo>; |
| 53 std::unique_ptr<WebsiteSettingsUI::ChosenObjectInfo>; | |
| 54 using ChosenObjectDeleteCallback = | 53 using ChosenObjectDeleteCallback = |
| 55 base::Callback<void(const WebsiteSettingsUI::ChosenObjectInfo&)>; | 54 base::Callback<void(const PageInfoUI::ChosenObjectInfo&)>; |
| 56 | 55 |
| 57 namespace { | 56 namespace { |
| 58 | 57 |
| 59 // General --------------------------------------------------------------------- | 58 // General --------------------------------------------------------------------- |
| 60 | 59 |
| 61 // The default width of the window, in view coordinates. It may be larger to | 60 // The default width of the window, in view coordinates. It may be larger to |
| 62 // fit the content. | 61 // fit the content. |
| 63 const CGFloat kDefaultWindowWidth = 320; | 62 const CGFloat kDefaultWindowWidth = 320; |
| 64 | 63 |
| 65 // Padding around each section | 64 // Padding around each section |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 108 // Padding between the window frame and content for the internal page bubble. | 107 // Padding between the window frame and content for the internal page bubble. |
| 109 const CGFloat kInternalPageFramePadding = 10; | 108 const CGFloat kInternalPageFramePadding = 10; |
| 110 | 109 |
| 111 // Spacing between the image and text for internal pages. | 110 // Spacing between the image and text for internal pages. |
| 112 const CGFloat kInternalPageImageSpacing = 10; | 111 const CGFloat kInternalPageImageSpacing = 10; |
| 113 | 112 |
| 114 // ----------------------------------------------------------------------------- | 113 // ----------------------------------------------------------------------------- |
| 115 | 114 |
| 116 // NOTE: This assumes that there will never be more than one website settings | 115 // NOTE: This assumes that there will never be more than one website settings |
| 117 // popup shown, and that the one that is shown is associated with the current | 116 // popup shown, and that the one that is shown is associated with the current |
| 118 // window. This matches the behaviour in views: see WebsiteSettingsPopupView. | 117 // window. This matches the behaviour in views: see PageInfoPopupView. |
| 119 bool g_is_popup_showing = false; | 118 bool g_is_popup_showing = false; |
| 120 | 119 |
| 121 // Takes in the parent window, which should be a BrowserWindow, and gets the | 120 // Takes in the parent window, which should be a BrowserWindow, and gets the |
| 122 // proper anchor point for the bubble. The returned point is in screen | 121 // proper anchor point for the bubble. The returned point is in screen |
| 123 // coordinates. | 122 // coordinates. |
| 124 NSPoint AnchorPointForWindow(NSWindow* parent) { | 123 NSPoint AnchorPointForWindow(NSWindow* parent) { |
| 125 BrowserWindowController* controller = [parent windowController]; | 124 BrowserWindowController* controller = [parent windowController]; |
| 126 NSPoint origin = NSZeroPoint; | 125 NSPoint origin = NSZeroPoint; |
| 127 if ([controller isKindOfClass:[BrowserWindowController class]]) { | 126 if ([controller isKindOfClass:[BrowserWindowController class]]) { |
| 128 LocationBarViewMac* location_bar = [controller locationBarBridge]; | 127 LocationBarViewMac* location_bar = [controller locationBarBridge]; |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 174 } | 173 } |
| 175 return self; | 174 return self; |
| 176 } | 175 } |
| 177 | 176 |
| 178 - (void)deleteClicked:(id)sender { | 177 - (void)deleteClicked:(id)sender { |
| 179 callback_.Run(*objectInfo_); | 178 callback_.Run(*objectInfo_); |
| 180 } | 179 } |
| 181 | 180 |
| 182 @end | 181 @end |
| 183 | 182 |
| 184 @implementation WebsiteSettingsBubbleController | 183 @implementation PageInfoBubbleController |
| 185 | 184 |
| 186 - (CGFloat)defaultWindowWidth { | 185 - (CGFloat)defaultWindowWidth { |
| 187 return kDefaultWindowWidth; | 186 return kDefaultWindowWidth; |
| 188 } | 187 } |
| 189 | 188 |
| 190 bool IsInternalURL(const GURL& url) { | 189 bool IsInternalURL(const GURL& url) { |
| 191 return url.SchemeIs(content::kChromeUIScheme) || | 190 return url.SchemeIs(content::kChromeUIScheme) || |
| 192 url.SchemeIs(content::kChromeDevToolsScheme) || | 191 url.SchemeIs(content::kChromeDevToolsScheme) || |
| 193 url.SchemeIs(extensions::kExtensionScheme) || | 192 url.SchemeIs(extensions::kExtensionScheme) || |
| 194 url.SchemeIs(content::kViewSourceScheme); | 193 url.SchemeIs(content::kViewSourceScheme); |
| 195 } | 194 } |
| 196 | 195 |
| 197 - (id)initWithParentWindow:(NSWindow*)parentWindow | 196 - (id)initWithParentWindow:(NSWindow*)parentWindow |
| 198 websiteSettingsUIBridge:(WebsiteSettingsUIBridge*)bridge | 197 PageInfoUIBridge:(PageInfoUIBridge*)bridge |
| 199 webContents:(content::WebContents*)webContents | 198 webContents:(content::WebContents*)webContents |
| 200 url:(const GURL&)url { | 199 url:(const GURL&)url { |
| 201 DCHECK(parentWindow); | 200 DCHECK(parentWindow); |
| 202 | 201 |
| 203 webContents_ = webContents; | 202 webContents_ = webContents; |
| 204 permissionsPresent_ = NO; | 203 permissionsPresent_ = NO; |
| 205 url_ = url; | 204 url_ = url; |
| 206 | 205 |
| 207 // Use an arbitrary height; it will be changed in performLayout. | 206 // Use an arbitrary height; it will be changed in performLayout. |
| 208 NSRect contentRect = NSMakeRect(0, 0, [self defaultWindowWidth], 1); | 207 NSRect contentRect = NSMakeRect(0, 0, [self defaultWindowWidth], 1); |
| 209 // Create an empty window into which content is placed. | 208 // Create an empty window into which content is placed. |
| 210 base::scoped_nsobject<InfoBubbleWindow> window([[InfoBubbleWindow alloc] | 209 base::scoped_nsobject<InfoBubbleWindow> window([[InfoBubbleWindow alloc] |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 248 return Profile::FromBrowserContext(webContents_->GetBrowserContext()); | 247 return Profile::FromBrowserContext(webContents_->GetBrowserContext()); |
| 249 } | 248 } |
| 250 | 249 |
| 251 - (void)windowWillClose:(NSNotification*)notification { | 250 - (void)windowWillClose:(NSNotification*)notification { |
| 252 if (presenter_.get()) | 251 if (presenter_.get()) |
| 253 presenter_->OnUIClosing(); | 252 presenter_->OnUIClosing(); |
| 254 presenter_.reset(); | 253 presenter_.reset(); |
| 255 [super windowWillClose:notification]; | 254 [super windowWillClose:notification]; |
| 256 } | 255 } |
| 257 | 256 |
| 258 - (void)setPresenter:(WebsiteSettings*)presenter { | 257 - (void)setPresenter:(PageInfo*)presenter { |
| 259 presenter_.reset(presenter); | 258 presenter_.reset(presenter); |
| 260 } | 259 } |
| 261 | 260 |
| 262 // Create the subviews for the bubble for internal Chrome pages. | 261 // Create the subviews for the bubble for internal Chrome pages. |
| 263 - (void)initializeContentsForInternalPage:(const GURL&)url { | 262 - (void)initializeContentsForInternalPage:(const GURL&)url { |
| 264 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); | 263 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); |
| 265 | 264 |
| 266 int text = IDS_PAGE_INFO_INTERNAL_PAGE; | 265 int text = IDS_PAGE_INFO_INTERNAL_PAGE; |
| 267 int icon = IDR_PRODUCT_LOGO_16; | 266 int icon = IDR_PRODUCT_LOGO_16; |
| 268 if (url.SchemeIs(extensions::kExtensionScheme)) { | 267 if (url.SchemeIs(extensions::kExtensionScheme)) { |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 386 [siteSettingsButton_ setTarget:self]; | 385 [siteSettingsButton_ setTarget:self]; |
| 387 [siteSettingsButton_ setAction:@selector(showSiteSettingsData:)]; | 386 [siteSettingsButton_ setAction:@selector(showSiteSettingsData:)]; |
| 388 | 387 |
| 389 return siteSettingsSectionView.get(); | 388 return siteSettingsSectionView.get(); |
| 390 } | 389 } |
| 391 | 390 |
| 392 // Handler for the link button below the list of cookies. | 391 // Handler for the link button below the list of cookies. |
| 393 - (void)showCookiesAndSiteData:(id)sender { | 392 - (void)showCookiesAndSiteData:(id)sender { |
| 394 DCHECK(webContents_); | 393 DCHECK(webContents_); |
| 395 DCHECK(presenter_); | 394 DCHECK(presenter_); |
| 396 presenter_->RecordWebsiteSettingsAction( | 395 presenter_->RecordPageInfoAction( |
| 397 WebsiteSettings::WEBSITE_SETTINGS_COOKIES_DIALOG_OPENED); | 396 PageInfo::WEBSITE_SETTINGS_COOKIES_DIALOG_OPENED); |
| 398 TabDialogs::FromWebContents(webContents_)->ShowCollectedCookies(); | 397 TabDialogs::FromWebContents(webContents_)->ShowCollectedCookies(); |
| 399 } | 398 } |
| 400 | 399 |
| 401 // Handler for the site settings button below the list of permissions. | 400 // Handler for the site settings button below the list of permissions. |
| 402 - (void)showSiteSettingsData:(id)sender { | 401 - (void)showSiteSettingsData:(id)sender { |
| 403 DCHECK(webContents_); | 402 DCHECK(webContents_); |
| 404 DCHECK(presenter_); | 403 DCHECK(presenter_); |
| 405 presenter_->RecordWebsiteSettingsAction( | 404 presenter_->RecordPageInfoAction( |
| 406 WebsiteSettings::WEBSITE_SETTINGS_SITE_SETTINGS_OPENED); | 405 PageInfo::WEBSITE_SETTINGS_SITE_SETTINGS_OPENED); |
| 407 webContents_->OpenURL(content::OpenURLParams( | 406 webContents_->OpenURL(content::OpenURLParams( |
| 408 GURL(chrome::kChromeUIContentSettingsURL), content::Referrer(), | 407 GURL(chrome::kChromeUIContentSettingsURL), content::Referrer(), |
| 409 WindowOpenDisposition::NEW_FOREGROUND_TAB, ui::PAGE_TRANSITION_LINK, | 408 WindowOpenDisposition::NEW_FOREGROUND_TAB, ui::PAGE_TRANSITION_LINK, |
| 410 false)); | 409 false)); |
| 411 } | 410 } |
| 412 | 411 |
| 413 // TODO(lgarron): Move some of this to the presenter for separation of concerns | 412 // TODO(lgarron): Move some of this to the presenter for separation of concerns |
| 414 // and platform unification. (https://crbug.com/571533) | 413 // and platform unification. (https://crbug.com/571533) |
| 415 - (void)openConnectionHelp:(id)sender { | 414 - (void)openConnectionHelp:(id)sender { |
| 416 DCHECK(webContents_); | 415 DCHECK(webContents_); |
| 417 DCHECK(presenter_); | 416 DCHECK(presenter_); |
| 418 presenter_->RecordWebsiteSettingsAction( | 417 presenter_->RecordPageInfoAction( |
| 419 WebsiteSettings::WEBSITE_SETTINGS_CONNECTION_HELP_OPENED); | 418 PageInfo::WEBSITE_SETTINGS_CONNECTION_HELP_OPENED); |
| 420 webContents_->OpenURL(content::OpenURLParams( | 419 webContents_->OpenURL(content::OpenURLParams( |
| 421 GURL(chrome::kPageInfoHelpCenterURL), content::Referrer(), | 420 GURL(chrome::kPageInfoHelpCenterURL), content::Referrer(), |
| 422 WindowOpenDisposition::NEW_FOREGROUND_TAB, ui::PAGE_TRANSITION_LINK, | 421 WindowOpenDisposition::NEW_FOREGROUND_TAB, ui::PAGE_TRANSITION_LINK, |
| 423 false)); | 422 false)); |
| 424 } | 423 } |
| 425 | 424 |
| 426 // Handler for the link button to show certificate information. | 425 // Handler for the link button to show certificate information. |
| 427 - (void)showCertificateInfo:(id)sender { | 426 - (void)showCertificateInfo:(id)sender { |
| 428 DCHECK(certificate_.get()); | 427 DCHECK(certificate_.get()); |
| 429 DCHECK(presenter_); | 428 DCHECK(presenter_); |
| 430 presenter_->RecordWebsiteSettingsAction( | 429 presenter_->RecordPageInfoAction( |
| 431 WebsiteSettings::WEBSITE_SETTINGS_CERTIFICATE_DIALOG_OPENED); | 430 PageInfo::WEBSITE_SETTINGS_CERTIFICATE_DIALOG_OPENED); |
| 432 ShowCertificateViewer(webContents_, [self parentWindow], certificate_.get()); | 431 ShowCertificateViewer(webContents_, [self parentWindow], certificate_.get()); |
| 433 } | 432 } |
| 434 | 433 |
| 435 // Handler for the link button to revoke user certificate decisions. | 434 // Handler for the link button to revoke user certificate decisions. |
| 436 - (void)resetCertificateDecisions:(id)sender { | 435 - (void)resetCertificateDecisions:(id)sender { |
| 437 DCHECK(resetDecisionsButton_); | 436 DCHECK(resetDecisionsButton_); |
| 438 presenter_->OnRevokeSSLErrorBypassButtonPressed(); | 437 presenter_->OnRevokeSSLErrorBypassButtonPressed(); |
| 439 [self close]; | 438 [self close]; |
| 440 } | 439 } |
| 441 | 440 |
| (...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 680 | 679 |
| 681 [button setFrame:buttonFrame]; | 680 [button setFrame:buttonFrame]; |
| 682 [button setButtonType:NSMomentaryPushInButton]; | 681 [button setButtonType:NSMomentaryPushInButton]; |
| 683 [button setBezelStyle:NSRegularSquareBezelStyle]; | 682 [button setBezelStyle:NSRegularSquareBezelStyle]; |
| 684 [view addSubview:button.get()]; | 683 [view addSubview:button.get()]; |
| 685 | 684 |
| 686 return button.get(); | 685 return button.get(); |
| 687 } | 686 } |
| 688 | 687 |
| 689 // Set the content of the identity and identity status fields. | 688 // Set the content of the identity and identity status fields. |
| 690 - (void)setIdentityInfo:(const WebsiteSettingsUI::IdentityInfo&)identityInfo { | 689 - (void)setIdentityInfo:(const PageInfoUI::IdentityInfo&)identityInfo { |
| 691 std::unique_ptr<WebsiteSettingsUI::SecurityDescription> security_description = | 690 std::unique_ptr<PageInfoUI::SecurityDescription> security_description = |
| 692 identityInfo.GetSecurityDescription(); | 691 identityInfo.GetSecurityDescription(); |
| 693 [securitySummaryField_ | 692 [securitySummaryField_ |
| 694 setStringValue:base::SysUTF16ToNSString(security_description->summary)]; | 693 setStringValue:base::SysUTF16ToNSString(security_description->summary)]; |
| 695 | 694 |
| 696 [securityDetailsField_ | 695 [securityDetailsField_ |
| 697 setStringValue:SysUTF16ToNSString(security_description->details)]; | 696 setStringValue:SysUTF16ToNSString(security_description->details)]; |
| 698 | 697 |
| 699 certificate_ = identityInfo.certificate; | 698 certificate_ = identityInfo.certificate; |
| 700 | 699 |
| 701 if (certificate_ && identityInfo.show_ssl_decision_revoke_button) { | 700 if (certificate_ && identityInfo.show_ssl_decision_revoke_button) { |
| (...skipping 15 matching lines...) Expand all Loading... |
| 717 toView:securitySectionView_]; | 716 toView:securitySectionView_]; |
| 718 [resetDecisionsButton_ setTarget:self]; | 717 [resetDecisionsButton_ setTarget:self]; |
| 719 [resetDecisionsButton_ setAction:@selector(resetCertificateDecisions:)]; | 718 [resetDecisionsButton_ setAction:@selector(resetCertificateDecisions:)]; |
| 720 } | 719 } |
| 721 | 720 |
| 722 [self performLayout]; | 721 [self performLayout]; |
| 723 } | 722 } |
| 724 | 723 |
| 725 // Add a pop-up button for |permissionInfo| to the given view. | 724 // Add a pop-up button for |permissionInfo| to the given view. |
| 726 - (NSPopUpButton*)addPopUpButtonForPermission: | 725 - (NSPopUpButton*)addPopUpButtonForPermission: |
| 727 (const WebsiteSettingsUI::PermissionInfo&)permissionInfo | 726 (const PageInfoUI::PermissionInfo&)permissionInfo |
| 728 toView:(NSView*)view | 727 toView:(NSView*)view |
| 729 atPoint:(NSPoint)point { | 728 atPoint:(NSPoint)point { |
| 730 GURL url = webContents_ ? webContents_->GetURL() : GURL(); | 729 GURL url = webContents_ ? webContents_->GetURL() : GURL(); |
| 731 __block WebsiteSettingsBubbleController* weakSelf = self; | 730 __block PageInfoBubbleController* weakSelf = self; |
| 732 PermissionMenuModel::ChangeCallback callback = | 731 PermissionMenuModel::ChangeCallback callback = |
| 733 base::BindBlock(^(const WebsiteSettingsUI::PermissionInfo& permission) { | 732 base::BindBlock(^(const PageInfoUI::PermissionInfo& permission) { |
| 734 [weakSelf onPermissionChanged:permission.type to:permission.setting]; | 733 [weakSelf onPermissionChanged:permission.type to:permission.setting]; |
| 735 }); | 734 }); |
| 736 base::scoped_nsobject<PermissionSelectorButton> button( | 735 base::scoped_nsobject<PermissionSelectorButton> button( |
| 737 [[PermissionSelectorButton alloc] initWithPermissionInfo:permissionInfo | 736 [[PermissionSelectorButton alloc] initWithPermissionInfo:permissionInfo |
| 738 forURL:url | 737 forURL:url |
| 739 withCallback:callback | 738 withCallback:callback |
| 740 profile:[self profile]]); | 739 profile:[self profile]]); |
| 741 | 740 |
| 742 // Determine the largest possible size for this button. | 741 // Determine the largest possible size for this button. |
| 743 CGFloat maxTitleWidth = | 742 CGFloat maxTitleWidth = |
| 744 [button maxTitleWidthForContentSettingsType:permissionInfo.type | 743 [button maxTitleWidthForContentSettingsType:permissionInfo.type |
| 745 withDefaultSetting:permissionInfo.default_setting | 744 withDefaultSetting:permissionInfo.default_setting |
| 746 profile:[self profile]]; | 745 profile:[self profile]]; |
| 747 | 746 |
| 748 // Ensure the containing view is large enough to contain the button with its | 747 // Ensure the containing view is large enough to contain the button with its |
| 749 // widest possible title. | 748 // widest possible title. |
| 750 NSRect containerFrame = [view frame]; | 749 NSRect containerFrame = [view frame]; |
| 751 containerFrame.size.width = | 750 containerFrame.size.width = |
| 752 std::max(NSWidth(containerFrame), | 751 std::max(NSWidth(containerFrame), |
| 753 point.x + maxTitleWidth + kSectionHorizontalPadding); | 752 point.x + maxTitleWidth + kSectionHorizontalPadding); |
| 754 [view setFrame:containerFrame]; | 753 [view setFrame:containerFrame]; |
| 755 [view addSubview:button.get()]; | 754 [view addSubview:button.get()]; |
| 756 return button.get(); | 755 return button.get(); |
| 757 } | 756 } |
| 758 | 757 |
| 759 // Add a delete button for |objectInfo| to the given view. | 758 // Add a delete button for |objectInfo| to the given view. |
| 760 - (NSButton*)addDeleteButtonForChosenObject:(ChosenObjectInfoPtr)objectInfo | 759 - (NSButton*)addDeleteButtonForChosenObject:(ChosenObjectInfoPtr)objectInfo |
| 761 toView:(NSView*)view | 760 toView:(NSView*)view |
| 762 atPoint:(NSPoint)point { | 761 atPoint:(NSPoint)point { |
| 763 __block WebsiteSettingsBubbleController* weakSelf = self; | 762 __block PageInfoBubbleController* weakSelf = self; |
| 764 auto callback = | 763 auto callback = |
| 765 base::BindBlock(^(const WebsiteSettingsUI::ChosenObjectInfo& objectInfo) { | 764 base::BindBlock(^(const PageInfoUI::ChosenObjectInfo& objectInfo) { |
| 766 [weakSelf onChosenObjectDeleted:objectInfo]; | 765 [weakSelf onChosenObjectDeleted:objectInfo]; |
| 767 }); | 766 }); |
| 768 base::scoped_nsobject<ChosenObjectDeleteButton> button( | 767 base::scoped_nsobject<ChosenObjectDeleteButton> button( |
| 769 [[ChosenObjectDeleteButton alloc] | 768 [[ChosenObjectDeleteButton alloc] |
| 770 initWithChosenObject:std::move(objectInfo) | 769 initWithChosenObject:std::move(objectInfo) |
| 771 atPoint:point | 770 atPoint:point |
| 772 withCallback:callback]); | 771 withCallback:callback]); |
| 773 | 772 |
| 774 // Ensure the containing view is large enough to contain the button. | 773 // Ensure the containing view is large enough to contain the button. |
| 775 NSRect containerFrame = [view frame]; | 774 NSRect containerFrame = [view frame]; |
| 776 containerFrame.size.width = | 775 containerFrame.size.width = |
| 777 std::max(NSWidth(containerFrame), point.x + kPermissionDeleteImageSize + | 776 std::max(NSWidth(containerFrame), point.x + kPermissionDeleteImageSize + |
| 778 kSectionHorizontalPadding); | 777 kSectionHorizontalPadding); |
| 779 [view setFrame:containerFrame]; | 778 [view setFrame:containerFrame]; |
| 780 [view addSubview:button.get()]; | 779 [view addSubview:button.get()]; |
| 781 return button.get(); | 780 return button.get(); |
| 782 } | 781 } |
| 783 | 782 |
| 784 // Called when the user changes the setting of a permission. | 783 // Called when the user changes the setting of a permission. |
| 785 - (void)onPermissionChanged:(ContentSettingsType)permissionType | 784 - (void)onPermissionChanged:(ContentSettingsType)permissionType |
| 786 to:(ContentSetting)newSetting { | 785 to:(ContentSetting)newSetting { |
| 787 if (presenter_) | 786 if (presenter_) |
| 788 presenter_->OnSitePermissionChanged(permissionType, newSetting); | 787 presenter_->OnSitePermissionChanged(permissionType, newSetting); |
| 789 } | 788 } |
| 790 | 789 |
| 791 // Called when the user revokes permission for a previously chosen object. | 790 // Called when the user revokes permission for a previously chosen object. |
| 792 - (void)onChosenObjectDeleted:(const WebsiteSettingsUI::ChosenObjectInfo&)info { | 791 - (void)onChosenObjectDeleted:(const PageInfoUI::ChosenObjectInfo&)info { |
| 793 if (presenter_) | 792 if (presenter_) |
| 794 presenter_->OnSiteChosenObjectDeleted(info.ui_info, *info.object); | 793 presenter_->OnSiteChosenObjectDeleted(info.ui_info, *info.object); |
| 795 } | 794 } |
| 796 | 795 |
| 797 // Adds a new row to the UI listing the permissions. Returns the NSPoint of the | 796 // Adds a new row to the UI listing the permissions. Returns the NSPoint of the |
| 798 // last UI element added (either the permission button, in LTR, or the text | 797 // last UI element added (either the permission button, in LTR, or the text |
| 799 // label, in RTL). | 798 // label, in RTL). |
| 800 - (NSPoint)addPermission: | 799 - (NSPoint)addPermission:(const PageInfoUI::PermissionInfo&)permissionInfo |
| 801 (const WebsiteSettingsUI::PermissionInfo&)permissionInfo | |
| 802 toView:(NSView*)view | 800 toView:(NSView*)view |
| 803 atPoint:(NSPoint)point { | 801 atPoint:(NSPoint)point { |
| 804 base::string16 labelText = | 802 base::string16 labelText = |
| 805 WebsiteSettingsUI::PermissionTypeToUIString(permissionInfo.type); | 803 PageInfoUI::PermissionTypeToUIString(permissionInfo.type); |
| 806 bool isRTL = base::i18n::IsRTL(); | 804 bool isRTL = base::i18n::IsRTL(); |
| 807 base::scoped_nsobject<NSImage> image( | 805 base::scoped_nsobject<NSImage> image( |
| 808 [WebsiteSettingsUI::GetPermissionIcon(permissionInfo) | 806 [PageInfoUI::GetPermissionIcon(permissionInfo).ToNSImage() retain]); |
| 809 .ToNSImage() retain]); | |
| 810 | 807 |
| 811 NSPoint position; | 808 NSPoint position; |
| 812 NSImageView* imageView; | 809 NSImageView* imageView; |
| 813 NSPopUpButton* button; | 810 NSPopUpButton* button; |
| 814 NSTextField* label; | 811 NSTextField* label; |
| 815 | 812 |
| 816 CGFloat viewWidth = NSWidth([view frame]); | 813 CGFloat viewWidth = NSWidth([view frame]); |
| 817 | 814 |
| 818 if (isRTL) { | 815 if (isRTL) { |
| 819 point.x = NSWidth([view frame]) - kPermissionImageSize - | 816 point.x = NSWidth([view frame]) - kPermissionImageSize - |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 911 } | 908 } |
| 912 | 909 |
| 913 // Adds a new row to the UI listing the permissions. Returns the NSPoint of the | 910 // Adds a new row to the UI listing the permissions. Returns the NSPoint of the |
| 914 // last UI element added (either the permission button, in LTR, or the text | 911 // last UI element added (either the permission button, in LTR, or the text |
| 915 // label, in RTL). | 912 // label, in RTL). |
| 916 - (NSPoint)addChosenObject:(ChosenObjectInfoPtr)objectInfo | 913 - (NSPoint)addChosenObject:(ChosenObjectInfoPtr)objectInfo |
| 917 toView:(NSView*)view | 914 toView:(NSView*)view |
| 918 atPoint:(NSPoint)point { | 915 atPoint:(NSPoint)point { |
| 919 base::string16 labelText = l10n_util::GetStringFUTF16( | 916 base::string16 labelText = l10n_util::GetStringFUTF16( |
| 920 objectInfo->ui_info.label_string_id, | 917 objectInfo->ui_info.label_string_id, |
| 921 WebsiteSettingsUI::ChosenObjectToUIString(*objectInfo)); | 918 PageInfoUI::ChosenObjectToUIString(*objectInfo)); |
| 922 bool isRTL = base::i18n::IsRTL(); | 919 bool isRTL = base::i18n::IsRTL(); |
| 923 base::scoped_nsobject<NSImage> image( | 920 base::scoped_nsobject<NSImage> image( |
| 924 [WebsiteSettingsUI::GetChosenObjectIcon(*objectInfo, false) | 921 [PageInfoUI::GetChosenObjectIcon(*objectInfo, false).ToNSImage() retain]); |
| 925 .ToNSImage() retain]); | |
| 926 | 922 |
| 927 NSPoint position; | 923 NSPoint position; |
| 928 NSImageView* imageView; | 924 NSImageView* imageView; |
| 929 NSButton* button; | 925 NSButton* button; |
| 930 NSTextField* label; | 926 NSTextField* label; |
| 931 | 927 |
| 932 CGFloat viewWidth = NSWidth([view frame]); | 928 CGFloat viewWidth = NSWidth([view frame]); |
| 933 | 929 |
| 934 if (isRTL) { | 930 if (isRTL) { |
| 935 point.x = NSWidth([view frame]) - kPermissionImageSize - | 931 point.x = NSWidth([view frame]) - kPermissionImageSize - |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1021 NSPoint controlOrigin = NSMakePoint(kSectionHorizontalPadding, 0); | 1017 NSPoint controlOrigin = NSMakePoint(kSectionHorizontalPadding, 0); |
| 1022 | 1018 |
| 1023 CGFloat viewWidth = NSWidth([cookiesView_ frame]); | 1019 CGFloat viewWidth = NSWidth([cookiesView_ frame]); |
| 1024 | 1020 |
| 1025 // Reset X for the cookie image. | 1021 // Reset X for the cookie image. |
| 1026 if (isRTL) { | 1022 if (isRTL) { |
| 1027 controlOrigin.x = viewWidth - kPermissionImageSize - | 1023 controlOrigin.x = viewWidth - kPermissionImageSize - |
| 1028 kPermissionImageSpacing - kSectionHorizontalPadding; | 1024 kPermissionImageSpacing - kSectionHorizontalPadding; |
| 1029 } | 1025 } |
| 1030 | 1026 |
| 1031 WebsiteSettingsUI::PermissionInfo info; | 1027 PageInfoUI::PermissionInfo info; |
| 1032 info.type = CONTENT_SETTINGS_TYPE_COOKIES; | 1028 info.type = CONTENT_SETTINGS_TYPE_COOKIES; |
| 1033 info.setting = CONTENT_SETTING_ALLOW; | 1029 info.setting = CONTENT_SETTING_ALLOW; |
| 1034 // info.default_setting, info.source, and info.is_incognito have not been set, | 1030 // info.default_setting, info.source, and info.is_incognito have not been set, |
| 1035 // but GetPermissionIcon doesn't use any of those. | 1031 // but GetPermissionIcon doesn't use any of those. |
| 1036 NSImage* image = WebsiteSettingsUI::GetPermissionIcon(info).ToNSImage(); | 1032 NSImage* image = PageInfoUI::GetPermissionIcon(info).ToNSImage(); |
| 1037 NSImageView* imageView = [self addImageWithSize:[image size] | 1033 NSImageView* imageView = [self addImageWithSize:[image size] |
| 1038 toView:cookiesView_ | 1034 toView:cookiesView_ |
| 1039 atPoint:controlOrigin]; | 1035 atPoint:controlOrigin]; |
| 1040 [imageView setImage:image]; | 1036 [imageView setImage:image]; |
| 1041 | 1037 |
| 1042 NSButton* cookiesButton = | 1038 NSButton* cookiesButton = |
| 1043 [self addLinkButtonWithText:base::SysUTF16ToNSString(label_text) | 1039 [self addLinkButtonWithText:base::SysUTF16ToNSString(label_text) |
| 1044 toView:cookiesView_]; | 1040 toView:cookiesView_]; |
| 1045 [cookiesButton setTarget:self]; | 1041 [cookiesButton setTarget:self]; |
| 1046 [cookiesButton setAction:@selector(showCookiesAndSiteData:)]; | 1042 [cookiesButton setAction:@selector(showCookiesAndSiteData:)]; |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1120 controlOrigin.y += kPermissionsVerticalSpacing; | 1116 controlOrigin.y += kPermissionsVerticalSpacing; |
| 1121 } | 1117 } |
| 1122 | 1118 |
| 1123 [permissionsView_ setFrameSize:NSMakeSize(NSWidth([permissionsView_ frame]), | 1119 [permissionsView_ setFrameSize:NSMakeSize(NSWidth([permissionsView_ frame]), |
| 1124 controlOrigin.y)]; | 1120 controlOrigin.y)]; |
| 1125 [self performLayout]; | 1121 [self performLayout]; |
| 1126 } | 1122 } |
| 1127 | 1123 |
| 1128 @end | 1124 @end |
| 1129 | 1125 |
| 1130 WebsiteSettingsUIBridge::WebsiteSettingsUIBridge( | 1126 PageInfoUIBridge::PageInfoUIBridge(content::WebContents* web_contents) |
| 1131 content::WebContents* web_contents) | |
| 1132 : content::WebContentsObserver(web_contents), | 1127 : content::WebContentsObserver(web_contents), |
| 1133 web_contents_(web_contents), | 1128 web_contents_(web_contents), |
| 1134 bubble_controller_(nil) { | 1129 bubble_controller_(nil) { |
| 1135 DCHECK(!g_is_popup_showing); | 1130 DCHECK(!g_is_popup_showing); |
| 1136 g_is_popup_showing = true; | 1131 g_is_popup_showing = true; |
| 1137 } | 1132 } |
| 1138 | 1133 |
| 1139 WebsiteSettingsUIBridge::~WebsiteSettingsUIBridge() { | 1134 PageInfoUIBridge::~PageInfoUIBridge() { |
| 1140 DCHECK(g_is_popup_showing); | 1135 DCHECK(g_is_popup_showing); |
| 1141 g_is_popup_showing = false; | 1136 g_is_popup_showing = false; |
| 1142 } | 1137 } |
| 1143 | 1138 |
| 1144 void WebsiteSettingsUIBridge::set_bubble_controller( | 1139 void PageInfoUIBridge::set_bubble_controller( |
| 1145 WebsiteSettingsBubbleController* controller) { | 1140 PageInfoBubbleController* controller) { |
| 1146 bubble_controller_ = controller; | 1141 bubble_controller_ = controller; |
| 1147 } | 1142 } |
| 1148 | 1143 |
| 1149 void WebsiteSettingsUIBridge::Show( | 1144 void PageInfoUIBridge::Show(gfx::NativeWindow parent, |
| 1150 gfx::NativeWindow parent, | 1145 Profile* profile, |
| 1151 Profile* profile, | 1146 content::WebContents* web_contents, |
| 1152 content::WebContents* web_contents, | 1147 const GURL& virtual_url, |
| 1153 const GURL& virtual_url, | 1148 const security_state::SecurityInfo& security_info) { |
| 1154 const security_state::SecurityInfo& security_info) { | |
| 1155 if (ui::MaterialDesignController::IsSecondaryUiMaterial()) { | 1149 if (ui::MaterialDesignController::IsSecondaryUiMaterial()) { |
| 1156 chrome::ShowWebsiteSettingsBubbleViewsAtPoint( | 1150 chrome::ShowWebsiteSettingsBubbleViewsAtPoint( |
| 1157 gfx::ScreenPointFromNSPoint(AnchorPointForWindow(parent)), profile, | 1151 gfx::ScreenPointFromNSPoint(AnchorPointForWindow(parent)), profile, |
| 1158 web_contents, virtual_url, security_info); | 1152 web_contents, virtual_url, security_info); |
| 1159 return; | 1153 return; |
| 1160 } | 1154 } |
| 1161 | 1155 |
| 1162 // Don't show the popup if it's already being shown. Since this method is | 1156 // Don't show the popup if it's already being shown. Since this method is |
| 1163 // called each time the location icon is clicked, each click toggles the popup | 1157 // called each time the location icon is clicked, each click toggles the popup |
| 1164 // in and out. | 1158 // in and out. |
| 1165 if (g_is_popup_showing) | 1159 if (g_is_popup_showing) |
| 1166 return; | 1160 return; |
| 1167 | 1161 |
| 1168 // Create the bridge. This will be owned by the bubble controller. | 1162 // Create the bridge. This will be owned by the bubble controller. |
| 1169 WebsiteSettingsUIBridge* bridge = new WebsiteSettingsUIBridge(web_contents); | 1163 PageInfoUIBridge* bridge = new PageInfoUIBridge(web_contents); |
| 1170 | 1164 |
| 1171 // Create the bubble controller. It will dealloc itself when it closes, | 1165 // Create the bubble controller. It will dealloc itself when it closes, |
| 1172 // resetting |g_is_popup_showing|. | 1166 // resetting |g_is_popup_showing|. |
| 1173 WebsiteSettingsBubbleController* bubble_controller = [ | 1167 PageInfoBubbleController* bubble_controller = |
| 1174 [WebsiteSettingsBubbleController alloc] initWithParentWindow:parent | 1168 [[PageInfoBubbleController alloc] initWithParentWindow:parent |
| 1175 websiteSettingsUIBridge:bridge | 1169 PageInfoUIBridge:bridge |
| 1176 webContents:web_contents | 1170 webContents:web_contents |
| 1177 url:virtual_url]; | 1171 url:virtual_url]; |
| 1178 | 1172 |
| 1179 if (!IsInternalURL(virtual_url)) { | 1173 if (!IsInternalURL(virtual_url)) { |
| 1180 // Initialize the presenter, which holds the model and controls the UI. | 1174 // Initialize the presenter, which holds the model and controls the UI. |
| 1181 // This is also owned by the bubble controller. | 1175 // This is also owned by the bubble controller. |
| 1182 WebsiteSettings* presenter = new WebsiteSettings( | 1176 PageInfo* presenter = |
| 1183 bridge, profile, | 1177 new PageInfo(bridge, profile, |
| 1184 TabSpecificContentSettings::FromWebContents(web_contents), web_contents, | 1178 TabSpecificContentSettings::FromWebContents(web_contents), |
| 1185 virtual_url, security_info); | 1179 web_contents, virtual_url, security_info); |
| 1186 [bubble_controller setPresenter:presenter]; | 1180 [bubble_controller setPresenter:presenter]; |
| 1187 } | 1181 } |
| 1188 | 1182 |
| 1189 [bubble_controller showWindow:nil]; | 1183 [bubble_controller showWindow:nil]; |
| 1190 } | 1184 } |
| 1191 | 1185 |
| 1192 void WebsiteSettingsUIBridge::SetIdentityInfo( | 1186 void PageInfoUIBridge::SetIdentityInfo( |
| 1193 const WebsiteSettingsUI::IdentityInfo& identity_info) { | 1187 const PageInfoUI::IdentityInfo& identity_info) { |
| 1194 [bubble_controller_ setIdentityInfo:identity_info]; | 1188 [bubble_controller_ setIdentityInfo:identity_info]; |
| 1195 } | 1189 } |
| 1196 | 1190 |
| 1197 void WebsiteSettingsUIBridge::RenderFrameDeleted( | 1191 void PageInfoUIBridge::RenderFrameDeleted( |
| 1198 content::RenderFrameHost* render_frame_host) { | 1192 content::RenderFrameHost* render_frame_host) { |
| 1199 if (render_frame_host == web_contents_->GetMainFrame()) { | 1193 if (render_frame_host == web_contents_->GetMainFrame()) { |
| 1200 [bubble_controller_ close]; | 1194 [bubble_controller_ close]; |
| 1201 } | 1195 } |
| 1202 } | 1196 } |
| 1203 | 1197 |
| 1204 void WebsiteSettingsUIBridge::SetCookieInfo( | 1198 void PageInfoUIBridge::SetCookieInfo(const CookieInfoList& cookie_info_list) { |
| 1205 const CookieInfoList& cookie_info_list) { | |
| 1206 [bubble_controller_ setCookieInfo:cookie_info_list]; | 1199 [bubble_controller_ setCookieInfo:cookie_info_list]; |
| 1207 } | 1200 } |
| 1208 | 1201 |
| 1209 void WebsiteSettingsUIBridge::SetPermissionInfo( | 1202 void PageInfoUIBridge::SetPermissionInfo( |
| 1210 const PermissionInfoList& permission_info_list, | 1203 const PermissionInfoList& permission_info_list, |
| 1211 ChosenObjectInfoList chosen_object_info_list) { | 1204 ChosenObjectInfoList chosen_object_info_list) { |
| 1212 [bubble_controller_ setPermissionInfo:permission_info_list | 1205 [bubble_controller_ setPermissionInfo:permission_info_list |
| 1213 andChosenObjects:std::move(chosen_object_info_list)]; | 1206 andChosenObjects:std::move(chosen_object_info_list)]; |
| 1214 } | 1207 } |
| OLD | NEW |