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