1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file. 4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/ui/app_list/app_list_syncable_service_factory.h" 6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 76d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include <set> 86d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/prefs/pref_service.h" 106d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "chrome/browser/apps/drive/drive_app_provider.h" 11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/profiles/incognito_helpers.h" 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/profiles/profile.h" 13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/ui/app_list/app_list_syncable_service.h" 14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "components/keyed_service/content/browser_context_dependency_manager.h" 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extension_system.h" 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extension_system_provider.h" 175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extensions_browser_client.h" 18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 19a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#if defined(OS_CHROMEOS) 20a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "chrome/browser/chromeos/profiles/profile_helper.h" 21a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#endif 22a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace app_list { 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// static 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)AppListSyncableService* AppListSyncableServiceFactory::GetForProfile( 27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Profile* profile) { 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return static_cast<AppListSyncableService*>( 29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GetInstance()->GetServiceForBrowserContext(profile, true)); 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// static 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)AppListSyncableServiceFactory* AppListSyncableServiceFactory::GetInstance() { 34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return Singleton<AppListSyncableServiceFactory>::get(); 35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 37c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// static 38c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochKeyedService* AppListSyncableServiceFactory::BuildInstanceFor( 39c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch content::BrowserContext* browser_context) { 40c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch Profile* profile = static_cast<Profile*>(browser_context); 41a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#if defined(OS_CHROMEOS) 42a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch if (chromeos::ProfileHelper::IsSigninProfile(profile)) 43a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return NULL; 44a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#endif 45a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch VLOG(1) << "BuildInstanceFor: " << profile->GetDebugName() 46a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch << " (" << profile << ")"; 47c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return new AppListSyncableService(profile, 48c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch extensions::ExtensionSystem::Get(profile)); 49c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 50c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)AppListSyncableServiceFactory::AppListSyncableServiceFactory() 52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) : BrowserContextKeyedServiceFactory( 53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "AppListSyncableService", 54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) BrowserContextDependencyManager::GetInstance()) { 55c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch VLOG(1) << "AppListSyncableServiceFactory()"; 566d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) typedef std::set<BrowserContextKeyedServiceFactory*> FactorySet; 576d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) FactorySet dependent_factories; 586d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) dependent_factories.insert( 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions::ExtensionsBrowserClient::Get()->GetExtensionSystemFactory()); 606d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) DriveAppProvider::AppendDependsOnFactories(&dependent_factories); 616d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) for (FactorySet::iterator it = dependent_factories.begin(); 626d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) it != dependent_factories.end(); 636d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ++it) { 646d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) DependsOn(*it); 656d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) } 66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)AppListSyncableServiceFactory::~AppListSyncableServiceFactory() { 69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 71a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)KeyedService* AppListSyncableServiceFactory::BuildServiceInstanceFor( 72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) content::BrowserContext* browser_context) const { 73c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return BuildInstanceFor(static_cast<Profile*>(browser_context)); 74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void AppListSyncableServiceFactory::RegisterProfilePrefs( 77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) user_prefs::PrefRegistrySyncable* registry) { 78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)content::BrowserContext* AppListSyncableServiceFactory::GetBrowserContextToUse( 81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) content::BrowserContext* context) const { 82a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // This matches the logic in ExtensionSyncServiceFactory, which uses the 83a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // orginal browser context. 84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return chrome::GetBrowserContextRedirectedInIncognito(context); 85f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 86f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 87c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochbool AppListSyncableServiceFactory::ServiceIsCreatedWithBrowserContext() const { 88c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Start AppListSyncableService early so that the app list positions are 89c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // available before the app list is opened. 90c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return true; 91c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 92c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 93c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochbool AppListSyncableServiceFactory::ServiceIsNULLWhileTesting() const { 94c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return true; 95c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 96c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} // namespace app_list 98