[go: up one dir, main page]

blob: 842e1d64eedee581b099d8e380bc402e83c029f9 [file] [log] [blame]
// 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
}