| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_netw
ork_delegate.h" | 5 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_netw
ork_delegate.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
| 9 #include "base/metrics/histogram.h" | 9 #include "base/metrics/histogram.h" |
| 10 #include "base/prefs/pref_service.h" | 10 #include "base/prefs/pref_service.h" |
| 11 #include "base/single_thread_task_runner.h" | 11 #include "base/single_thread_task_runner.h" |
| 12 #include "base/strings/string_number_conversions.h" | 12 #include "base/strings/string_number_conversions.h" |
| 13 #include "base/time/time.h" | 13 #include "base/time/time.h" |
| 14 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_bypa
ss_stats.h" |
| 14 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_conf
ig.h" | 15 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_conf
ig.h" |
| 15 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_conf
igurator.h" | 16 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_conf
igurator.h" |
| 16 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_io_d
ata.h" | 17 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_io_d
ata.h" |
| 17 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_requ
est_options.h" | 18 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_requ
est_options.h" |
| 18 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_serv
ice.h" | 19 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_serv
ice.h" |
| 19 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_stat
istics_prefs.h" | 20 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_stat
istics_prefs.h" |
| 20 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_usag
e_stats.h" | |
| 21 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_param
s.h" | 21 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_param
s.h" |
| 22 #include "net/base/load_flags.h" | 22 #include "net/base/load_flags.h" |
| 23 #include "net/http/http_response_headers.h" | 23 #include "net/http/http_response_headers.h" |
| 24 #include "net/proxy/proxy_info.h" | 24 #include "net/proxy/proxy_info.h" |
| 25 #include "net/proxy/proxy_server.h" | 25 #include "net/proxy/proxy_server.h" |
| 26 #include "net/proxy/proxy_service.h" | 26 #include "net/proxy/proxy_service.h" |
| 27 #include "net/url_request/url_request.h" | 27 #include "net/url_request/url_request.h" |
| 28 #include "net/url_request/url_request_status.h" | 28 #include "net/url_request/url_request_status.h" |
| 29 | 29 |
| 30 namespace { | 30 namespace { |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 80 scoped_ptr<net::NetworkDelegate> network_delegate, | 80 scoped_ptr<net::NetworkDelegate> network_delegate, |
| 81 DataReductionProxyConfig* config, | 81 DataReductionProxyConfig* config, |
| 82 DataReductionProxyRequestOptions* request_options, | 82 DataReductionProxyRequestOptions* request_options, |
| 83 const DataReductionProxyConfigurator* configurator) | 83 const DataReductionProxyConfigurator* configurator) |
| 84 : LayeredNetworkDelegate(network_delegate.Pass()), | 84 : LayeredNetworkDelegate(network_delegate.Pass()), |
| 85 ui_task_runner_(NULL), | 85 ui_task_runner_(NULL), |
| 86 received_content_length_(0), | 86 received_content_length_(0), |
| 87 original_content_length_(0), | 87 original_content_length_(0), |
| 88 data_reduction_proxy_enabled_(NULL), | 88 data_reduction_proxy_enabled_(NULL), |
| 89 data_reduction_proxy_config_(config), | 89 data_reduction_proxy_config_(config), |
| 90 data_reduction_proxy_usage_stats_(NULL), | 90 data_reduction_proxy_bypass_stats_(NULL), |
| 91 data_reduction_proxy_request_options_(request_options), | 91 data_reduction_proxy_request_options_(request_options), |
| 92 configurator_(configurator) { | 92 configurator_(configurator) { |
| 93 DCHECK(data_reduction_proxy_config_); | 93 DCHECK(data_reduction_proxy_config_); |
| 94 DCHECK(data_reduction_proxy_request_options_); | 94 DCHECK(data_reduction_proxy_request_options_); |
| 95 } | 95 } |
| 96 | 96 |
| 97 DataReductionProxyNetworkDelegate::~DataReductionProxyNetworkDelegate() { | 97 DataReductionProxyNetworkDelegate::~DataReductionProxyNetworkDelegate() { |
| 98 } | 98 } |
| 99 | 99 |
| 100 void DataReductionProxyNetworkDelegate::InitIODataAndUMA( | 100 void DataReductionProxyNetworkDelegate::InitIODataAndUMA( |
| 101 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner, | 101 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner, |
| 102 DataReductionProxyIOData* io_data, | 102 DataReductionProxyIOData* io_data, |
| 103 BooleanPrefMember* data_reduction_proxy_enabled, | 103 BooleanPrefMember* data_reduction_proxy_enabled, |
| 104 DataReductionProxyUsageStats* usage_stats) { | 104 DataReductionProxyBypassStats* bypass_stats) { |
| 105 DCHECK(data_reduction_proxy_enabled); | 105 DCHECK(data_reduction_proxy_enabled); |
| 106 DCHECK(usage_stats); | 106 DCHECK(bypass_stats); |
| 107 ui_task_runner_ = ui_task_runner; | 107 ui_task_runner_ = ui_task_runner; |
| 108 data_reduction_proxy_io_data_ = io_data; | 108 data_reduction_proxy_io_data_ = io_data; |
| 109 data_reduction_proxy_enabled_ = data_reduction_proxy_enabled; | 109 data_reduction_proxy_enabled_ = data_reduction_proxy_enabled; |
| 110 data_reduction_proxy_usage_stats_ = usage_stats; | 110 data_reduction_proxy_bypass_stats_ = bypass_stats; |
| 111 } | 111 } |
| 112 | 112 |
| 113 base::Value* | 113 base::Value* |
| 114 DataReductionProxyNetworkDelegate::SessionNetworkStatsInfoToValue() const { | 114 DataReductionProxyNetworkDelegate::SessionNetworkStatsInfoToValue() const { |
| 115 base::DictionaryValue* dict = new base::DictionaryValue(); | 115 base::DictionaryValue* dict = new base::DictionaryValue(); |
| 116 // Use strings to avoid overflow. base::Value only supports 32-bit integers. | 116 // Use strings to avoid overflow. base::Value only supports 32-bit integers. |
| 117 dict->SetString("session_received_content_length", | 117 dict->SetString("session_received_content_length", |
| 118 base::Int64ToString(received_content_length_)); | 118 base::Int64ToString(received_content_length_)); |
| 119 dict->SetString("session_original_content_length", | 119 dict->SetString("session_original_content_length", |
| 120 base::Int64ToString(original_content_length_)); | 120 base::Int64ToString(original_content_length_)); |
| 121 return dict; | 121 return dict; |
| 122 } | 122 } |
| 123 | 123 |
| 124 void DataReductionProxyNetworkDelegate::OnResolveProxyInternal( | 124 void DataReductionProxyNetworkDelegate::OnResolveProxyInternal( |
| 125 const GURL& url, | 125 const GURL& url, |
| 126 int load_flags, | 126 int load_flags, |
| 127 const net::ProxyService& proxy_service, | 127 const net::ProxyService& proxy_service, |
| 128 net::ProxyInfo* result) { | 128 net::ProxyInfo* result) { |
| 129 if (configurator_) { | 129 if (configurator_) { |
| 130 OnResolveProxyHandler( | 130 OnResolveProxyHandler( |
| 131 url, load_flags, configurator_->GetProxyConfigOnIOThread(), | 131 url, load_flags, configurator_->GetProxyConfigOnIOThread(), |
| 132 proxy_service.proxy_retry_info(), data_reduction_proxy_config_, result); | 132 proxy_service.proxy_retry_info(), data_reduction_proxy_config_, result); |
| 133 } | 133 } |
| 134 } | 134 } |
| 135 | 135 |
| 136 void DataReductionProxyNetworkDelegate::OnProxyFallbackInternal( | 136 void DataReductionProxyNetworkDelegate::OnProxyFallbackInternal( |
| 137 const net::ProxyServer& bad_proxy, | 137 const net::ProxyServer& bad_proxy, |
| 138 int net_error) { | 138 int net_error) { |
| 139 if (data_reduction_proxy_usage_stats_) { | 139 if (data_reduction_proxy_bypass_stats_) { |
| 140 data_reduction_proxy_usage_stats_->OnProxyFallback( | 140 data_reduction_proxy_bypass_stats_->OnProxyFallback( |
| 141 bad_proxy, net_error); | 141 bad_proxy, net_error); |
| 142 } | 142 } |
| 143 } | 143 } |
| 144 | 144 |
| 145 void DataReductionProxyNetworkDelegate::OnBeforeSendProxyHeadersInternal( | 145 void DataReductionProxyNetworkDelegate::OnBeforeSendProxyHeadersInternal( |
| 146 net::URLRequest* request, | 146 net::URLRequest* request, |
| 147 const net::ProxyInfo& proxy_info, | 147 const net::ProxyInfo& proxy_info, |
| 148 net::HttpRequestHeaders* headers) { | 148 net::HttpRequestHeaders* headers) { |
| 149 if (data_reduction_proxy_request_options_) { | 149 if (data_reduction_proxy_request_options_) { |
| 150 data_reduction_proxy_request_options_->MaybeAddRequestHeader( | 150 data_reduction_proxy_request_options_->MaybeAddRequestHeader( |
| 151 request, proxy_info.proxy_server(), headers); | 151 request, proxy_info.proxy_server(), headers); |
| 152 } | 152 } |
| 153 } | 153 } |
| 154 | 154 |
| 155 void DataReductionProxyNetworkDelegate::OnCompletedInternal( | 155 void DataReductionProxyNetworkDelegate::OnCompletedInternal( |
| 156 net::URLRequest* request, | 156 net::URLRequest* request, |
| 157 bool started) { | 157 bool started) { |
| 158 DCHECK(request); | 158 DCHECK(request); |
| 159 if (data_reduction_proxy_usage_stats_) | 159 if (data_reduction_proxy_bypass_stats_) |
| 160 data_reduction_proxy_usage_stats_->OnUrlRequestCompleted(request, started); | 160 data_reduction_proxy_bypass_stats_->OnUrlRequestCompleted(request, started); |
| 161 | 161 |
| 162 // Only record for http or https urls. | 162 // Only record for http or https urls. |
| 163 bool is_http = request->url().SchemeIs("http"); | 163 bool is_http = request->url().SchemeIs("http"); |
| 164 bool is_https = request->url().SchemeIs("https"); | 164 bool is_https = request->url().SchemeIs("https"); |
| 165 | 165 |
| 166 if (request->status().status() != net::URLRequestStatus::SUCCESS) | 166 if (request->status().status() != net::URLRequestStatus::SUCCESS) |
| 167 return; | 167 return; |
| 168 | 168 |
| 169 // For better accuracy, we use the actual bytes read instead of the length | 169 // For better accuracy, we use the actual bytes read instead of the length |
| 170 // specified with the Content-Length header, which may be inaccurate, | 170 // specified with the Content-Length header, which may be inaccurate, |
| (...skipping 20 matching lines...) Expand all Loading... |
| 191 original_content_length, | 191 original_content_length, |
| 192 received_content_length); | 192 received_content_length); |
| 193 AccumulateContentLength(received_content_length, | 193 AccumulateContentLength(received_content_length, |
| 194 adjusted_original_content_length, | 194 adjusted_original_content_length, |
| 195 request_type); | 195 request_type); |
| 196 RecordContentLengthHistograms(received_content_length, | 196 RecordContentLengthHistograms(received_content_length, |
| 197 original_content_length, | 197 original_content_length, |
| 198 freshness_lifetime); | 198 freshness_lifetime); |
| 199 | 199 |
| 200 if (data_reduction_proxy_enabled_ && | 200 if (data_reduction_proxy_enabled_ && |
| 201 data_reduction_proxy_usage_stats_) { | 201 data_reduction_proxy_bypass_stats_) { |
| 202 data_reduction_proxy_usage_stats_->RecordBytesHistograms( | 202 data_reduction_proxy_bypass_stats_->RecordBytesHistograms( |
| 203 *request, | 203 *request, |
| 204 *data_reduction_proxy_enabled_, | 204 *data_reduction_proxy_enabled_, |
| 205 configurator_->GetProxyConfigOnIOThread()); | 205 configurator_->GetProxyConfigOnIOThread()); |
| 206 } | 206 } |
| 207 DVLOG(2) << __FUNCTION__ | 207 DVLOG(2) << __FUNCTION__ |
| 208 << " received content length: " << received_content_length | 208 << " received content length: " << received_content_length |
| 209 << " original content length: " << original_content_length | 209 << " original content length: " << original_content_length |
| 210 << " url: " << request->url(); | 210 << " url: " << request->url(); |
| 211 } | 211 } |
| 212 } | 212 } |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 289 DataReductionProxyParams::IsIncludedInCriticalPathBypassFieldTrial()) { | 289 DataReductionProxyParams::IsIncludedInCriticalPathBypassFieldTrial()) { |
| 290 if (!result->is_empty() && !result->is_direct() && | 290 if (!result->is_empty() && !result->is_direct() && |
| 291 config->IsDataReductionProxy(result->proxy_server().host_port_pair(), | 291 config->IsDataReductionProxy(result->proxy_server().host_port_pair(), |
| 292 NULL)) { | 292 NULL)) { |
| 293 result->RemoveProxiesWithoutScheme(net::ProxyServer::SCHEME_DIRECT); | 293 result->RemoveProxiesWithoutScheme(net::ProxyServer::SCHEME_DIRECT); |
| 294 } | 294 } |
| 295 } | 295 } |
| 296 } | 296 } |
| 297 | 297 |
| 298 } // namespace data_reduction_proxy | 298 } // namespace data_reduction_proxy |
| OLD | NEW |