Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3237)

Unified Diff: chrome/browser/ui/cocoa/notifications/notification_builder_mac.mm

Issue 2799343003: Add support for native extension notifications (Closed)
Patch Set: Remove dependent CL to land standalone Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..ae04950bcfde25d0fd4fdff19c93a8b35168ce2b 100644
--- a/chrome/browser/ui/cocoa/notifications/notification_builder_mac.mm
+++ b/chrome/browser/ui/cocoa/notifications/notification_builder_mac.mm
@@ -26,6 +26,7 @@ NSString* const kNotificationTag = @"tag";
NSString* const kNotificationCloseButtonTag = @"closeButton";
NSString* const kNotificationOptionsButtonTag = @"optionsButton";
NSString* const kNotificationSettingsButtonTag = @"settingsButton";
+
} // namespace
@implementation NotificationBuilder {
@@ -122,6 +123,12 @@ NSString* const kNotificationSettingsButtonTag = @"settingsButton";
forKey:notification_constants::kNotificationType];
}
+- (void)setShowSettingsButton:(BOOL)showSettingsButton {
+ [notificationData_
+ setObject:[NSNumber numberWithBool:showSettingsButton]
+ forKey:notification_constants::kNotificationHasSettingsButton];
+}
+
- (NSUserNotification*)buildUserNotification {
base::scoped_nsobject<NSUserNotification> toast(
[[NSUserNotification alloc] init]);
@@ -142,11 +149,23 @@ NSString* const kNotificationSettingsButtonTag = @"settingsButton";
}
}
+ // Type (needed to define the buttons)
+ NSNumber* type = [notificationData_
+ objectForKey:notification_constants::kNotificationType];
Peter Beverloo 2017/04/07 16:19:05 Move back to line 219 w/o the comment now that |ty
+
+ // Extensions don't have a settings button.
Peter Beverloo 2017/04/07 16:19:05 nit: this layer doesn't care, I'd just generalize
+ NSNumber* showSettingsButton = [notificationData_
+ objectForKey:notification_constants::kNotificationHasSettingsButton];
+
// Buttons
if ([toast respondsToSelector:@selector(_showsButtons)]) {
DCHECK([notificationData_ objectForKey:kNotificationCloseButtonTag]);
DCHECK([notificationData_ objectForKey:kNotificationSettingsButtonTag]);
DCHECK([notificationData_ objectForKey:kNotificationOptionsButtonTag]);
+ DCHECK([notificationData_
+ objectForKey:notification_constants::kNotificationHasSettingsButton]);
+
+ BOOL settingsButton = [showSettingsButton boolValue];
[toast setValue:@YES forKey:@"_showsButtons"];
// A default close button label is provided by the platform but we
@@ -158,15 +177,19 @@ NSString* const kNotificationSettingsButtonTag = @"settingsButton";
// 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 (settingsButton) {
+ [toast setActionButtonTitle:
+ [notificationData_
+ objectForKey:kNotificationSettingsButtonTag]];
+ } else {
+ [toast setHasActionButton:NO];
Peter Beverloo 2017/04/07 16:19:05 Is this necessary? Surely that's the default?
+ }
+
} 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 +206,11 @@ NSString* const kNotificationSettingsButtonTag = @"settingsButton";
[buttons
addObject:[notificationData_ objectForKey:kNotificationButtonTwo]];
}
- [buttons addObject:[notificationData_
- objectForKey:kNotificationSettingsButtonTag]];
+ if (settingsButton) {
+ [buttons addObject:[notificationData_
+ objectForKey:kNotificationSettingsButtonTag]];
+ }
+
[toast setValue:buttons forKey:@"_alternateActionButtonTitles"];
}
}
@@ -216,8 +242,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,
@@ -225,6 +249,7 @@ NSString* const kNotificationSettingsButtonTag = @"settingsButton";
notification_constants::kNotificationProfileId : profileId,
notification_constants::kNotificationIncognito : incognito,
notification_constants::kNotificationType : type,
+ notification_constants::kNotificationHasSettingsButton : showSettingsButton,
};
return toast.autorelease();

Powered by Google App Engine
This is Rietveld 408576698