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.
4
5#ifndef CONTENT_RENDERER_ACTIVE_NOTIFICATION_TRACKER_H_
6#define CONTENT_RENDERER_ACTIVE_NOTIFICATION_TRACKER_H_
7
8#include <map>
9
10#include "base/basictypes.h"
11#include "base/containers/hash_tables.h"
12#include "base/id_map.h"
13#include "content/common/content_export.h"
14#include "third_party/WebKit/public/web/WebNotification.h"
15
16namespace blink {
17class WebNotificationPermissionCallback;
18}
19
20namespace content {
21
22// This class manages the set of active Notification objects in either
23// a render or worker process.  This class should be accessed only on
24// the main thread.
25class CONTENT_EXPORT ActiveNotificationTracker {
26 public:
27  ActiveNotificationTracker();
28  ~ActiveNotificationTracker();
29
30  // Methods for tracking active notification objects.
31  int RegisterNotification(const blink::WebNotification& notification);
32  void UnregisterNotification(int id);
33  bool GetId(const blink::WebNotification& notification, int& id);
34  bool GetNotification(int id, blink::WebNotification* notification);
35
36  // Methods for tracking active permission requests.
37  int RegisterPermissionRequest(
38      blink::WebNotificationPermissionCallback* callback);
39  void OnPermissionRequestComplete(int id);
40  blink::WebNotificationPermissionCallback* GetCallback(int id);
41
42  // Clears out all active notifications.  Useful on page navigation.
43  void Clear();
44
45 private:
46  typedef std::map<blink::WebNotification, int> ReverseTable;
47
48  // Tracking maps for active notifications and permission requests.
49  IDMap<blink::WebNotification> notification_table_;
50  ReverseTable reverse_notification_table_;
51  IDMap<blink::WebNotificationPermissionCallback> callback_table_;
52
53  DISALLOW_COPY_AND_ASSIGN(ActiveNotificationTracker);
54};
55
56}  // namespace content
57
58#endif  // CONTENT_RENDERER_ACTIVE_NOTIFICATION_TRACKER_H_
59