1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROME_BROWSER_FAVICON_FAVICON_SERVICE_FACTORY_H_
6#define CHROME_BROWSER_FAVICON_FAVICON_SERVICE_FACTORY_H_
7
8#include "base/memory/singleton.h"
9#include "chrome/browser/profiles/profile.h"
10#include "components/browser_context_keyed_service/browser_context_keyed_service_factory.h"
11
12template <typename T> struct DefaultSingletonTraits;
13
14class Profile;
15class FaviconService;
16
17// Singleton that owns all FaviconService and associates them with
18// Profiles.
19class FaviconServiceFactory : public BrowserContextKeyedServiceFactory {
20 public:
21  // |access| defines what the caller plans to do with the service. See
22  // the ServiceAccessType definition in profile.h.
23  static FaviconService* GetForProfile(Profile* profile,
24                                       Profile::ServiceAccessType sat);
25
26  static FaviconServiceFactory* GetInstance();
27
28 private:
29  friend struct DefaultSingletonTraits<FaviconServiceFactory>;
30
31  FaviconServiceFactory();
32  virtual ~FaviconServiceFactory();
33
34  // BrowserContextKeyedServiceFactory:
35  virtual BrowserContextKeyedService* BuildServiceInstanceFor(
36      content::BrowserContext* profile) const OVERRIDE;
37  virtual bool ServiceIsNULLWhileTesting() const OVERRIDE;
38
39  DISALLOW_COPY_AND_ASSIGN(FaviconServiceFactory);
40};
41
42#endif  // CHROME_BROWSER_FAVICON_FAVICON_SERVICE_FACTORY_H_
43