Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(41)

Unified Diff: components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate.cc

Issue 734263003: Move data reduction proxy logic out of chrome and android webview network delegate (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate.cc
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate.cc
new file mode 100644
index 0000000000000000000000000000000000000000..a1b644ea7162cfcf4a1001ed0085dcedaf237567
--- /dev/null
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate.cc
@@ -0,0 +1,184 @@
+// 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 "components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate.h"
bengr 2014/11/18 19:30:56 For tests, you'll want to test that (1) wrapping w
megjablon 2014/11/19 19:23:40 Next patch
+
+#include "base/bind.h"
+#include "base/message_loop/message_loop_proxy.h"
+#include "base/prefs/pref_member.h"
bengr 2014/11/18 19:30:56 Is this needed?
megjablon 2014/11/19 19:23:40 Removed.
+#include "base/prefs/pref_service.h"
+#include "base/strings/string_number_conversions.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_metrics.h"
bengr 2014/11/18 19:30:56 Is this needed?
megjablon 2014/11/19 19:23:40 Done.
+#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_protocol.h"
+#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_statistics_prefs.h"
bengr 2014/11/18 19:30:56 This can be forward declared until you move Update
megjablon 2014/11/19 19:23:41 Acknowledged.
+#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_usage_stats.h"
+#include "components/data_reduction_proxy/core/common/data_reduction_proxy_params.h"
bengr 2014/11/18 19:30:56 Not needed.
megjablon 2014/11/19 19:23:41 Done.
+#include "net/base/network_delegate.h"
+#include "net/http/http_response_headers.h"
+#include "net/proxy/proxy_config.h"
bengr 2014/11/18 19:30:56 This can be forward declared.
megjablon 2014/11/19 19:23:40 Done.
+#include "net/proxy/proxy_info.h"
bengr 2014/11/18 19:30:55 This can be forward declared.
megjablon 2014/11/19 19:23:41 Done.
+#include "net/proxy/proxy_server.h"
bengr 2014/11/18 19:30:56 This can be forward declared.
megjablon 2014/11/19 19:23:40 Done.
+#include "net/url_request/url_request.h"
bengr 2014/11/18 19:30:55 You need an include for URLRequestStatus too.
megjablon 2014/11/19 19:23:40 Done.
+
bengr 2014/11/18 19:30:56 You also need an include for ProxyService.
megjablon 2014/11/19 19:23:41 Done.
+namespace data_reduction_proxy {
bengr 2014/11/18 19:30:56 You should forward declare GURL, ProxyInfo, ProxyC
megjablon 2014/11/19 19:23:41 Done.
+
+DataReductionProxyNetworkDelegate::DataReductionProxyNetworkDelegate(
+ scoped_ptr<net::NetworkDelegate> network_delegate)
+ : WrappingNetworkDelegate(network_delegate.Pass()),
+ profile_prefs_(NULL),
+ ui_thread_proxy_(NULL),
+ received_content_length_(0),
+ original_content_length_(0),
+ data_reduction_proxy_enabled_(NULL),
+ data_reduction_proxy_params_(NULL),
+ data_reduction_proxy_usage_stats_(NULL),
+ data_reduction_proxy_auth_request_handler_(NULL),
+ data_reduction_proxy_statistics_prefs_(NULL) {
+}
+
+void DataReductionProxyNetworkDelegate::set_profile_prefs(
+ PrefService* profile_prefs) {
+ profile_prefs_ = profile_prefs;
+}
+
+void DataReductionProxyNetworkDelegate::set_ui_thread_proxy(
+ scoped_refptr<base::MessageLoopProxy> ui_thread_proxy){
+ ui_thread_proxy_ = ui_thread_proxy;
+}
+
+DataReductionProxyNetworkDelegate::~DataReductionProxyNetworkDelegate() {
+}
+
+// static
+// TODO(megjablon): Use data_reduction_proxy_delayed_pref_service to read prefs.
+// Until updated the pref values may be up to an hour behind on desktop.
+base::Value* DataReductionProxyNetworkDelegate::HistoricNetworkStatsInfoToValue(
+ PrefService* profile_prefs) {
+ int64 total_received = profile_prefs->GetInt64(
+ data_reduction_proxy::prefs::kHttpReceivedContentLength);
+ int64 total_original = profile_prefs->GetInt64(
+ data_reduction_proxy::prefs::kHttpOriginalContentLength);
+
+ base::DictionaryValue* dict = new base::DictionaryValue();
+ // Use strings to avoid overflow. base::Value only supports 32-bit integers.
+ dict->SetString("historic_received_content_length",
+ base::Int64ToString(total_received));
+ dict->SetString("historic_original_content_length",
+ base::Int64ToString(total_original));
+ return dict;
+}
+
+base::Value*
+DataReductionProxyNetworkDelegate::SessionNetworkStatsInfoToValue() const {
+ base::DictionaryValue* dict = new base::DictionaryValue();
+ // Use strings to avoid overflow. base::Value only supports 32-bit integers.
+ dict->SetString("session_received_content_length",
+ base::Int64ToString(received_content_length_));
+ dict->SetString("session_original_content_length",
+ base::Int64ToString(original_content_length_));
+ return dict;
+}
+
+void DataReductionProxyNetworkDelegate::OnResolveProxyInternal(
+ const GURL& url,
+ int load_flags,
+ const net::ProxyService& proxy_service,
+ net::ProxyInfo* result) {
+ if (!on_resolve_proxy_handler_.is_null() &&
+ !proxy_config_getter_.is_null()) {
+ on_resolve_proxy_handler_.Run(url, load_flags,
+ proxy_config_getter_.Run(),
+ proxy_service.config(),
+ proxy_service.proxy_retry_info(),
bengr 2014/11/18 19:30:55 Is this the same as the result?
megjablon 2014/11/19 19:23:41 I'm not sure what you're asking here.
+ data_reduction_proxy_params_, result);
+ }
+}
+
+void DataReductionProxyNetworkDelegate::OnProxyFallbackInternal(
+ const net::ProxyServer& bad_proxy,
+ int net_error) {
+ if (data_reduction_proxy_usage_stats_) {
+ data_reduction_proxy_usage_stats_->OnProxyFallback(
+ bad_proxy, net_error);
+ }
+}
+
+void DataReductionProxyNetworkDelegate::OnBeforeSendProxyHeadersInternal(
+ net::URLRequest* request,
+ const net::ProxyInfo& proxy_info,
+ net::HttpRequestHeaders* headers) {
+ if (data_reduction_proxy_auth_request_handler_) {
+ data_reduction_proxy_auth_request_handler_->MaybeAddRequestHeader(
+ request, proxy_info.proxy_server(), headers);
+ }
+}
+
+void DataReductionProxyNetworkDelegate::OnCompletedInternal(
+ net::URLRequest* request,
+ bool started) {
+ if (data_reduction_proxy_usage_stats_)
+ data_reduction_proxy_usage_stats_->OnUrlRequestCompleted(request, started);
+
+ // Only record for http or https urls.
+ bool is_http = request->url().SchemeIs("http");
+ bool is_https = request->url().SchemeIs("https");
+
+ if (request->status().status() == net::URLRequestStatus::SUCCESS) {
+ // For better accuracy, we use the actual bytes read instead of the length
+ // specified with the Content-Length header, which may be inaccurate,
+ // or missing, as is the case with chunked encoding.
+ int64 received_content_length = request->received_response_content_length();
+
+ if (!request->was_cached() && // Don't record cached content
+ received_content_length && // Zero-byte responses aren't useful.
+ (is_http || is_https)) { // Only record for HTTP or HTTPS urls.
+ int64 original_content_length =
+ request->response_info().headers->GetInt64HeaderValue(
+ "x-original-content-length");
+ DataReductionProxyRequestType request_type =
+ GetDataReductionProxyRequestType(request);
+
+ int64 adjusted_original_content_length =
+ GetAdjustedOriginalContentLength(request_type,
+ original_content_length,
+ received_content_length);
+ AccumulateContentLength(received_content_length,
+ adjusted_original_content_length,
+ request_type);
+
+ if (data_reduction_proxy_enabled_ &&
+ data_reduction_proxy_usage_stats_ &&
+ !proxy_config_getter_.is_null()) {
+ data_reduction_proxy_usage_stats_->RecordBytesHistograms(
+ request,
+ *data_reduction_proxy_enabled_,
+ proxy_config_getter_.Run());
+ }
+ }
+ }
+}
+
+void DataReductionProxyNetworkDelegate::AccumulateContentLength(
+ int64 received_content_length,
+ int64 original_content_length,
+ DataReductionProxyRequestType request_type) {
+ DCHECK_GE(received_content_length, 0);
+ DCHECK_GE(original_content_length, 0);
+ if (data_reduction_proxy_statistics_prefs_ && profile_prefs_) {
+ ui_thread_proxy_->PostTask(
+ FROM_HERE,
+ base::Bind(&UpdateContentLengthPrefs,
+ received_content_length,
+ original_content_length,
+ profile_prefs_,
+ request_type,
+ data_reduction_proxy_statistics_prefs_));
+
bengr 2014/11/18 19:30:55 Remove blank line.
megjablon 2014/11/19 19:23:40 Done.
+ }
+ received_content_length_ += received_content_length;
+ original_content_length_ += original_content_length;
+}
+
+} // namespace data_reduction_proxy

Powered by Google App Engine
This is Rietveld 408576698