| Index: chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_configurator.cc
|
| diff --git a/chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_configurator.cc b/chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_configurator.cc
|
| index cb9e788a19141c70da51ee1a9136e3174f006b5a..5aabff10063ca0c2f841d585aefdbde92824242b 100644
|
| --- a/chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_configurator.cc
|
| +++ b/chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_configurator.cc
|
| @@ -8,10 +8,13 @@
|
| #include "base/prefs/scoped_user_pref_update.h"
|
| #include "base/sequenced_task_runner.h"
|
| #include "base/strings/string_util.h"
|
| +#include "base/values.h"
|
| #include "chrome/browser/prefs/proxy_prefs.h"
|
| #include "chrome/common/pref_names.h"
|
| +#include "components/data_reduction_proxy/core/common/data_reduction_proxy_params.h"
|
| #include "net/proxy/proxy_config.h"
|
| #include "net/proxy/proxy_info.h"
|
| +#include "net/proxy/proxy_list.h"
|
| #include "net/proxy/proxy_service.h"
|
|
|
| DataReductionProxyChromeConfigurator::DataReductionProxyChromeConfigurator(
|
| @@ -23,6 +26,28 @@ DataReductionProxyChromeConfigurator::DataReductionProxyChromeConfigurator(
|
| DataReductionProxyChromeConfigurator::~DataReductionProxyChromeConfigurator() {
|
| }
|
|
|
| +// static
|
| +void DataReductionProxyChromeConfigurator::DisableInProxyConfigPref(
|
| + PrefService* prefs) {
|
| + DCHECK(prefs);
|
| + DictionaryPrefUpdate update(prefs, prefs::kProxy);
|
| + base::DictionaryValue* dict = update.Get();
|
| + std::string mode;
|
| + dict->GetString("mode", &mode);
|
| + std::string server;
|
| + dict->GetString("server", &server);
|
| + net::ProxyConfig::ProxyRules proxy_rules;
|
| + proxy_rules.ParseFromString(server);
|
| + // The data reduction proxy uses MODE_FIXED_SERVERS.
|
| + if (mode != ProxyModeToString(ProxyPrefs::MODE_FIXED_SERVERS)
|
| + || !ContainsDataReductionProxy(proxy_rules)) {
|
| + return;
|
| + }
|
| + dict->SetString("mode", ProxyModeToString(ProxyPrefs::MODE_SYSTEM));
|
| + dict->SetString("server", "");
|
| + dict->SetString("bypass_list", "");
|
| +}
|
| +
|
| void DataReductionProxyChromeConfigurator::Enable(
|
| bool primary_restricted,
|
| bool fallback_restricted,
|
| @@ -85,12 +110,7 @@ void DataReductionProxyChromeConfigurator::Enable(
|
| }
|
|
|
| void DataReductionProxyChromeConfigurator::Disable() {
|
| - DCHECK(prefs_);
|
| - DictionaryPrefUpdate update(prefs_, prefs::kProxy);
|
| - base::DictionaryValue* dict = update.Get();
|
| - dict->SetString("mode", ProxyModeToString(ProxyPrefs::MODE_SYSTEM));
|
| - dict->SetString("server", "");
|
| - dict->SetString("bypass_list", "");
|
| + DisableInProxyConfigPref(prefs_);
|
| net::ProxyConfig config = net::ProxyConfig::CreateDirect();
|
| network_task_runner_->PostTask(
|
| FROM_HERE,
|
| @@ -120,6 +140,36 @@ void DataReductionProxyChromeConfigurator::AddURLPatternToBypass(
|
| AddHostPatternToBypass(host_pattern);
|
| }
|
|
|
| +// static
|
| +bool DataReductionProxyChromeConfigurator::ContainsDataReductionProxy(
|
| + const net::ProxyConfig::ProxyRules& proxy_rules) {
|
| + data_reduction_proxy::DataReductionProxyParams params(
|
| + data_reduction_proxy::DataReductionProxyParams::
|
| + kAllowAllProxyConfigurations);
|
| + if (proxy_rules.type != net::ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME)
|
| + return false;
|
| +
|
| + const net::ProxyList* https_proxy_list =
|
| + proxy_rules.MapUrlSchemeToProxyList("https");
|
| + if (https_proxy_list && !https_proxy_list->IsEmpty() &&
|
| + // Sufficient to check only the first proxy.
|
| + params.IsDataReductionProxy(https_proxy_list->Get().host_port_pair(),
|
| + NULL)) {
|
| + return true;
|
| + }
|
| +
|
| + const net::ProxyList* http_proxy_list =
|
| + proxy_rules.MapUrlSchemeToProxyList("http");
|
| + if (http_proxy_list && !http_proxy_list->IsEmpty() &&
|
| + // Sufficient to check only the first proxy.
|
| + params.IsDataReductionProxy(http_proxy_list->Get().host_port_pair(),
|
| + NULL)) {
|
| + return true;
|
| + }
|
| +
|
| + return false;
|
| +}
|
| +
|
| void DataReductionProxyChromeConfigurator::UpdateProxyConfigOnIO(
|
| const net::ProxyConfig& config) {
|
| config_ = config;
|
|
|