Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "chrome/browser/net/spdyproxy/data_reduction_proxy_settings.h" | 5 #include "chrome/browser/net/spdyproxy/data_reduction_proxy_settings.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
| 9 #include "base/metrics/field_trial.h" | 9 #include "base/metrics/field_trial.h" |
| 10 #include "base/metrics/histogram.h" | 10 #include "base/metrics/histogram.h" |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 143 const CommandLine& command_line = *CommandLine::ForCurrentProcess(); | 143 const CommandLine& command_line = *CommandLine::ForCurrentProcess(); |
| 144 if (command_line.HasSwitch(switches::kSpdyProxyAuthOrigin)) | 144 if (command_line.HasSwitch(switches::kSpdyProxyAuthOrigin)) |
| 145 return command_line.GetSwitchValueASCII(switches::kSpdyProxyAuthOrigin); | 145 return command_line.GetSwitchValueASCII(switches::kSpdyProxyAuthOrigin); |
| 146 #if defined(SPDY_PROXY_AUTH_ORIGIN) | 146 #if defined(SPDY_PROXY_AUTH_ORIGIN) |
| 147 return SPDY_PROXY_AUTH_ORIGIN; | 147 return SPDY_PROXY_AUTH_ORIGIN; |
| 148 #else | 148 #else |
| 149 return std::string(); | 149 return std::string(); |
| 150 #endif | 150 #endif |
| 151 } | 151 } |
| 152 | 152 |
| 153 std::string DataReductionProxySettings::GetDataReductionProxyFallback() { | |
|
bengr
2013/10/20 18:19:31
I think we should enforce that a fallback only has
marq (ping after 24h)
2013/10/20 20:43:52
Yeah, good point. When I do the Great Renaming CL
| |
| 154 const CommandLine& command_line = *CommandLine::ForCurrentProcess(); | |
| 155 if (command_line.HasSwitch(switches::kSpdyProxyAuthFallback)) | |
| 156 return command_line.GetSwitchValueASCII(switches::kSpdyProxyAuthFallback); | |
| 157 #if defined(DATA_REDUCTION_FALLBACK_HOST) | |
|
bengr
2013/10/20 18:19:31
I hate names. If we are going to move over to usin
marq (ping after 24h)
2013/10/20 20:43:52
This implementation mirrors the one for getDataRed
bengr
2013/10/20 21:51:48
Let's verify that we don't also need to adjust chr
| |
| 158 return DATA_REDUCTION_FALLBACK_HOST; | |
| 159 #else | |
| 160 return std::string(); | |
| 161 #endif | |
| 162 } | |
| 163 | |
|
bengr
2013/10/20 18:19:31
We should have a different SPDY_PROXY_AUTH_VALUE f
bengr
2013/10/20 18:19:31
We should have a different SPDY_PROXY_AUTH_VALUE f
marq (ping after 24h)
2013/10/20 20:43:52
Ack.
| |
| 153 std::string DataReductionProxySettings::GetDataReductionProxyAuth() { | 164 std::string DataReductionProxySettings::GetDataReductionProxyAuth() { |
| 154 if (!IsDataReductionProxyAllowed()) | 165 if (!IsDataReductionProxyAllowed()) |
| 155 return std::string(); | 166 return std::string(); |
| 156 const CommandLine& command_line = *CommandLine::ForCurrentProcess(); | 167 const CommandLine& command_line = *CommandLine::ForCurrentProcess(); |
| 157 if (command_line.HasSwitch(switches::kSpdyProxyAuthOrigin)) { | 168 if (command_line.HasSwitch(switches::kSpdyProxyAuthOrigin)) { |
| 158 // If an origin is provided via a switch, then only consider the value | 169 // If an origin is provided via a switch, then only consider the value |
| 159 // that is provided by a switch. Do not use the preprocessor constant. | 170 // that is provided by a switch. Do not use the preprocessor constant. |
| 160 // Don't expose SPDY_PROXY_AUTH_VALUE to a proxy passed in via the command | 171 // Don't expose SPDY_PROXY_AUTH_VALUE to a proxy passed in via the command |
| 161 // line. | 172 // line. |
| 162 if (command_line.HasSwitch(switches::kSpdyProxyAuthValue)) | 173 if (command_line.HasSwitch(switches::kSpdyProxyAuthValue)) |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 230 } | 241 } |
| 231 DVLOG(1) << "The data reduction proxy is blocked."; | 242 DVLOG(1) << "The data reduction proxy is blocked."; |
| 232 | 243 |
| 233 if (enabled_by_user_ && !disabled_by_carrier_) { | 244 if (enabled_by_user_ && !disabled_by_carrier_) { |
| 234 // Disable the proxy. | 245 // Disable the proxy. |
| 235 SetProxyConfigs(false, false); | 246 SetProxyConfigs(false, false); |
| 236 } | 247 } |
| 237 disabled_by_carrier_ = true; | 248 disabled_by_carrier_ = true; |
| 238 } | 249 } |
| 239 | 250 |
| 240 std::string DataReductionProxySettings::GetDataReductionProxyOriginHostPort() { | |
| 241 std::string spdy_proxy = GetDataReductionProxyOrigin(); | |
| 242 if (spdy_proxy.empty()) { | |
| 243 DLOG(ERROR) << "A SPDY proxy has not been set."; | |
| 244 return spdy_proxy; | |
| 245 } | |
| 246 // Remove a trailing slash from the proxy string if one exists as well as | |
| 247 // leading HTTPS scheme. | |
| 248 return net::HostPortPair::FromURL(GURL(spdy_proxy)).ToString(); | |
| 249 } | |
| 250 | |
| 251 void DataReductionProxySettings::OnIPAddressChanged() { | 251 void DataReductionProxySettings::OnIPAddressChanged() { |
| 252 if (enabled_by_user_) { | 252 if (enabled_by_user_) { |
| 253 DCHECK(IsDataReductionProxyAllowed()); | 253 DCHECK(IsDataReductionProxyAllowed()); |
| 254 ProbeWhetherDataReductionProxyIsAvailable(); | 254 ProbeWhetherDataReductionProxyIsAvailable(); |
| 255 } | 255 } |
| 256 } | 256 } |
| 257 | 257 |
| 258 void DataReductionProxySettings::OnProxyEnabledPrefChange() { | 258 void DataReductionProxySettings::OnProxyEnabledPrefChange() { |
| 259 if (!IsDataReductionProxyAllowed()) | 259 if (!IsDataReductionProxyAllowed()) |
| 260 return; | 260 return; |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 317 PrefService* prefs = GetOriginalProfilePrefs(); | 317 PrefService* prefs = GetOriginalProfilePrefs(); |
| 318 | 318 |
| 319 // TODO(marq): Consider moving this so stats are wiped the first time the | 319 // TODO(marq): Consider moving this so stats are wiped the first time the |
| 320 // proxy settings are actually (not maybe) turned on. | 320 // proxy settings are actually (not maybe) turned on. |
| 321 if (spdy_proxy_auth_enabled_.GetValue() && | 321 if (spdy_proxy_auth_enabled_.GetValue() && |
| 322 !prefs->GetBoolean(prefs::kSpdyProxyAuthWasEnabledBefore)) { | 322 !prefs->GetBoolean(prefs::kSpdyProxyAuthWasEnabledBefore)) { |
| 323 prefs->SetBoolean(prefs::kSpdyProxyAuthWasEnabledBefore, true); | 323 prefs->SetBoolean(prefs::kSpdyProxyAuthWasEnabledBefore, true); |
| 324 ResetDataReductionStatistics(); | 324 ResetDataReductionStatistics(); |
| 325 } | 325 } |
| 326 | 326 |
| 327 std::string spdy_proxy_origin = GetDataReductionProxyOriginHostPort(); | 327 std::string main_proxy = GetDataReductionProxyOrigin(); |
| 328 | 328 std::string fallback_proxy = GetDataReductionProxyFallback(); |
| 329 // Configure use of the data reduction proxy if it is enabled and the proxy | 329 // Configure use of the data reduction proxy if it is enabled and the proxy |
| 330 // origin is non-empty. | 330 // origin is non-empty. |
| 331 enabled_by_user_= | 331 enabled_by_user_= spdy_proxy_auth_enabled_.GetValue() |
| 332 spdy_proxy_auth_enabled_.GetValue() && !spdy_proxy_origin.empty(); | 332 && ( !main_proxy.empty() || !fallback_proxy.empty() ); |
|
bengr
2013/10/20 18:19:31
Requiring both will be easier reason about.
marq (ping after 24h)
2013/10/20 20:43:52
Done.
| |
| 333 SetProxyConfigs(enabled_by_user_ && !disabled_by_carrier_, at_startup); | 333 SetProxyConfigs(enabled_by_user_ && !disabled_by_carrier_, at_startup); |
| 334 | 334 |
| 335 // Check if the proxy has been disabled explicitly by the carrier. | 335 // Check if the proxy has been disabled explicitly by the carrier. |
| 336 if (enabled_by_user_) | 336 if (enabled_by_user_) |
| 337 ProbeWhetherDataReductionProxyIsAvailable(); | 337 ProbeWhetherDataReductionProxyIsAvailable(); |
| 338 } | 338 } |
| 339 | 339 |
| 340 void DataReductionProxySettings::SetProxyConfigs(bool enabled, | 340 void DataReductionProxySettings::SetProxyConfigs(bool enabled, |
| 341 bool at_startup) { | 341 bool at_startup) { |
| 342 LogProxyState(enabled, at_startup); | 342 LogProxyState(enabled, at_startup); |
| 343 PrefService* prefs = GetOriginalProfilePrefs(); | 343 PrefService* prefs = GetOriginalProfilePrefs(); |
| 344 DCHECK(prefs); | 344 DCHECK(prefs); |
| 345 DictionaryPrefUpdate update(prefs, prefs::kProxy); | 345 DictionaryPrefUpdate update(prefs, prefs::kProxy); |
| 346 base::DictionaryValue* dict = update.Get(); | 346 base::DictionaryValue* dict = update.Get(); |
| 347 if (enabled) { | 347 if (enabled) { |
| 348 std::string fallback = GetDataReductionProxyFallback(); | |
| 348 std::string proxy_server_config = | 349 std::string proxy_server_config = |
| 349 "http=" + GetDataReductionProxyOrigin() + ",direct://;"; | 350 "http=" + GetDataReductionProxyOrigin() + |
| 351 (fallback.empty() ? "" : "," + fallback) + | |
| 352 ",direct://;"; | |
| 350 dict->SetString("server", proxy_server_config); | 353 dict->SetString("server", proxy_server_config); |
| 351 dict->SetString("mode", | 354 dict->SetString("mode", |
| 352 ProxyModeToString(ProxyPrefs::MODE_FIXED_SERVERS)); | 355 ProxyModeToString(ProxyPrefs::MODE_FIXED_SERVERS)); |
| 353 dict->SetString("bypass_list", JoinString(bypass_rules_, ", ")); | 356 dict->SetString("bypass_list", JoinString(bypass_rules_, ", ")); |
| 354 } else { | 357 } else { |
| 355 dict->SetString("mode", ProxyModeToString(ProxyPrefs::MODE_SYSTEM)); | 358 dict->SetString("mode", ProxyModeToString(ProxyPrefs::MODE_SYSTEM)); |
| 356 dict->SetString("server", ""); | 359 dict->SetString("server", ""); |
| 357 dict->SetString("bypass_list", ""); | 360 dict->SetString("bypass_list", ""); |
| 358 } | 361 } |
| 359 } | 362 } |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 455 } | 458 } |
| 456 | 459 |
| 457 void | 460 void |
| 458 DataReductionProxySettings::ProbeWhetherDataReductionProxyIsAvailable() { | 461 DataReductionProxySettings::ProbeWhetherDataReductionProxyIsAvailable() { |
| 459 net::URLFetcher* fetcher = GetURLFetcher(); | 462 net::URLFetcher* fetcher = GetURLFetcher(); |
| 460 if (!fetcher) | 463 if (!fetcher) |
| 461 return; | 464 return; |
| 462 fetcher_.reset(fetcher); | 465 fetcher_.reset(fetcher); |
| 463 fetcher_->Start(); | 466 fetcher_->Start(); |
| 464 } | 467 } |
| OLD | NEW |