Make NotificationID more useful

This commit is contained in:
Adam Roben 2013-03-29 09:23:10 -04:00
parent e59c549e62
commit dde3c3f78f

View file

@ -13,16 +13,39 @@ namespace brightray {
namespace { namespace {
NSString * const kRenderProcessIDKey = @"RenderProcessID";
NSString * const kRenderViewIDKey = @"RenderViewID";
NSString * const kNotificationIDKey = @"NotificationID";
struct NotificationID { struct NotificationID {
NotificationID(
const content::ShowDesktopNotificationHostMsgParams& params,
int render_process_id,
int render_view_id)
: render_process_id(render_process_id),
render_view_id(render_view_id),
notification_id(params.notification_id) {
}
NotificationID(NSUserNotification* notification)
: render_process_id([[notification.userInfo objectForKey:kRenderProcessIDKey] intValue]),
render_view_id([[notification.userInfo objectForKey:kRenderViewIDKey] intValue]),
notification_id([[notification.userInfo objectForKey:kNotificationIDKey] intValue]) {
}
NSDictionary* GetUserInfo() {
return @{
kRenderProcessIDKey: @(render_process_id),
kRenderViewIDKey: @(render_view_id),
kNotificationIDKey: @(notification_id),
};
}
int render_process_id; int render_process_id;
int render_view_id; int render_view_id;
int notification_id; int notification_id;
}; };
NSString * const kRenderProcessIDKey = @"RenderProcessID";
NSString * const kRenderViewIDKey = @"RenderViewID";
NSString * const kNotificationIDKey = @"NotificationID";
scoped_nsobject<NSUserNotification> CreateUserNotification( scoped_nsobject<NSUserNotification> CreateUserNotification(
const content::ShowDesktopNotificationHostMsgParams& params, const content::ShowDesktopNotificationHostMsgParams& params,
int render_process_id, int render_process_id,
@ -30,23 +53,11 @@ scoped_nsobject<NSUserNotification> CreateUserNotification(
auto notification = [[NSUserNotification alloc] init]; auto notification = [[NSUserNotification alloc] init];
notification.title = base::SysUTF16ToNSString(params.title); notification.title = base::SysUTF16ToNSString(params.title);
notification.informativeText = base::SysUTF16ToNSString(params.body); notification.informativeText = base::SysUTF16ToNSString(params.body);
notification.userInfo = @{ notification.userInfo = NotificationID(params, render_process_id, render_view_id).GetUserInfo();
kRenderProcessIDKey: @(render_process_id),
kRenderViewIDKey: @(render_view_id),
kNotificationIDKey: @(params.notification_id),
};
return scoped_nsobject<NSUserNotification>(notification); return scoped_nsobject<NSUserNotification>(notification);
} }
NotificationID GetID(NSUserNotification* notification) {
NotificationID ID;
ID.render_process_id = [[notification.userInfo objectForKey:kRenderProcessIDKey] intValue];
ID.render_view_id = [[notification.userInfo objectForKey:kRenderViewIDKey] intValue];
ID.notification_id = [[notification.userInfo objectForKey:kNotificationIDKey] intValue];
return ID;
}
} }
NotificationPresenter* NotificationPresenter::Create() { NotificationPresenter* NotificationPresenter::Create() {
@ -74,7 +85,7 @@ void NotificationPresenterMac::ShowNotification(
@implementation BRYUserNotificationCenterDelegate @implementation BRYUserNotificationCenterDelegate
- (void)userNotificationCenter:(NSUserNotificationCenter *)center didDeliverNotification:(NSUserNotification *)notification { - (void)userNotificationCenter:(NSUserNotificationCenter *)center didDeliverNotification:(NSUserNotification *)notification {
auto ID = brightray::GetID(notification); brightray::NotificationID ID(notification);
auto host = content::RenderViewHost::FromID(ID.render_process_id, ID.render_view_id); auto host = content::RenderViewHost::FromID(ID.render_process_id, ID.render_view_id);
if (!host) if (!host)
@ -84,7 +95,7 @@ void NotificationPresenterMac::ShowNotification(
} }
- (void)userNotificationCenter:(NSUserNotificationCenter *)center didActivateNotification:(NSUserNotification *)notification { - (void)userNotificationCenter:(NSUserNotificationCenter *)center didActivateNotification:(NSUserNotification *)notification {
auto ID = brightray::GetID(notification); brightray::NotificationID ID(notification);
auto host = content::RenderViewHost::FromID(ID.render_process_id, ID.render_view_id); auto host = content::RenderViewHost::FromID(ID.render_process_id, ID.render_view_id);
if (!host) if (!host)