| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 #include "chrome/browser/notifications/notification_builder_mac.h" | 5 #import "chrome/browser/ui/cocoa/notifications/notification_builder_mac.h" |
| 6 | 6 |
| 7 #import <AppKit/AppKit.h> | 7 #import <AppKit/AppKit.h> |
| 8 | 8 |
| 9 #include "base/mac/mac_util.h" | 9 #include "base/mac/mac_util.h" |
| 10 #include "base/mac/scoped_nsobject.h" | 10 #include "base/mac/scoped_nsobject.h" |
| 11 #include "chrome/grit/generated_resources.h" | 11 #include "chrome/grit/generated_resources.h" |
| 12 #include "ui/base/l10n/l10n_util_mac.h" | 12 #include "ui/base/l10n/l10n_util_mac.h" |
| 13 | 13 |
| 14 namespace { | 14 namespace { |
| 15 | 15 |
| 16 // Internal builder constants representing the different notification fields | 16 // Internal builder constants representing the different notification fields |
| 17 // They don't need to be exposed outside the builder. | 17 // They don't need to be exposed outside the builder. |
| 18 | 18 |
| 19 NSString* const kNotificationTitle = @"title"; | 19 NSString* const kNotificationTitle = @"title"; |
| 20 NSString* const kNotificationSubTitle = @"subtitle"; | 20 NSString* const kNotificationSubTitle = @"subtitle"; |
| 21 NSString* const kNotificationInformativeText = @"informativeText"; | 21 NSString* const kNotificationInformativeText = @"informativeText"; |
| 22 NSString* const kNotificationImage = @"icon"; | 22 NSString* const kNotificationImage = @"icon"; |
| 23 NSString* const kNotificationButtonOne = @"buttonOne"; | 23 NSString* const kNotificationButtonOne = @"buttonOne"; |
| 24 NSString* const kNotificationButtonTwo = @"buttonTwo"; | 24 NSString* const kNotificationButtonTwo = @"buttonTwo"; |
| 25 NSString* const kNotificationTag = @"tag"; | 25 NSString* const kNotificationTag = @"tag"; |
| 26 | 26 NSString* const kNotificationCloseButtonTag = @"closeButton"; |
| 27 NSString* const kNotificationOptionsButtonTag = @"optionsButton"; |
| 28 NSString* const kNotificationSettingsButtonTag = @"settingsButton"; |
| 27 } // namespace | 29 } // namespace |
| 28 | 30 |
| 29 namespace notification_builder { | 31 namespace notification_builder { |
| 30 | 32 |
| 31 // Exposed constants to include user related data in the notification. | 33 // Exposed constants to include user related data in the notification. |
| 32 NSString* const kNotificationOrigin = @"notificationOrigin"; | 34 NSString* const kNotificationOrigin = @"notificationOrigin"; |
| 33 NSString* const kNotificationId = @"notificationId"; | 35 NSString* const kNotificationId = @"notificationId"; |
| 34 NSString* const kNotificationProfileId = @"notificationProfileId"; | 36 NSString* const kNotificationProfileId = @"notificationProfileId"; |
| 35 NSString* const kNotificationIncognito = @"notificationIncognito"; | 37 NSString* const kNotificationIncognito = @"notificationIncognito"; |
| 36 | 38 |
| 37 } // namespace notification_builder | 39 } // namespace notification_builder |
| 38 | 40 |
| 39 @implementation NotificationBuilder { | 41 @implementation NotificationBuilder { |
| 40 base::scoped_nsobject<NSMutableDictionary> notificationData_; | 42 base::scoped_nsobject<NSMutableDictionary> notificationData_; |
| 41 } | 43 } |
| 42 | 44 |
| 43 - (instancetype)init { | 45 - (instancetype)init { |
| 44 if ((self = [super init])) { | 46 if ((self = [super init])) { |
| 45 notificationData_.reset([[NSMutableDictionary alloc] init]); | 47 notificationData_.reset([[NSMutableDictionary alloc] init]); |
| 48 [notificationData_ |
| 49 setObject:l10n_util::GetNSString(IDS_NOTIFICATION_BUTTON_CLOSE) |
| 50 forKey:kNotificationCloseButtonTag]; |
| 51 [notificationData_ |
| 52 setObject:l10n_util::GetNSString(IDS_NOTIFICATION_BUTTON_OPTIONS) |
| 53 forKey:kNotificationOptionsButtonTag]; |
| 54 [notificationData_ |
| 55 setObject:l10n_util::GetNSString(IDS_NOTIFICATION_BUTTON_SETTINGS) |
| 56 forKey:kNotificationSettingsButtonTag]; |
| 46 } | 57 } |
| 47 return self; | 58 return self; |
| 48 } | 59 } |
| 49 | 60 |
| 50 - (instancetype)initWithDictionary:(NSDictionary*)data { | 61 - (instancetype)initWithDictionary:(NSDictionary*)data { |
| 51 if ((self = [super init])) { | 62 if ((self = [super init])) { |
| 52 notificationData_.reset([data copy]); | 63 notificationData_.reset([data copy]); |
| 53 } | 64 } |
| 54 return self; | 65 return self; |
| 55 } | 66 } |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 124 if ([notificationData_ objectForKey:kNotificationImage]) { | 135 if ([notificationData_ objectForKey:kNotificationImage]) { |
| 125 if ([toast respondsToSelector:@selector(_identityImage)]) { | 136 if ([toast respondsToSelector:@selector(_identityImage)]) { |
| 126 NSImage* image = [notificationData_ objectForKey:kNotificationImage]; | 137 NSImage* image = [notificationData_ objectForKey:kNotificationImage]; |
| 127 [toast setValue:image forKey:@"_identityImage"]; | 138 [toast setValue:image forKey:@"_identityImage"]; |
| 128 [toast setValue:@NO forKey:@"_identityImageHasBorder"]; | 139 [toast setValue:@NO forKey:@"_identityImageHasBorder"]; |
| 129 } | 140 } |
| 130 } | 141 } |
| 131 | 142 |
| 132 // Buttons | 143 // Buttons |
| 133 if ([toast respondsToSelector:@selector(_showsButtons)]) { | 144 if ([toast respondsToSelector:@selector(_showsButtons)]) { |
| 145 DCHECK([notificationData_ objectForKey:kNotificationCloseButtonTag]); |
| 146 DCHECK([notificationData_ objectForKey:kNotificationSettingsButtonTag]); |
| 147 DCHECK([notificationData_ objectForKey:kNotificationOptionsButtonTag]); |
| 148 |
| 134 [toast setValue:@YES forKey:@"_showsButtons"]; | 149 [toast setValue:@YES forKey:@"_showsButtons"]; |
| 135 // A default close button label is provided by the platform but we | 150 // A default close button label is provided by the platform but we |
| 136 // explicitly override it in case the user decides to not | 151 // explicitly override it in case the user decides to not |
| 137 // use the OS language in Chrome. | 152 // use the OS language in Chrome. |
| 138 [toast setOtherButtonTitle:l10n_util::GetNSString( | 153 [toast setOtherButtonTitle:[notificationData_ |
| 139 IDS_NOTIFICATION_BUTTON_CLOSE)]; | 154 objectForKey:kNotificationCloseButtonTag]]; |
| 140 | 155 |
| 141 // Display the Settings button as the action button if there are either no | 156 // Display the Settings button as the action button if there are either no |
| 142 // developer-provided action buttons, or the alternate action menu is not | 157 // developer-provided action buttons, or the alternate action menu is not |
| 143 // available on this Mac version. This avoids needlessly showing the menu. | 158 // available on this Mac version. This avoids needlessly showing the menu. |
| 144 // TODO(miguelg): Extensions should not have a settings button. | 159 // TODO(miguelg): Extensions should not have a settings button. |
| 145 if (![notificationData_ objectForKey:kNotificationButtonOne] || | 160 if (![notificationData_ objectForKey:kNotificationButtonOne] || |
| 146 ![toast respondsToSelector:@selector(_alwaysShowAlternateActionMenu)]) { | 161 ![toast respondsToSelector:@selector(_alwaysShowAlternateActionMenu)]) { |
| 147 [toast setActionButtonTitle:l10n_util::GetNSString( | 162 [toast |
| 148 IDS_NOTIFICATION_BUTTON_SETTINGS)]; | 163 setActionButtonTitle: |
| 164 [notificationData_ objectForKey:kNotificationSettingsButtonTag]]; |
| 149 } else { | 165 } else { |
| 150 // Otherwise show the alternate menu, then show the developer actions and | 166 // Otherwise show the alternate menu, then show the developer actions and |
| 151 // finally the settings one. | 167 // finally the settings one. |
| 152 DCHECK( | 168 DCHECK( |
| 153 [toast respondsToSelector:@selector(_alwaysShowAlternateActionMenu)]); | 169 [toast respondsToSelector:@selector(_alwaysShowAlternateActionMenu)]); |
| 154 DCHECK( | 170 DCHECK( |
| 155 [toast respondsToSelector:@selector(_alternateActionButtonTitles)]); | 171 [toast respondsToSelector:@selector(_alternateActionButtonTitles)]); |
| 156 [toast setActionButtonTitle:l10n_util::GetNSString( | 172 [toast |
| 157 IDS_NOTIFICATION_BUTTON_OPTIONS)]; | 173 setActionButtonTitle:[notificationData_ |
| 174 objectForKey:kNotificationOptionsButtonTag]]; |
| 158 [toast setValue:@YES forKey:@"_alwaysShowAlternateActionMenu"]; | 175 [toast setValue:@YES forKey:@"_alwaysShowAlternateActionMenu"]; |
| 159 | 176 |
| 160 NSMutableArray* buttons = [NSMutableArray arrayWithCapacity:3]; | 177 NSMutableArray* buttons = [NSMutableArray arrayWithCapacity:3]; |
| 161 [buttons | 178 [buttons |
| 162 addObject:[notificationData_ objectForKey:kNotificationButtonOne]]; | 179 addObject:[notificationData_ objectForKey:kNotificationButtonOne]]; |
| 163 if ([notificationData_ objectForKey:kNotificationButtonTwo]) { | 180 if ([notificationData_ objectForKey:kNotificationButtonTwo]) { |
| 164 [buttons | 181 [buttons |
| 165 addObject:[notificationData_ objectForKey:kNotificationButtonTwo]]; | 182 addObject:[notificationData_ objectForKey:kNotificationButtonTwo]]; |
| 166 } | 183 } |
| 167 [buttons | 184 [buttons addObject:[notificationData_ |
| 168 addObject:l10n_util::GetNSString(IDS_NOTIFICATION_BUTTON_SETTINGS)]; | 185 objectForKey:kNotificationSettingsButtonTag]]; |
| 169 [toast setValue:buttons forKey:@"_alternateActionButtonTitles"]; | 186 [toast setValue:buttons forKey:@"_alternateActionButtonTitles"]; |
| 170 } | 187 } |
| 171 } | 188 } |
| 172 | 189 |
| 173 // Tag | 190 // Tag |
| 174 if ([toast respondsToSelector:@selector(setIdentifier:)] && | 191 if ([toast respondsToSelector:@selector(setIdentifier:)] && |
| 175 [notificationData_ objectForKey:kNotificationTag]) { | 192 [notificationData_ objectForKey:kNotificationTag]) { |
| 176 [toast setValue:[notificationData_ objectForKey:kNotificationTag] | 193 [toast setValue:[notificationData_ objectForKey:kNotificationTag] |
| 177 forKey:@"identifier"]; | 194 forKey:@"identifier"]; |
| 178 } | 195 } |
| (...skipping 26 matching lines...) Expand all Loading... |
| 205 }; | 222 }; |
| 206 | 223 |
| 207 return toast.autorelease(); | 224 return toast.autorelease(); |
| 208 } | 225 } |
| 209 | 226 |
| 210 - (NSDictionary*)buildDictionary { | 227 - (NSDictionary*)buildDictionary { |
| 211 return [[notificationData_ copy] autorelease]; | 228 return [[notificationData_ copy] autorelease]; |
| 212 } | 229 } |
| 213 | 230 |
| 214 @end | 231 @end |
| OLD | NEW |