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