146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// found in the LICENSE file. 446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "components/data_reduction_proxy/browser/data_reduction_proxy_params.h" 646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 76e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include <vector> 86e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/command_line.h" 106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 1146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/metrics/field_trial.h" 125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/time/time.h" 1346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "components/data_reduction_proxy/common/data_reduction_proxy_switches.h" 145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "net/base/host_port_pair.h" 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "net/proxy/proxy_config.h" 16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "net/proxy/proxy_info.h" 175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "net/proxy/proxy_retry_info.h" 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "net/proxy/proxy_server.h" 19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "net/proxy/proxy_service.h" 20f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "net/url_request/url_request.h" 21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "net/url_request/url_request_context.h" 225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "url/url_constants.h" 2346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)using base::FieldTrialList; 2546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace { 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)const char kEnabled[] = "Enabled"; 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kDefaultOrigin[] = "https://proxy.googlezip.net:443/"; 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kDevOrigin[] = "https://proxy-dev.googlezip.net:443/"; 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kDevFallbackOrigin[] = "http://proxy-dev.googlezip.net:80/"; 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kDefaultFallbackOrigin[] = "http://compress.googlezip.net:80/"; 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// This is for a proxy that supports HTTP CONNECT to tunnel SSL traffic. 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// The proxy listens on port 443, but uses the HTTP protocol to set up 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// the tunnel, not HTTPS. 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kDefaultSslOrigin[] = "http://ssl.googlezip.net:443/"; 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kDefaultAltOrigin[] = "http://ssl.googlezip.net:80/"; 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kDefaultAltFallbackOrigin[] = "http://ssl.googlezip.net:80/"; 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kDefaultProbeUrl[] = "http://check.googlezip.net/connect"; 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kDefaultWarmupUrl[] = "http://www.gstatic.com/generate_204"; 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace 4346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 4446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace data_reduction_proxy { 4546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 4646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// static 4746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)bool DataReductionProxyParams::IsIncludedInAlternativeFieldTrial() { 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string group_name = base::FieldTrialList::FindFullName( 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "DataCompressionProxyAlternativeConfiguration"); 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (CommandLine::ForCurrentProcess()->HasSwitch( 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci data_reduction_proxy::switches::kEnableDataReductionProxyAlt)) { 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return true; 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return group_name == kEnabled; 5546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 5646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 5746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// static 5846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)bool DataReductionProxyParams::IsIncludedInPromoFieldTrial() { 5946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return FieldTrialList::FindFullName( 6046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "DataCompressionProxyPromoVisibility") == kEnabled; 6146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 6246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 6346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// static 6446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)bool DataReductionProxyParams::IsIncludedInPreconnectHintingFieldTrial() { 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return FieldTrialList::FindFullName( 6646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "DataCompressionProxyPreconnectHints") == kEnabled; 6746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 6846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 6946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// static 70116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool DataReductionProxyParams::IsIncludedInCriticalPathBypassFieldTrial() { 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return FieldTrialList::FindFullName( 72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "DataCompressionProxyCriticalBypass") == kEnabled; 73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// static 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool DataReductionProxyParams::IsIncludedInHoldbackFieldTrial() { 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return FieldTrialList::FindFullName( 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "DataCompressionProxyHoldback") == kEnabled; 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// static 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool DataReductionProxyParams:: 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci IsIncludedInRemoveMissingViaHeaderOtherBypassFieldTrial() { 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return FieldTrialList::FindFullName( 851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "DataReductionProxyRemoveMissingViaHeaderOtherBypass") == kEnabled; 861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)DataReductionProxyTypeInfo::DataReductionProxyTypeInfo() 896e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) : proxy_servers(), 906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) is_fallback(false), 916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) is_alternative(false), 926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) is_ssl(false) { 936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 956e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)DataReductionProxyTypeInfo::~DataReductionProxyTypeInfo(){ 966e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 9846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)DataReductionProxyParams::DataReductionProxyParams(int flags) 9946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) : allowed_((flags & kAllowed) == kAllowed), 10046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) fallback_allowed_((flags & kFallbackAllowed) == kFallbackAllowed), 10146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) alt_allowed_((flags & kAlternativeAllowed) == kAlternativeAllowed), 1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci alt_fallback_allowed_( 1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (flags & kAlternativeFallbackAllowed) == kAlternativeFallbackAllowed), 104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch promo_allowed_((flags & kPromoAllowed) == kPromoAllowed), 105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch holdback_((flags & kHoldback) == kHoldback), 106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch configured_on_command_line_(false) { 1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool result = Init( 1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci allowed_, fallback_allowed_, alt_allowed_, alt_fallback_allowed_); 10946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DCHECK(result); 11046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 11146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)scoped_ptr<DataReductionProxyParams> DataReductionProxyParams::Clone() { 1136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return scoped_ptr<DataReductionProxyParams>( 1146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) new DataReductionProxyParams(*this)); 1156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 1166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)DataReductionProxyParams::DataReductionProxyParams( 1186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const DataReductionProxyParams& other) 1196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) : origin_(other.origin_), 1206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) fallback_origin_(other.fallback_origin_), 1216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ssl_origin_(other.ssl_origin_), 1226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) alt_origin_(other.alt_origin_), 1236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) alt_fallback_origin_(other.alt_fallback_origin_), 1246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) probe_url_(other.probe_url_), 1256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) warmup_url_(other.warmup_url_), 1266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) allowed_(other.allowed_), 1276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) fallback_allowed_(other.fallback_allowed_), 1286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) alt_allowed_(other.alt_allowed_), 1291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci alt_fallback_allowed_(other.alt_fallback_allowed_), 1306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) promo_allowed_(other.promo_allowed_), 1316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) holdback_(other.holdback_), 1326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) configured_on_command_line_(other.configured_on_command_line_) { 1336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 1346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 13546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)DataReductionProxyParams::~DataReductionProxyParams() { 13646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 13746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 13846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)DataReductionProxyParams::DataReductionProxyList 13946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)DataReductionProxyParams::GetAllowedProxies() const { 14046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DataReductionProxyList list; 141116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (allowed_) { 14246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) list.push_back(origin_); 143116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 14446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (allowed_ && fallback_allowed_) 14546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) list.push_back(fallback_origin_); 14646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (alt_allowed_) { 14746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) list.push_back(alt_origin_); 14846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) list.push_back(ssl_origin_); 14946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 1501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (alt_allowed_ && alt_fallback_allowed_) 15146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) list.push_back(alt_fallback_origin_); 15246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return list; 15346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 15446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 15546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)DataReductionProxyParams::DataReductionProxyParams(int flags, 15646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) bool should_call_init) 15746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) : allowed_((flags & kAllowed) == kAllowed), 15846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) fallback_allowed_((flags & kFallbackAllowed) == kFallbackAllowed), 15946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) alt_allowed_((flags & kAlternativeAllowed) == kAlternativeAllowed), 1601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci alt_fallback_allowed_( 1611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (flags & kAlternativeFallbackAllowed) == kAlternativeFallbackAllowed), 162116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch promo_allowed_((flags & kPromoAllowed) == kPromoAllowed), 163116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch holdback_((flags & kHoldback) == kHoldback), 164116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch configured_on_command_line_(false) { 16546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (should_call_init) { 1661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool result = Init( 1671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci allowed_, fallback_allowed_, alt_allowed_, alt_fallback_allowed_); 16846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DCHECK(result); 16946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 17046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 17146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool DataReductionProxyParams::Init(bool allowed, 1731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool fallback_allowed, 1741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool alt_allowed, 1751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool alt_fallback_allowed) { 17646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) InitWithoutChecks(); 17746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Verify that all necessary params are set. 17846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (allowed) { 17946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (!origin_.is_valid()) { 18046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DVLOG(1) << "Invalid data reduction proxy origin: " << origin_.spec(); 18146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return false; 18246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 18346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 18446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 18546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (allowed && fallback_allowed) { 18646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (!fallback_origin_.is_valid()) { 18746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DVLOG(1) << "Invalid data reduction proxy fallback origin: " 18846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) << fallback_origin_.spec(); 18946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return false; 19046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 19146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 19246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 19346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (alt_allowed) { 19446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (!allowed) { 19546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DVLOG(1) << "Alternative data reduction proxy configuration cannot " 19646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) << "be allowed if the regular configuration is not allowed"; 19746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return false; 19846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 19946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (!alt_origin_.is_valid()) { 20046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DVLOG(1) << "Invalid alternative origin:" << alt_origin_.spec(); 20146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return false; 20246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 20346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (!ssl_origin_.is_valid()) { 20446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DVLOG(1) << "Invalid ssl origin: " << ssl_origin_.spec(); 20546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return false; 20646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 20746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 20846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (alt_allowed && alt_fallback_allowed) { 21046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (!alt_fallback_origin_.is_valid()) { 21146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DVLOG(1) << "Invalid alternative fallback origin:" 21246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) << alt_fallback_origin_.spec(); 21346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return false; 21446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 21546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 21646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 21746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (allowed && !probe_url_.is_valid()) { 21846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DVLOG(1) << "Invalid probe url: <null>"; 21946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return false; 22046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 22146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 22246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (fallback_allowed_ && !allowed_) { 22346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DVLOG(1) << "The data reduction proxy fallback cannot be allowed if " 22446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) << "the data reduction proxy is not allowed"; 22546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return false; 22646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 2271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (alt_fallback_allowed_ && !alt_allowed_) { 2281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DVLOG(1) << "The data reduction proxy alternative fallback cannot be " 2291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci << "allowed if the alternative data reduction proxy is not allowed"; 2301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return false; 2311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 23246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (promo_allowed_ && !allowed_) { 23346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DVLOG(1) << "The data reduction proxy promo cannot be allowed if the " 23446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) << "data reduction proxy is not allowed"; 23546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return false; 23646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 23746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return true; 23846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 23946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 24046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 24146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)void DataReductionProxyParams::InitWithoutChecks() { 24246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const CommandLine& command_line = *CommandLine::ForCurrentProcess(); 243f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string origin; 244f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (!command_line.HasSwitch(switches::kDisableDataReductionProxyDev)) { 245f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) origin = command_line.GetSwitchValueASCII( 246f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) switches::kDataReductionProxyDev); 247f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 24846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (origin.empty()) 24946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) origin = command_line.GetSwitchValueASCII(switches::kDataReductionProxy); 25046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) std::string fallback_origin = 25146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) command_line.GetSwitchValueASCII(switches::kDataReductionProxyFallback); 25246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) std::string ssl_origin = 25346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) command_line.GetSwitchValueASCII(switches::kDataReductionSSLProxy); 25446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) std::string alt_origin = 25546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) command_line.GetSwitchValueASCII(switches::kDataReductionProxyAlt); 25646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) std::string alt_fallback_origin = command_line.GetSwitchValueASCII( 25746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) switches::kDataReductionProxyAltFallback); 25846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 259116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch configured_on_command_line_ = 26046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) !(origin.empty() && fallback_origin.empty() && ssl_origin.empty() && 26146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) alt_origin.empty() && alt_fallback_origin.empty()); 26246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 26346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 26446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Configuring the proxy on the command line overrides the values of 26546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // |allowed_| and |alt_allowed_|. 266116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (configured_on_command_line_) 26746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) allowed_ = true; 26846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (!(ssl_origin.empty() && 2691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci alt_origin.empty())) 27046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) alt_allowed_ = true; 27146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 27246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) std::string probe_url = command_line.GetSwitchValueASCII( 27346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) switches::kDataReductionProxyProbeURL); 2746d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) std::string warmup_url = command_line.GetSwitchValueASCII( 2756d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) switches::kDataReductionProxyWarmupURL); 27646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 27746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Set from preprocessor constants those params that are not specified on the 27846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // command line. 27946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (origin.empty()) 28046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) origin = GetDefaultDevOrigin(); 28146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (origin.empty()) 28246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) origin = GetDefaultOrigin(); 28346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (fallback_origin.empty()) 2841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci fallback_origin = GetDefaultDevFallbackOrigin(); 2851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (fallback_origin.empty()) 28646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) fallback_origin = GetDefaultFallbackOrigin(); 28746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (ssl_origin.empty()) 28846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ssl_origin = GetDefaultSSLOrigin(); 28946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (alt_origin.empty()) 29046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) alt_origin = GetDefaultAltOrigin(); 29146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (alt_fallback_origin.empty()) 29246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) alt_fallback_origin = GetDefaultAltFallbackOrigin(); 29346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (probe_url.empty()) 29446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) probe_url = GetDefaultProbeURL(); 2956d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) if (warmup_url.empty()) 2966d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) warmup_url = GetDefaultWarmupURL(); 29746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 29846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) origin_ = GURL(origin); 29946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) fallback_origin_ = GURL(fallback_origin); 30046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ssl_origin_ = GURL(ssl_origin); 30146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) alt_origin_ = GURL(alt_origin); 30246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) alt_fallback_origin_ = GURL(alt_fallback_origin); 30346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) probe_url_ = GURL(probe_url); 3046d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) warmup_url_ = GURL(warmup_url); 30546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 30646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 30746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 308f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)bool DataReductionProxyParams::WasDataReductionProxyUsed( 309f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const net::URLRequest* request, 3106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DataReductionProxyTypeInfo* proxy_info) const { 311f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) DCHECK(request); 3126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return IsDataReductionProxy(request->proxy_server(), proxy_info); 313f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 314f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 315f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)bool DataReductionProxyParams::IsDataReductionProxy( 316f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const net::HostPortPair& host_port_pair, 3176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DataReductionProxyTypeInfo* proxy_info) const { 318f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (net::HostPortPair::FromURL(origin()).Equals(host_port_pair)) { 3196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (proxy_info) { 3206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) proxy_info->proxy_servers.first = origin(); 321f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (fallback_allowed()) 3226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) proxy_info->proxy_servers.second = fallback_origin(); 323f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 324f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return true; 325f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 326116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 327f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (fallback_allowed() && 328f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) net::HostPortPair::FromURL(fallback_origin()).Equals(host_port_pair)) { 3296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (proxy_info) { 3306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) proxy_info->proxy_servers.first = fallback_origin(); 3316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) proxy_info->proxy_servers.second = GURL(); 3326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) proxy_info->is_fallback = true; 333f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 334f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return true; 335f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 336f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (net::HostPortPair::FromURL(alt_origin()).Equals(host_port_pair)) { 3376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (proxy_info) { 3386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) proxy_info->proxy_servers.first = alt_origin(); 3396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) proxy_info->is_alternative = true; 3401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (alternative_fallback_allowed()) 3416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) proxy_info->proxy_servers.second = alt_fallback_origin(); 342f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 343f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return true; 344f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 3451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (alternative_fallback_allowed() && 346f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) net::HostPortPair::FromURL(alt_fallback_origin()).Equals( 347f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) host_port_pair)) { 3486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (proxy_info) { 3496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) proxy_info->proxy_servers.first = alt_fallback_origin(); 3506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) proxy_info->proxy_servers.second = GURL(); 3516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) proxy_info->is_fallback = true; 3526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) proxy_info->is_alternative = true; 353f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 354f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return true; 355f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 356f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (net::HostPortPair::FromURL(ssl_origin()).Equals(host_port_pair)) { 3576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (proxy_info) { 3586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) proxy_info->proxy_servers.first = ssl_origin(); 3596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) proxy_info->proxy_servers.second = GURL(); 3606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) proxy_info->is_ssl = true; 361f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 362f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return true; 363f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 364f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return false; 365f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 366f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 3671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool DataReductionProxyParams::IsBypassedByDataReductionProxyLocalRules( 3681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const net::URLRequest& request, 3691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const net::ProxyConfig& data_reduction_proxy_config) const { 3701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DCHECK(request.context()); 3711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DCHECK(request.context()->proxy_service()); 372116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch net::ProxyInfo result; 3731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci data_reduction_proxy_config.proxy_rules().Apply( 3741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci request.url(), &result); 375116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (!result.proxy_server().is_valid()) 3761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return true; 377116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (result.proxy_server().is_direct()) 3781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return true; 3791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return !IsDataReductionProxy(result.proxy_server().host_port_pair(), NULL); 38046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 38146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 38246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)std::string DataReductionProxyParams::GetDefaultDevOrigin() const { 383f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const CommandLine& command_line = *CommandLine::ForCurrentProcess(); 384f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (command_line.HasSwitch(switches::kDisableDataReductionProxyDev)) 385f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return std::string(); 386f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (command_line.HasSwitch(switches::kEnableDataReductionProxyDev) || 387f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) (FieldTrialList::FindFullName("DataCompressionProxyDevRollout") == 388f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) kEnabled)) { 3891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return kDevOrigin; 3901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 3911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return std::string(); 3921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 3931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccistd::string DataReductionProxyParams::GetDefaultDevFallbackOrigin() const { 3951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const CommandLine& command_line = *CommandLine::ForCurrentProcess(); 3961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (command_line.HasSwitch(switches::kDisableDataReductionProxyDev)) 3971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return std::string(); 3981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (command_line.HasSwitch(switches::kEnableDataReductionProxyDev) || 3991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci (FieldTrialList::FindFullName("DataCompressionProxyDevRollout") == 4001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kEnabled)) { 4011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return kDevFallbackOrigin; 40246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 40346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return std::string(); 40446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 40546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 4065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bool DataReductionProxyParams::AreDataReductionProxiesBypassed( 4075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const net::URLRequest& request, base::TimeDelta* min_retry_delay) const { 4085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (request.context() != NULL && 4095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) request.context()->proxy_service() != NULL) { 4105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return AreProxiesBypassed( 4115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) request.context()->proxy_service()->proxy_retry_info(), 4125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) request.url().SchemeIs(url::kHttpsScheme), 4135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) min_retry_delay); 4145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 4155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return false; 4175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 4185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bool DataReductionProxyParams::AreProxiesBypassed( 4205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const net::ProxyRetryInfoMap& retry_map, 4215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) bool is_https, 4225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::TimeDelta* min_retry_delay) const { 4235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (retry_map.size() == 0) 4245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return false; 4255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // If the request is https, consider only the ssl proxy. 4271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (is_https) { 4281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (alt_allowed_) { 4291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return ArePrimaryAndFallbackBypassed( 4301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci retry_map, ssl_origin_, GURL(), min_retry_delay); 4311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 4321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci NOTREACHED(); 4331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return false; 4345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 4355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (allowed_ && ArePrimaryAndFallbackBypassed( 4375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) retry_map, origin_, fallback_origin_, min_retry_delay)) { 4385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return true; 4395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 4405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (alt_allowed_ && ArePrimaryAndFallbackBypassed( 4425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) retry_map, alt_origin_, alt_fallback_origin_, min_retry_delay)) { 4435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return true; 4445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 4455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return false; 4475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 4485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bool DataReductionProxyParams::ArePrimaryAndFallbackBypassed( 4505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const net::ProxyRetryInfoMap& retry_map, 4515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const GURL& primary, 4525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const GURL& fallback, 4535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::TimeDelta* min_retry_delay) const { 4541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::ProxyRetryInfoMap::const_iterator found = retry_map.end(); 4551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (min_retry_delay) 4561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *min_retry_delay = base::TimeDelta::Max(); 4571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Look for the primary proxy in the retry map. This must be done before 4591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // looking for the fallback in order to assign |min_retry_delay| if the 4601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // primary proxy has a shorter delay. 4611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!fallback_allowed_ || !fallback.is_valid() || min_retry_delay) { 4621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci found = retry_map.find( 4631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::ProxyServer(primary.SchemeIs(url::kHttpsScheme) ? 4641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::ProxyServer::SCHEME_HTTPS : 4651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::ProxyServer::SCHEME_HTTP, 4661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::HostPortPair::FromURL(primary)).ToURI()); 4671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (found != retry_map.end() && min_retry_delay) { 4681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *min_retry_delay = found->second.current_delay; 4691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 4705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 4715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (fallback_allowed_ && fallback.is_valid()) { 4731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // If fallback is allowed, only the fallback proxy needs to be on the retry 4741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // map to know if there was a bypass. We can reset found and forget if the 4751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // primary was on the retry map. 4761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci found = retry_map.find( 4771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::ProxyServer(fallback.SchemeIs(url::kHttpsScheme) ? 4781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::ProxyServer::SCHEME_HTTPS : 4791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::ProxyServer::SCHEME_HTTP, 4801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::HostPortPair::FromURL(fallback)).ToURI()); 4811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (found != retry_map.end() && 4821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci min_retry_delay && 4831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *min_retry_delay > found->second.current_delay) { 4841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *min_retry_delay = found->second.current_delay; 4851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 4861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 4875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return found != retry_map.end(); 4895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 4905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// TODO(kundaji): Remove tests for macro definitions. 49246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)std::string DataReductionProxyParams::GetDefaultOrigin() const { 4931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return kDefaultOrigin; 49446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 49546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 49646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)std::string DataReductionProxyParams::GetDefaultFallbackOrigin() const { 4971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return kDefaultFallbackOrigin; 49846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 49946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 50046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)std::string DataReductionProxyParams::GetDefaultSSLOrigin() const { 5011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return kDefaultSslOrigin; 50246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 50346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 50446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)std::string DataReductionProxyParams::GetDefaultAltOrigin() const { 5051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return kDefaultAltOrigin; 50646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 50746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 50846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)std::string DataReductionProxyParams::GetDefaultAltFallbackOrigin() const { 5091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return kDefaultAltFallbackOrigin; 51046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 51146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 51246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)std::string DataReductionProxyParams::GetDefaultProbeURL() const { 5131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return kDefaultProbeUrl; 51446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 51546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 5166d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)std::string DataReductionProxyParams::GetDefaultWarmupURL() const { 5171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return kDefaultWarmupUrl; 5186d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} 5196d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 52046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} // namespace data_reduction_proxy 521