Cast: Stop logging kVideoFrameSentToEncoder and rename a couple events.
[chromium-blink-merge.git] / chrome / browser / notifications / desktop_notification_service.h
bloba79a30d7694fda6ee583ae93fc63df443ef1a194
1 // Copyright (c) 2012 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.
5 #ifndef CHROME_BROWSER_NOTIFICATIONS_DESKTOP_NOTIFICATION_SERVICE_H_
6 #define CHROME_BROWSER_NOTIFICATIONS_DESKTOP_NOTIFICATION_SERVICE_H_
8 #include <set>
9 #include <string>
10 #include <vector>
12 #include "base/basictypes.h"
13 #include "base/callback_forward.h"
14 #include "base/memory/ref_counted.h"
15 #include "base/memory/scoped_ptr.h"
16 #include "base/prefs/pref_member.h"
17 #include "base/strings/string16.h"
18 #include "chrome/browser/content_settings/content_settings_provider.h"
19 #include "chrome/browser/notifications/extension_welcome_notification.h"
20 #include "chrome/common/content_settings.h"
21 #include "components/keyed_service/core/keyed_service.h"
22 #include "content/public/browser/notification_observer.h"
23 #include "content/public/browser/notification_registrar.h"
24 #include "third_party/WebKit/public/web/WebNotificationPresenter.h"
25 #include "third_party/WebKit/public/web/WebTextDirection.h"
26 #include "ui/message_center/notifier_settings.h"
27 #include "url/gurl.h"
29 class ContentSettingsPattern;
30 class Notification;
31 class NotificationDelegate;
32 class NotificationUIManager;
33 class Profile;
35 namespace content {
36 class DesktopNotificationDelegate;
37 class RenderFrameHost;
38 struct ShowDesktopNotificationHostMsgParams;
41 namespace gfx {
42 class Image;
45 namespace user_prefs {
46 class PrefRegistrySyncable;
49 // The DesktopNotificationService is an object, owned by the Profile,
50 // which provides the creation of desktop "toasts" to web pages and workers.
51 class DesktopNotificationService : public KeyedService,
52 public content::NotificationObserver {
53 public:
54 // Register profile-specific prefs of notifications.
55 static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* prefs);
57 DesktopNotificationService(Profile* profile,
58 NotificationUIManager* ui_manager);
59 virtual ~DesktopNotificationService();
61 // Requests permission for a given origin. |callback| is run when the UI
62 // finishes.
63 void RequestPermission(const GURL& origin,
64 content::RenderFrameHost* render_frame_host,
65 const base::Closure& callback);
67 // Show a desktop notification. If |cancel_callback| is non-null, it's set to
68 // a callback which can be used to cancel the notification.
69 void ShowDesktopNotification(
70 const content::ShowDesktopNotificationHostMsgParams& params,
71 content::RenderFrameHost* render_frame_host,
72 content::DesktopNotificationDelegate* delegate,
73 base::Closure* cancel_callback);
75 // Methods to setup and modify permission preferences.
76 void GrantPermission(const GURL& origin);
77 void DenyPermission(const GURL& origin);
79 // Creates a data:xxxx URL which contains the full HTML for a notification
80 // using supplied icon, title, and text, run through a template which contains
81 // the standard formatting for notifications.
82 static base::string16 CreateDataUrl(const GURL& icon_url,
83 const base::string16& title,
84 const base::string16& body,
85 blink::WebTextDirection dir);
87 // Creates a data:xxxx URL which contains the full HTML for a notification
88 // using resource template which contains the standard formatting for
89 // notifications.
90 static base::string16 CreateDataUrl(int resource,
91 const std::vector<std::string>& subst);
93 // Add a desktop notification.
94 static std::string AddIconNotification(const GURL& origin_url,
95 const base::string16& title,
96 const base::string16& message,
97 const gfx::Image& icon,
98 const base::string16& replace_id,
99 NotificationDelegate* delegate,
100 Profile* profile);
102 // The default content setting determines how to handle origins that haven't
103 // been allowed or denied yet. If |provider_id| is not NULL, the id of the
104 // provider which provided the default setting is assigned to it.
105 ContentSetting GetDefaultContentSetting(std::string* provider_id);
106 void SetDefaultContentSetting(ContentSetting setting);
108 // NOTE: This should only be called on the UI thread.
109 void ResetToDefaultContentSetting();
111 // Returns all notifications settings. |settings| is cleared before
112 // notifications setting are passed to it.
113 void GetNotificationsSettings(ContentSettingsForOneType* settings);
115 // Clears the notifications setting for the given pattern.
116 void ClearSetting(const ContentSettingsPattern& pattern);
118 // Clears the sets of explicitly allowed and denied origins.
119 void ResetAllOrigins();
121 ContentSetting GetContentSetting(const GURL& origin);
123 // Returns true if the notifier with |notifier_id| is allowed to send
124 // notifications.
125 bool IsNotifierEnabled(const message_center::NotifierId& notifier_id);
127 // Updates the availability of the notifier.
128 void SetNotifierEnabled(const message_center::NotifierId& notifier_id,
129 bool enabled);
131 // Adds in a the welcome notification if required for components built
132 // into Chrome that show notifications like Chrome Now.
133 void ShowWelcomeNotificationIfNecessary(const Notification& notification);
135 private:
136 // Returns a display name for an origin in the process id, to be used in
137 // permission infobar or on the frame of the notification toast. Different
138 // from the origin itself when dealing with extensions.
139 base::string16 DisplayNameForOriginInProcessId(const GURL& origin,
140 int process_id);
142 // Notifies the observers when permissions settings change.
143 void NotifySettingsChange();
145 NotificationUIManager* GetUIManager();
147 // Called when the string list pref has been changed.
148 void OnStringListPrefChanged(
149 const char* pref_name, std::set<std::string>* ids_field);
151 // Called when the disabled_extension_id pref has been changed.
152 void OnDisabledExtensionIdsChanged();
154 // Called when the disabled_system_component_id pref has been changed.
155 void OnDisabledSystemComponentIdsChanged();
157 // Called when the enabled_sync_notifier_id pref has been changed.
158 void OnEnabledSyncNotifierIdsChanged();
160 void FirePermissionLevelChangedEvent(
161 const message_center::NotifierId& notifier_id,
162 bool enabled);
164 // content::NotificationObserver:
165 virtual void Observe(int type,
166 const content::NotificationSource& source,
167 const content::NotificationDetails& details) OVERRIDE;
169 // The profile which owns this object.
170 Profile* profile_;
172 // Non-owned pointer to the notification manager which manages the
173 // UI for desktop toasts.
174 NotificationUIManager* ui_manager_;
176 // Prefs listener for disabled_extension_id.
177 StringListPrefMember disabled_extension_id_pref_;
179 // Prefs listener for disabled_system_component_id.
180 StringListPrefMember disabled_system_component_id_pref_;
182 // Prefs listener for enabled_sync_notifier_id.
183 StringListPrefMember enabled_sync_notifier_id_pref_;
185 // On-memory data for the availability of extensions.
186 std::set<std::string> disabled_extension_ids_;
188 // On-memory data for the availability of system_component.
189 std::set<std::string> disabled_system_component_ids_;
191 // On-memory data for the availability of sync notifiers.
192 std::set<std::string> enabled_sync_notifier_ids_;
194 // Registrar for the other kind of notifications (event signaling).
195 content::NotificationRegistrar registrar_;
197 // Welcome Notification
198 scoped_ptr<ExtensionWelcomeNotification> chrome_now_welcome_notification_;
200 DISALLOW_COPY_AND_ASSIGN(DesktopNotificationService);
203 #endif // CHROME_BROWSER_NOTIFICATIONS_DESKTOP_NOTIFICATION_SERVICE_H_