summaryrefslogtreecommitdiffstats
path: root/content/common/notification_registrar.h
diff options
context:
space:
mode:
authorjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-07 03:53:00 +0000
committerjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-07 03:53:00 +0000
commit652e16d050c69adcf9a8e97912d8e554d49902bc (patch)
treed8702ed6cf5ec554872019563f1efdddc5fcc42e /content/common/notification_registrar.h
parent5b3e09dcf48a717eccca25d4a99036dcefb31001 (diff)
downloadchromium_src-652e16d050c69adcf9a8e97912d8e554d49902bc.zip
chromium_src-652e16d050c69adcf9a8e97912d8e554d49902bc.tar.gz
chromium_src-652e16d050c69adcf9a8e97912d8e554d49902bc.tar.bz2
Move notification service code to content. We'll need to figure out how to split the type enum so that chrome specific parts aren't in content later.
TBR=avi Review URL: http://codereview.chromium.org/6627043 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@77102 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/common/notification_registrar.h')
-rw-r--r--content/common/notification_registrar.h66
1 files changed, 66 insertions, 0 deletions
diff --git a/content/common/notification_registrar.h b/content/common/notification_registrar.h
new file mode 100644
index 0000000..f912892
--- /dev/null
+++ b/content/common/notification_registrar.h
@@ -0,0 +1,66 @@
+// 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 CONTENT_COMMON_NOTIFICATION_REGISTRAR_H_
+#define CONTENT_COMMON_NOTIFICATION_REGISTRAR_H_
+#pragma once
+
+#include <vector>
+
+#include "base/basictypes.h"
+#include "content/common/notification_type.h"
+
+class NotificationObserver;
+class NotificationSource;
+
+// Aids in registering for notifications and ensures that all registered
+// notifications are unregistered when the class is destroyed.
+//
+// The intended use is that you make a NotificationRegistrar member in your
+// class and use it to register your notifications instead of going through the
+// notification service directly. It will automatically unregister them for
+// you.
+class NotificationRegistrar {
+ public:
+ // This class must not be derived from (we don't have a virtual destructor so
+ // it won't work). Instead, use it as a member in your class.
+ NotificationRegistrar();
+ ~NotificationRegistrar();
+
+ // Wrappers around NotificationService::[Add|Remove]Observer.
+ void Add(NotificationObserver* observer,
+ NotificationType type,
+ const NotificationSource& source);
+ void Remove(NotificationObserver* observer,
+ NotificationType type,
+ const NotificationSource& source);
+
+ // Unregisters all notifications.
+ void RemoveAll();
+
+ // Returns true if no notifications are registered.
+ bool IsEmpty() const;
+
+ // Returns true if there is already a registered notification with the
+ // specified details.
+ bool IsRegistered(NotificationObserver* observer,
+ NotificationType type,
+ const NotificationSource& source);
+
+ private:
+ struct Record;
+
+ // We keep registered notifications in a simple vector. This means we'll do
+ // brute-force searches when removing them individually, but individual
+ // removal is uncommon, and there will typically only be a couple of
+ // notifications anyway.
+ typedef std::vector<Record> RecordVector;
+
+ // Lists all notifications we're currently registered for.
+ RecordVector registered_;
+
+ DISALLOW_COPY_AND_ASSIGN(NotificationRegistrar);
+};
+
+#endif // CONTENT_COMMON_NOTIFICATION_REGISTRAR_H_