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