Pin Chrome's shortcut to the Win10 Start menu on install and OS upgrade.
[chromium-blink-merge.git] / chrome / browser / signin / signin_manager_factory.h
blobee56185a52013a9b34360218ccca767623b8110f
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"
12 class SigninManager;
13 class SigninManagerBase;
14 class PrefRegistrySimple;
15 class Profile;
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 {
21 public:
22 class Observer {
23 public:
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) {}
31 protected:
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
43 // instance).
44 static SigninManagerBase* GetForProfileIfExists(Profile* profile);
45 static const SigninManagerBase* GetForProfileIfExists(const Profile* profile);
46 #else
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);
52 #endif
54 // Returns an instance of the SigninManagerFactory singleton.
55 static SigninManagerFactory* GetInstance();
57 // Implementation of BrowserContextKeyedServiceFactory (public so tests
58 // can call it).
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);
75 private:
76 friend struct 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_