| Index: components/data_reduction_proxy/browser/data_reduction_proxy_settings.cc
|
| diff --git a/components/data_reduction_proxy/browser/data_reduction_proxy_settings.cc b/components/data_reduction_proxy/browser/data_reduction_proxy_settings.cc
|
| index 3683936cce8a3e252dbc531e5bcbabdfc7c27a17..fe08eaac69ba289a641400f7df742a0e3e8fb55b 100644
|
| --- a/components/data_reduction_proxy/browser/data_reduction_proxy_settings.cc
|
| +++ b/components/data_reduction_proxy/browser/data_reduction_proxy_settings.cc
|
| @@ -67,7 +67,6 @@ int64 GetInt64PrefValue(const base::ListValue& list_value, size_t index) {
|
|
|
| namespace data_reduction_proxy {
|
|
|
| -std::string DataReductionProxySettings::key_;
|
| bool DataReductionProxySettings::allowed_;
|
| bool DataReductionProxySettings::promo_allowed_;
|
|
|
| @@ -93,11 +92,6 @@ bool DataReductionProxySettings::IsIncludedInFieldTrialOrFlags() {
|
| }
|
|
|
| // static
|
| -void DataReductionProxySettings::SetKey(const std::string& key) {
|
| - key_ = key;
|
| -}
|
| -
|
| -// static
|
| void DataReductionProxySettings::SetAllowed(bool allowed) {
|
| allowed_ = allowed;
|
| }
|
| @@ -174,25 +168,26 @@ void DataReductionProxySettings::SetProxyConfigurator(
|
|
|
| // static
|
| void DataReductionProxySettings::InitDataReductionProxySession(
|
| - net::HttpNetworkSession* session) {
|
| -// This is a no-op unless the authentication parameters are compiled in.
|
| -// (even though values for them may be specified on the command line).
|
| -// Authentication will still work if the command line parameters are used,
|
| -// however there will be a round-trip overhead for each challenge/response
|
| -// (typically once per session).
|
| -// TODO(bengr):Pass a configuration struct into DataReductionProxyConfigurator's
|
| -// constructor. The struct would carry everything in the preprocessor flags.
|
| - if (key_.empty())
|
| + net::HttpNetworkSession* session,
|
| + const std::string& key) {
|
| + // This is a no-op unless the key is set. (even though values for them may be
|
| + // specified on the command line). Authentication will still work if the
|
| + // command line parameters are used, however there will be a round-trip
|
| + // overhead for each challenge/response (typically once per session).
|
| + // TODO(bengr):Pass a configuration struct into
|
| + // DataReductionProxyConfigurator's constructor.
|
| + if (key.empty())
|
| return;
|
| DCHECK(session);
|
| net::HttpAuthCache* auth_cache = session->http_auth_cache();
|
| DCHECK(auth_cache);
|
| - InitDataReductionAuthentication(auth_cache);
|
| + InitDataReductionAuthentication(auth_cache, key);
|
| }
|
|
|
| // static
|
| void DataReductionProxySettings::InitDataReductionAuthentication(
|
| - net::HttpAuthCache* auth_cache) {
|
| + net::HttpAuthCache* auth_cache,
|
| + const std::string& key) {
|
| DCHECK(auth_cache);
|
| int64 timestamp =
|
| (base::Time::Now() - base::Time::UnixEpoch()).InMilliseconds() / 1000;
|
| @@ -215,7 +210,7 @@ void DataReductionProxySettings::InitDataReductionAuthentication(
|
| rand[0],
|
| rand[1],
|
| rand[2]);
|
| - base::string16 password = AuthHashForSalt(timestamp);
|
| + base::string16 password = AuthHashForSalt(timestamp, key);
|
|
|
| DVLOG(1) << "origin: [" << auth_origin << "] realm: [" << realm
|
| << "] challenge: [" << challenge << "] password: [" << password << "]";
|
| @@ -310,7 +305,6 @@ bool DataReductionProxySettings::IsAcceptableAuthChallenge(
|
| return false;
|
| }
|
|
|
| -// static
|
| base::string16 DataReductionProxySettings::GetTokenForAuthChallenge(
|
| net::AuthChallengeInfo* auth_info) {
|
| if (auth_info->realm.length() > strlen(kAuthenticationRealmName)) {
|
| @@ -318,7 +312,7 @@ base::string16 DataReductionProxySettings::GetTokenForAuthChallenge(
|
| std::string realm_suffix =
|
| auth_info->realm.substr(strlen(kAuthenticationRealmName));
|
| if (base::StringToInt64(realm_suffix, &salt)) {
|
| - return AuthHashForSalt(salt);
|
| + return AuthHashForSalt(salt, key_);
|
| } else {
|
| DVLOG(1) << "Unable to parse realm name " << auth_info->realm
|
| << "into an int for salting.";
|
| @@ -652,11 +646,10 @@ std::string DataReductionProxySettings::GetProxyCheckURL() {
|
| }
|
|
|
| // static
|
| -base::string16 DataReductionProxySettings::AuthHashForSalt(int64 salt) {
|
| - if (!IsDataReductionProxyAllowed())
|
| - return base::string16();
|
| -
|
| - std::string key;
|
| +base::string16 DataReductionProxySettings::AuthHashForSalt(
|
| + int64 salt,
|
| + const std::string& key) {
|
| + std::string active_key;
|
|
|
| const CommandLine& command_line = *CommandLine::ForCurrentProcess();
|
| if (command_line.HasSwitch(switches::kDataReductionProxy)) {
|
| @@ -665,17 +658,17 @@ base::string16 DataReductionProxySettings::AuthHashForSalt(int64 salt) {
|
| // Don't expose |key_| to a proxy passed in via the command line.
|
| if (!command_line.HasSwitch(switches::kDataReductionProxyKey))
|
| return base::string16();
|
| - key = command_line.GetSwitchValueASCII(switches::kDataReductionProxyKey);
|
| + active_key = command_line.GetSwitchValueASCII(
|
| + switches::kDataReductionProxyKey);
|
| } else {
|
| - key = key_;
|
| + active_key = key;
|
| }
|
| -
|
| - DCHECK(!key.empty());
|
| + DCHECK(!active_key.empty());
|
|
|
| std::string salted_key =
|
| base::StringPrintf("%lld%s%lld",
|
| static_cast<long long>(salt),
|
| - key.c_str(),
|
| + active_key.c_str(),
|
| static_cast<long long>(salt));
|
| return base::UTF8ToUTF16(base::MD5String(salted_key));
|
| }
|
|
|