Chromium Code Reviews| Index: chrome/browser/ui/cocoa/content_settings/content_setting_bubble_cocoa.mm |
| diff --git a/chrome/browser/ui/cocoa/content_settings/content_setting_bubble_cocoa.mm b/chrome/browser/ui/cocoa/content_settings/content_setting_bubble_cocoa.mm |
| index 65937f89a5a5e02a2628252e9bfae5efab5baa25..085764fc992955d04498e3b49d34a737c2beb8d0 100644 |
| --- a/chrome/browser/ui/cocoa/content_settings/content_setting_bubble_cocoa.mm |
| +++ b/chrome/browser/ui/cocoa/content_settings/content_setting_bubble_cocoa.mm |
| @@ -210,7 +210,7 @@ class ContentSettingBubbleWebContentsObserverBridge |
| - (void)initializeBlockedPluginsList; |
| - (void)initializeTitle; |
| - (void)initializeRadioGroup; |
| -- (void)initializePopupList; |
| +- (void)initializeItemList; |
| - (void)initializeGeoLists; |
| - (void)initializeMediaMenus; |
| - (void)initializeMIDISysExLists; |
| @@ -384,16 +384,20 @@ class ContentSettingBubbleWebContentsObserverBridge |
| } |
| - (void)initializeBlockedPluginsList { |
| - NSString* label = base::SysUTF16ToNSString( |
| - contentSettingBubbleModel_->bubble_content().plugin_names); |
| - [blockedResourcesField_ setStringValue:label]; |
| + // Hide the empty label at the top of the dialog. |
| + int delta = |
| + NSMinY([titleLabel_ frame]) - NSMinY([blockedResourcesField_ frame]); |
| + [blockedResourcesField_ removeFromSuperview]; |
| + NSRect frame = [[self window] frame]; |
| + frame.size.height -= delta; |
| + [[self window] setFrame:frame display:NO]; |
| } |
| -- (void)initializePopupList { |
| +- (void)initializeItemList { |
| // I didn't put the buttons into a NSMatrix because then they are only one |
| // entity in the key view loop. This way, one can tab through all of them. |
| - const ContentSettingBubbleModel::PopupItems& popupItems = |
| - contentSettingBubbleModel_->bubble_content().popup_items; |
| + const ContentSettingBubbleModel::ListItems& listItems = |
| + contentSettingBubbleModel_->bubble_content().list_items; |
| // Get the pre-resize frame of the radio group. Its origin is where the |
| // popup list should go. |
| @@ -403,37 +407,36 @@ class ContentSettingBubbleWebContentsObserverBridge |
| // themselves when the window is enlarged. |
| // Heading and radio box are already 1 * kLinkOuterPadding apart in the nib, |
| // so only 1 * kLinkOuterPadding more is needed. |
| - int delta = popupItems.size() * kLinkLineHeight - kLinkPadding + |
| - kLinkOuterPadding; |
| + int delta = |
| + listItems.size() * kLinkLineHeight - kLinkPadding + kLinkOuterPadding; |
| NSSize deltaSize = NSMakeSize(0, delta); |
| deltaSize = [[[self window] contentView] convertSize:deltaSize toView:nil]; |
| NSRect windowFrame = [[self window] frame]; |
| windowFrame.size.height += deltaSize.height; |
| [[self window] setFrame:windowFrame display:NO]; |
| - // Create popup list. |
| + // Create item list. |
| int topLinkY = NSMaxY(radioFrame) + delta - kLinkHeight; |
| int row = 0; |
| - for (std::vector<ContentSettingBubbleModel::PopupItem>::const_iterator |
| - it(popupItems.begin()); it != popupItems.end(); ++it, ++row) { |
| - NSImage* image = it->image.AsNSImage(); |
| - |
| - std::string title(it->title); |
| - // The popup may not have committed a load yet, in which case it won't |
| - // have a URL or title. |
| - if (title.empty()) |
| - title = l10n_util::GetStringUTF8(IDS_TAB_LOADING_TITLE); |
| - |
| - NSRect linkFrame = |
| - NSMakeRect(NSMinX(radioFrame), topLinkY - kLinkLineHeight * row, |
| - 200, kLinkHeight); |
| - NSButton* button = [self |
| - hyperlinkButtonWithFrame:linkFrame |
| - title:base::SysUTF8ToNSString(title) |
| - icon:image |
| - referenceFrame:radioFrame]; |
| - [[self bubble] addSubview:button]; |
| - popupLinks_[button] = row; |
| + for (const auto& listItem : listItems) { |
|
Bernhard Bauer
2015/03/24 14:36:53
Would you mind using the actual type instead of au
meacer
2015/03/25 19:23:12
Done.
|
| + NSImage* image = listItem.image.AsNSImage(); |
| + NSRect frame = NSMakeRect( |
| + NSMinX(radioFrame), topLinkY - kLinkLineHeight * row, 200, kLinkHeight); |
| + if (listItem.has_link) { |
| + NSButton* button = |
| + [self hyperlinkButtonWithFrame:frame |
| + title:base::SysUTF8ToNSString(listItem.title) |
| + icon:image |
| + referenceFrame:radioFrame]; |
| + [[self bubble] addSubview:button]; |
| + popupLinks_[button] = row++; |
| + } else { |
| + NSTextField* label = |
| + LabelWithFrame(base::SysUTF8ToNSString(listItem.title), frame); |
| + SetControlSize(label, NSSmallControlSize); |
| + [[self bubble] addSubview:label]; |
| + row++; |
| + } |
| } |
| } |
| @@ -531,12 +534,11 @@ class ContentSettingBubbleWebContentsObserverBridge |
| CGFloat maxMenuWidth = 0; |
| CGFloat maxMenuHeight = 0; |
| NSRect radioFrame = [allowBlockRadioGroup_ frame]; |
| - for (ContentSettingBubbleModel::MediaMenuMap::const_iterator it( |
| - media_menus.begin()); it != media_menus.end(); ++it) { |
| + for (const auto& map_entry : media_menus) { |
| // |labelFrame| will be resized later on in this function. |
| NSRect labelFrame = NSMakeRect(NSMinX(radioFrame), 0, 0, 0); |
| - NSTextField* label = |
| - LabelWithFrame(base::SysUTF8ToNSString(it->second.label), labelFrame); |
| + NSTextField* label = LabelWithFrame( |
| + base::SysUTF8ToNSString(map_entry.second.label), labelFrame); |
| SetControlSize(label, NSSmallControlSize); |
| NSCell* cell = [label cell]; |
| [cell setAlignment:NSRightTextAlignment]; |
| @@ -553,15 +555,14 @@ class ContentSettingBubbleWebContentsObserverBridge |
| // Store the |label| and |button| into MediaMenuParts struct and build |
| // the popup menu from the menu model. |
| content_setting_bubble::MediaMenuParts* menuParts = |
| - new content_setting_bubble::MediaMenuParts(it->first, label); |
| + new content_setting_bubble::MediaMenuParts(map_entry.first, label); |
| menuParts->model.reset(new ContentSettingMediaMenuModel( |
| - it->first, contentSettingBubbleModel_.get(), |
| + map_entry.first, contentSettingBubbleModel_.get(), |
| ContentSettingMediaMenuModel::MenuLabelChangedCallback())); |
| mediaMenus_[button] = menuParts; |
| - CGFloat width = BuildPopUpMenuFromModel(button, |
| - menuParts->model.get(), |
| - it->second.selected_device.name, |
| - it->second.disabled); |
| + CGFloat width = BuildPopUpMenuFromModel( |
| + button, menuParts->model.get(), map_entry.second.selected_device.name, |
| + map_entry.second.disabled); |
| maxMenuWidth = std::max(maxMenuWidth, width); |
| [[self bubble] addSubview:button |
| @@ -593,20 +594,19 @@ class ContentSettingBubbleWebContentsObserverBridge |
| // Resize and reposition the media menus layout. |
| CGFloat topMenuY = NSMinY(radioFrame) - kMediaMenuVerticalPadding; |
| maxMenuWidth = std::max(maxMenuWidth, kMinMediaMenuButtonWidth); |
| - for (content_setting_bubble::MediaMenuPartsMap::const_iterator i = |
| - mediaMenus_.begin(); i != mediaMenus_.end(); ++i) { |
| - NSRect labelFrame = [i->second->label frame]; |
| + for (const auto& map_entry : mediaMenus_) { |
| + NSRect labelFrame = [map_entry.second->label frame]; |
| // Align the label text with the button text. |
| labelFrame.origin.y = |
| topMenuY + (maxMenuHeight - labelFrame.size.height) / 2 + 1; |
| labelFrame.size.width = maxLabelWidth; |
| - [i->second->label setFrame:labelFrame]; |
| - NSRect menuFrame = [i->first frame]; |
| + [map_entry.second->label setFrame:labelFrame]; |
| + NSRect menuFrame = [map_entry.first frame]; |
| menuFrame.origin.y = topMenuY; |
| menuFrame.origin.x = NSMinX(radioFrame) + maxLabelWidth; |
| menuFrame.size.width = maxMenuWidth; |
| menuFrame.size.height = maxMenuHeight; |
| - [i->first setFrame:menuFrame]; |
| + [map_entry.first setFrame:menuFrame]; |
| topMenuY -= (maxMenuHeight + kMediaMenuElementVerticalPadding); |
| } |
| } |
| @@ -748,8 +748,9 @@ class ContentSettingBubbleWebContentsObserverBridge |
| if (allowBlockRadioGroup_) // not bound in cookie bubble xib |
| [self initializeRadioGroup]; |
| - if (type == CONTENT_SETTINGS_TYPE_POPUPS) |
| - [self initializePopupList]; |
| + if (type == CONTENT_SETTINGS_TYPE_POPUPS || |
| + type == CONTENT_SETTINGS_TYPE_PLUGINS) |
| + [self initializeItemList]; |
| if (type == CONTENT_SETTINGS_TYPE_GEOLOCATION) |
| [self initializeGeoLists]; |
| if (type == CONTENT_SETTINGS_TYPE_MEDIASTREAM) |
| @@ -769,7 +770,7 @@ class ContentSettingBubbleWebContentsObserverBridge |
| - (void)popupLinkClicked:(id)sender { |
| content_setting_bubble::PopupLinks::iterator i(popupLinks_.find(sender)); |
| DCHECK(i != popupLinks_.end()); |
| - contentSettingBubbleModel_->OnPopupClicked(i->second); |
| + contentSettingBubbleModel_->OnListItemClicked(i->second); |
| } |
| - (void)clearGeolocationForCurrentHost:(id)sender { |