signin_manager_factory.cc revision f2477e01787aa58f445919b809d89e252beef54f
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/signin/signin_manager_factory.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_registry_simple.h"
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/browser_process.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/signin/chrome_signin_manager_delegate.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/signin/local_auth.h"
1190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
1290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/signin/signin_manager.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h"
14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "components/browser_context_keyed_service/browser_context_dependency_manager.h"
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "components/user_prefs/pref_registry_syncable.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)SigninManagerFactory::SigninManagerFactory()
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : BrowserContextKeyedServiceFactory(
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "SigninManager",
20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        BrowserContextDependencyManager::GetInstance()) {
21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  DependsOn(ProfileOAuth2TokenServiceFactory::GetInstance());
22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)SigninManagerFactory::~SigninManagerFactory() {}
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_CHROMEOS)
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SigninManagerBase* SigninManagerFactory::GetForProfileIfExists(
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    Profile* profile) {
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return static_cast<SigninManagerBase*>(
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GetInstance()->GetServiceForBrowserContext(profile, false));
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static
3590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)SigninManagerBase* SigninManagerFactory::GetForProfile(
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    Profile* profile) {
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return static_cast<SigninManagerBase*>(
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GetInstance()->GetServiceForBrowserContext(profile, true));
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SigninManager* SigninManagerFactory::GetForProfile(Profile* profile) {
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return static_cast<SigninManager*>(
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      GetInstance()->GetServiceForBrowserContext(profile, true));
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)SigninManager* SigninManagerFactory::GetForProfileIfExists(Profile* profile) {
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return static_cast<SigninManager*>(
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GetInstance()->GetServiceForBrowserContext(profile, false));
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)SigninManagerFactory* SigninManagerFactory::GetInstance() {
5790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  return Singleton<SigninManagerFactory>::get();
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void SigninManagerFactory::RegisterProfilePrefs(
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    user_prefs::PrefRegistrySyncable* registry) {
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  registry->RegisterStringPref(
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      prefs::kGoogleServicesLastUsername,
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      std::string(),
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  registry->RegisterStringPref(
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      prefs::kGoogleServicesUsername,
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      std::string(),
6990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  registry->RegisterBooleanPref(
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      prefs::kAutologinEnabled,
72b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)      true,
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
7490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  registry->RegisterBooleanPref(
7590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      prefs::kReverseAutologinEnabled,
7690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      true,
7790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
7890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  registry->RegisterListPref(prefs::kReverseAutologinRejectedEmailList,
7990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                             new ListValue,
8090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                             user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  chrome::RegisterLocalAuthPrefs(registry);
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SigninManagerFactory::RegisterPrefs(PrefRegistrySimple* registry) {
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  registry->RegisterStringPref(prefs::kGoogleServicesUsernamePattern,
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                               std::string());
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)BrowserContextKeyedService* SigninManagerFactory::BuildServiceInstanceFor(
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    content::BrowserContext* context) const {
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SigninManagerBase* service = NULL;
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Profile* profile = static_cast<Profile*>(context);
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_CHROMEOS)
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  service = new SigninManagerBase();
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  service = new SigninManager(
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      scoped_ptr<SigninManagerDelegate>(
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          new ChromeSigninManagerDelegate(profile)));
1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  service->Initialize(profile, g_browser_process->local_state());
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return service;
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)