1// Copyright 2014 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/predictors/resource_prefetch_predictor_factory.h"
6
7#include "chrome/browser/history/history_service_factory.h"
8#include "chrome/browser/predictors/predictor_database_factory.h"
9#include "chrome/browser/predictors/resource_prefetch_common.h"
10#include "chrome/browser/predictors/resource_prefetch_predictor.h"
11#include "chrome/browser/profiles/profile.h"
12#include "components/keyed_service/content/browser_context_dependency_manager.h"
13#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
14
15namespace predictors {
16
17// static
18ResourcePrefetchPredictor* ResourcePrefetchPredictorFactory::GetForProfile(
19    content::BrowserContext* context) {
20  return static_cast<ResourcePrefetchPredictor*>(
21      GetInstance()->GetServiceForBrowserContext(context, true));
22}
23
24// static
25ResourcePrefetchPredictorFactory*
26ResourcePrefetchPredictorFactory::GetInstance() {
27  return Singleton<ResourcePrefetchPredictorFactory>::get();
28}
29
30ResourcePrefetchPredictorFactory::ResourcePrefetchPredictorFactory()
31    : BrowserContextKeyedServiceFactory(
32        "ResourcePrefetchPredictor",
33        BrowserContextDependencyManager::GetInstance()) {
34  DependsOn(HistoryServiceFactory::GetInstance());
35  DependsOn(PredictorDatabaseFactory::GetInstance());
36}
37
38ResourcePrefetchPredictorFactory::~ResourcePrefetchPredictorFactory() {}
39
40KeyedService*
41    ResourcePrefetchPredictorFactory::BuildServiceInstanceFor(
42        content::BrowserContext* context) const {
43  Profile* profile = Profile::FromBrowserContext(context);
44
45  ResourcePrefetchPredictorConfig config;
46  if (!IsSpeculativeResourcePrefetchingEnabled(profile, &config))
47    return NULL;
48
49  return new ResourcePrefetchPredictor(config, profile);
50}
51
52}  // namespace predictors
53