1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// found in the LICENSE file. 4201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 5201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#ifndef CHROME_BROWSER_BACKGROUND_PAGE_TRACKER_H_ 6201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#define CHROME_BROWSER_BACKGROUND_PAGE_TRACKER_H_ 7201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#pragma once 8201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 9201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include <map> 10201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include <string> 11201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 12201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "base/gtest_prod_util.h" 13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/singleton.h" 14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_observer.h" 15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_registrar.h" 16201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 17201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochclass PrefService; 18201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 19201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch/////////////////////////////////////////////////////////////////////////////// 20201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// BackgroundPageTracker 21201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// 22201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// This class is a singleton class that monitors when new background pages are 23201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// loaded, and sends out a notification. 24201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// 25201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochclass BackgroundPageTracker : public NotificationObserver { 26201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch public: 27201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch static void RegisterPrefs(PrefService* prefs); 28201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 29201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Convenience routine which gets the singleton object. 3021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen static BackgroundPageTracker* GetInstance(); 31201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 32201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Returns the number of background apps/extensions currently loaded. 33201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch int GetBackgroundPageCount(); 34201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 35201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Returns the number of unacknowledged background pages (for use in badges, 36201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // etc). 37201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch int GetUnacknowledgedBackgroundPageCount(); 38201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 39201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Called when the user has acknowledged that new background apps have been 40201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // loaded. Future calls to GetUnacknowledgedBackgroundPageCount() will return 41201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // 0 until another background page is installed. 42201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch void AcknowledgeBackgroundPages(); 43201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 44201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch protected: 45201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Constructor marked as protected so we can create mock subclasses. 46201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch BackgroundPageTracker(); 47201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ~BackgroundPageTracker(); 48201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch friend struct DefaultSingletonTraits<BackgroundPageTracker>; 49201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch friend class BackgroundPageTrackerTest; 50201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch FRIEND_TEST_ALL_PREFIXES(BackgroundPageTrackerTest, OnBackgroundPageLoaded); 51201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch FRIEND_TEST_ALL_PREFIXES(BackgroundPageTrackerTest, 52201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch AcknowledgeBackgroundPages); 53201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch FRIEND_TEST_ALL_PREFIXES(BackgroundPageTrackerTest, 54201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch TestTrackerChangedNotifications); 55201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 56201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Mockable method to get the PrefService where we store information about 57201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // background pages. 58201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch virtual PrefService* GetPrefService(); 59201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 60201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Helper routine which checks to see if this object should be enabled or not. 61201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // If false, the BackgroundPageTracker always acts as if there are no 62201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // background pages. Virtual to allow enabling in mocks. 63201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch virtual bool IsEnabled(); 64201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 65201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch private: 66201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // NotificationObserver implementation. 67201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch virtual void Observe(NotificationType type, 68201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch const NotificationSource& source, 69201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch const NotificationDetails& details); 70201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 71201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Invoked once all extensions have been loaded, so we can update our list of 72201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // tracked pages and send out the appropriate notifications. Returns true if 73201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // the extension list was changed. 74201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch bool UpdateExtensionList(); 75201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 76201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Called when a background page is loaded (either because a hosted app 77201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // opened a BackgroundContents or a packaged extension was loaded with an 78201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // extension background page). Updates our internal list of unacknowledged 79201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // background pages. 80201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch void OnBackgroundPageLoaded(const std::string& parent_application_id); 81201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 82201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // When an extension is unloaded, removes it from the list of background pages 83201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // so we no longer nag the user about it (if it is still unacknowledged) and 84201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // we inform the user if it is ever re-installed/enabled. 85201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch void OnExtensionUnloaded(const std::string& parent_application_id); 86201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 87201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Sends out a notification that the list of background pages has changed. 88201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch void SendChangeNotification(); 89201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 90201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch NotificationRegistrar registrar_; 91201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 92201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch DISALLOW_COPY_AND_ASSIGN(BackgroundPageTracker); 93201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch}; 94201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 95201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#endif // CHROME_BROWSER_BACKGROUND_PAGE_TRACKER_H_ 96