diff options
author | eroman@chromium.org <eroman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-02-05 04:08:37 +0000 |
---|---|---|
committer | eroman@chromium.org <eroman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-02-05 04:08:37 +0000 |
commit | dded3e20a923ac15142e49e62286f195f05e5a07 (patch) | |
tree | fd1d240b10d80bbbc3915e47d462587dc1ebfa02 /net/proxy | |
parent | 31a5d88dfdf8eba77aa2d0a185d90f2f64f4f427 (diff) | |
download | chromium_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/proxy')
-rw-r--r-- | net/proxy/proxy_service.cc | 18 | ||||
-rw-r--r-- | net/proxy/proxy_service_unittest.cc | 14 |
2 files changed, 23 insertions, 9 deletions
diff --git a/net/proxy/proxy_service.cc b/net/proxy/proxy_service.cc index fb607ec..90fd297 100644 --- a/net/proxy/proxy_service.cc +++ b/net/proxy/proxy_service.cc @@ -492,13 +492,23 @@ int ProxyService::DidFinishResolvingProxy(ProxyInfo* result, load_log, std::string("Resolved proxy list: ") + result->ToPacString()); } + result->DeprioritizeBadProxies(proxy_retry_info_); } else { + LoadLog::AddStringLiteral( + load_log, + "Got an error from proxy resolver, falling-back to DIRECT."); LoadLog::AddErrorCode(load_log, result_code); - } - // Clean up the results list. - if (result_code == OK) - result->DeprioritizeBadProxies(proxy_retry_info_); + // Fall-back to direct when the proxy resolver fails. This corresponds + // with a javascript runtime error in the PAC script. + // + // This implicit fall-back to direct matches Firefox 3.5 and + // Internet Explorer 8. For more information, see: + // + // http://www.chromium.org/developers/design-documents/proxy-settings-fallback + result->UseDirect(); + result_code = OK; + } LoadLog::EndEvent(load_log, LoadLog::TYPE_PROXY_SERVICE); return result_code; diff --git a/net/proxy/proxy_service_unittest.cc b/net/proxy/proxy_service_unittest.cc index 2e57e51..b6804ce 100644 --- a/net/proxy/proxy_service_unittest.cc +++ b/net/proxy/proxy_service_unittest.cc @@ -330,7 +330,10 @@ TEST(ProxyServiceTest, ProxyResolverFails) { // Fail the first resolve request in MockAsyncProxyResolver. resolver->pending_requests()[0]->CompleteNow(ERR_FAILED); - EXPECT_EQ(ERR_FAILED, callback1.WaitForResult()); + // Although the proxy resolver failed the request, ProxyService implicitly + // falls-back to DIRECT. + EXPECT_EQ(OK, callback1.WaitForResult()); + EXPECT_TRUE(info.is_direct()); // The second resolve request will try to run through the proxy resolver, // regardless of whether the first request failed in it. @@ -642,10 +645,11 @@ TEST(ProxyServiceTest, ProxyFallback_BadConfig) { // This simulates a javascript runtime error in the PAC script. resolver->pending_requests()[0]->CompleteNow(ERR_FAILED); - // No proxy servers are returned, since we failed. - EXPECT_EQ(ERR_FAILED, callback3.WaitForResult()); - EXPECT_FALSE(info2.is_direct()); - EXPECT_TRUE(info2.is_empty()); + // Although the resolver failed, the ProxyService will implicitly fall-back + // to a DIRECT connection. + EXPECT_EQ(OK, callback3.WaitForResult()); + EXPECT_TRUE(info2.is_direct()); + EXPECT_FALSE(info2.is_empty()); // The PAC script will work properly next time and successfully return a // proxy list. Since we have not marked the configuration as bad, it should |