// Copyright (c) 2012 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_RENDERER_ACTIVE_NOTIFICATION_TRACKER_H_ #define CONTENT_RENDERER_ACTIVE_NOTIFICATION_TRACKER_H_ #include <map> #include "base/basictypes.h" #include "base/containers/hash_tables.h" #include "base/id_map.h" #include "content/common/content_export.h" #include "third_party/WebKit/public/web/WebNotification.h" namespace blink { class WebNotificationPermissionCallback; } namespace content { // This class manages the set of active Notification objects in either // a render or worker process. This class should be accessed only on // the main thread. class CONTENT_EXPORT ActiveNotificationTracker { public: ActiveNotificationTracker(); ~ActiveNotificationTracker(); // Methods for tracking active notification objects. int RegisterNotification(const blink::WebNotification& notification); void UnregisterNotification(int id); bool GetId(const blink::WebNotification& notification, int& id); bool GetNotification(int id, blink::WebNotification* notification); // Methods for tracking active permission requests. int RegisterPermissionRequest( blink::WebNotificationPermissionCallback* callback); void OnPermissionRequestComplete(int id); blink::WebNotificationPermissionCallback* GetCallback(int id); // Clears out all active notifications. Useful on page navigation. void Clear(); private: typedef std::map<blink::WebNotification, int> ReverseTable; // Tracking maps for active notifications and permission requests. IDMap<blink::WebNotification> notification_table_; ReverseTable reverse_notification_table_; IDMap<blink::WebNotificationPermissionCallback> callback_table_; DISALLOW_COPY_AND_ASSIGN(ActiveNotificationTracker); }; } // namespace content #endif // CONTENT_RENDERER_ACTIVE_NOTIFICATION_TRACKER_H_