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/net/spdyproxy/data_reduction_proxy_chrome_settings_factory.h"
6
7#include "base/bind.h"
8#include "base/memory/singleton.h"
9#include "chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_settings.h"
10#include "components/data_reduction_proxy/browser/data_reduction_proxy_params.h"
11#include "components/data_reduction_proxy/browser/data_reduction_proxy_usage_stats.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#include "content/public/browser/browser_thread.h"
15
16using content::BrowserThread;
17using data_reduction_proxy::DataReductionProxyParams;
18using data_reduction_proxy::DataReductionProxyUsageStats;
19
20// static
21DataReductionProxyChromeSettings*
22DataReductionProxyChromeSettingsFactory::GetForBrowserContext(
23    content::BrowserContext* context) {
24  return static_cast<DataReductionProxyChromeSettings*>(
25      GetInstance()->GetServiceForBrowserContext(context, true));
26}
27
28// static
29bool
30DataReductionProxyChromeSettingsFactory::HasDataReductionProxyChromeSettings(
31    content::BrowserContext* context) {
32  return GetInstance()->GetServiceForBrowserContext(context, false) != NULL;
33}
34
35// static
36DataReductionProxyChromeSettingsFactory*
37DataReductionProxyChromeSettingsFactory::GetInstance() {
38  return Singleton<DataReductionProxyChromeSettingsFactory>::get();
39}
40
41
42DataReductionProxyChromeSettingsFactory::
43    DataReductionProxyChromeSettingsFactory()
44    : BrowserContextKeyedServiceFactory(
45        "DataReductionProxyChromeSettings",
46        BrowserContextDependencyManager::GetInstance()) {
47}
48
49DataReductionProxyChromeSettingsFactory::
50    ~DataReductionProxyChromeSettingsFactory() {
51}
52
53KeyedService* DataReductionProxyChromeSettingsFactory::BuildServiceInstanceFor(
54    content::BrowserContext* context) const {
55  int flags = DataReductionProxyParams::kAllowed |
56      DataReductionProxyParams::kFallbackAllowed |
57      DataReductionProxyParams::kAlternativeAllowed;
58  if (DataReductionProxyParams::IsIncludedInPromoFieldTrial())
59    flags |= DataReductionProxyParams::kPromoAllowed;
60  if (DataReductionProxyParams::IsIncludedInHoldbackFieldTrial())
61    flags |= DataReductionProxyParams::kHoldback;
62
63  return new DataReductionProxyChromeSettings(
64      new DataReductionProxyParams(flags));
65}
66