190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// found in the LICENSE file. 490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#ifndef UI_MESSAGE_CENTER_NOTIFICATION_DELEGATE_H_ 690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define UI_MESSAGE_CENTER_NOTIFICATION_DELEGATE_H_ 790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include <string> 990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 10a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "base/callback.h" 1190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "base/memory/ref_counted.h" 1290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "ui/message_center/message_center_export.h" 1390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace content { 1590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class RenderViewHost; 1690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 1790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace message_center { 1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Delegate for a notification. This class has two roles: to implement callback 2190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// methods for notification, and to provide an identity of the associated 2290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// notification. 2390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class MESSAGE_CENTER_EXPORT NotificationDelegate 2490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) : public base::RefCountedThreadSafe<NotificationDelegate> { 2590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) public: 2690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // To be called when the desktop notification is actually shown. 2790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual void Display() = 0; 2890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // To be called when the desktop notification cannot be shown due to an 3090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // error. 3190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual void Error() = 0; 3290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 3390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // To be called when the desktop notification is closed. If closed by a 3490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // user explicitly (as opposed to timeout/script), |by_user| should be true. 3590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual void Close(bool by_user) = 0; 3690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Returns true if the delegate can handle click event. 3890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual bool HasClickedListener(); 3990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 4090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // To be called when a desktop notification is clicked. 4190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual void Click() = 0; 4290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 4390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // To be called when the user clicks a button in a notification. TODO(miket): 4490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // consider providing default implementations of the pure virtuals of this 4590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // interface, to avoid pinging so many OWNERs each time we enhance it. 4690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual void ButtonClick(int button_index); 4790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 4890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) protected: 4990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual ~NotificationDelegate() {} 5090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 5190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) private: 5290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) friend class base::RefCountedThreadSafe<NotificationDelegate>; 5390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}; 5490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 55a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// A simple notification delegate which invokes the passed closure when clicked. 56a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)class MESSAGE_CENTER_EXPORT HandleNotificationClickedDelegate 57a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) : public NotificationDelegate { 58a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) public: 59a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) explicit HandleNotificationClickedDelegate(const base::Closure& closure); 60a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 61a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // message_center::NotificationDelegate overrides: 62a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) virtual void Display() OVERRIDE; 63a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) virtual void Error() OVERRIDE; 64a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) virtual void Close(bool by_user) OVERRIDE; 65a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) virtual bool HasClickedListener() OVERRIDE; 66a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) virtual void Click() OVERRIDE; 67a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) virtual void ButtonClick(int button_index) OVERRIDE; 68a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 69a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) protected: 70a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) virtual ~HandleNotificationClickedDelegate(); 71a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 72a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) private: 73a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) std::string id_; 74a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) base::Closure closure_; 75a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 76a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(HandleNotificationClickedDelegate); 77a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}; 78a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 79c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// A notification delegate which invokes a callback when a notification button 80c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// has been clicked. 81c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochclass MESSAGE_CENTER_EXPORT HandleNotificationButtonClickDelegate 82c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch : public NotificationDelegate { 83c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public: 84c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch typedef base::Callback<void(int)> ButtonClickCallback; 85c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 86c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch explicit HandleNotificationButtonClickDelegate( 87c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const ButtonClickCallback& button_callback); 88c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 89c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // message_center::NotificationDelegate overrides: 90c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void Display() OVERRIDE; 91c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void Error() OVERRIDE; 92c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void Close(bool by_user) OVERRIDE; 93c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void Click() OVERRIDE; 94c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void ButtonClick(int button_index) OVERRIDE; 95c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 96c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch protected: 97c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual ~HandleNotificationButtonClickDelegate(); 98c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 99c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch private: 100c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ButtonClickCallback button_callback_; 101c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 102c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch DISALLOW_COPY_AND_ASSIGN(HandleNotificationButtonClickDelegate); 103c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}; 104c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 10590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} // namespace message_center 10690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 10790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif // UI_MESSAGE_CENTER_NOTIFICATION_DELEGATE_H_ 108