Home | History | Annotate | Download | only in profiles
      1 // Copyright 2013 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 #ifndef CHROME_BROWSER_PROFILES_PROFILE_LOADER_H_
      6 #define CHROME_BROWSER_PROFILES_PROFILE_LOADER_H_
      7 
      8 #include "base/callback.h"
      9 #include "base/memory/weak_ptr.h"
     10 #include "chrome/browser/profiles/profile.h"
     11 #include "chrome/browser/profiles/profile_manager.h"
     12 
     13 namespace base {
     14 class FilePath;
     15 }
     16 
     17 class ProfileManager;
     18 
     19 // This class loads profiles asynchronously and calls the provided callback once
     20 // the profile is ready. Only the callback for the most recent load request is
     21 // called, and only if the load was successful.
     22 //
     23 // This is useful for loading profiles in response to user interaction where
     24 // only the latest requested profile is required.
     25 class ProfileLoader {
     26  public:
     27   explicit ProfileLoader(ProfileManager* profile_manager);
     28   ~ProfileLoader();
     29 
     30   bool IsAnyProfileLoading() const;
     31   void InvalidatePendingProfileLoads();
     32   void LoadProfileInvalidatingOtherLoads(
     33       const base::FilePath& profile_file_path,
     34       base::Callback<void(Profile*)> callback);
     35 
     36  protected:
     37   // These just call through to the ProfileManager.
     38   // Virtual so they can be mocked out in tests.
     39   virtual Profile* GetProfileByPath(const base::FilePath& path);
     40   virtual void CreateProfileAsync(
     41       const base::FilePath& profile_path,
     42       const ProfileManager::CreateCallback& callback,
     43       const string16& name,
     44       const string16& icon_url,
     45       const std::string& managed_user_id);
     46 
     47  private:
     48   void OnProfileLoaded(int profile_load_sequence_id,
     49                        base::Callback<void(Profile*)> callback,
     50                        Profile* profile,
     51                        Profile::CreateStatus status);
     52 
     53   void IncrementPendingProfileLoads();
     54   void DecrementPendingProfileLoads();
     55 
     56   ProfileManager* profile_manager_;
     57   int profile_load_sequence_id_;
     58   int pending_profile_loads_;
     59 
     60   base::WeakPtrFactory<ProfileLoader> weak_factory_;
     61 
     62   DISALLOW_COPY_AND_ASSIGN(ProfileLoader);
     63 };
     64 
     65 #endif  // CHROME_BROWSER_PROFILES_PROFILE_LOADER_H_
     66