Home | History | Annotate | Download | only in history
      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/history/history_service_factory.h"
      6 
      7 #include "base/prefs/pref_service.h"
      8 #include "chrome/browser/bookmarks/bookmark_model_factory.h"
      9 #include "chrome/browser/bookmarks/chrome_bookmark_client.h"
     10 #include "chrome/browser/bookmarks/chrome_bookmark_client_factory.h"
     11 #include "chrome/browser/history/chrome_history_client.h"
     12 #include "chrome/browser/history/chrome_history_client_factory.h"
     13 #include "chrome/browser/history/history_service.h"
     14 #include "chrome/browser/profiles/incognito_helpers.h"
     15 #include "chrome/common/pref_names.h"
     16 #include "components/bookmarks/browser/bookmark_model.h"
     17 #include "components/keyed_service/content/browser_context_dependency_manager.h"
     18 
     19 // static
     20 HistoryService* HistoryServiceFactory::GetForProfile(
     21     Profile* profile, Profile::ServiceAccessType sat) {
     22   // If saving history is disabled, only allow explicit access.
     23   if (profile->GetPrefs()->GetBoolean(prefs::kSavingBrowserHistoryDisabled) &&
     24       sat != Profile::EXPLICIT_ACCESS)
     25     return NULL;
     26 
     27   return static_cast<HistoryService*>(
     28       GetInstance()->GetServiceForBrowserContext(profile, true));
     29 }
     30 
     31 // static
     32 HistoryService*
     33 HistoryServiceFactory::GetForProfileIfExists(
     34     Profile* profile, Profile::ServiceAccessType sat) {
     35   // If saving history is disabled, only allow explicit access.
     36   if (profile->GetPrefs()->GetBoolean(prefs::kSavingBrowserHistoryDisabled) &&
     37       sat != Profile::EXPLICIT_ACCESS)
     38     return NULL;
     39 
     40   return static_cast<HistoryService*>(
     41       GetInstance()->GetServiceForBrowserContext(profile, false));
     42 }
     43 
     44 // static
     45 HistoryService*
     46 HistoryServiceFactory::GetForProfileWithoutCreating(Profile* profile) {
     47   return static_cast<HistoryService*>(
     48       GetInstance()->GetServiceForBrowserContext(profile, false));
     49 }
     50 
     51 // static
     52 HistoryServiceFactory* HistoryServiceFactory::GetInstance() {
     53   return Singleton<HistoryServiceFactory>::get();
     54 }
     55 
     56 // static
     57 void HistoryServiceFactory::ShutdownForProfile(Profile* profile) {
     58   HistoryServiceFactory* factory = GetInstance();
     59   factory->BrowserContextDestroyed(profile);
     60 }
     61 
     62 HistoryServiceFactory::HistoryServiceFactory()
     63     : BrowserContextKeyedServiceFactory(
     64           "HistoryService", BrowserContextDependencyManager::GetInstance()) {
     65   DependsOn(ChromeHistoryClientFactory::GetInstance());
     66   DependsOn(ChromeBookmarkClientFactory::GetInstance());
     67 }
     68 
     69 HistoryServiceFactory::~HistoryServiceFactory() {
     70 }
     71 
     72 KeyedService* HistoryServiceFactory::BuildServiceInstanceFor(
     73     content::BrowserContext* context) const {
     74   Profile* profile = static_cast<Profile*>(context);
     75   scoped_ptr<HistoryService> history_service(new HistoryService(
     76       ChromeHistoryClientFactory::GetForProfile(profile), profile));
     77   if (!history_service->Init(profile->GetPath()))
     78     return NULL;
     79   ChromeBookmarkClientFactory::GetForProfile(profile)
     80       ->SetHistoryService(history_service.get());
     81   return history_service.release();
     82 }
     83 
     84 content::BrowserContext* HistoryServiceFactory::GetBrowserContextToUse(
     85     content::BrowserContext* context) const {
     86   return chrome::GetBrowserContextRedirectedInIncognito(context);
     87 }
     88 
     89 bool HistoryServiceFactory::ServiceIsNULLWhileTesting() const {
     90   return true;
     91 }
     92