// Copyright (c) 2011 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_BACKGROUND_PAGE_TRACKER_H_ #define CHROME_BROWSER_BACKGROUND_PAGE_TRACKER_H_ #pragma once #include <map> #include <string> #include "base/gtest_prod_util.h" #include "base/memory/singleton.h" #include "content/common/notification_observer.h" #include "content/common/notification_registrar.h" class PrefService; /////////////////////////////////////////////////////////////////////////////// // BackgroundPageTracker // // This class is a singleton class that monitors when new background pages are // loaded, and sends out a notification. // class BackgroundPageTracker : public NotificationObserver { public: static void RegisterPrefs(PrefService* prefs); // Convenience routine which gets the singleton object. static BackgroundPageTracker* GetInstance(); // Returns the number of background apps/extensions currently loaded. int GetBackgroundPageCount(); // Returns the number of unacknowledged background pages (for use in badges, // etc). int GetUnacknowledgedBackgroundPageCount(); // Called when the user has acknowledged that new background apps have been // loaded. Future calls to GetUnacknowledgedBackgroundPageCount() will return // 0 until another background page is installed. void AcknowledgeBackgroundPages(); protected: // Constructor marked as protected so we can create mock subclasses. BackgroundPageTracker(); ~BackgroundPageTracker(); friend struct DefaultSingletonTraits<BackgroundPageTracker>; friend class BackgroundPageTrackerTest; FRIEND_TEST_ALL_PREFIXES(BackgroundPageTrackerTest, OnBackgroundPageLoaded); FRIEND_TEST_ALL_PREFIXES(BackgroundPageTrackerTest, AcknowledgeBackgroundPages); FRIEND_TEST_ALL_PREFIXES(BackgroundPageTrackerTest, TestTrackerChangedNotifications); // Mockable method to get the PrefService where we store information about // background pages. virtual PrefService* GetPrefService(); // Helper routine which checks to see if this object should be enabled or not. // If false, the BackgroundPageTracker always acts as if there are no // background pages. Virtual to allow enabling in mocks. virtual bool IsEnabled(); private: // NotificationObserver implementation. virtual void Observe(NotificationType type, const NotificationSource& source, const NotificationDetails& details); // Invoked once all extensions have been loaded, so we can update our list of // tracked pages and send out the appropriate notifications. Returns true if // the extension list was changed. bool UpdateExtensionList(); // Called when a background page is loaded (either because a hosted app // opened a BackgroundContents or a packaged extension was loaded with an // extension background page). Updates our internal list of unacknowledged // background pages. void OnBackgroundPageLoaded(const std::string& parent_application_id); // When an extension is unloaded, removes it from the list of background pages // so we no longer nag the user about it (if it is still unacknowledged) and // we inform the user if it is ever re-installed/enabled. void OnExtensionUnloaded(const std::string& parent_application_id); // Sends out a notification that the list of background pages has changed. void SendChangeNotification(); NotificationRegistrar registrar_; DISALLOW_COPY_AND_ASSIGN(BackgroundPageTracker); }; #endif // CHROME_BROWSER_BACKGROUND_PAGE_TRACKER_H_