signin_manager_factory.cc revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
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.
4
5#include "chrome/browser/signin/signin_manager_factory.h"
6
7#include "base/prefs/pref_registry_simple.h"
8#include "chrome/browser/browser_process.h"
9#include "chrome/browser/signin/chrome_signin_manager_delegate.h"
10#include "chrome/browser/signin/local_auth.h"
11#include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
12#include "chrome/browser/signin/signin_manager.h"
13#include "chrome/common/pref_names.h"
14#include "components/browser_context_keyed_service/browser_context_dependency_manager.h"
15#include "components/user_prefs/pref_registry_syncable.h"
16
17SigninManagerFactory::SigninManagerFactory()
18    : BrowserContextKeyedServiceFactory(
19        "SigninManager",
20        BrowserContextDependencyManager::GetInstance()) {
21  DependsOn(ProfileOAuth2TokenServiceFactory::GetInstance());
22}
23
24SigninManagerFactory::~SigninManagerFactory() {}
25
26#if defined(OS_CHROMEOS)
27// static
28SigninManagerBase* SigninManagerFactory::GetForProfileIfExists(
29    Profile* profile) {
30  return static_cast<SigninManagerBase*>(
31      GetInstance()->GetServiceForBrowserContext(profile, false));
32}
33
34// static
35SigninManagerBase* SigninManagerFactory::GetForProfile(
36    Profile* profile) {
37  return static_cast<SigninManagerBase*>(
38      GetInstance()->GetServiceForBrowserContext(profile, true));
39}
40
41#else
42// static
43SigninManager* SigninManagerFactory::GetForProfile(Profile* profile) {
44  return static_cast<SigninManager*>(
45      GetInstance()->GetServiceForBrowserContext(profile, true));
46}
47
48// static
49SigninManager* SigninManagerFactory::GetForProfileIfExists(Profile* profile) {
50  return static_cast<SigninManager*>(
51      GetInstance()->GetServiceForBrowserContext(profile, false));
52}
53#endif
54
55// static
56SigninManagerFactory* SigninManagerFactory::GetInstance() {
57  return Singleton<SigninManagerFactory>::get();
58}
59
60void SigninManagerFactory::RegisterProfilePrefs(
61    user_prefs::PrefRegistrySyncable* registry) {
62  registry->RegisterStringPref(
63      prefs::kGoogleServicesLastUsername,
64      std::string(),
65      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
66  registry->RegisterStringPref(
67      prefs::kGoogleServicesUserAccountId,
68      std::string(),
69      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
70  registry->RegisterStringPref(
71      prefs::kGoogleServicesUsername,
72      std::string(),
73      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
74  registry->RegisterBooleanPref(
75      prefs::kAutologinEnabled,
76      true,
77      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
78  registry->RegisterBooleanPref(
79      prefs::kReverseAutologinEnabled,
80      true,
81      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
82  registry->RegisterListPref(prefs::kReverseAutologinRejectedEmailList,
83                             new base::ListValue,
84                             user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
85  chrome::RegisterLocalAuthPrefs(registry);
86}
87
88// static
89void SigninManagerFactory::RegisterPrefs(PrefRegistrySimple* registry) {
90  registry->RegisterStringPref(prefs::kGoogleServicesUsernamePattern,
91                               std::string());
92}
93
94void SigninManagerFactory::AddObserver(Observer* observer) {
95  observer_list_.AddObserver(observer);
96}
97
98void SigninManagerFactory::RemoveObserver(Observer* observer) {
99  observer_list_.RemoveObserver(observer);
100}
101
102void SigninManagerFactory::NotifyObserversOfSigninManagerCreationForTesting(
103    SigninManagerBase* manager) {
104  FOR_EACH_OBSERVER(Observer, observer_list_, SigninManagerCreated(manager));
105}
106
107BrowserContextKeyedService* SigninManagerFactory::BuildServiceInstanceFor(
108    content::BrowserContext* context) const {
109  SigninManagerBase* service = NULL;
110  Profile* profile = static_cast<Profile*>(context);
111#if defined(OS_CHROMEOS)
112  service = new SigninManagerBase();
113#else
114  service = new SigninManager(
115      scoped_ptr<SigninManagerDelegate>(
116          new ChromeSigninManagerDelegate(profile)));
117#endif
118  service->Initialize(profile, g_browser_process->local_state());
119  FOR_EACH_OBSERVER(Observer, observer_list_, SigninManagerCreated(service));
120  return service;
121}
122
123void SigninManagerFactory::BrowserContextShutdown(
124    content::BrowserContext* context) {
125  SigninManagerBase* manager = static_cast<SigninManagerBase*>(
126      GetServiceForBrowserContext(context, false));
127  if (manager)
128    FOR_EACH_OBSERVER(Observer, observer_list_, SigninManagerShutdown(manager));
129  BrowserContextKeyedServiceFactory::BrowserContextShutdown(context);
130}
131