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
);
45 static const SigninManagerBase
* GetForProfileIfExists(const Profile
* profile
);
47 // On non-ChromeOS platforms, the SigninManager the factory creates will be
48 // an instance of the extended SigninManager class.
49 static SigninManager
* GetForProfile(Profile
* profile
);
50 static SigninManager
* GetForProfileIfExists(Profile
* profile
);
51 static const SigninManager
* GetForProfileIfExists(const Profile
* profile
);
54 // Returns an instance of the SigninManagerFactory singleton.
55 static SigninManagerFactory
* GetInstance();
57 // Implementation of BrowserContextKeyedServiceFactory (public so tests
59 void RegisterProfilePrefs(
60 user_prefs::PrefRegistrySyncable
* registry
) override
;
62 // Registers the browser-global prefs used by SigninManager.
63 static void RegisterPrefs(PrefRegistrySimple
* registry
);
65 // Methods to register or remove observers of SigninManager creation/shutdown.
66 void AddObserver(Observer
* observer
);
67 void RemoveObserver(Observer
* observer
);
69 // Notifies observers of |manager|'s creation. Should be called only by test
70 // SigninManager subclasses whose construction does not occur in
71 // |BuildServiceInstanceFor()|.
72 void NotifyObserversOfSigninManagerCreationForTesting(
73 SigninManagerBase
* manager
);
76 friend struct base::DefaultSingletonTraits
<SigninManagerFactory
>;
78 SigninManagerFactory();
79 ~SigninManagerFactory() override
;
81 // List of observers. Checks that list is empty on destruction.
82 mutable base::ObserverList
<Observer
, true> observer_list_
;
84 // BrowserContextKeyedServiceFactory:
85 KeyedService
* BuildServiceInstanceFor(
86 content::BrowserContext
* profile
) const override
;
87 void BrowserContextShutdown(content::BrowserContext
* context
) override
;
90 #endif // CHROME_BROWSER_SIGNIN_SIGNIN_MANAGER_FACTORY_H_