Index: chrome/browser/notifications/platform_notification_service_impl.cc |
diff --git a/chrome/browser/notifications/platform_notification_service_impl.cc b/chrome/browser/notifications/platform_notification_service_impl.cc |
index 4edd70ba27455560e8dd8e587cb83eec00304c9f..de9ab9a7859e12b1f81e542b5af11cf0e32923ff 100644 |
--- a/chrome/browser/notifications/platform_notification_service_impl.cc |
+++ b/chrome/browser/notifications/platform_notification_service_impl.cc |
@@ -74,6 +74,30 @@ void OnPersistentNotificationDataDeleted(bool success) { |
success); |
} |
+// Callback called when the persistent notification close event has been handled |
+// to remove the notification from the database. |
+void OnDidSendPersistentNotificationCloseEvent( |
+ BrowserContext* browser_context, |
+ int64_t persistent_notification_id, |
+ const GURL& origin, |
+ content::PersistentNotificationStatus status) { |
+ |
+ PlatformNotificationContext* context = |
+ BrowserContext::GetStoragePartitionForSite(browser_context, origin) |
+ ->GetPlatformNotificationContext(); |
+ |
+ // TODO(nsatragno): add Notifications.PersistentWebNotificationCloseResult |
+ // metric. |
+ BrowserThread::PostTask( |
+ BrowserThread::IO, |
+ FROM_HERE, |
+ base::Bind(&PlatformNotificationContext::DeleteNotificationData, |
+ context, |
+ persistent_notification_id, |
+ origin, |
+ base::Bind(&OnPersistentNotificationDataDeleted))); |
+} |
+ |
// Persistent notifications fired through the delegate do not care about the |
// lifetime of the Service Worker responsible for executing the event. |
void OnEventDispatchComplete(content::PersistentNotificationStatus status) { |
@@ -219,23 +243,20 @@ void PlatformNotificationServiceImpl::OnPersistentNotificationClose( |
if (by_user) { |
content::RecordAction(base::UserMetricsAction( |
"Notifications.Persistent.ClosedByUser")); |
+ |
+ content::NotificationEventDispatcher::GetInstance() |
+ ->DispatchNotificationCloseEvent( |
+ browser_context, |
+ persistent_notification_id, |
+ origin, |
+ base::Bind(&OnDidSendPersistentNotificationCloseEvent, |
+ browser_context, |
+ persistent_notification_id, |
+ origin)); |
} else { |
content::RecordAction(base::UserMetricsAction( |
"Notifications.Persistent.ClosedProgrammatically")); |
} |
- |
- PlatformNotificationContext* context = |
- BrowserContext::GetStoragePartitionForSite(browser_context, origin) |
- ->GetPlatformNotificationContext(); |
- |
- BrowserThread::PostTask( |
- BrowserThread::IO, |
- FROM_HERE, |
- base::Bind(&PlatformNotificationContext::DeleteNotificationData, |
- context, |
- persistent_notification_id, |
- origin, |
- base::Bind(&OnPersistentNotificationDataDeleted))); |
} |
blink::WebNotificationPermission |