summaryrefslogtreecommitdiffstats
path: root/net/http
diff options
context:
space:
mode:
authoreroman@chromium.org <eroman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-02-05 04:08:37 +0000
committereroman@chromium.org <eroman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-02-05 04:08:37 +0000
commitdded3e20a923ac15142e49e62286f195f05e5a07 (patch)
treefd1d240b10d80bbbc3915e47d462587dc1ebfa02 /net/http
parent31a5d88dfdf8eba77aa2d0a185d90f2f64f4f427 (diff)
downloadchromium_src-dded3e20a923ac15142e49e62286f195f05e5a07.zip
chromium_src-dded3e20a923ac15142e49e62286f195f05e5a07.tar.gz
chromium_src-dded3e20a923ac15142e49e62286f195f05e5a07.tar.bz2
Add unittest for r37566 (on PAC failure, should fallback to DIRECT).
To make it more testable, I had to move the fallback code in question from HttpNetworkTransaction to ProxyService. Although I think this is a better fit for that code anway, so it should be an overall readability improvement. BUG=32316 TEST=ProxyServiceTest.ProxyFallback_BadConfig, ProxyServiceTest.ProxyResolverFails Review URL: http://codereview.chromium.org/556087 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@38177 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/http')
-rw-r--r--net/http/http_network_transaction.cc34
-rw-r--r--net/http/http_network_transaction_unittest.cc11
2 files changed, 3 insertions, 42 deletions
diff --git a/net/http/http_network_transaction.cc b/net/http/http_network_transaction.cc
index f970384..300482f 100644
--- a/net/http/http_network_transaction.cc
+++ b/net/http/http_network_transaction.cc
@@ -579,44 +579,14 @@ int HttpNetworkTransaction::DoResolveProxyComplete(int result) {
pac_request_ = NULL;
- if (result != OK) {
- DLOG(ERROR) << "Failed to resolve proxy: " << result;
- // Fall-back to direct when there were runtime errors in the PAC script,
- // or some other failure with the settings.
- proxy_info_.UseDirect();
- }
+ if (result != OK)
+ return result;
// Remove unsupported proxies from the list.
proxy_info_.RemoveProxiesWithoutScheme(
ProxyServer::SCHEME_DIRECT | ProxyServer::SCHEME_HTTP |
ProxyServer::SCHEME_SOCKS4 | ProxyServer::SCHEME_SOCKS5);
- // There are four possible outcomes of having run the ProxyService:
- // (1) The ProxyService decided we should connect through a proxy.
- // (2) The ProxyService decided we should direct-connect.
- // (3) The ProxyService decided we should give up, as there are no more
- // proxies to try (this is more likely to happen during
- // ReconsiderProxyAfterError()).
- // (4) The ProxyService failed (which can happen if the PAC script
- // we were configured with threw a runtime exception).
- //
- // It is important that we fail the connection in case (3) rather than
- // falling-back to a direct connection, since sending traffic through
- // a proxy may be integral to the user's privacy/security model.
- //
- // For example if a user had configured traffic to go through the TOR
- // anonymizing proxy to protect their privacy, it would be bad if we
- // silently fell-back to direct connect if the proxy server were to
- // become unreachable.
- //
- // In case (4) it is less obvious what the right thing to do is. On the
- // one hand, for consistency it would be natural to hard-fail as well.
- // However, both Firefox 3.5 and Internet Explorer 8 will silently fall-back
- // to DIRECT in this case, so we will do the same for compatibility.
- //
- // For more information, see:
- // http://www.chromium.org/developers/design-documents/proxy-settings-fallback
-
if (proxy_info_.is_empty()) {
// No proxies/direct to choose from. This happens when we don't support any
// of the proxies in the returned list.
diff --git a/net/http/http_network_transaction_unittest.cc b/net/http/http_network_transaction_unittest.cc
index 4a71ab1..3b977bd 100644
--- a/net/http/http_network_transaction_unittest.cc
+++ b/net/http/http_network_transaction_unittest.cc
@@ -31,17 +31,8 @@
//-----------------------------------------------------------------------------
-// TODO(eroman): Add a regression test for http://crbug.com/32316 -- when the
-// proxy service returns an error, we should fallback to DIRECT instead of
-// failing with ERR_NO_SUPPORTED_PROXIES.
-
namespace net {
-// Create a proxy service which fails on all requests (falls back to direct).
-ProxyService* CreateNullProxyService() {
- return ProxyService::CreateNull();
-}
-
// Helper to manage the lifetimes of the dependencies for a
// HttpNetworkTransaction.
class SessionDependencies {
@@ -49,7 +40,7 @@ class SessionDependencies {
// Default set of dependencies -- "null" proxy service.
SessionDependencies()
: host_resolver(new MockHostResolver),
- proxy_service(CreateNullProxyService()),
+ proxy_service(ProxyService::CreateNull()),
ssl_config_service(new SSLConfigServiceDefaults),
flip_session_pool(new FlipSessionPool) {}