Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(510)

Unified Diff: chrome/browser/background_mode_manager.h

Issue 6914021: Modifying the BackgroundModeManager to handle multiple profiles. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/background_mode_manager.h
===================================================================
--- chrome/browser/background_mode_manager.h (revision 85413)
+++ chrome/browser/background_mode_manager.h (working copy)
@@ -6,14 +6,17 @@
#define CHROME_BROWSER_BACKGROUND_MODE_MANAGER_H_
#pragma once
+#include <map>
+
#include "base/gtest_prod_util.h"
+#include "base/memory/singleton.h"
#include "chrome/browser/background_application_list_model.h"
#include "chrome/browser/prefs/pref_change_registrar.h"
#include "chrome/browser/profiles/profile_keyed_service.h"
+#include "chrome/browser/profiles/profile_status_menu_model.h"
#include "chrome/browser/status_icons/status_icon.h"
#include "content/common/notification_observer.h"
#include "content/common/notification_registrar.h"
-#include "ui/base/models/simple_menu_model.h"
class Browser;
class CommandLine;
@@ -23,6 +26,7 @@
class StatusIcon;
class StatusTray;
+
// BackgroundModeManager is responsible for switching Chrome into and out of
// "background mode" and for providing UI for the user to exit Chrome when there
// are no open browser windows.
@@ -39,16 +43,21 @@
// background.
class BackgroundModeManager
: public NotificationObserver,
- public ui::SimpleMenuModel::Delegate,
+ public ProfileStatusMenuModel::Delegate,
public BackgroundApplicationListModel::Observer,
public ProfileKeyedService {
public:
- BackgroundModeManager(Profile* profile, CommandLine* command_line);
+ BackgroundModeManager();
virtual ~BackgroundModeManager();
+ static BackgroundModeManager* GetInstance();
+
static void RegisterPrefs(PrefService* prefs);
+ virtual void RegisterProfile(Profile* profile);
+
private:
+ friend struct DefaultSingletonTraits<BackgroundModeManager>;
friend class TestBackgroundModeManager;
friend class BackgroundModeManagerTest;
FRIEND_TEST_ALL_PREFIXES(BackgroundModeManagerTest,
@@ -60,24 +69,47 @@
FRIEND_TEST_ALL_PREFIXES(BackgroundModeManagerTest,
EnableAfterBackgroundAppInstall);
+ struct BackgroundModeData {
+ BackgroundModeData();
+ ~BackgroundModeData();
+
+ // The cached list of BackgroundApplications.
+ BackgroundApplicationListModel* applications_;
Andrew T Wilson (Slow) 2011/05/20 00:22:09 nit: struct member variables should not have trail
Andrew T Wilson (Slow) 2011/05/20 00:22:09 Should this be a scoped_ptr<> so you don't have to
rpetterson 2011/05/20 05:53:17 Not an issue any more.
rpetterson 2011/05/20 05:53:17 Done.
+
+ // Reference to our status icon (if any) - owned by the StatusTray.
+ StatusIcon* status_icon_;
+
+ // Reference to our status icon's context menu (if any) - owned by the
+ // status_icon_
+ ui::SimpleMenuModel* context_menu_;
+
+ // Set to the position of the first application entry in the status icon's
+ // context menu.
+ int context_menu_application_offset_;
+ };
+
// NotificationObserver implementation.
virtual void Observe(NotificationType type,
const NotificationSource& source,
- const NotificationDetails& details);
+ const NotificationDetails& details) OVERRIDE;
- // SimpleMenuModel::Delegate implementation.
- virtual bool IsCommandIdChecked(int command_id) const;
- virtual bool IsCommandIdEnabled(int command_id) const;
+ // Overrides from SimpleMenuModel::Delegate implementation.
+ virtual bool IsCommandIdChecked(int command_id) const OVERRIDE;
+ virtual bool IsCommandIdEnabled(int command_id) const OVERRIDE;
virtual bool GetAcceleratorForCommandId(int command_id,
- ui::Accelerator* accelerator);
- virtual void ExecuteCommand(int command_id);
+ ui::Accelerator* accelerator) OVERRIDE;
+ virtual void ExecuteCommand(int command_id) OVERRIDE;
+ // Overrides from ProfileSatusMenuModel::Delegate implementation.
Andrew T Wilson (Slow) 2011/05/20 00:22:09 nit: ProfileStatusMenuModel (not ProfileSatus)
rpetterson 2011/05/20 05:53:17 Done.
+ virtual void ExecuteCommand(int command_id, Profile* profile) OVERRIDE;
+
// Open an application in a new tab, opening a new window if needed.
- virtual void ExecuteApplication(int application_id);
+ virtual void ExecuteApplication(int application_id, Profile* profile);
// BackgroundApplicationListModel::Observer implementation.
- virtual void OnApplicationDataChanged(const Extension* extension);
- virtual void OnApplicationListChanged();
+ virtual void OnApplicationDataChanged(const Extension* extension,
+ Profile* profile) OVERRIDE;
+ virtual void OnApplicationListChanged(Profile* profile) OVERRIDE;
// Called when an extension is loaded to manage count of background apps.
void OnBackgroundAppLoaded();
@@ -88,7 +120,7 @@
// Invoked when an extension is installed so we can ensure that
// launch-on-startup is enabled if appropriate. |extension| can be NULL when
// called from unit tests.
- void OnBackgroundAppInstalled(const Extension* extension);
+ void OnBackgroundAppInstalled(const Extension* extension, Profile* profile);
// Invoked when an extension is uninstalled so we can ensure that
// launch-on-startup is disabled if appropriate.
@@ -100,7 +132,8 @@
// Invoked when a background app is installed so we can display a
// platform-specific notification to the user.
- void DisplayAppInstalledNotification(const Extension* extension);
+ void DisplayAppInstalledNotification(const Extension* extension,
+ Profile* profile);
// Invoked to put Chrome in KeepAlive mode - chrome runs in the background
// and has a status bar icon.
@@ -122,26 +155,26 @@
// Create a status tray icon to allow the user to shutdown Chrome when running
// in background mode. Virtual to enable testing.
- virtual void CreateStatusTrayIcon();
+ virtual void CreateStatusTrayIcon(Profile* profile);
// Removes the status tray icon because we are exiting background mode.
// Virtual to enable testing.
- virtual void RemoveStatusTrayIcon();
+ virtual void RemoveStatusTrayIcon(Profile* profile);
// Updates the status icon's context menu entry corresponding to |extension|
// to use the icon associated with |extension| in the
// BackgroundApplicationListModel.
- void UpdateContextMenuEntryIcon(const Extension* extension);
+ void UpdateContextMenuEntryIcon(const Extension* extension, Profile* profile);
// Create a context menu, or replace/update an existing context menu, for the
// status tray icon which, among other things, allows the user to shutdown
// Chrome when running in background mode.
- virtual void UpdateStatusTrayIconContextMenu();
+ virtual void UpdateStatusTrayIconContextMenu(Profile* profile);
// Returns a browser window, or creates one if none are open. Used by
// operations (like displaying the preferences dialog) that require a Browser
// window.
- Browser* GetBrowserWindow();
+ Browser* GetBrowserWindow(Profile* profile);
// Returns true if the "Let chrome run in the background" pref is checked.
// (virtual to allow overriding in tests).
@@ -162,23 +195,17 @@
NotificationRegistrar registrar_;
PrefChangeRegistrar pref_registrar_;
- // The parent profile for this object.
- Profile* profile_;
+ // The profile-keyed data for this background mode manager. Keyed on profile.
+ std::map<Profile*, BackgroundModeData> background_mode_data_;
- // The cached list of BackgroundApplications.
- BackgroundApplicationListModel applications_;
+ // Reference to our status tray (owned by our parent profile). If null, the
Andrew T Wilson (Slow) 2011/05/20 00:22:09 Since we don't have a parent profile any more, thi
rpetterson 2011/05/20 05:53:17 Done.
+ // platform doesn't support status icons.
+ StatusTray* status_tray_;
- // The number of background apps currently loaded.
+ // The number of background apps currently loaded. This is the total over
+ // all profiles.
int background_app_count_;
- // Reference to our status icon's context menu (if any) - owned by the
- // status_icon_
- ui::SimpleMenuModel* context_menu_;
-
- // Set to the position of the first application entry in the status icon's
- // context menu.
- int context_menu_application_offset_;
-
// Set to true when we are running in background mode. Allows us to track our
// current background state so we can take the appropriate action when the
// user disables/enables background mode via preferences.
@@ -189,13 +216,6 @@
// chrome would immediately exit due to having no open windows.
bool keep_alive_for_startup_;
- // Reference to our status tray (owned by our parent profile). If null, the
- // platform doesn't support status icons.
- StatusTray* status_tray_;
-
- // Reference to our status icon (if any) - owned by the StatusTray.
- StatusIcon* status_icon_;
-
DISALLOW_COPY_AND_ASSIGN(BackgroundModeManager);
};

Powered by Google App Engine
This is Rietveld 408576698