profile_sync_service_factory.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
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/sync/profile_sync_service_factory.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/singleton.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/autofill/personal_data_manager_factory.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/bookmarks/bookmark_model_factory.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/defaults.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_system_factory.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/history/history_service_factory.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/password_manager/password_store_factory.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prefs/pref_service.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile_dependency_manager.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/search_engines/template_url_service_factory.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sessions/tab_restore_service_factory.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/signin/signin_manager.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/signin/signin_manager_factory.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/profile_sync_components_factory_impl.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/profile_sync_service.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/themes/theme_service_factory.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/global_error/global_error_service_factory.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/webdata/web_data_service_factory.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ProfileSyncServiceFactory* ProfileSyncServiceFactory::GetInstance() { 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return Singleton<ProfileSyncServiceFactory>::get(); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ProfileSyncService* ProfileSyncServiceFactory::GetForProfile( 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile) { 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ProfileSyncService::IsSyncEnabled()) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return static_cast<ProfileSyncService*>( 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetInstance()->GetServiceForProfile(profile, true)); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ProfileSyncServiceBase* ProfileSyncServiceBase::FromBrowserContext( 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserContext* context) { 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ProfileSyncServiceFactory::GetForProfile( 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<Profile*>(context)); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ProfileSyncServiceFactory::ProfileSyncServiceFactory() 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ProfileKeyedServiceFactory("ProfileSyncService", 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileDependencyManager::GetInstance()) { 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The ProfileSyncService depends on various SyncableServices being around 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // when it is shut down. Specify those dependencies here to build the proper 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // destruction order. 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DependsOn(TemplateURLServiceFactory::GetInstance()); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DependsOn(PersonalDataManagerFactory::GetInstance()); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(ENABLE_THEMES) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DependsOn(ThemeServiceFactory::GetInstance()); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DependsOn(GlobalErrorServiceFactory::GetInstance()); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DependsOn(SigninManagerFactory::GetInstance()); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DependsOn(PasswordStoreFactory::GetInstance()); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DependsOn(extensions::ExtensionSystemFactory::GetInstance()); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DependsOn(WebDataServiceFactory::GetInstance()); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DependsOn(HistoryServiceFactory::GetInstance()); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DependsOn(BookmarkModelFactory::GetInstance()); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The following have not been converted to ProfileKeyedServices yet, and for 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // now they are explicitly destroyed after the ProfileDependencyManager is 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // told to DestroyProfileServices, so they will be around when the 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ProfileSyncService is destroyed. 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // DependsOn(FaviconServiceFactory::GetInstance()); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ProfileSyncServiceFactory::~ProfileSyncServiceFactory() { 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ProfileKeyedService* ProfileSyncServiceFactory::BuildServiceInstanceFor( 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile) const { 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileSyncService::StartBehavior behavior = 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser_defaults::kSyncAutoStarts ? ProfileSyncService::AUTO_START 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ProfileSyncService::MANUAL_START; 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SigninManager* signin = SigninManagerFactory::GetForProfile(profile); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(tim): Currently, AUTO/MANUAL settings refer to the *first* time sync 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is set up and *not* a browser restart for a manual-start platform (where 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // sync has already been set up, and should be able to start without user 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // intervention). We can get rid of the browser_default eventually, but 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // need to take care that ProfileSyncService doesn't get tripped up between 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // those two cases. Bug 88109. 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileSyncService* pss = new ProfileSyncService( 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new ProfileSyncComponentsFactoryImpl(profile, 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine::ForCurrentProcess()), 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile, 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) signin, 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) behavior); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pss->factory()->RegisterDataTypes(pss); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pss->Initialize(); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return pss; 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ProfileSyncServiceFactory::HasProfileSyncService(Profile* profile) { 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetInstance()->GetServiceForProfile(profile, false) != NULL; 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 112