text: // Copyright (c) 2012 The Chromium Authors. All rights reserved.
  // Use of this source code is governed by a BSD-style license that can be
  // found in the LICENSE file.
  
  #ifndef CHROME_BROWSER_PASSWORD_MANAGER_PASSWORD_STORE_FACTORY_H_
  #define CHROME_BROWSER_PASSWORD_MANAGER_PASSWORD_STORE_FACTORY_H_
  
  #include "base/basictypes.h"
  #include "base/memory/singleton.h"
  #include "chrome/browser/profiles/profile.h"
  #include "chrome/browser/profiles/refcounted_profile_keyed_service_factory.h"
  
  class PasswordStore;
  class Profile;
  
  #if !defined(OS_MACOSX) && !defined(OS_CHROMEOS) && defined(OS_POSIX)
  // Local profile ids are used to associate resources stored outside the profile
  // directory, like saved passwords in GNOME Keyring / KWallet, with a profile.
  // With high probability, they are unique on the local machine. They are almost
  // certainly not unique globally, by design. Do not send them over the network.
  typedef int LocalProfileId;
  #endif
  
  // Singleton that owns all PasswordStores and associates them with
  // Profiles. Listens for the Profile's destruction notification and cleans up
  // the associated PasswordStore.
  class PasswordStoreFactory : public RefcountedProfileKeyedServiceFactory {
   public:
    static scoped_refptr<PasswordStore> GetForProfile(
        Profile* profile, Profile::ServiceAccessType set);
  
    static PasswordStoreFactory* GetInstance();
  
   private:
    friend struct DefaultSingletonTraits<PasswordStoreFactory>;
  
    PasswordStoreFactory();
    virtual ~PasswordStoreFactory();
  
  #if !defined(OS_MACOSX) && !defined(OS_CHROMEOS) && defined(OS_POSIX)
    LocalProfileId GetLocalProfileId(PrefService* prefs) const;
  #endif
  
    // ProfileKeyedServiceFactory:
    virtual scoped_refptr<RefcountedProfileKeyedService> BuildServiceInstanceFor(
        Profile* profile) const OVERRIDE;
    virtual void RegisterUserPrefs(PrefService* prefs) OVERRIDE;
    virtual bool ServiceRedirectedInIncognito() const OVERRIDE;
    virtual bool ServiceIsNULLWhileTesting() const OVERRIDE;
  
    DISALLOW_COPY_AND_ASSIGN(PasswordStoreFactory);
  };
  
  #endif  // CHROME_BROWSER_PASSWORD_MANAGER_PASSWORD_STORE_FACTORY_H_
  