| Index: components/data_reduction_proxy/core/browser/data_reduction_proxy_config.cc
|
| diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_config.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_config.cc
|
| index 29458b46555fe88e57e8ff928cc12b376e076192..bb7ab76752ea742954fdee844800ce89c489f917 100644
|
| --- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_config.cc
|
| +++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_config.cc
|
| @@ -12,11 +12,10 @@
|
| #include "base/strings/string_util.h"
|
| #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_configurator.h"
|
| #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_service.h"
|
| +#include "components/data_reduction_proxy/core/common/data_reduction_proxy_config_values.h"
|
| #include "components/data_reduction_proxy/core/common/data_reduction_proxy_event_store.h"
|
| -#include "components/data_reduction_proxy/core/common/data_reduction_proxy_params.h"
|
| -#include "net/base/load_flags.h"
|
| #include "net/proxy/proxy_server.h"
|
| -#include "net/url_request/url_fetcher.h"
|
| +#include "net/url_request/url_request_context.h"
|
| #include "net/url_request/url_request_context_getter.h"
|
| #include "net/url_request/url_request_status.h"
|
|
|
| @@ -51,16 +50,15 @@ DataReductionProxyConfig::DataReductionProxyConfig(
|
| scoped_refptr<base::SingleThreadTaskRunner> io_task_runner,
|
| scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner,
|
| net::NetLog* net_log,
|
| - scoped_ptr<DataReductionProxyParams> params,
|
| + scoped_ptr<DataReductionProxyConfigValues> config_values,
|
| DataReductionProxyConfigurator* configurator,
|
| - DataReductionProxyEventStore* event_store,
|
| - bool enable_quic)
|
| + DataReductionProxyEventStore* event_store)
|
| : restricted_by_carrier_(false),
|
| disabled_on_vpn_(false),
|
| unreachable_(false),
|
| enabled_by_user_(false),
|
| alternative_enabled_by_user_(false),
|
| - params_(params.release()),
|
| + config_values_(config_values.Pass()),
|
| io_task_runner_(io_task_runner),
|
| ui_task_runner_(ui_task_runner),
|
| net_log_(net_log),
|
| @@ -70,7 +68,6 @@ DataReductionProxyConfig::DataReductionProxyConfig(
|
| DCHECK(ui_task_runner);
|
| DCHECK(configurator);
|
| DCHECK(event_store);
|
| - params_->EnableQuic(enable_quic);
|
| InitOnIOThread();
|
| }
|
|
|
| @@ -96,39 +93,118 @@ void DataReductionProxyConfig::SetProxyPrefs(bool enabled,
|
| bool DataReductionProxyConfig::WasDataReductionProxyUsed(
|
| const net::URLRequest* request,
|
| DataReductionProxyTypeInfo* proxy_info) const {
|
| - return params_->WasDataReductionProxyUsed(request, proxy_info);
|
| + DCHECK(request);
|
| + return IsDataReductionProxy(request->proxy_server(), proxy_info);
|
| }
|
|
|
| bool DataReductionProxyConfig::IsDataReductionProxy(
|
| const net::HostPortPair& host_port_pair,
|
| DataReductionProxyTypeInfo* proxy_info) const {
|
| - return params_->IsDataReductionProxy(host_port_pair, proxy_info);
|
| + return config_values_->IsDataReductionProxy(host_port_pair, proxy_info);
|
| }
|
|
|
| bool DataReductionProxyConfig::IsBypassedByDataReductionProxyLocalRules(
|
| const net::URLRequest& request,
|
| const net::ProxyConfig& data_reduction_proxy_config) const {
|
| - return params_->IsBypassedByDataReductionProxyLocalRules(
|
| - request, data_reduction_proxy_config);
|
| + DCHECK(request.context());
|
| + DCHECK(request.context()->proxy_service());
|
| + net::ProxyInfo result;
|
| + data_reduction_proxy_config.proxy_rules().Apply(
|
| + request.url(), &result);
|
| + if (!result.proxy_server().is_valid())
|
| + return true;
|
| + if (result.proxy_server().is_direct())
|
| + return true;
|
| + return !IsDataReductionProxy(result.proxy_server().host_port_pair(), NULL);
|
| }
|
|
|
| bool DataReductionProxyConfig::AreDataReductionProxiesBypassed(
|
| const net::URLRequest& request,
|
| const net::ProxyConfig& data_reduction_proxy_config,
|
| base::TimeDelta* min_retry_delay) const {
|
| - return params_->AreDataReductionProxiesBypassed(
|
| - request, data_reduction_proxy_config, min_retry_delay);
|
| + if (request.context() != NULL &&
|
| + request.context()->proxy_service() != NULL) {
|
| + return AreProxiesBypassed(
|
| + request.context()->proxy_service()->proxy_retry_info(),
|
| + data_reduction_proxy_config.proxy_rules(),
|
| + request.url().SchemeIs(url::kHttpsScheme),
|
| + min_retry_delay);
|
| + }
|
| +
|
| + return false;
|
| +}
|
| +
|
| +bool DataReductionProxyConfig::AreProxiesBypassed(
|
| + const net::ProxyRetryInfoMap& retry_map,
|
| + const net::ProxyConfig::ProxyRules& proxy_rules,
|
| + bool is_https,
|
| + base::TimeDelta* min_retry_delay) const {
|
| + // Data reduction proxy config is TYPE_PROXY_PER_SCHEME.
|
| + if (proxy_rules.type != net::ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME)
|
| + return false;
|
| +
|
| + const net::ProxyList* proxies = is_https ?
|
| + proxy_rules.MapUrlSchemeToProxyList(url::kHttpsScheme) :
|
| + proxy_rules.MapUrlSchemeToProxyList(url::kHttpScheme);
|
| +
|
| + if (!proxies)
|
| + return false;
|
| +
|
| + scoped_ptr<base::ListValue> proxy_list =
|
| + scoped_ptr<base::ListValue>(proxies->ToValue());
|
| +
|
| + base::TimeDelta min_delay = base::TimeDelta::Max();
|
| + base::TimeDelta delay;
|
| + bool bypassed = false;
|
| + std::string proxy;
|
| + net::HostPortPair host_port_pair;
|
| +
|
| + for (size_t i = 0; i < proxy_list->GetSize(); ++i) {
|
| + proxy_list->GetString(i, &proxy);
|
| + host_port_pair = net::HostPortPair::FromString(std::string());
|
| + net::ProxyServer proxy_server =
|
| + net::ProxyServer::FromURI(proxy, net::ProxyServer::SCHEME_HTTP);
|
| + if (proxy_server.is_valid() && !proxy_server.is_direct())
|
| + host_port_pair = proxy_server.host_port_pair();
|
| +
|
| + if (IsDataReductionProxy(host_port_pair, NULL)) {
|
| + if (!IsProxyBypassed(
|
| + retry_map,
|
| + net::ProxyServer::FromURI(proxy, net::ProxyServer::SCHEME_HTTP),
|
| + &delay))
|
| + return false;
|
| + if (delay < min_delay)
|
| + min_delay = delay;
|
| + bypassed = true;
|
| + }
|
| + }
|
| +
|
| + if (min_retry_delay && bypassed)
|
| + *min_retry_delay = min_delay;
|
| +
|
| + return bypassed;
|
| }
|
|
|
| bool DataReductionProxyConfig::IsProxyBypassed(
|
| const net::ProxyRetryInfoMap& retry_map,
|
| const net::ProxyServer& proxy_server,
|
| base::TimeDelta* retry_delay) const {
|
| - return params_->IsProxyBypassed(retry_map, proxy_server, retry_delay);
|
| + net::ProxyRetryInfoMap::const_iterator found =
|
| + retry_map.find(proxy_server.ToURI());
|
| +
|
| + if (found == retry_map.end() ||
|
| + found->second.bad_until < base::TimeTicks::Now()) {
|
| + return false;
|
| + }
|
| +
|
| + if (retry_delay)
|
| + *retry_delay = found->second.current_delay;
|
| +
|
| + return true;
|
| }
|
|
|
| bool DataReductionProxyConfig::ContainsDataReductionProxy(
|
| - const net::ProxyConfig::ProxyRules& proxy_rules) {
|
| + const net::ProxyConfig::ProxyRules& proxy_rules) const {
|
| // Data Reduction Proxy configurations are always TYPE_PROXY_PER_SCHEME.
|
| if (proxy_rules.type != net::ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME)
|
| return false;
|
| @@ -137,8 +213,7 @@ bool DataReductionProxyConfig::ContainsDataReductionProxy(
|
| 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)) {
|
| + IsDataReductionProxy(https_proxy_list->Get().host_port_pair(), NULL)) {
|
| return true;
|
| }
|
|
|
| @@ -146,8 +221,7 @@ bool DataReductionProxyConfig::ContainsDataReductionProxy(
|
| 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)) {
|
| + IsDataReductionProxy(http_proxy_list->Get().host_port_pair(), NULL)) {
|
| return true;
|
| }
|
|
|
| @@ -156,29 +230,24 @@ bool DataReductionProxyConfig::ContainsDataReductionProxy(
|
|
|
| bool DataReductionProxyConfig::UsingHTTPTunnel(
|
| const net::HostPortPair& proxy_server) const {
|
| - return params_->ssl_origin().is_valid() &&
|
| - params_->ssl_origin().host_port_pair().Equals(proxy_server);
|
| -}
|
| -
|
| -const net::ProxyServer& DataReductionProxyConfig::Origin() {
|
| - return params_->origin();
|
| + return config_values_->UsingHTTPTunnel(proxy_server);
|
| }
|
|
|
| // Returns true if the Data Reduction Proxy configuration may be used.
|
| -bool DataReductionProxyConfig::allowed() {
|
| - return params_->allowed();
|
| +bool DataReductionProxyConfig::allowed() const {
|
| + return config_values_->allowed();
|
| }
|
|
|
| // Returns true if the alternative Data Reduction Proxy configuration may be
|
| // used.
|
| -bool DataReductionProxyConfig::alternative_allowed() {
|
| - return params_->alternative_allowed();
|
| +bool DataReductionProxyConfig::alternative_allowed() const {
|
| + return config_values_->alternative_allowed();
|
| }
|
|
|
| // Returns true if the Data Reduction Proxy promo may be shown. This is not
|
| // tied to whether the Data Reduction Proxy is enabled.
|
| -bool DataReductionProxyConfig::promo_allowed() {
|
| - return params_->promo_allowed();
|
| +bool DataReductionProxyConfig::promo_allowed() const {
|
| + return config_values_->promo_allowed();
|
| }
|
|
|
| void DataReductionProxyConfig::SetProxyConfigOnIOThread(
|
| @@ -190,7 +259,8 @@ void DataReductionProxyConfig::SetProxyConfigOnIOThread(
|
|
|
| // Check if the proxy has been restricted explicitly by the carrier.
|
| if (enabled &&
|
| - !(alternative_enabled && !params_->alternative_fallback_allowed())) {
|
| + !(alternative_enabled &&
|
| + !config_values_->alternative_fallback_allowed())) {
|
| ui_task_runner_->PostTask(
|
| FROM_HERE, base::Bind(&DataReductionProxyConfig::StartSecureProxyCheck,
|
| base::Unretained(this)));
|
| @@ -206,16 +276,17 @@ void DataReductionProxyConfig::UpdateConfigurator(bool enabled,
|
| LogProxyState(enabled, restricted, at_startup);
|
| // The alternative is only configured if the standard configuration is
|
| // is enabled.
|
| - if (enabled & !params_->holdback()) {
|
| + if (enabled & !config_values_->holdback()) {
|
| if (alternative_enabled) {
|
| configurator_->Enable(restricted,
|
| - !params_->alternative_fallback_allowed(),
|
| - params_->alt_origin().ToURI(), std::string(),
|
| - params_->ssl_origin().ToURI());
|
| + !config_values_->alternative_fallback_allowed(),
|
| + config_values_->alt_origin().ToURI(), std::string(),
|
| + config_values_->ssl_origin().ToURI());
|
| } else {
|
| - configurator_->Enable(restricted, !params_->fallback_allowed(),
|
| - params_->origin().ToURI(),
|
| - params_->fallback_origin().ToURI(), std::string());
|
| + configurator_->Enable(restricted, !config_values_->fallback_allowed(),
|
| + config_values_->origin().ToURI(),
|
| + config_values_->fallback_origin().ToURI(),
|
| + std::string());
|
| }
|
| } else {
|
| configurator_->Disable();
|
| @@ -306,12 +377,12 @@ void DataReductionProxyConfig::HandleSecureProxyCheckResponseOnIOThread(
|
| void DataReductionProxyConfig::OnIPAddressChanged() {
|
| DCHECK(io_task_runner_->BelongsToCurrentThread());
|
| if (enabled_by_user_) {
|
| - DCHECK(params_->allowed());
|
| + DCHECK(config_values_->allowed());
|
| RecordNetworkChangeEvent(IP_CHANGED);
|
| if (DisableIfVPN())
|
| return;
|
| if (alternative_enabled_by_user_ &&
|
| - !params_->alternative_fallback_allowed()) {
|
| + !config_values_->alternative_fallback_allowed()) {
|
| return;
|
| }
|
|
|
| @@ -329,7 +400,7 @@ void DataReductionProxyConfig::InitOnIOThread() {
|
| return;
|
| }
|
|
|
| - if (!params_->allowed())
|
| + if (!config_values_->allowed())
|
| return;
|
|
|
| AddDefaultProxyBypassRules();
|
| @@ -374,12 +445,12 @@ void DataReductionProxyConfig::StartSecureProxyCheck() {
|
| net_log_, net::NetLog::SOURCE_DATA_REDUCTION_PROXY);
|
| if (data_reduction_proxy_service_) {
|
| if (event_store_) {
|
| - event_store_->BeginSecureProxyCheck(bound_net_log_,
|
| - params_->secure_proxy_check_url());
|
| + event_store_->BeginSecureProxyCheck(
|
| + bound_net_log_, config_values_->secure_proxy_check_url());
|
| }
|
|
|
| data_reduction_proxy_service_->SecureProxyCheck(
|
| - params_->secure_proxy_check_url(),
|
| + config_values_->secure_proxy_check_url(),
|
| base::Bind(&DataReductionProxyConfig::HandleSecureProxyCheckResponse,
|
| base::Unretained(this)));
|
| }
|
|
|