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