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)#ifndef CHROME_BROWSER_UI_APP_LIST_APP_LIST_SYNCABLE_SERVICE_FACTORY_H_
6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define CHROME_BROWSER_UI_APP_LIST_APP_LIST_SYNCABLE_SERVICE_FACTORY_H_
7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/basictypes.h"
9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/memory/singleton.h"
10a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class Profile;
13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace app_list {
15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class AppListSyncableService;
17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Singleton that owns all AppListSyncableServices and associates them with
19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Profiles. Listens for the Profile's destruction notification and cleans up
20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// the associated AppListSyncableService.
21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class AppListSyncableServiceFactory : public BrowserContextKeyedServiceFactory {
22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public:
23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  static AppListSyncableService* GetForProfile(Profile* profile);
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  static AppListSyncableServiceFactory* GetInstance();
26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
27c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  static KeyedService* BuildInstanceFor(
28c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      content::BrowserContext* browser_context);
29c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private:
31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  friend struct DefaultSingletonTraits<AppListSyncableServiceFactory>;
32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AppListSyncableServiceFactory();
34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual ~AppListSyncableServiceFactory();
35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // BrowserContextKeyedServiceFactory:
37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual KeyedService* BuildServiceInstanceFor(
38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      content::BrowserContext* profile) const OVERRIDE;
39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void RegisterProfilePrefs(
40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      user_prefs::PrefRegistrySyncable* registry) OVERRIDE;
41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual content::BrowserContext* GetBrowserContextToUse(
42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      content::BrowserContext* context) const OVERRIDE;
43c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual bool ServiceIsCreatedWithBrowserContext() const OVERRIDE;
44c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual bool ServiceIsNULLWhileTesting() const OVERRIDE;
45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(AppListSyncableServiceFactory);
47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)};
48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}  // namespace app_list
50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif  // CHROME_BROWSER_UI_APP_LIST_APP_LIST_SYNCABLE_SERVICE_FACTORY_H_
52