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 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
106 // Internal Page Bubble -------------------------------------------------------- | 105 // Internal Page Bubble -------------------------------------------------------- |
107 | 106 |
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 page info |
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 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
304 [imageView setFrame:imageFrame]; | 303 [imageView setFrame:imageFrame]; |
305 | 304 |
306 // Adjust the contentView to fit everything. | 305 // Adjust the contentView to fit everything. |
307 CGFloat maxY = std::max(NSMaxY(imageFrame), NSMaxY(textFrame)); | 306 CGFloat maxY = std::max(NSMaxY(imageFrame), NSMaxY(textFrame)); |
308 [contentView_ setFrame:NSMakeRect(0, 0, [self defaultWindowWidth], | 307 [contentView_ setFrame:NSMakeRect(0, 0, [self defaultWindowWidth], |
309 maxY + kInternalPageFramePadding)]; | 308 maxY + kInternalPageFramePadding)]; |
310 | 309 |
311 [self sizeAndPositionWindow]; | 310 [self sizeAndPositionWindow]; |
312 } | 311 } |
313 | 312 |
314 // Create the subviews for the website settings bubble. | 313 // Create the subviews for the page info bubble. |
315 - (void)initializeContents { | 314 - (void)initializeContents { |
316 securitySectionView_ = [self addSecuritySectionToView:contentView_]; | 315 securitySectionView_ = [self addSecuritySectionToView:contentView_]; |
317 separatorAfterSecuritySection_ = [self addSeparatorToView:contentView_]; | 316 separatorAfterSecuritySection_ = [self addSeparatorToView:contentView_]; |
318 siteSettingsSectionView_ = [self addSiteSettingsSectionToView:contentView_]; | 317 siteSettingsSectionView_ = [self addSiteSettingsSectionToView:contentView_]; |
319 | 318 |
320 [self performLayout]; | 319 [self performLayout]; |
321 } | 320 } |
322 | 321 |
323 // Create and return a subview for the security section and add it to the given | 322 // Create and return a subview for the security section and add it to the given |
324 // |superview|. |superview| retains the new view. | 323 // |superview|. |superview| retains the new view. |
(...skipping 61 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(PageInfo::PAGE_INFO_COOKIES_DIALOG_OPENED); |
397 WebsiteSettings::WEBSITE_SETTINGS_COOKIES_DIALOG_OPENED); | |
398 TabDialogs::FromWebContents(webContents_)->ShowCollectedCookies(); | 396 TabDialogs::FromWebContents(webContents_)->ShowCollectedCookies(); |
399 } | 397 } |
400 | 398 |
401 // Handler for the site settings button below the list of permissions. | 399 // Handler for the site settings button below the list of permissions. |
402 - (void)showSiteSettingsData:(id)sender { | 400 - (void)showSiteSettingsData:(id)sender { |
403 DCHECK(webContents_); | 401 DCHECK(webContents_); |
404 DCHECK(presenter_); | 402 DCHECK(presenter_); |
405 presenter_->RecordWebsiteSettingsAction( | 403 presenter_->RecordPageInfoAction(PageInfo::PAGE_INFO_SITE_SETTINGS_OPENED); |
406 WebsiteSettings::WEBSITE_SETTINGS_SITE_SETTINGS_OPENED); | |
407 webContents_->OpenURL(content::OpenURLParams( | 404 webContents_->OpenURL(content::OpenURLParams( |
408 GURL(chrome::kChromeUIContentSettingsURL), content::Referrer(), | 405 GURL(chrome::kChromeUIContentSettingsURL), content::Referrer(), |
409 WindowOpenDisposition::NEW_FOREGROUND_TAB, ui::PAGE_TRANSITION_LINK, | 406 WindowOpenDisposition::NEW_FOREGROUND_TAB, ui::PAGE_TRANSITION_LINK, |
410 false)); | 407 false)); |
411 } | 408 } |
412 | 409 |
413 // TODO(lgarron): Move some of this to the presenter for separation of concerns | 410 // TODO(lgarron): Move some of this to the presenter for separation of concerns |
414 // and platform unification. (https://crbug.com/571533) | 411 // and platform unification. (https://crbug.com/571533) |
415 - (void)openConnectionHelp:(id)sender { | 412 - (void)openConnectionHelp:(id)sender { |
416 DCHECK(webContents_); | 413 DCHECK(webContents_); |
417 DCHECK(presenter_); | 414 DCHECK(presenter_); |
418 presenter_->RecordWebsiteSettingsAction( | 415 presenter_->RecordPageInfoAction(PageInfo::PAGE_INFO_CONNECTION_HELP_OPENED); |
419 WebsiteSettings::WEBSITE_SETTINGS_CONNECTION_HELP_OPENED); | |
420 webContents_->OpenURL(content::OpenURLParams( | 416 webContents_->OpenURL(content::OpenURLParams( |
421 GURL(chrome::kPageInfoHelpCenterURL), content::Referrer(), | 417 GURL(chrome::kPageInfoHelpCenterURL), content::Referrer(), |
422 WindowOpenDisposition::NEW_FOREGROUND_TAB, ui::PAGE_TRANSITION_LINK, | 418 WindowOpenDisposition::NEW_FOREGROUND_TAB, ui::PAGE_TRANSITION_LINK, |
423 false)); | 419 false)); |
424 } | 420 } |
425 | 421 |
426 // Handler for the link button to show certificate information. | 422 // Handler for the link button to show certificate information. |
427 - (void)showCertificateInfo:(id)sender { | 423 - (void)showCertificateInfo:(id)sender { |
428 DCHECK(certificate_.get()); | 424 DCHECK(certificate_.get()); |
429 DCHECK(presenter_); | 425 DCHECK(presenter_); |
430 presenter_->RecordWebsiteSettingsAction( | 426 presenter_->RecordPageInfoAction( |
431 WebsiteSettings::WEBSITE_SETTINGS_CERTIFICATE_DIALOG_OPENED); | 427 PageInfo::PAGE_INFO_CERTIFICATE_DIALOG_OPENED); |
432 ShowCertificateViewer(webContents_, [self parentWindow], certificate_.get()); | 428 ShowCertificateViewer(webContents_, [self parentWindow], certificate_.get()); |
433 } | 429 } |
434 | 430 |
435 // Handler for the link button to revoke user certificate decisions. | 431 // Handler for the link button to revoke user certificate decisions. |
436 - (void)resetCertificateDecisions:(id)sender { | 432 - (void)resetCertificateDecisions:(id)sender { |
437 DCHECK(resetDecisionsButton_); | 433 DCHECK(resetDecisionsButton_); |
438 presenter_->OnRevokeSSLErrorBypassButtonPressed(); | 434 presenter_->OnRevokeSSLErrorBypassButtonPressed(); |
439 [self close]; | 435 [self close]; |
440 } | 436 } |
441 | 437 |
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
680 | 676 |
681 [button setFrame:buttonFrame]; | 677 [button setFrame:buttonFrame]; |
682 [button setButtonType:NSMomentaryPushInButton]; | 678 [button setButtonType:NSMomentaryPushInButton]; |
683 [button setBezelStyle:NSRegularSquareBezelStyle]; | 679 [button setBezelStyle:NSRegularSquareBezelStyle]; |
684 [view addSubview:button.get()]; | 680 [view addSubview:button.get()]; |
685 | 681 |
686 return button.get(); | 682 return button.get(); |
687 } | 683 } |
688 | 684 |
689 // Set the content of the identity and identity status fields. | 685 // Set the content of the identity and identity status fields. |
690 - (void)setIdentityInfo:(const WebsiteSettingsUI::IdentityInfo&)identityInfo { | 686 - (void)setIdentityInfo:(const PageInfoUI::IdentityInfo&)identityInfo { |
691 std::unique_ptr<WebsiteSettingsUI::SecurityDescription> security_description = | 687 std::unique_ptr<PageInfoUI::SecurityDescription> security_description = |
692 identityInfo.GetSecurityDescription(); | 688 identityInfo.GetSecurityDescription(); |
693 [securitySummaryField_ | 689 [securitySummaryField_ |
694 setStringValue:base::SysUTF16ToNSString(security_description->summary)]; | 690 setStringValue:base::SysUTF16ToNSString(security_description->summary)]; |
695 | 691 |
696 [securityDetailsField_ | 692 [securityDetailsField_ |
697 setStringValue:SysUTF16ToNSString(security_description->details)]; | 693 setStringValue:SysUTF16ToNSString(security_description->details)]; |
698 | 694 |
699 certificate_ = identityInfo.certificate; | 695 certificate_ = identityInfo.certificate; |
700 | 696 |
701 if (certificate_ && identityInfo.show_ssl_decision_revoke_button) { | 697 if (certificate_ && identityInfo.show_ssl_decision_revoke_button) { |
(...skipping 15 matching lines...) Expand all Loading... |
717 toView:securitySectionView_]; | 713 toView:securitySectionView_]; |
718 [resetDecisionsButton_ setTarget:self]; | 714 [resetDecisionsButton_ setTarget:self]; |
719 [resetDecisionsButton_ setAction:@selector(resetCertificateDecisions:)]; | 715 [resetDecisionsButton_ setAction:@selector(resetCertificateDecisions:)]; |
720 } | 716 } |
721 | 717 |
722 [self performLayout]; | 718 [self performLayout]; |
723 } | 719 } |
724 | 720 |
725 // Add a pop-up button for |permissionInfo| to the given view. | 721 // Add a pop-up button for |permissionInfo| to the given view. |
726 - (NSPopUpButton*)addPopUpButtonForPermission: | 722 - (NSPopUpButton*)addPopUpButtonForPermission: |
727 (const WebsiteSettingsUI::PermissionInfo&)permissionInfo | 723 (const PageInfoUI::PermissionInfo&)permissionInfo |
728 toView:(NSView*)view | 724 toView:(NSView*)view |
729 atPoint:(NSPoint)point { | 725 atPoint:(NSPoint)point { |
730 GURL url = webContents_ ? webContents_->GetURL() : GURL(); | 726 GURL url = webContents_ ? webContents_->GetURL() : GURL(); |
731 __block WebsiteSettingsBubbleController* weakSelf = self; | 727 __block PageInfoBubbleController* weakSelf = self; |
732 PermissionMenuModel::ChangeCallback callback = | 728 PermissionMenuModel::ChangeCallback callback = |
733 base::BindBlock(^(const WebsiteSettingsUI::PermissionInfo& permission) { | 729 base::BindBlock(^(const PageInfoUI::PermissionInfo& permission) { |
734 [weakSelf onPermissionChanged:permission.type to:permission.setting]; | 730 [weakSelf onPermissionChanged:permission.type to:permission.setting]; |
735 }); | 731 }); |
736 base::scoped_nsobject<PermissionSelectorButton> button( | 732 base::scoped_nsobject<PermissionSelectorButton> button( |
737 [[PermissionSelectorButton alloc] initWithPermissionInfo:permissionInfo | 733 [[PermissionSelectorButton alloc] initWithPermissionInfo:permissionInfo |
738 forURL:url | 734 forURL:url |
739 withCallback:callback | 735 withCallback:callback |
740 profile:[self profile]]); | 736 profile:[self profile]]); |
741 | 737 |
742 // Determine the largest possible size for this button. | 738 // Determine the largest possible size for this button. |
743 CGFloat maxTitleWidth = | 739 CGFloat maxTitleWidth = |
744 [button maxTitleWidthForContentSettingsType:permissionInfo.type | 740 [button maxTitleWidthForContentSettingsType:permissionInfo.type |
745 withDefaultSetting:permissionInfo.default_setting | 741 withDefaultSetting:permissionInfo.default_setting |
746 profile:[self profile]]; | 742 profile:[self profile]]; |
747 | 743 |
748 // Ensure the containing view is large enough to contain the button with its | 744 // Ensure the containing view is large enough to contain the button with its |
749 // widest possible title. | 745 // widest possible title. |
750 NSRect containerFrame = [view frame]; | 746 NSRect containerFrame = [view frame]; |
751 containerFrame.size.width = | 747 containerFrame.size.width = |
752 std::max(NSWidth(containerFrame), | 748 std::max(NSWidth(containerFrame), |
753 point.x + maxTitleWidth + kSectionHorizontalPadding); | 749 point.x + maxTitleWidth + kSectionHorizontalPadding); |
754 [view setFrame:containerFrame]; | 750 [view setFrame:containerFrame]; |
755 [view addSubview:button.get()]; | 751 [view addSubview:button.get()]; |
756 return button.get(); | 752 return button.get(); |
757 } | 753 } |
758 | 754 |
759 // Add a delete button for |objectInfo| to the given view. | 755 // Add a delete button for |objectInfo| to the given view. |
760 - (NSButton*)addDeleteButtonForChosenObject:(ChosenObjectInfoPtr)objectInfo | 756 - (NSButton*)addDeleteButtonForChosenObject:(ChosenObjectInfoPtr)objectInfo |
761 toView:(NSView*)view | 757 toView:(NSView*)view |
762 atPoint:(NSPoint)point { | 758 atPoint:(NSPoint)point { |
763 __block WebsiteSettingsBubbleController* weakSelf = self; | 759 __block PageInfoBubbleController* weakSelf = self; |
764 auto callback = | 760 auto callback = |
765 base::BindBlock(^(const WebsiteSettingsUI::ChosenObjectInfo& objectInfo) { | 761 base::BindBlock(^(const PageInfoUI::ChosenObjectInfo& objectInfo) { |
766 [weakSelf onChosenObjectDeleted:objectInfo]; | 762 [weakSelf onChosenObjectDeleted:objectInfo]; |
767 }); | 763 }); |
768 base::scoped_nsobject<ChosenObjectDeleteButton> button( | 764 base::scoped_nsobject<ChosenObjectDeleteButton> button( |
769 [[ChosenObjectDeleteButton alloc] | 765 [[ChosenObjectDeleteButton alloc] |
770 initWithChosenObject:std::move(objectInfo) | 766 initWithChosenObject:std::move(objectInfo) |
771 atPoint:point | 767 atPoint:point |
772 withCallback:callback]); | 768 withCallback:callback]); |
773 | 769 |
774 // Ensure the containing view is large enough to contain the button. | 770 // Ensure the containing view is large enough to contain the button. |
775 NSRect containerFrame = [view frame]; | 771 NSRect containerFrame = [view frame]; |
776 containerFrame.size.width = | 772 containerFrame.size.width = |
777 std::max(NSWidth(containerFrame), point.x + kPermissionDeleteImageSize + | 773 std::max(NSWidth(containerFrame), point.x + kPermissionDeleteImageSize + |
778 kSectionHorizontalPadding); | 774 kSectionHorizontalPadding); |
779 [view setFrame:containerFrame]; | 775 [view setFrame:containerFrame]; |
780 [view addSubview:button.get()]; | 776 [view addSubview:button.get()]; |
781 return button.get(); | 777 return button.get(); |
782 } | 778 } |
783 | 779 |
784 // Called when the user changes the setting of a permission. | 780 // Called when the user changes the setting of a permission. |
785 - (void)onPermissionChanged:(ContentSettingsType)permissionType | 781 - (void)onPermissionChanged:(ContentSettingsType)permissionType |
786 to:(ContentSetting)newSetting { | 782 to:(ContentSetting)newSetting { |
787 if (presenter_) | 783 if (presenter_) |
788 presenter_->OnSitePermissionChanged(permissionType, newSetting); | 784 presenter_->OnSitePermissionChanged(permissionType, newSetting); |
789 } | 785 } |
790 | 786 |
791 // Called when the user revokes permission for a previously chosen object. | 787 // Called when the user revokes permission for a previously chosen object. |
792 - (void)onChosenObjectDeleted:(const WebsiteSettingsUI::ChosenObjectInfo&)info { | 788 - (void)onChosenObjectDeleted:(const PageInfoUI::ChosenObjectInfo&)info { |
793 if (presenter_) | 789 if (presenter_) |
794 presenter_->OnSiteChosenObjectDeleted(info.ui_info, *info.object); | 790 presenter_->OnSiteChosenObjectDeleted(info.ui_info, *info.object); |
795 } | 791 } |
796 | 792 |
797 // Adds a new row to the UI listing the permissions. Returns the NSPoint of the | 793 // 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 | 794 // last UI element added (either the permission button, in LTR, or the text |
799 // label, in RTL). | 795 // label, in RTL). |
800 - (NSPoint)addPermission: | 796 - (NSPoint)addPermission:(const PageInfoUI::PermissionInfo&)permissionInfo |
801 (const WebsiteSettingsUI::PermissionInfo&)permissionInfo | |
802 toView:(NSView*)view | 797 toView:(NSView*)view |
803 atPoint:(NSPoint)point { | 798 atPoint:(NSPoint)point { |
804 base::string16 labelText = | 799 base::string16 labelText = |
805 WebsiteSettingsUI::PermissionTypeToUIString(permissionInfo.type); | 800 PageInfoUI::PermissionTypeToUIString(permissionInfo.type); |
806 bool isRTL = base::i18n::IsRTL(); | 801 bool isRTL = base::i18n::IsRTL(); |
807 base::scoped_nsobject<NSImage> image( | 802 base::scoped_nsobject<NSImage> image( |
808 [WebsiteSettingsUI::GetPermissionIcon(permissionInfo) | 803 [PageInfoUI::GetPermissionIcon(permissionInfo).ToNSImage() retain]); |
809 .ToNSImage() retain]); | |
810 | 804 |
811 NSPoint position; | 805 NSPoint position; |
812 NSImageView* imageView; | 806 NSImageView* imageView; |
813 NSPopUpButton* button; | 807 NSPopUpButton* button; |
814 NSTextField* label; | 808 NSTextField* label; |
815 | 809 |
816 CGFloat viewWidth = NSWidth([view frame]); | 810 CGFloat viewWidth = NSWidth([view frame]); |
817 | 811 |
818 if (isRTL) { | 812 if (isRTL) { |
819 point.x = NSWidth([view frame]) - kPermissionImageSize - | 813 point.x = NSWidth([view frame]) - kPermissionImageSize - |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
911 } | 905 } |
912 | 906 |
913 // Adds a new row to the UI listing the permissions. Returns the NSPoint of the | 907 // 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 | 908 // last UI element added (either the permission button, in LTR, or the text |
915 // label, in RTL). | 909 // label, in RTL). |
916 - (NSPoint)addChosenObject:(ChosenObjectInfoPtr)objectInfo | 910 - (NSPoint)addChosenObject:(ChosenObjectInfoPtr)objectInfo |
917 toView:(NSView*)view | 911 toView:(NSView*)view |
918 atPoint:(NSPoint)point { | 912 atPoint:(NSPoint)point { |
919 base::string16 labelText = l10n_util::GetStringFUTF16( | 913 base::string16 labelText = l10n_util::GetStringFUTF16( |
920 objectInfo->ui_info.label_string_id, | 914 objectInfo->ui_info.label_string_id, |
921 WebsiteSettingsUI::ChosenObjectToUIString(*objectInfo)); | 915 PageInfoUI::ChosenObjectToUIString(*objectInfo)); |
922 bool isRTL = base::i18n::IsRTL(); | 916 bool isRTL = base::i18n::IsRTL(); |
923 base::scoped_nsobject<NSImage> image( | 917 base::scoped_nsobject<NSImage> image( |
924 [WebsiteSettingsUI::GetChosenObjectIcon(*objectInfo, false) | 918 [PageInfoUI::GetChosenObjectIcon(*objectInfo, false).ToNSImage() retain]); |
925 .ToNSImage() retain]); | |
926 | 919 |
927 NSPoint position; | 920 NSPoint position; |
928 NSImageView* imageView; | 921 NSImageView* imageView; |
929 NSButton* button; | 922 NSButton* button; |
930 NSTextField* label; | 923 NSTextField* label; |
931 | 924 |
932 CGFloat viewWidth = NSWidth([view frame]); | 925 CGFloat viewWidth = NSWidth([view frame]); |
933 | 926 |
934 if (isRTL) { | 927 if (isRTL) { |
935 point.x = NSWidth([view frame]) - kPermissionImageSize - | 928 point.x = NSWidth([view frame]) - kPermissionImageSize - |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1003 // incorrect to check they are set before the cookie info. | 996 // incorrect to check they are set before the cookie info. |
1004 | 997 |
1005 // |cookieInfoList| should only ever have 2 items: first- and third-party | 998 // |cookieInfoList| should only ever have 2 items: first- and third-party |
1006 // cookies. | 999 // cookies. |
1007 DCHECK_EQ(cookieInfoList.size(), 2u); | 1000 DCHECK_EQ(cookieInfoList.size(), 2u); |
1008 | 1001 |
1009 int totalAllowed = 0; | 1002 int totalAllowed = 0; |
1010 for (const auto& i : cookieInfoList) { | 1003 for (const auto& i : cookieInfoList) { |
1011 totalAllowed += i.allowed; | 1004 totalAllowed += i.allowed; |
1012 } | 1005 } |
1013 base::string16 label_text = l10n_util::GetPluralStringFUTF16( | 1006 base::string16 label_text = |
1014 IDS_WEBSITE_SETTINGS_NUM_COOKIES, totalAllowed); | 1007 l10n_util::GetPluralStringFUTF16(IDS_PAGE_INFO_NUM_COOKIES, totalAllowed); |
1015 | 1008 |
1016 base::string16 sectionTitle = | 1009 base::string16 sectionTitle = |
1017 l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_TITLE_SITE_DATA); | 1010 l10n_util::GetStringUTF16(IDS_PAGE_INFO_TITLE_SITE_DATA); |
1018 bool isRTL = base::i18n::IsRTL(); | 1011 bool isRTL = base::i18n::IsRTL(); |
1019 | 1012 |
1020 [cookiesView_ setSubviews:[NSArray array]]; | 1013 [cookiesView_ setSubviews:[NSArray array]]; |
1021 NSPoint controlOrigin = NSMakePoint(kSectionHorizontalPadding, 0); | 1014 NSPoint controlOrigin = NSMakePoint(kSectionHorizontalPadding, 0); |
1022 | 1015 |
1023 CGFloat viewWidth = NSWidth([cookiesView_ frame]); | 1016 CGFloat viewWidth = NSWidth([cookiesView_ frame]); |
1024 | 1017 |
1025 // Reset X for the cookie image. | 1018 // Reset X for the cookie image. |
1026 if (isRTL) { | 1019 if (isRTL) { |
1027 controlOrigin.x = viewWidth - kPermissionImageSize - | 1020 controlOrigin.x = viewWidth - kPermissionImageSize - |
1028 kPermissionImageSpacing - kSectionHorizontalPadding; | 1021 kPermissionImageSpacing - kSectionHorizontalPadding; |
1029 } | 1022 } |
1030 | 1023 |
1031 WebsiteSettingsUI::PermissionInfo info; | 1024 PageInfoUI::PermissionInfo info; |
1032 info.type = CONTENT_SETTINGS_TYPE_COOKIES; | 1025 info.type = CONTENT_SETTINGS_TYPE_COOKIES; |
1033 info.setting = CONTENT_SETTING_ALLOW; | 1026 info.setting = CONTENT_SETTING_ALLOW; |
1034 // info.default_setting, info.source, and info.is_incognito have not been set, | 1027 // info.default_setting, info.source, and info.is_incognito have not been set, |
1035 // but GetPermissionIcon doesn't use any of those. | 1028 // but GetPermissionIcon doesn't use any of those. |
1036 NSImage* image = WebsiteSettingsUI::GetPermissionIcon(info).ToNSImage(); | 1029 NSImage* image = PageInfoUI::GetPermissionIcon(info).ToNSImage(); |
1037 NSImageView* imageView = [self addImageWithSize:[image size] | 1030 NSImageView* imageView = [self addImageWithSize:[image size] |
1038 toView:cookiesView_ | 1031 toView:cookiesView_ |
1039 atPoint:controlOrigin]; | 1032 atPoint:controlOrigin]; |
1040 [imageView setImage:image]; | 1033 [imageView setImage:image]; |
1041 | 1034 |
1042 NSButton* cookiesButton = | 1035 NSButton* cookiesButton = |
1043 [self addLinkButtonWithText:base::SysUTF16ToNSString(label_text) | 1036 [self addLinkButtonWithText:base::SysUTF16ToNSString(label_text) |
1044 toView:cookiesView_]; | 1037 toView:cookiesView_]; |
1045 [cookiesButton setTarget:self]; | 1038 [cookiesButton setTarget:self]; |
1046 [cookiesButton setAction:@selector(showCookiesAndSiteData:)]; | 1039 [cookiesButton setAction:@selector(showCookiesAndSiteData:)]; |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1092 | 1085 |
1093 - (void)setPermissionInfo:(const PermissionInfoList&)permissionInfoList | 1086 - (void)setPermissionInfo:(const PermissionInfoList&)permissionInfoList |
1094 andChosenObjects:(ChosenObjectInfoList)chosenObjectInfoList { | 1087 andChosenObjects:(ChosenObjectInfoList)chosenObjectInfoList { |
1095 [permissionsView_ setSubviews:[NSArray array]]; | 1088 [permissionsView_ setSubviews:[NSArray array]]; |
1096 NSPoint controlOrigin = NSMakePoint(kSectionHorizontalPadding, 0); | 1089 NSPoint controlOrigin = NSMakePoint(kSectionHorizontalPadding, 0); |
1097 | 1090 |
1098 permissionsPresent_ = YES; | 1091 permissionsPresent_ = YES; |
1099 | 1092 |
1100 if (permissionInfoList.size() > 0 || chosenObjectInfoList.size() > 0) { | 1093 if (permissionInfoList.size() > 0 || chosenObjectInfoList.size() > 0) { |
1101 base::string16 sectionTitle = | 1094 base::string16 sectionTitle = |
1102 l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_TITLE_SITE_PERMISSIONS); | 1095 l10n_util::GetStringUTF16(IDS_PAGE_INFO_TITLE_SITE_PERMISSIONS); |
1103 | 1096 |
1104 for (const auto& permission : permissionInfoList) { | 1097 for (const auto& permission : permissionInfoList) { |
1105 controlOrigin.y += kPermissionsVerticalSpacing; | 1098 controlOrigin.y += kPermissionsVerticalSpacing; |
1106 NSPoint rowBottomRight = [self addPermission:permission | 1099 NSPoint rowBottomRight = [self addPermission:permission |
1107 toView:permissionsView_ | 1100 toView:permissionsView_ |
1108 atPoint:controlOrigin]; | 1101 atPoint:controlOrigin]; |
1109 controlOrigin.y = rowBottomRight.y; | 1102 controlOrigin.y = rowBottomRight.y; |
1110 } | 1103 } |
1111 | 1104 |
1112 for (auto& object : chosenObjectInfoList) { | 1105 for (auto& object : chosenObjectInfoList) { |
1113 controlOrigin.y += kPermissionsVerticalSpacing; | 1106 controlOrigin.y += kPermissionsVerticalSpacing; |
1114 NSPoint rowBottomRight = [self addChosenObject:std::move(object) | 1107 NSPoint rowBottomRight = [self addChosenObject:std::move(object) |
1115 toView:permissionsView_ | 1108 toView:permissionsView_ |
1116 atPoint:controlOrigin]; | 1109 atPoint:controlOrigin]; |
1117 controlOrigin.y = rowBottomRight.y; | 1110 controlOrigin.y = rowBottomRight.y; |
1118 } | 1111 } |
1119 | 1112 |
1120 controlOrigin.y += kPermissionsVerticalSpacing; | 1113 controlOrigin.y += kPermissionsVerticalSpacing; |
1121 } | 1114 } |
1122 | 1115 |
1123 [permissionsView_ setFrameSize:NSMakeSize(NSWidth([permissionsView_ frame]), | 1116 [permissionsView_ setFrameSize:NSMakeSize(NSWidth([permissionsView_ frame]), |
1124 controlOrigin.y)]; | 1117 controlOrigin.y)]; |
1125 [self performLayout]; | 1118 [self performLayout]; |
1126 } | 1119 } |
1127 | 1120 |
1128 @end | 1121 @end |
1129 | 1122 |
1130 WebsiteSettingsUIBridge::WebsiteSettingsUIBridge( | 1123 PageInfoUIBridge::PageInfoUIBridge(content::WebContents* web_contents) |
1131 content::WebContents* web_contents) | |
1132 : content::WebContentsObserver(web_contents), | 1124 : content::WebContentsObserver(web_contents), |
1133 web_contents_(web_contents), | 1125 web_contents_(web_contents), |
1134 bubble_controller_(nil) { | 1126 bubble_controller_(nil) { |
1135 DCHECK(!g_is_popup_showing); | 1127 DCHECK(!g_is_popup_showing); |
1136 g_is_popup_showing = true; | 1128 g_is_popup_showing = true; |
1137 } | 1129 } |
1138 | 1130 |
1139 WebsiteSettingsUIBridge::~WebsiteSettingsUIBridge() { | 1131 PageInfoUIBridge::~PageInfoUIBridge() { |
1140 DCHECK(g_is_popup_showing); | 1132 DCHECK(g_is_popup_showing); |
1141 g_is_popup_showing = false; | 1133 g_is_popup_showing = false; |
1142 } | 1134 } |
1143 | 1135 |
1144 void WebsiteSettingsUIBridge::set_bubble_controller( | 1136 void PageInfoUIBridge::set_bubble_controller( |
1145 WebsiteSettingsBubbleController* controller) { | 1137 PageInfoBubbleController* controller) { |
1146 bubble_controller_ = controller; | 1138 bubble_controller_ = controller; |
1147 } | 1139 } |
1148 | 1140 |
1149 void WebsiteSettingsUIBridge::Show( | 1141 void PageInfoUIBridge::Show(gfx::NativeWindow parent, |
1150 gfx::NativeWindow parent, | 1142 Profile* profile, |
1151 Profile* profile, | 1143 content::WebContents* web_contents, |
1152 content::WebContents* web_contents, | 1144 const GURL& virtual_url, |
1153 const GURL& virtual_url, | 1145 const security_state::SecurityInfo& security_info) { |
1154 const security_state::SecurityInfo& security_info) { | |
1155 if (ui::MaterialDesignController::IsSecondaryUiMaterial()) { | 1146 if (ui::MaterialDesignController::IsSecondaryUiMaterial()) { |
1156 chrome::ShowWebsiteSettingsBubbleViewsAtPoint( | 1147 chrome::ShowPageInfoBubbleViewsAtPoint( |
1157 gfx::ScreenPointFromNSPoint(AnchorPointForWindow(parent)), profile, | 1148 gfx::ScreenPointFromNSPoint(AnchorPointForWindow(parent)), profile, |
1158 web_contents, virtual_url, security_info); | 1149 web_contents, virtual_url, security_info); |
1159 return; | 1150 return; |
1160 } | 1151 } |
1161 | 1152 |
1162 // Don't show the popup if it's already being shown. Since this method is | 1153 // 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 | 1154 // called each time the location icon is clicked, each click toggles the popup |
1164 // in and out. | 1155 // in and out. |
1165 if (g_is_popup_showing) | 1156 if (g_is_popup_showing) |
1166 return; | 1157 return; |
1167 | 1158 |
1168 // Create the bridge. This will be owned by the bubble controller. | 1159 // Create the bridge. This will be owned by the bubble controller. |
1169 WebsiteSettingsUIBridge* bridge = new WebsiteSettingsUIBridge(web_contents); | 1160 PageInfoUIBridge* bridge = new PageInfoUIBridge(web_contents); |
1170 | 1161 |
1171 // Create the bubble controller. It will dealloc itself when it closes, | 1162 // Create the bubble controller. It will dealloc itself when it closes, |
1172 // resetting |g_is_popup_showing|. | 1163 // resetting |g_is_popup_showing|. |
1173 WebsiteSettingsBubbleController* bubble_controller = [ | 1164 PageInfoBubbleController* bubble_controller = |
1174 [WebsiteSettingsBubbleController alloc] initWithParentWindow:parent | 1165 [[PageInfoBubbleController alloc] initWithParentWindow:parent |
1175 websiteSettingsUIBridge:bridge | 1166 pageInfoUIBridge:bridge |
1176 webContents:web_contents | 1167 webContents:web_contents |
1177 url:virtual_url]; | 1168 url:virtual_url]; |
1178 | 1169 |
1179 if (!IsInternalURL(virtual_url)) { | 1170 if (!IsInternalURL(virtual_url)) { |
1180 // Initialize the presenter, which holds the model and controls the UI. | 1171 // Initialize the presenter, which holds the model and controls the UI. |
1181 // This is also owned by the bubble controller. | 1172 // This is also owned by the bubble controller. |
1182 WebsiteSettings* presenter = new WebsiteSettings( | 1173 PageInfo* presenter = |
1183 bridge, profile, | 1174 new PageInfo(bridge, profile, |
1184 TabSpecificContentSettings::FromWebContents(web_contents), web_contents, | 1175 TabSpecificContentSettings::FromWebContents(web_contents), |
1185 virtual_url, security_info); | 1176 web_contents, virtual_url, security_info); |
1186 [bubble_controller setPresenter:presenter]; | 1177 [bubble_controller setPresenter:presenter]; |
1187 } | 1178 } |
1188 | 1179 |
1189 [bubble_controller showWindow:nil]; | 1180 [bubble_controller showWindow:nil]; |
1190 } | 1181 } |
1191 | 1182 |
1192 void WebsiteSettingsUIBridge::SetIdentityInfo( | 1183 void PageInfoUIBridge::SetIdentityInfo( |
1193 const WebsiteSettingsUI::IdentityInfo& identity_info) { | 1184 const PageInfoUI::IdentityInfo& identity_info) { |
1194 [bubble_controller_ setIdentityInfo:identity_info]; | 1185 [bubble_controller_ setIdentityInfo:identity_info]; |
1195 } | 1186 } |
1196 | 1187 |
1197 void WebsiteSettingsUIBridge::RenderFrameDeleted( | 1188 void PageInfoUIBridge::RenderFrameDeleted( |
1198 content::RenderFrameHost* render_frame_host) { | 1189 content::RenderFrameHost* render_frame_host) { |
1199 if (render_frame_host == web_contents_->GetMainFrame()) { | 1190 if (render_frame_host == web_contents_->GetMainFrame()) { |
1200 [bubble_controller_ close]; | 1191 [bubble_controller_ close]; |
1201 } | 1192 } |
1202 } | 1193 } |
1203 | 1194 |
1204 void WebsiteSettingsUIBridge::SetCookieInfo( | 1195 void PageInfoUIBridge::SetCookieInfo(const CookieInfoList& cookie_info_list) { |
1205 const CookieInfoList& cookie_info_list) { | |
1206 [bubble_controller_ setCookieInfo:cookie_info_list]; | 1196 [bubble_controller_ setCookieInfo:cookie_info_list]; |
1207 } | 1197 } |
1208 | 1198 |
1209 void WebsiteSettingsUIBridge::SetPermissionInfo( | 1199 void PageInfoUIBridge::SetPermissionInfo( |
1210 const PermissionInfoList& permission_info_list, | 1200 const PermissionInfoList& permission_info_list, |
1211 ChosenObjectInfoList chosen_object_info_list) { | 1201 ChosenObjectInfoList chosen_object_info_list) { |
1212 [bubble_controller_ setPermissionInfo:permission_info_list | 1202 [bubble_controller_ setPermissionInfo:permission_info_list |
1213 andChosenObjects:std::move(chosen_object_info_list)]; | 1203 andChosenObjects:std::move(chosen_object_info_list)]; |
1214 } | 1204 } |
OLD | NEW |