OLD | NEW |
| (Empty) |
1 // Copyright (c) 2010 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 // This class keeps track of the currently-active profiles in the runtime. | |
6 | |
7 #ifndef CHROME_BROWSER_PROFILE_MANAGER_H__ | |
8 #define CHROME_BROWSER_PROFILE_MANAGER_H__ | |
9 #pragma once | |
10 | |
11 #include <vector> | |
12 | |
13 #include "app/system_monitor.h" | |
14 #include "base/basictypes.h" | |
15 #include "base/message_loop.h" | |
16 #include "base/non_thread_safe.h" | |
17 #include "chrome/browser/profile.h" | |
18 #include "chrome/common/notification_observer.h" | |
19 #include "chrome/common/notification_registrar.h" | |
20 | |
21 class FilePath; | |
22 | |
23 class ProfileManager : public NonThreadSafe, | |
24 public SystemMonitor::PowerObserver, | |
25 public NotificationObserver { | |
26 public: | |
27 ProfileManager(); | |
28 virtual ~ProfileManager(); | |
29 | |
30 // Invokes ShutdownSessionService() on all profiles. | |
31 static void ShutdownSessionServices(); | |
32 | |
33 // Returns the default profile. This adds the profile to the | |
34 // ProfileManager if it doesn't already exist. This method returns NULL if | |
35 // the profile doesn't exist and we can't create it. | |
36 // The profile used can be overridden by using --login-profile on cros. | |
37 Profile* GetDefaultProfile(const FilePath& user_data_dir); | |
38 | |
39 // Same as instance method but provides the default user_data_dir as well. | |
40 static Profile* GetDefaultProfile(); | |
41 | |
42 // Returns a profile for a specific profile directory within the user data | |
43 // dir. This will return an existing profile it had already been created, | |
44 // otherwise it will create and manage it. | |
45 Profile* GetProfile(const FilePath& profile_dir); | |
46 | |
47 // Returns a profile for a specific profile directory within the user data | |
48 // dir with the option of controlling whether extensions are initialized | |
49 // or not. This will return an existing profile it had already been created, | |
50 // otherwise it will create and manage it. | |
51 // Note that if the profile has already been created, extensions may have | |
52 // been initialized. If this matters to you, you should call GetProfileByPath | |
53 // first to see if the profile already exists. | |
54 Profile* GetProfile(const FilePath& profile_dir, bool init_extensions); | |
55 | |
56 // Returns the directory where the currently active profile is | |
57 // stored, relative to the user data directory currently in use.. | |
58 FilePath GetCurrentProfileDir(); | |
59 | |
60 // These allow iteration through the current list of profiles. | |
61 typedef std::vector<Profile*> ProfileVector; | |
62 typedef ProfileVector::iterator iterator; | |
63 typedef ProfileVector::const_iterator const_iterator; | |
64 | |
65 iterator begin() { return profiles_.begin(); } | |
66 const_iterator begin() const { return profiles_.begin(); } | |
67 iterator end() { return profiles_.end(); } | |
68 const_iterator end() const { return profiles_.end(); } | |
69 | |
70 // PowerObserver notifications | |
71 void OnSuspend(); | |
72 void OnResume(); | |
73 | |
74 // NotificationObserver implementation. | |
75 virtual void Observe(NotificationType type, | |
76 const NotificationSource& source, | |
77 const NotificationDetails& details); | |
78 | |
79 // ------------------ static utility functions ------------------- | |
80 | |
81 // Returns the path to the default profile directory, based on the given | |
82 // user data directory. | |
83 static FilePath GetDefaultProfileDir(const FilePath& user_data_dir); | |
84 | |
85 // Returns the path to the preferences file given the user profile directory. | |
86 static FilePath GetProfilePrefsPath(const FilePath& profile_dir); | |
87 | |
88 // Tries to determine whether the given path represents a profile | |
89 // directory, and returns true if it thinks it does. | |
90 static bool IsProfile(const FilePath& path); | |
91 | |
92 // If a profile with the given path is currently managed by this object, | |
93 // return a pointer to the corresponding Profile object; | |
94 // otherwise return NULL. | |
95 Profile* GetProfileByPath(const FilePath& path) const; | |
96 | |
97 // Creates a new profile at the specified path. | |
98 // This method should always return a valid Profile (i.e., should never | |
99 // return NULL). | |
100 static Profile* CreateProfile(const FilePath& path); | |
101 | |
102 private: | |
103 // Hooks to suspend/resume per-profile network traffic. | |
104 // These must be called on the IO thread. | |
105 static void SuspendProfile(Profile*); | |
106 static void ResumeProfile(Profile*); | |
107 | |
108 // Adds a pre-existing Profile object to the set managed by this | |
109 // ProfileManager. This ProfileManager takes ownership of the Profile. | |
110 // The Profile should not already be managed by this ProfileManager. | |
111 // Returns true if the profile was added, false otherwise. | |
112 bool AddProfile(Profile* profile, bool init_extensions); | |
113 | |
114 // We keep a simple vector of profiles rather than something fancier | |
115 // because we expect there to be a small number of profiles active. | |
116 ProfileVector profiles_; | |
117 | |
118 NotificationRegistrar registrar_; | |
119 | |
120 // Indicates that a user has logged in and that the profile specified | |
121 // in the --login-profile command line argument should be used as the | |
122 // default. | |
123 bool logged_in_; | |
124 | |
125 DISALLOW_COPY_AND_ASSIGN(ProfileManager); | |
126 }; | |
127 | |
128 #endif // CHROME_BROWSER_PROFILE_MANAGER_H__ | |
OLD | NEW |