File: data_reduction_proxy_chrome_settings.cc

package info (click to toggle)
chromium-browser 41.0.2272.118-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie-kfreebsd
  • size: 2,189,132 kB
  • sloc: cpp: 9,691,462; ansic: 3,341,451; python: 712,689; asm: 518,779; xml: 208,926; java: 169,820; sh: 119,353; perl: 68,907; makefile: 28,311; yacc: 13,305; objc: 11,385; tcl: 3,186; cs: 2,225; sql: 2,217; lex: 2,215; lisp: 1,349; pascal: 1,256; awk: 407; ruby: 155; sed: 53; php: 14; exp: 11
file content (125 lines) | stat: -rw-r--r-- 4,795 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_settings.h"

#include "base/memory/scoped_ptr.h"
#include "base/prefs/pref_service.h"
#include "base/prefs/scoped_user_pref_update.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/metrics/chrome_metrics_service_accessor.h"
#include "chrome/browser/prefs/proxy_prefs.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/profiles/profile_manager.h"
#include "chrome/common/pref_names.h"
#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_auth_request_handler.h"
#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_configurator.h"
#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_settings.h"
#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_statistics_prefs.h"
#include "components/data_reduction_proxy/core/common/data_reduction_proxy_params.h"
#include "net/url_request/url_request_context_getter.h"

using data_reduction_proxy::Client;
using data_reduction_proxy::DataReductionProxyParams;
using data_reduction_proxy::DataReductionProxySettings;

// The Data Reduction Proxy has been turned into a "best effort" proxy,
// meaning it is used only if the effective proxy configuration resolves to
// DIRECT for a URL. It no longer can be a ProxyConfig in the proxy preference
// hierarchy. This method removes the Data Reduction Proxy configuration from
// prefs, if present. |proxy_pref_name| is the name of the proxy pref.
void MigrateDataReductionProxyOffProxyPrefs(PrefService* prefs) {
  base::DictionaryValue* dict =
      (base::DictionaryValue*) prefs->GetUserPrefValue(prefs::kProxy);
  if (!dict)
    return;

  // Clear empty "proxy" dictionary created by a bug. See http://crbug/448172
  if (dict->empty()) {
    prefs->ClearPref(prefs::kProxy);
    return;
  }

  std::string mode;
  if (!dict->GetString("mode", &mode))
    return;
  if (ProxyModeToString(ProxyPrefs::MODE_FIXED_SERVERS) != mode)
    return;
  std::string proxy_server;
  if (!dict->GetString("server", &proxy_server))
    return;
  net::ProxyConfig::ProxyRules proxy_rules;
  proxy_rules.ParseFromString(proxy_server);
  if (!data_reduction_proxy::DataReductionProxyConfigurator::
          ContainsDataReductionProxy(proxy_rules)) {
    return;
  }
  prefs->ClearPref(prefs::kProxy);
}

DataReductionProxyChromeSettings::DataReductionProxyChromeSettings(
    DataReductionProxyParams* params) : DataReductionProxySettings(params) {
}

DataReductionProxyChromeSettings::~DataReductionProxyChromeSettings() {
}

void DataReductionProxyChromeSettings::InitDataReductionProxySettings(
    data_reduction_proxy::DataReductionProxyConfigurator* configurator,
    PrefService* profile_prefs,
    PrefService* local_state_prefs,
    scoped_ptr<data_reduction_proxy::DataReductionProxyStatisticsPrefs>
        statistics_prefs,
    net::URLRequestContextGetter* request_context,
    net::NetLog* net_log,
    data_reduction_proxy::DataReductionProxyEventStore* event_store) {
  SetProxyConfigurator(configurator);
  DataReductionProxySettings::InitDataReductionProxySettings(
      profile_prefs,
      statistics_prefs.Pass(),
      request_context,
      net_log,
      event_store);
  DataReductionProxySettings::SetOnDataReductionEnabledCallback(
      base::Bind(&DataReductionProxyChromeSettings::RegisterSyntheticFieldTrial,
                 base::Unretained(this)));
  SetDataReductionProxyAlternativeEnabled(
      DataReductionProxyParams::IsIncludedInAlternativeFieldTrial());
  // TODO(bengr): Remove after M46. See http://crbug.com/445599.
  MigrateDataReductionProxyOffProxyPrefs(profile_prefs);
}

void DataReductionProxyChromeSettings::RegisterSyntheticFieldTrial(
    bool data_reduction_proxy_enabled) {
  ChromeMetricsServiceAccessor::RegisterSyntheticFieldTrial(
      "DataReductionProxyEnabled",
      data_reduction_proxy_enabled ? "true" : "false");
}

// static
Client DataReductionProxyChromeSettings::GetClient() {
#if defined(OS_ANDROID)
  return Client::CHROME_ANDROID;
#elif defined(OS_IOS)
  return Client::CHROME_IOS;
#elif defined(OS_MACOSX)
  return Client::CHROME_MAC;
#elif defined(OS_CHROMEOS)
  return Client::CHROME_CHROMEOS;
#elif defined(OS_LINUX)
  return Client::CHROME_LINUX;
#elif defined(OS_WIN)
  return Client::CHROME_WINDOWS;
#elif defined(OS_FREEBSD)
  return Client::CHROME_FREEBSD;
#elif defined(OS_OPENBSD)
  return Client::CHROME_OPENBSD;
#elif defined(OS_SOLARIS)
  return Client::CHROME_SOLARIS;
#elif defined(OS_QNX)
  return Client::CHROME_QNX;
#else
  return Client::UNKNOWN;
#endif
}