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

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

Issue 1024553009: Add the ability to use DataReductionProxyParams from DataReductionProxyConfigServiceClient. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@client_control_local
Patch Set: Rebase Created 5 years, 9 months 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_config_service_client.cc
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_service_client.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_service_client.cc
index 39a9481bc782694f431a6400fc82c34519b5d0f1..7e1c5a36e8c7c275571b14816a7c5626058ef1be 100644
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_service_client.cc
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_service_client.cc
@@ -4,27 +4,170 @@
#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_config_service_client.h"
+#include <string>
+#include <vector>
+
+#include "base/bind.h"
+#include "base/bind_helpers.h"
#include "base/json/json_writer.h"
+#include "base/location.h"
#include "base/logging.h"
+#include "base/single_thread_task_runner.h"
+#include "base/time/time.h"
#include "base/values.h"
+#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_config.h"
+#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_mutable_config_values.h"
#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_request_options.h"
+#include "components/data_reduction_proxy/core/common/data_reduction_proxy_client_config_parser.h"
#include "components/data_reduction_proxy/core/common/data_reduction_proxy_params.h"
+#include "components/data_reduction_proxy/proto/client_config.pb.h"
+#include "net/base/host_port_pair.h"
+#include "net/proxy/proxy_server.h"
namespace data_reduction_proxy {
+namespace {
+
+// This is the default backoff policy used to communicate with the Data
+// Reduction Proxy configuration service.
+const net::BackoffEntry::Policy kDefaultBackoffPolicy = {
+ 0, // num_errors_to_ignore
+ 1 * 1000, // initial_delay_ms
+ 4, // multiply_factor
+ 0.10, // jitter_factor,
+ 30 * 60 * 1000, // maximum_backoff_ms
+ -1, // entry_lifetime_ms
+ true, // always_use_initial_delay
+};
+
+// Extracts the list of Data Reduction Proxy servers to use for HTTP requests.
+std::vector<net::ProxyServer> GetProxiesForHTTP(
+ const data_reduction_proxy::ProxyConfig& proxy_config) {
+ std::vector<net::ProxyServer> proxies;
+ for (const auto& server : proxy_config.http_proxy_servers()) {
+ if (server.scheme() != ProxyServer_ProxyScheme_UNSPECIFIED) {
+ proxies.push_back(net::ProxyServer(
+ config_parser::SchemeFromProxyScheme(server.scheme()),
+ net::HostPortPair(server.host(), server.port())));
+ }
+ }
+
+ return proxies;
+}
+
+// Calculate the next time at which the Data Reduction Proxy configuration
+// should be retrieved, based on response success, configuration expiration,
+// and the backoff delay.
+base::TimeDelta CalculateNextConfigRefreshTime(
+ bool fetch_succeeded,
+ const base::Time& config_expiration,
+ const base::Time& now,
+ const base::TimeDelta& backoff_delay) {
+ if (fetch_succeeded) {
+ base::TimeDelta success_delay = config_expiration - now;
bengr 2015/03/25 17:15:11 It would probably be a good idea to enforce assump
jeremyim 2015/03/25 17:54:18 Done.
+ if (success_delay > backoff_delay)
+ return success_delay;
+ }
+
+ return backoff_delay;
+}
+
+} // namespace
+
+const net::BackoffEntry::Policy& GetBackoffPolicy() {
+ return kDefaultBackoffPolicy;
+}
+
DataReductionProxyConfigServiceClient::DataReductionProxyConfigServiceClient(
- DataReductionProxyParams* params,
- DataReductionProxyRequestOptions* request_options)
- : params_(params),
- request_options_(request_options) {
- DCHECK(params);
+ scoped_ptr<DataReductionProxyParams> params,
+ const net::BackoffEntry::Policy& backoff_policy,
+ DataReductionProxyRequestOptions* request_options,
+ DataReductionProxyMutableConfigValues* config_values,
+ DataReductionProxyConfig* config,
+ scoped_refptr<base::SingleThreadTaskRunner> io_task_runner)
+ : params_(params.Pass()),
+ request_options_(request_options),
+ config_values_(config_values),
+ config_(config),
+ io_task_runner_(io_task_runner),
+ backoff_entry_(&backoff_policy) {
DCHECK(request_options);
+ DCHECK(config_values);
+ DCHECK(config);
+ DCHECK(io_task_runner.get());
+ io_task_runner_->PostTask(
+ FROM_HERE,
+ base::Bind(&DataReductionProxyConfigServiceClient::RetrieveConfig,
+ base::Unretained(this)));
}
DataReductionProxyConfigServiceClient::
~DataReductionProxyConfigServiceClient() {
}
+void DataReductionProxyConfigServiceClient::RetrieveConfig() {
+ DCHECK(io_task_runner_->BelongsToCurrentThread());
+
+ std::string static_response = ConstructStaticResponse();
+ ClientConfig config;
+ bool succeeded = false;
+ if (config_parser::ParseClientConfig(static_response, &config)) {
+ if (config.has_proxy_config()) {
+ net::ProxyServer origin;
+ net::ProxyServer fallback_origin;
+ std::vector<net::ProxyServer> proxies =
+ GetProxiesForHTTP(config.proxy_config());
+ if (proxies.size() > 0) {
+ origin = proxies[0];
+ if (proxies.size() > 1)
+ fallback_origin = proxies[1];
+
+ std::string session;
+ std::string credentials;
+ if (DataReductionProxyRequestOptions::ParseLocalSessionKey(
+ config.session_key(), &session, &credentials)) {
+ request_options_->SetCredentials(session, credentials);
+ config_values_->UpdateValues(origin, fallback_origin);
+ config_->ReloadConfig();
+ succeeded = true;
+ }
+ }
+ }
+ }
+
+ base::Time expiration_time;
+ if (succeeded) {
+ expiration_time = config_parser::TimestampToTime(config.expire_time());
+ }
+
+ GetBackoffEntry()->InformOfRequest(succeeded);
+ base::TimeDelta next_config_refresh_time =
+ CalculateNextConfigRefreshTime(succeeded, expiration_time, Now(),
+ GetBackoffEntry()->GetTimeUntilRelease());
+ SetConfigRefreshTimer(next_config_refresh_time);
+}
+
+const net::BackoffEntry*
+DataReductionProxyConfigServiceClient::GetBackoffEntry() const {
+ return &backoff_entry_;
+}
+
+net::BackoffEntry* DataReductionProxyConfigServiceClient::GetBackoffEntry() {
+ return &backoff_entry_;
+}
+
+void DataReductionProxyConfigServiceClient::SetConfigRefreshTimer(
+ const base::TimeDelta& delay) {
+ config_refresh_timer_.Stop();
+ config_refresh_timer_.Start(
+ FROM_HERE, delay, this,
+ &DataReductionProxyConfigServiceClient::RetrieveConfig);
+}
+
+base::Time DataReductionProxyConfigServiceClient::Now() const {
+ return base::Time::Now();
+}
+
std::string
DataReductionProxyConfigServiceClient::ConstructStaticResponse() const {
std::string response;

Powered by Google App Engine
This is Rietveld 408576698