| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // This class keeps track of the currently-active profiles in the runtime. | 5 // This class keeps track of the currently-active profiles in the runtime. |
| 6 | 6 |
| 7 #ifndef CHROME_BROWSER_PROFILES_PROFILE_MANAGER_H_ | 7 #ifndef CHROME_BROWSER_PROFILES_PROFILE_MANAGER_H_ |
| 8 #define CHROME_BROWSER_PROFILES_PROFILE_MANAGER_H_ | 8 #define CHROME_BROWSER_PROFILES_PROFILE_MANAGER_H_ |
| 9 #pragma once | 9 #pragma once |
| 10 | 10 |
| 11 #include <list> | 11 #include <list> |
| 12 #include <vector> | 12 #include <vector> |
| 13 | 13 |
| 14 #include "base/basictypes.h" | 14 #include "base/basictypes.h" |
| 15 #include "base/file_path.h" | 15 #include "base/file_path.h" |
| 16 #include "base/hash_tables.h" | 16 #include "base/hash_tables.h" |
| 17 #include "base/memory/linked_ptr.h" | 17 #include "base/memory/linked_ptr.h" |
| 18 #include "base/memory/scoped_ptr.h" | 18 #include "base/memory/scoped_ptr.h" |
| 19 #include "base/message_loop.h" | 19 #include "base/message_loop.h" |
| 20 #include "base/threading/non_thread_safe.h" | 20 #include "base/threading/non_thread_safe.h" |
| 21 #include "chrome/browser/profiles/profile.h" | 21 #include "chrome/browser/profiles/profile.h" |
| 22 #include "chrome/browser/ui/browser_init.h" | 22 #include "chrome/browser/ui/browser_init.h" |
| 23 #include "chrome/browser/ui/browser_list.h" | 23 #include "chrome/browser/ui/browser_list.h" |
| 24 #include "content/public/browser/notification_observer.h" | 24 #include "content/public/browser/notification_observer.h" |
| 25 #include "content/public/browser/notification_registrar.h" | 25 #include "content/public/browser/notification_registrar.h" |
| 26 | 26 |
| 27 #if defined(OS_WIN) |
| 28 #include "chrome/browser/profiles/profile_shortcut_manager_win.h" |
| 29 #endif |
| 30 |
| 27 class NewProfileLauncher; | 31 class NewProfileLauncher; |
| 28 class ProfileInfoCache; | 32 class ProfileInfoCache; |
| 29 | 33 |
| 30 class ProfileManagerObserver { | 34 class ProfileManagerObserver { |
| 31 public: | 35 public: |
| 32 enum Status { | 36 enum Status { |
| 33 // So epic. | 37 // Asynchronous Profile services were not created. |
| 34 STATUS_FAIL, | 38 STATUS_FAIL, |
| 35 // Profile created but before initializing extensions and promo resources. | 39 // Profile created but before initializing extensions and promo resources. |
| 36 STATUS_CREATED, | 40 STATUS_CREATED, |
| 37 // Profile is created, extensions and promo resources are initialized. | 41 // Profile is created, extensions and promo resources are initialized. |
| 38 STATUS_INITIALIZED | 42 STATUS_INITIALIZED |
| 39 }; | 43 }; |
| 40 | 44 |
| 41 // This method is called when profile is ready. If profile already exists, | 45 // This method is called when profile is ready. If profile already exists, |
| 42 // method is called with pointer to that profile and STATUS_INITIALIZED. | 46 // method is called with pointer to that profile and STATUS_INITIALIZED. |
| 43 // If profile creation has failed, method is called with |profile| equal to | 47 // If profile creation has failed, method is called with |profile| equal to |
| (...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 236 ProfileInfo* RegisterProfile(Profile* profile, bool created); | 240 ProfileInfo* RegisterProfile(Profile* profile, bool created); |
| 237 | 241 |
| 238 typedef std::pair<FilePath, string16> ProfilePathAndName; | 242 typedef std::pair<FilePath, string16> ProfilePathAndName; |
| 239 typedef std::vector<ProfilePathAndName> ProfilePathAndNames; | 243 typedef std::vector<ProfilePathAndName> ProfilePathAndNames; |
| 240 ProfilePathAndNames GetSortedProfilesFromDirectoryMap(); | 244 ProfilePathAndNames GetSortedProfilesFromDirectoryMap(); |
| 241 | 245 |
| 242 static bool CompareProfilePathAndName( | 246 static bool CompareProfilePathAndName( |
| 243 const ProfileManager::ProfilePathAndName& pair1, | 247 const ProfileManager::ProfilePathAndName& pair1, |
| 244 const ProfileManager::ProfilePathAndName& pair2); | 248 const ProfileManager::ProfilePathAndName& pair2); |
| 245 | 249 |
| 246 // Adds |profile| to the profile info cache if it's not already there. | 250 // Adds |profile| to the profile info cache if it hasn't been added yet. |
| 247 void AddProfileToCache(Profile* profile); | 251 void AddProfileToCache(Profile* profile); |
| 248 | 252 |
| 249 // For ChromeOS, determines if profile should be otr. | 253 // For ChromeOS, determines if profile should be otr. |
| 250 bool ShouldGoOffTheRecord(); | 254 bool ShouldGoOffTheRecord(); |
| 251 | 255 |
| 252 // Get the path of the next profile directory and increment the internal | 256 // Get the path of the next profile directory and increment the internal |
| 253 // count. | 257 // count. |
| 254 // Lack of side effects: | 258 // Lack of side effects: |
| 255 // This function doesn't actually create the directory or touch the file | 259 // This function doesn't actually create the directory or touch the file |
| 256 // system. | 260 // system. |
| 257 FilePath GenerateNextProfileDirectoryPath(); | 261 FilePath GenerateNextProfileDirectoryPath(); |
| 258 | 262 |
| 259 content::NotificationRegistrar registrar_; | 263 content::NotificationRegistrar registrar_; |
| 260 | 264 |
| 261 // The path to the user data directory (DIR_USER_DATA). | 265 // The path to the user data directory (DIR_USER_DATA). |
| 262 const FilePath user_data_dir_; | 266 const FilePath user_data_dir_; |
| 263 | 267 |
| 264 // Indicates that a user has logged in and that the profile specified | 268 // Indicates that a user has logged in and that the profile specified |
| 265 // in the --login-profile command line argument should be used as the | 269 // in the --login-profile command line argument should be used as the |
| 266 // default. | 270 // default. |
| 267 bool logged_in_; | 271 bool logged_in_; |
| 268 | 272 |
| 269 // True if an import process will be run. | 273 // True if an import process will be run. |
| 270 bool will_import_; | 274 bool will_import_; |
| 271 | 275 |
| 272 // Maps profile path to ProfileInfo (if profile has been created). Use | 276 // Maps profile path to ProfileInfo (if profile has been created). Use |
| 273 // RegisterProfile() to add into this map. | 277 // RegisterProfile() to add into this map. This map owns all loaded profile |
| 278 // objects in a running instance of Chrome. |
| 274 typedef std::map<FilePath, linked_ptr<ProfileInfo> > ProfilesInfoMap; | 279 typedef std::map<FilePath, linked_ptr<ProfileInfo> > ProfilesInfoMap; |
| 275 ProfilesInfoMap profiles_info_; | 280 ProfilesInfoMap profiles_info_; |
| 276 | 281 |
| 277 // Object to cache various information about profiles. | 282 // Object to cache various information about profiles. Contains information |
| 283 // about every profile which has been created for this instance of Chrome, |
| 284 // if it has not been explicitly deleted. |
| 278 scoped_ptr<ProfileInfoCache> profile_info_cache_; | 285 scoped_ptr<ProfileInfoCache> profile_info_cache_; |
| 279 | 286 |
| 287 #if defined(OS_WIN) |
| 288 // Manages the creation, deletion, and renaming of Windows shortcuts by |
| 289 // observing the ProfileInfoCache. |
| 290 scoped_ptr<ProfileShortcutManagerWin> profile_shortcut_manager_; |
| 291 #endif |
| 292 |
| 280 DISALLOW_COPY_AND_ASSIGN(ProfileManager); | 293 DISALLOW_COPY_AND_ASSIGN(ProfileManager); |
| 281 }; | 294 }; |
| 282 | 295 |
| 283 // Same as the ProfileManager, but doesn't initialize some services of the | 296 // Same as the ProfileManager, but doesn't initialize some services of the |
| 284 // profile. This one is useful in unittests. | 297 // profile. This one is useful in unittests. |
| 285 class ProfileManagerWithoutInit : public ProfileManager { | 298 class ProfileManagerWithoutInit : public ProfileManager { |
| 286 public: | 299 public: |
| 287 explicit ProfileManagerWithoutInit(const FilePath& user_data_dir); | 300 explicit ProfileManagerWithoutInit(const FilePath& user_data_dir); |
| 288 | 301 |
| 289 protected: | 302 protected: |
| 290 virtual void DoFinalInitForServices(Profile*, bool) OVERRIDE {} | 303 virtual void DoFinalInitForServices(Profile*, bool) OVERRIDE {} |
| 291 virtual void DoFinalInitLogging(Profile*) OVERRIDE {} | 304 virtual void DoFinalInitLogging(Profile*) OVERRIDE {} |
| 292 }; | 305 }; |
| 293 | 306 |
| 294 #endif // CHROME_BROWSER_PROFILES_PROFILE_MANAGER_H_ | 307 #endif // CHROME_BROWSER_PROFILES_PROFILE_MANAGER_H_ |
| OLD | NEW |