signin_manager_factory.cc revision 1e9bf3e0803691d0a228da41fc608347b6db4340
1a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.com// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.com// Use of this source code is governed by a BSD-style license that can be
3a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.com// found in the LICENSE file.
4a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.com
5a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.com#include "chrome/browser/signin/signin_manager_factory.h"
6a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.com
7e4fafb146e85cdfcf9d5418597b6818aa0754adatfarina@chromium.org#include "base/prefs/pref_registry_simple.h"
8a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.com#include "chrome/browser/browser_process.h"
9a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.com#include "chrome/browser/signin/chrome_signin_manager_delegate.h"
108f6884aab8aecd7657cf3f9cdbc682f0deca29c5tfarina@chromium.org#include "chrome/browser/signin/local_auth.h"
118f6884aab8aecd7657cf3f9cdbc682f0deca29c5tfarina@chromium.org#include "chrome/browser/signin/signin_manager.h"
128f6884aab8aecd7657cf3f9cdbc682f0deca29c5tfarina@chromium.org#include "chrome/browser/signin/token_service_factory.h"
13a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.com#include "chrome/common/pref_names.h"
14e4fafb146e85cdfcf9d5418597b6818aa0754adatfarina@chromium.org#include "components/browser_context_keyed_service/browser_context_dependency_manager.h"
153c8fb5171858a81b7f2f66b357891f41755c4033senorblanco@chromium.org#include "components/user_prefs/pref_registry_syncable.h"
163c8fb5171858a81b7f2f66b357891f41755c4033senorblanco@chromium.org
17a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.comSigninManagerFactory::SigninManagerFactory()
18a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.com    : BrowserContextKeyedServiceFactory(
19a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.com        "SigninManager",
20deee496cd30070e52556dcb538c2e5eb39b66b81mike@reedtribe.org        BrowserContextDependencyManager::GetInstance()) {
21a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.com  DependsOn(TokenServiceFactory::GetInstance());
22a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.com}
23a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.com
24deee496cd30070e52556dcb538c2e5eb39b66b81mike@reedtribe.orgSigninManagerFactory::~SigninManagerFactory() {}
25a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.com
26a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.com#if defined(OS_CHROMEOS)
27a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.com// static
28a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.comSigninManagerBase* SigninManagerFactory::GetForProfileIfExists(
29a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.com    Profile* profile) {
30a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.com  return static_cast<SigninManagerBase*>(
31a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.com      GetInstance()->GetServiceForBrowserContext(profile, false));
32a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.com}
33a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.com
34a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.com// static
35a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.comSigninManagerBase* SigninManagerFactory::GetForProfile(
36a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.com    Profile* profile) {
37a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.com  return static_cast<SigninManagerBase*>(
384469938e92d779dff05e745559e67907bbf21e78reed@google.com      GetInstance()->GetServiceForBrowserContext(profile, true));
394469938e92d779dff05e745559e67907bbf21e78reed@google.com}
40a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.com
41a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.com#else
42a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.com// static
43a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.comSigninManager* SigninManagerFactory::GetForProfile(Profile* profile) {
44a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.com  return static_cast<SigninManager*>(
45a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.com      GetInstance()->GetServiceForBrowserContext(profile, true));
46a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.com}
47a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.com
48a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.com// static
49a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.comSigninManager* SigninManagerFactory::GetForProfileIfExists(Profile* profile) {
50a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.com  return static_cast<SigninManager*>(
51a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.com      GetInstance()->GetServiceForBrowserContext(profile, false));
52a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.com}
53a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.com#endif
54a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.com
55a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.com// static
56a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.comSigninManagerFactory* SigninManagerFactory::GetInstance() {
57a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.com  return Singleton<SigninManagerFactory>::get();
58a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.com}
59a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.com
60a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.comvoid SigninManagerFactory::RegisterProfilePrefs(
61a1c511b8704c6c266b90860a4c68f30ca7514f9bsugoi@google.com    user_prefs::PrefRegistrySyncable* registry) {
62  registry->RegisterStringPref(
63      prefs::kGoogleServicesLastUsername,
64      std::string(),
65      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
66  registry->RegisterStringPref(
67      prefs::kGoogleServicesUsername,
68      std::string(),
69      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
70  registry->RegisterBooleanPref(
71      prefs::kAutologinEnabled,
72      true,
73      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
74  registry->RegisterBooleanPref(
75      prefs::kReverseAutologinEnabled,
76      true,
77      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
78  registry->RegisterListPref(prefs::kReverseAutologinRejectedEmailList,
79                             new ListValue,
80                             user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
81  chrome::RegisterLocalAuthPrefs(registry);
82}
83
84// static
85void SigninManagerFactory::RegisterPrefs(PrefRegistrySimple* registry) {
86  registry->RegisterStringPref(prefs::kGoogleServicesUsernamePattern,
87                               std::string());
88}
89
90BrowserContextKeyedService* SigninManagerFactory::BuildServiceInstanceFor(
91    content::BrowserContext* context) const {
92  SigninManagerBase* service = NULL;
93  Profile* profile = static_cast<Profile*>(context);
94#if defined(OS_CHROMEOS)
95  service = new SigninManagerBase();
96#else
97  service = new SigninManager(
98      scoped_ptr<SigninManagerDelegate>(
99          new ChromeSigninManagerDelegate(profile)));
100#endif
101  service->Initialize(profile, g_browser_process->local_state());
102  return service;
103}
104