15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/favicon/favicon_service_factory.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/singleton.h"
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h"
9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/favicon/chrome_favicon_client_factory.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/favicon/favicon_service.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/history/history_service.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/history/history_service_factory.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h"
14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "components/keyed_service/content/browser_context_dependency_manager.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FaviconService* FaviconServiceFactory::GetForProfile(
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Profile* profile, Profile::ServiceAccessType sat) {
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!profile->IsOffTheRecord()) {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return static_cast<FaviconService*>(
2190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        GetInstance()->GetServiceForBrowserContext(profile, true));
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else if (sat == Profile::EXPLICIT_ACCESS) {
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Profile must be OffTheRecord in this case.
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return static_cast<FaviconService*>(
2590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        GetInstance()->GetServiceForBrowserContext(
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            profile->GetOriginalProfile(), true));
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Profile is OffTheRecord without access.
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NOTREACHED() << "This profile is OffTheRecord";
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return NULL;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FaviconServiceFactory* FaviconServiceFactory::GetInstance() {
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return Singleton<FaviconServiceFactory>::get();
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FaviconServiceFactory::FaviconServiceFactory()
4090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    : BrowserContextKeyedServiceFactory(
4190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        "FaviconService",
4290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        BrowserContextDependencyManager::GetInstance()) {
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DependsOn(HistoryServiceFactory::GetInstance());
44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  DependsOn(ChromeFaviconClientFactory::GetInstance());
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FaviconServiceFactory::~FaviconServiceFactory() {}
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)KeyedService* FaviconServiceFactory::BuildServiceInstanceFor(
50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    content::BrowserContext* profile) const {
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  FaviconClient* favicon_client =
52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      ChromeFaviconClientFactory::GetForProfile(static_cast<Profile*>(profile));
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return new FaviconService(static_cast<Profile*>(profile), favicon_client);
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool FaviconServiceFactory::ServiceIsNULLWhileTesting() const {
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
59