Chromium Code Reviews| Index: chrome/browser/ui/cocoa/notifications/notification_builder_mac.mm |
| diff --git a/chrome/browser/ui/cocoa/notifications/notification_builder_mac.mm b/chrome/browser/ui/cocoa/notifications/notification_builder_mac.mm |
| index e1c8a25813189eae6bc54a6fdd7f4aa34b0e3569..89d2738a55704acf3266dd496f28af1b1652d939 100644 |
| --- a/chrome/browser/ui/cocoa/notifications/notification_builder_mac.mm |
| +++ b/chrome/browser/ui/cocoa/notifications/notification_builder_mac.mm |
| @@ -26,6 +26,10 @@ NSString* const kNotificationTag = @"tag"; |
| NSString* const kNotificationCloseButtonTag = @"closeButton"; |
| NSString* const kNotificationOptionsButtonTag = @"optionsButton"; |
| NSString* const kNotificationSettingsButtonTag = @"settingsButton"; |
| + |
| +// From NotificationCommon#Type hard coded in order to not |
| +// pull in the enum into the XPC library. |
| +const int kExtensionType = 2; |
| } // namespace |
| @implementation NotificationBuilder { |
| @@ -142,6 +146,10 @@ NSString* const kNotificationSettingsButtonTag = @"settingsButton"; |
| } |
| } |
| + // Type (needed to define the buttons) |
| + NSNumber* type = [notificationData_ |
| + objectForKey:notification_constants::kNotificationType]; |
| + |
| // Buttons |
| if ([toast respondsToSelector:@selector(_showsButtons)]) { |
| DCHECK([notificationData_ objectForKey:kNotificationCloseButtonTag]); |
| @@ -155,18 +163,25 @@ NSString* const kNotificationSettingsButtonTag = @"settingsButton"; |
| [toast setOtherButtonTitle:[notificationData_ |
| objectForKey:kNotificationCloseButtonTag]]; |
| + // Extensions don't have a settings button. |
| + BOOL showSettingsButton = (type.unsignedIntegerValue != kExtensionType); |
|
Peter Beverloo
2017/04/07 02:26:53
Could we just give the notificationData_ dictionar
Miguel Garcia
2017/04/07 13:32:07
Yes, in fact we need to store the fact so the resp
|
| + |
| // Display the Settings button as the action button if there are either no |
| // developer-provided action buttons, or the alternate action menu is not |
| // available on this Mac version. This avoids needlessly showing the menu. |
| - // TODO(miguelg): Extensions should not have a settings button. |
| if (![notificationData_ objectForKey:kNotificationButtonOne] || |
| ![toast respondsToSelector:@selector(_alwaysShowAlternateActionMenu)]) { |
| - [toast |
| - setActionButtonTitle: |
| - [notificationData_ objectForKey:kNotificationSettingsButtonTag]]; |
| + if (showSettingsButton) { |
| + [toast setActionButtonTitle: |
| + [notificationData_ |
| + objectForKey:kNotificationSettingsButtonTag]]; |
| + } else { |
| + [toast setHasActionButton:NO]; |
| + } |
| + |
| } else { |
| // Otherwise show the alternate menu, then show the developer actions and |
| - // finally the settings one. |
| + // finally the settings one if needed. |
| DCHECK( |
| [toast respondsToSelector:@selector(_alwaysShowAlternateActionMenu)]); |
| DCHECK( |
| @@ -183,8 +198,11 @@ NSString* const kNotificationSettingsButtonTag = @"settingsButton"; |
| [buttons |
| addObject:[notificationData_ objectForKey:kNotificationButtonTwo]]; |
| } |
| - [buttons addObject:[notificationData_ |
| - objectForKey:kNotificationSettingsButtonTag]]; |
| + if (showSettingsButton) { |
| + [buttons addObject:[notificationData_ |
| + objectForKey:kNotificationSettingsButtonTag]]; |
| + } |
| + |
| [toast setValue:buttons forKey:@"_alternateActionButtonTitles"]; |
| } |
| } |
| @@ -216,8 +234,6 @@ NSString* const kNotificationSettingsButtonTag = @"settingsButton"; |
| objectForKey:notification_constants::kNotificationIncognito]); |
| NSNumber* incognito = [notificationData_ |
| objectForKey:notification_constants::kNotificationIncognito]; |
| - NSNumber* type = [notificationData_ |
| - objectForKey:notification_constants::kNotificationType]; |
| toast.get().userInfo = @{ |
| notification_constants::kNotificationOrigin : origin, |