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#include "chrome/browser/favicon/favicon_service_factory.h"
6
7#include "base/memory/singleton.h"
8#include "base/prefs/pref_service.h"
9#include "chrome/browser/favicon/favicon_service.h"
10#include "chrome/browser/history/history_service.h"
11#include "chrome/browser/history/history_service_factory.h"
12#include "chrome/common/pref_names.h"
13#include "components/browser_context_keyed_service/browser_context_dependency_manager.h"
14
15// static
16FaviconService* FaviconServiceFactory::GetForProfile(
17    Profile* profile, Profile::ServiceAccessType sat) {
18  if (!profile->IsOffTheRecord()) {
19    return static_cast<FaviconService*>(
20        GetInstance()->GetServiceForBrowserContext(profile, true));
21  } else if (sat == Profile::EXPLICIT_ACCESS) {
22    // Profile must be OffTheRecord in this case.
23    return static_cast<FaviconService*>(
24        GetInstance()->GetServiceForBrowserContext(
25            profile->GetOriginalProfile(), true));
26  }
27
28  // Profile is OffTheRecord without access.
29  NOTREACHED() << "This profile is OffTheRecord";
30  return NULL;
31}
32
33// static
34FaviconServiceFactory* FaviconServiceFactory::GetInstance() {
35  return Singleton<FaviconServiceFactory>::get();
36}
37
38FaviconServiceFactory::FaviconServiceFactory()
39    : BrowserContextKeyedServiceFactory(
40        "FaviconService",
41        BrowserContextDependencyManager::GetInstance()) {
42  DependsOn(HistoryServiceFactory::GetInstance());
43}
44
45FaviconServiceFactory::~FaviconServiceFactory() {}
46
47BrowserContextKeyedService* FaviconServiceFactory::BuildServiceInstanceFor(
48    content::BrowserContext* profile) const {
49  HistoryService* history_service = HistoryServiceFactory::GetForProfile(
50      static_cast<Profile*>(profile), Profile::EXPLICIT_ACCESS);
51  return new FaviconService(history_service);
52}
53
54bool FaviconServiceFactory::ServiceIsNULLWhileTesting() const {
55  return true;
56}
57