Home | History | Annotate | Download | only in message_center
      1 // Copyright 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef UI_MESSAGE_CENTER_NOTIFICATION_DELEGATE_H_
      6 #define UI_MESSAGE_CENTER_NOTIFICATION_DELEGATE_H_
      7 
      8 #include <string>
      9 
     10 #include "base/callback.h"
     11 #include "base/memory/ref_counted.h"
     12 #include "ui/message_center/message_center_export.h"
     13 
     14 namespace content {
     15 class RenderViewHost;
     16 }
     17 
     18 namespace message_center {
     19 
     20 // Delegate for a notification. This class has two roles: to implement callback
     21 // methods for notification, and to provide an identity of the associated
     22 // notification.
     23 class MESSAGE_CENTER_EXPORT NotificationDelegate
     24     : public base::RefCountedThreadSafe<NotificationDelegate> {
     25  public:
     26   // To be called when the desktop notification is actually shown.
     27   virtual void Display() = 0;
     28 
     29   // To be called when the desktop notification cannot be shown due to an
     30   // error.
     31   virtual void Error() = 0;
     32 
     33   // To be called when the desktop notification is closed.  If closed by a
     34   // user explicitly (as opposed to timeout/script), |by_user| should be true.
     35   virtual void Close(bool by_user) = 0;
     36 
     37   // Returns true if the delegate can handle click event.
     38   virtual bool HasClickedListener();
     39 
     40   // To be called when a desktop notification is clicked.
     41   virtual void Click() = 0;
     42 
     43   // To be called when the user clicks a button in a notification. TODO(miket):
     44   // consider providing default implementations of the pure virtuals of this
     45   // interface, to avoid pinging so many OWNERs each time we enhance it.
     46   virtual void ButtonClick(int button_index);
     47 
     48  protected:
     49   virtual ~NotificationDelegate() {}
     50 
     51  private:
     52   friend class base::RefCountedThreadSafe<NotificationDelegate>;
     53 };
     54 
     55 // A simple notification delegate which invokes the passed closure when clicked.
     56 class MESSAGE_CENTER_EXPORT HandleNotificationClickedDelegate
     57     : public NotificationDelegate {
     58  public:
     59   explicit HandleNotificationClickedDelegate(const base::Closure& closure);
     60 
     61   // message_center::NotificationDelegate overrides:
     62   virtual void Display() OVERRIDE;
     63   virtual void Error() OVERRIDE;
     64   virtual void Close(bool by_user) OVERRIDE;
     65   virtual bool HasClickedListener() OVERRIDE;
     66   virtual void Click() OVERRIDE;
     67   virtual void ButtonClick(int button_index) OVERRIDE;
     68 
     69  protected:
     70   virtual ~HandleNotificationClickedDelegate();
     71 
     72  private:
     73   std::string id_;
     74   base::Closure closure_;
     75 
     76   DISALLOW_COPY_AND_ASSIGN(HandleNotificationClickedDelegate);
     77 };
     78 
     79 // A notification delegate which invokes a callback when a notification button
     80 // has been clicked.
     81 class MESSAGE_CENTER_EXPORT HandleNotificationButtonClickDelegate
     82     : public NotificationDelegate {
     83  public:
     84   typedef base::Callback<void(int)> ButtonClickCallback;
     85 
     86   explicit HandleNotificationButtonClickDelegate(
     87       const ButtonClickCallback& button_callback);
     88 
     89   // message_center::NotificationDelegate overrides:
     90   virtual void Display() OVERRIDE;
     91   virtual void Error() OVERRIDE;
     92   virtual void Close(bool by_user) OVERRIDE;
     93   virtual void Click() OVERRIDE;
     94   virtual void ButtonClick(int button_index) OVERRIDE;
     95 
     96  protected:
     97   virtual ~HandleNotificationButtonClickDelegate();
     98 
     99  private:
    100   ButtonClickCallback button_callback_;
    101 
    102   DISALLOW_COPY_AND_ASSIGN(HandleNotificationButtonClickDelegate);
    103 };
    104 
    105 }  //  namespace message_center
    106 
    107 #endif  // UI_MESSAGE_CENTER_NOTIFICATION_DELEGATE_H_
    108