1 // Copyright (c) 2012 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.
5 #ifndef CHROME_BROWSER_SIGNIN_SIGNIN_MANAGER_FACTORY_H_
6 #define CHROME_BROWSER_SIGNIN_SIGNIN_MANAGER_FACTORY_H_
8 #include "base/memory/singleton.h"
9 #include "base/observer_list.h"
10 #include "components/keyed_service/content/browser_context_keyed_service_factory.h"
13 class SigninManagerBase;
14 class PrefRegistrySimple;
17 // Singleton that owns all SigninManagers and associates them with
18 // Profiles. Listens for the Profile's destruction notification and cleans up
19 // the associated SigninManager.
20 class SigninManagerFactory : public BrowserContextKeyedServiceFactory {
24 // Called when a SigninManager(Base) instance is created.
25 virtual void SigninManagerCreated(SigninManagerBase* manager) {}
27 // Called when a SigninManager(Base) instance is being shut down. Observers
28 // of |manager| should remove themselves at this point.
29 virtual void SigninManagerShutdown(SigninManagerBase* manager) {}
32 virtual ~Observer() {}
35 #if defined(OS_CHROMEOS)
36 // Returns the instance of SigninManager associated with this profile
37 // (creating one if none exists). Returns NULL if this profile cannot have a
38 // SigninManager (for example, if |profile| is incognito).
39 static SigninManagerBase* GetForProfile(Profile* profile);
41 // Returns the instance of SigninManager associated with this profile. Returns
42 // null if no SigninManager instance currently exists (will not create a new
44 static SigninManagerBase* GetForProfileIfExists(Profile* profile);
46 // On non-ChromeOS platforms, the SigninManager the factory creates will be
47 // an instance of the extended SigninManager class.
48 static SigninManager* GetForProfile(Profile* profile);
49 static SigninManager* GetForProfileIfExists(Profile* profile);
52 // Returns an instance of the SigninManagerFactory singleton.
53 static SigninManagerFactory* GetInstance();
55 // Implementation of BrowserContextKeyedServiceFactory (public so tests
57 void RegisterProfilePrefs(
58 user_prefs::PrefRegistrySyncable* registry) override;
60 // Registers the browser-global prefs used by SigninManager.
61 static void RegisterPrefs(PrefRegistrySimple* registry);
63 // Methods to register or remove observers of SigninManager creation/shutdown.
64 void AddObserver(Observer* observer);
65 void RemoveObserver(Observer* observer);
67 // Notifies observers of |manager|'s creation. Should be called only by test
68 // SigninManager subclasses whose construction does not occur in
69 // |BuildServiceInstanceFor()|.
70 void NotifyObserversOfSigninManagerCreationForTesting(
71 SigninManagerBase* manager);
74 friend struct DefaultSingletonTraits<SigninManagerFactory>;
76 SigninManagerFactory();
77 ~SigninManagerFactory() override;
79 // List of observers. Checks that list is empty on destruction.
80 mutable ObserverList<Observer, true> observer_list_;
82 // BrowserContextKeyedServiceFactory:
83 KeyedService* BuildServiceInstanceFor(
84 content::BrowserContext* profile) const override;
85 void BrowserContextShutdown(content::BrowserContext* context) override;
88 #endif // CHROME_BROWSER_SIGNIN_SIGNIN_MANAGER_FACTORY_H_