Index: chrome/browser/notifications/notification_display_service.h |
diff --git a/chrome/browser/notifications/notification_display_service.h b/chrome/browser/notifications/notification_display_service.h |
index 92cf5ece841ca2d46495260c1e2cef23531108a9..8c21f80ece948c4ebf37a44191fda09d1813f941 100644 |
--- a/chrome/browser/notifications/notification_display_service.h |
+++ b/chrome/browser/notifications/notification_display_service.h |
@@ -5,6 +5,7 @@ |
#ifndef CHROME_BROWSER_NOTIFICATIONS_NOTIFICATION_DISPLAY_SERVICE_H_ |
#define CHROME_BROWSER_NOTIFICATIONS_NOTIFICATION_DISPLAY_SERVICE_H_ |
+#include <map> |
#include <memory> |
#include <set> |
#include <string> |
@@ -14,7 +15,12 @@ |
#include "chrome/browser/notifications/notification_common.h" |
#include "components/keyed_service/core/keyed_service.h" |
+namespace base { |
+class NullableString16; |
+} |
+ |
class Notification; |
+class NotificationHandler; |
class Profile; |
// Profile-bound service that enables notifications to be displayed and |
@@ -28,8 +34,8 @@ class NotificationDisplayService : public KeyedService { |
using DisplayedNotificationsCallback = |
base::Callback<void(std::unique_ptr<std::set<std::string>>, |
bool /* supports_synchronization */)>; |
- NotificationDisplayService() {} |
- ~NotificationDisplayService() override {} |
+ explicit NotificationDisplayService(Profile* profile); |
+ ~NotificationDisplayService() override; |
// Displays the |notification| identified by |notification_id|. |
virtual void Display(NotificationCommon::Type notification_type, |
@@ -44,7 +50,31 @@ class NotificationDisplayService : public KeyedService { |
// invokes |callback| with the result once known. |
virtual void GetDisplayed(const DisplayedNotificationsCallback& callback) = 0; |
+ // Used to propagate back events originate from the user (click, close...). |
+ // The events are received and dispatched to the right consumer depending on |
+ // the type of notification. Consumers include, service workers, pages, |
+ // extensions... |
+ void ProcessNotificationOperation(NotificationCommon::Operation operation, |
+ NotificationCommon::Type notification_type, |
+ const std::string& origin, |
+ const std::string& notification_id, |
+ int action_index, |
+ const base::NullableString16& reply); |
+ |
+ protected: |
+ NotificationHandler* GetNotificationHandler( |
+ NotificationCommon::Type notification_type); |
+ |
private: |
+ // Registers an implementation object to handle notification operations |
+ // for |notification_type|. |
+ void AddNotificationHandler(NotificationCommon::Type notification_type, |
+ std::unique_ptr<NotificationHandler> handler); |
+ |
+ std::map<NotificationCommon::Type, std::unique_ptr<NotificationHandler>> |
+ notification_handlers_; |
+ Profile* profile_; |
+ |
DISALLOW_COPY_AND_ASSIGN(NotificationDisplayService); |
}; |