summaryrefslogtreecommitdiffstats
path: root/chrome/browser/notifications/desktop_notification_service.h
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/notifications/desktop_notification_service.h')
-rw-r--r--chrome/browser/notifications/desktop_notification_service.h136
1 files changed, 136 insertions, 0 deletions
diff --git a/chrome/browser/notifications/desktop_notification_service.h b/chrome/browser/notifications/desktop_notification_service.h
new file mode 100644
index 0000000..ae38b18
--- /dev/null
+++ b/chrome/browser/notifications/desktop_notification_service.h
@@ -0,0 +1,136 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_NOTIFICATIONS_DESKTOP_NOTIFICATION_SERVICE_H_
+#define CHROME_BROWSER_NOTIFICATIONS_DESKTOP_NOTIFICATION_SERVICE_H_
+
+#include <set>
+
+#include "base/basictypes.h"
+#include "chrome/browser/notifications/notification.h"
+#include "chrome/common/content_settings.h"
+#include "chrome/common/notification_observer.h"
+#include "chrome/common/notification_registrar.h"
+#include "chrome/common/notification_service.h"
+#include "googleurl/src/gurl.h"
+#include "third_party/WebKit/WebKit/chromium/public/WebTextDirection.h"
+
+class NotificationUIManager;
+class NotificationsPrefsCache;
+class PrefService;
+class Profile;
+class Task;
+class TabContents;
+struct ViewHostMsg_ShowNotification_Params;
+
+// The DesktopNotificationService is an object, owned by the Profile,
+// which provides the creation of desktop "toasts" to web pages and workers.
+class DesktopNotificationService : public NotificationObserver {
+ public:
+ enum DesktopNotificationSource {
+ PageNotification,
+ WorkerNotification
+ };
+
+ DesktopNotificationService(Profile* profile,
+ NotificationUIManager* ui_manager);
+ virtual ~DesktopNotificationService();
+
+ // Requests permission (using an info-bar) for a given origin.
+ // |callback_context| contains an opaque value to pass back to the
+ // requesting process when the info-bar finishes.
+ void RequestPermission(const GURL& origin,
+ int process_id,
+ int route_id,
+ int callback_context,
+ TabContents* tab);
+
+ // ShowNotification is called on the UI thread handling IPCs from a child
+ // process, identified by |process_id| and |route_id|. |source| indicates
+ // whether the script is in a worker or page. |params| contains all the
+ // other parameters supplied by the worker or page.
+ bool ShowDesktopNotification(
+ const ViewHostMsg_ShowNotification_Params& params,
+ int process_id, int route_id, DesktopNotificationSource source);
+
+ // Cancels a notification. If it has already been shown, it will be
+ // removed from the screen. If it hasn't been shown yet, it won't be
+ // shown.
+ bool CancelDesktopNotification(int process_id,
+ int route_id,
+ int notification_id);
+
+ // Methods to setup and modify permission preferences.
+ void GrantPermission(const GURL& origin);
+ void DenyPermission(const GURL& origin);
+
+ // NotificationObserver implementation.
+ virtual void Observe(NotificationType type,
+ const NotificationSource& source,
+ const NotificationDetails& details);
+
+ NotificationsPrefsCache* prefs_cache() { return prefs_cache_; }
+
+ // Creates a data:xxxx URL which contains the full HTML for a notification
+ // using supplied icon, title, and text, run through a template which contains
+ // the standard formatting for notifications.
+ static string16 CreateDataUrl(const GURL& icon_url,
+ const string16& title,
+ const string16& body,
+ WebKit::WebTextDirection dir);
+
+ // The default content setting determines how to handle origins that haven't
+ // been allowed or denied yet.
+ ContentSetting GetDefaultContentSetting();
+ void SetDefaultContentSetting(ContentSetting setting);
+
+ // Returns all origins that explicitly have been allowed.
+ std::vector<GURL> GetAllowedOrigins();
+
+ // Returns all origins that explicitly have been denied.
+ std::vector<GURL> GetBlockedOrigins();
+
+ // Removes an origin from the "explicitly allowed" set.
+ void ResetAllowedOrigin(const GURL& origin);
+
+ // Removes an origin from the "explicitly denied" set.
+ void ResetBlockedOrigin(const GURL& origin);
+
+ // Clears the sets of explicitly allowed and denied origins.
+ void ResetAllOrigins();
+
+ static void RegisterUserPrefs(PrefService* user_prefs);
+ private:
+ void InitPrefs();
+ void StartObserving();
+ void StopObserving();
+
+ // Takes a notification object and shows it in the UI.
+ void ShowNotification(const Notification& notification);
+
+ // Save a permission change to the profile.
+ void PersistPermissionChange(const GURL& origin, bool is_allowed);
+
+ // Returns a display name for an origin, to be used in permission infobar
+ // or on the frame of the notification toast. Different from the origin
+ // itself when dealing with extensions.
+ std::wstring DisplayNameForOrigin(const GURL& origin);
+
+ ContentSetting GetContentSetting(const GURL& origin);
+
+ // The profile which owns this object.
+ Profile* profile_;
+
+ // A cache of preferences which is accessible only on the IO thread
+ // to service synchronous IPCs.
+ scoped_refptr<NotificationsPrefsCache> prefs_cache_;
+
+ // Non-owned pointer to the notification manager which manages the
+ // UI for desktop toasts.
+ NotificationUIManager* ui_manager_;
+
+ DISALLOW_COPY_AND_ASSIGN(DesktopNotificationService);
+};
+
+#endif // CHROME_BROWSER_NOTIFICATIONS_DESKTOP_NOTIFICATION_SERVICE_H_