notifier_settings.h revision 116680a4aac90f2aa7413d9095a592090648e557
1// Copyright (c) 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_NOTIFIER_SETTINGS_H_ 6#define UI_MESSAGE_CENTER_NOTIFIER_SETTINGS_H_ 7 8#include <string> 9 10#include "base/gtest_prod_util.h" 11#include "base/strings/string16.h" 12#include "ui/gfx/image/image.h" 13#include "ui/message_center/message_center_export.h" 14#include "url/gurl.h" 15 16class MessageCenterTrayBridgeTest; 17 18namespace ash { 19class WebNotificationTrayTest; 20} 21 22namespace message_center { 23namespace test { 24class MessagePopupCollectionTest; 25} 26 27class NotifierSettingsDelegate; 28class NotifierSettingsProvider; 29 30// Brings up the settings dialog and returns a weak reference to the delegate, 31// which is typically the view. If the dialog already exists, it is brought to 32// the front, otherwise it is created. 33MESSAGE_CENTER_EXPORT NotifierSettingsDelegate* ShowSettings( 34 NotifierSettingsProvider* provider, 35 gfx::NativeView context); 36 37// The struct to distinguish the notifiers. 38struct MESSAGE_CENTER_EXPORT NotifierId { 39 enum NotifierType { 40 APPLICATION, 41 WEB_PAGE, 42 SYSTEM_COMPONENT, 43 }; 44 45 // Constructor for non WEB_PAGE type. 46 NotifierId(NotifierType type, const std::string& id); 47 48 // Constructor for WEB_PAGE type. 49 explicit NotifierId(const GURL& url); 50 51 bool operator==(const NotifierId& other) const; 52 // Allows NotifierId to be used as a key in std::map. 53 bool operator<(const NotifierId& other) const; 54 55 NotifierType type; 56 57 // The identifier of the app notifier. Empty if it's WEB_PAGE. 58 std::string id; 59 60 // The URL pattern of the notifer. 61 GURL url; 62 63 // The identifier of the profile where the notification is created. This is 64 // used for ChromeOS multi-profile support and can be empty. 65 std::string profile_id; 66 67 private: 68 friend class ::MessageCenterTrayBridgeTest; 69 friend class MessageCenterTrayTest; 70 friend class test::MessagePopupCollectionTest; 71 friend class NotificationControllerTest; 72 friend class PopupCollectionTest; 73 friend class TrayViewControllerTest; 74 friend class ash::WebNotificationTrayTest; 75 FRIEND_TEST_ALL_PREFIXES(PopupControllerTest, Creation); 76 FRIEND_TEST_ALL_PREFIXES(NotificationListTest, UnreadCountNoNegative); 77 FRIEND_TEST_ALL_PREFIXES(NotificationListTest, TestHasNotificationOfType); 78 79 // The default constructor which doesn't specify the notifier. Used for tests. 80 NotifierId(); 81}; 82 83// The struct to hold the information of notifiers. The information will be 84// used by NotifierSettingsView. 85struct MESSAGE_CENTER_EXPORT Notifier { 86 Notifier(const NotifierId& notifier_id, 87 const base::string16& name, 88 bool enabled); 89 ~Notifier(); 90 91 NotifierId notifier_id; 92 93 // The human-readable name of the notifier such like the extension name. 94 // It can be empty. 95 base::string16 name; 96 97 // True if the source is allowed to send notifications. True is default. 98 bool enabled; 99 100 // The icon image of the notifier. The extension icon or favicon. 101 gfx::Image icon; 102 103 private: 104 DISALLOW_COPY_AND_ASSIGN(Notifier); 105}; 106 107struct MESSAGE_CENTER_EXPORT NotifierGroup { 108 NotifierGroup(const gfx::Image& icon, 109 const base::string16& name, 110 const base::string16& login_info, 111 size_t index); 112 ~NotifierGroup(); 113 114 // Icon of a notifier group. 115 const gfx::Image icon; 116 117 // Display name of a notifier group. 118 const base::string16 name; 119 120 // More display information about the notifier group. 121 base::string16 login_info; 122 123 // Unique identifier for the notifier group so that they can be selected in 124 // the UI. 125 const size_t index; 126 127 private: 128 DISALLOW_COPY_AND_ASSIGN(NotifierGroup); 129}; 130 131// An observer class implemented by the view of the NotifierSettings to get 132// notified when the controller has changed data. 133class MESSAGE_CENTER_EXPORT NotifierSettingsObserver { 134 public: 135 // Called when an icon in the controller has been updated. 136 virtual void UpdateIconImage(const NotifierId& notifier_id, 137 const gfx::Image& icon) = 0; 138 139 // Called when any change happens to the set of notifier groups. 140 virtual void NotifierGroupChanged() = 0; 141 142 // Called when a notifier is enabled or disabled. 143 virtual void NotifierEnabledChanged(const NotifierId& notifier_id, 144 bool enabled) = 0; 145}; 146 147// A class used by NotifierSettingsView to integrate with a setting system 148// for the clients of this module. 149class MESSAGE_CENTER_EXPORT NotifierSettingsProvider { 150 public: 151 virtual ~NotifierSettingsProvider() {}; 152 153 // Sets the delegate. 154 virtual void AddObserver(NotifierSettingsObserver* observer) = 0; 155 virtual void RemoveObserver(NotifierSettingsObserver* observer) = 0; 156 157 // Returns the number of notifier groups available. 158 virtual size_t GetNotifierGroupCount() const = 0; 159 160 // Requests the model for a particular notifier group. 161 virtual const message_center::NotifierGroup& GetNotifierGroupAt( 162 size_t index) const = 0; 163 164 // Returns true if the notifier group at |index| is active. 165 virtual bool IsNotifierGroupActiveAt(size_t index) const = 0; 166 167 // Informs the settings provider that further requests to GetNotifierList 168 // should return notifiers for the specified notifier group. 169 virtual void SwitchToNotifierGroup(size_t index) = 0; 170 171 // Requests the currently active notifier group. 172 virtual const message_center::NotifierGroup& GetActiveNotifierGroup() 173 const = 0; 174 175 // Collects the current notifier list and fills to |notifiers|. Caller takes 176 // the ownership of the elements of |notifiers|. 177 virtual void GetNotifierList(std::vector<Notifier*>* notifiers) = 0; 178 179 // Called when the |enabled| for the |notifier| has been changed by user 180 // operation. 181 virtual void SetNotifierEnabled(const Notifier& notifier, bool enabled) = 0; 182 183 // Called when the settings window is closed. 184 virtual void OnNotifierSettingsClosing() = 0; 185 186 // Called to determine if a particular notifier can respond to a request for 187 // more information. 188 virtual bool NotifierHasAdvancedSettings(const NotifierId& notifier_id) 189 const = 0; 190 191 // Called upon request for more information about a particular notifier. 192 virtual void OnNotifierAdvancedSettingsRequested( 193 const NotifierId& notifier_id, 194 const std::string* notification_id) = 0; 195}; 196 197} // namespace message_center 198 199#endif // UI_MESSAGE_CENTER_NOTIFIER_SETTINGS_H_ 200