Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / notifications / notification_ui_manager.h
index 56db9da..182bb44 100644 (file)
 
 #include "base/basictypes.h"
 
+typedef void* ProfileID;
+
 class GURL;
 class Notification;
 class PrefService;
 class Profile;
 
 // This virtual interface is used to manage the UI surfaces for desktop
-// notifications. There is one instance per profile.
+// notifications. There is just one instance for all profiles.
+// This represents the middle layer of notification and it's aware of profile.
+// It identifies a notification by the id string and a profile, hence two
+// notifications from two different profiles, even though they may have
+// identical ids, will not be considered the same notification.
+// This interface will generate a new id behind the scene based on the id string
+// and the profile's characteristics for each notification and use this new id
+// to call lower layer MessageCenter interface which is profile agnostic.
+// Therefore the ids passed into this interface are not the same as those passed
+// into the MessageCenter interface.
 class NotificationUIManager {
  public:
+  // Convert a profile pointer into an opaque profile id, which can be safely
+  // used by FindById() and CancelById() even after a profile may have been
+  // destroyed.
+  static ProfileID GetProfileID(Profile* profile) {
+    return static_cast<ProfileID>(profile);
+  }
+
   virtual ~NotificationUIManager() {}
 
   // Creates an initialized UI manager.
@@ -34,15 +52,22 @@ class NotificationUIManager {
 
   // Returns the pointer to a notification if it match the supplied ID, either
   // currently displayed or in the queue.
-  virtual const Notification* FindById(
-      const std::string& notification_id) const = 0;
+  // This function can be bound for delayed execution, where a profile pointer
+  // may not be valid. Hence caller needs to call the static GetProfileID(...)
+  // function to turn a profile pointer into a profile id and pass that in.
+  virtual const Notification* FindById(const std::string& delegate_id,
+                                       ProfileID profile_id) const = 0;
 
   // Removes any notifications matching the supplied ID, either currently
   // displayed or in the queue.  Returns true if anything was removed.
-  virtual bool CancelById(const std::string& notification_id) = 0;
-
-  // Adds the notification_id for each outstanding notification to the set
-  // |notification_ids| (must not be NULL).
+  // This function can be bound for delayed execution, where a profile pointer
+  // may not be valid. Hence caller needs to call the static GetProfileID(...)
+  // function to turn a profile pointer into a profile id and pass that in.
+  virtual bool CancelById(const std::string& delegate_id,
+                          ProfileID profile_id) = 0;
+
+  // Returns the set of all delegate IDs for notifications from the passed
+  // |profile| and |source|.
   virtual std::set<std::string> GetAllIdsByProfileAndSourceOrigin(
       Profile* profile,
       const GURL& source) = 0;
@@ -51,8 +76,9 @@ class NotificationUIManager {
   // extension ID). Returns true if anything was removed.
   virtual bool CancelAllBySourceOrigin(const GURL& source_origin) = 0;
 
-  // Removes notifications matching |profile|. Returns true if any were removed.
-  virtual bool CancelAllByProfile(Profile* profile) = 0;
+  // Removes notifications matching |profile_id|. Returns true if any were
+  // removed.
+  virtual bool CancelAllByProfile(ProfileID profile_id) = 0;
 
   // Cancels all pending notifications and closes anything currently showing.
   // Used when the app is terminating.