Index: net/proxy/proxy_service_unittest.cc |
=================================================================== |
--- net/proxy/proxy_service_unittest.cc (revision 8870) |
+++ net/proxy/proxy_service_unittest.cc (working copy) |
@@ -9,8 +9,6 @@ |
namespace { |
-// TODO(eroman): get rid of synchronous usages of ProxyService::ResolveProxy(). |
- |
class MockProxyConfigService: public net::ProxyConfigService { |
public: |
MockProxyConfigService() {} // Direct connect. |
@@ -55,6 +53,33 @@ |
bool fail_get_proxy_for_url; |
}; |
+class SyncProxyService { |
+ public: |
+ SyncProxyService(net::ProxyConfigService* config_service, |
+ net::ProxyResolver* resolver) |
+ : io_thread_("IO_Thread"), |
+ service_(config_service, resolver) { |
+ base::Thread::Options options; |
+ options.message_loop_type = MessageLoop::TYPE_IO; |
+ io_thread_.StartWithOptions(options); |
+ sync_proxy_service_ = new net::SyncProxyServiceHelper( |
+ io_thread_.message_loop(), &service_); |
+ } |
+ |
+ int ResolveProxy(const GURL& url, net::ProxyInfo* proxy_info) { |
+ return sync_proxy_service_->ResolveProxy(url, proxy_info); |
+ } |
+ |
+ int ReconsiderProxyAfterError(const GURL& url, net::ProxyInfo* proxy_info) { |
+ return sync_proxy_service_->ReconsiderProxyAfterError(url, proxy_info); |
+ } |
+ |
+ private: |
+ base::Thread io_thread_; |
+ net::ProxyService service_; |
+ scoped_refptr<net::SyncProxyServiceHelper> sync_proxy_service_; |
+}; |
+ |
} // namespace |
// GetAnnotatedList() is used to generate a string for mozilla's GetProxyForUrl |
@@ -72,13 +97,13 @@ |
} |
TEST(ProxyServiceTest, Direct) { |
- net::ProxyService service(new MockProxyConfigService, |
- new MockProxyResolver); |
+ SyncProxyService service(new MockProxyConfigService, |
+ new MockProxyResolver); |
GURL url("http://www.google.com/"); |
net::ProxyInfo info; |
- int rv = service.ResolveProxy(url, &info, NULL, NULL); |
+ int rv = service.ResolveProxy(url, &info); |
EXPECT_EQ(rv, net::OK); |
EXPECT_TRUE(info.is_direct()); |
} |
@@ -91,12 +116,12 @@ |
resolver->info.UseNamedProxy("foopy"); |
resolver->info_predicate_query_host = "www.google.com"; |
- net::ProxyService service(config_service, resolver); |
+ SyncProxyService service(config_service, resolver); |
GURL url("http://www.google.com/"); |
net::ProxyInfo info; |
- int rv = service.ResolveProxy(url, &info, NULL, NULL); |
+ int rv = service.ResolveProxy(url, &info); |
EXPECT_EQ(rv, net::OK); |
EXPECT_FALSE(info.is_direct()); |
EXPECT_EQ(info.proxy_server(), "foopy"); |
@@ -110,18 +135,18 @@ |
resolver->info.UseNamedProxy("foopy:8080"); |
resolver->info_predicate_query_host = "www.google.com"; |
- net::ProxyService service(config_service, resolver); |
+ SyncProxyService service(config_service, resolver); |
GURL url("http://www.google.com/"); |
net::ProxyInfo info; |
- int rv = service.ResolveProxy(url, &info, NULL, NULL); |
+ int rv = service.ResolveProxy(url, &info); |
EXPECT_EQ(rv, net::OK); |
EXPECT_FALSE(info.is_direct()); |
EXPECT_EQ(info.proxy_server(), "foopy:8080"); |
// Now, imagine that connecting to foopy:8080 fails. |
- rv = service.ReconsiderProxyAfterError(url, &info, NULL, NULL); |
+ rv = service.ReconsiderProxyAfterError(url, &info); |
EXPECT_EQ(rv, net::OK); |
EXPECT_TRUE(info.is_direct()); |
} |
@@ -137,15 +162,17 @@ |
resolver->info_predicate_query_host = "www.google.com"; |
resolver->fail_get_proxy_for_url = true; |
- net::ProxyService service(config_service, resolver); |
+ SyncProxyService service(config_service, resolver); |
+ // The first resolve fails in the MockProxyResolver. |
GURL url("http://www.google.com/"); |
net::ProxyInfo info; |
- int rv = service.ResolveProxy(url, &info, NULL, NULL); |
- EXPECT_EQ(rv, net::OK); |
- EXPECT_TRUE(info.is_direct()); |
+ int rv = service.ResolveProxy(url, &info); |
+ EXPECT_EQ(rv, net::ERR_FAILED); |
- rv = service.ResolveProxy(url, &info, NULL, NULL); |
+ // The second resolve request will automatically select direct connect, |
+ // because it has cached the configuration as being bad. |
+ rv = service.ResolveProxy(url, &info); |
EXPECT_EQ(rv, net::OK); |
EXPECT_TRUE(info.is_direct()); |
@@ -154,7 +181,7 @@ |
// But, if that fails, then we should give the proxy config another shot |
// since we have never tried it with this URL before. |
- rv = service.ReconsiderProxyAfterError(url, &info, NULL, NULL); |
+ rv = service.ReconsiderProxyAfterError(url, &info); |
EXPECT_EQ(rv, net::OK); |
EXPECT_FALSE(info.is_direct()); |
EXPECT_EQ(info.proxy_server(), "foopy_valid:8080"); |
@@ -172,13 +199,13 @@ |
resolver->info_predicate_query_host = "www.google.com"; |
resolver->fail_get_proxy_for_url = false; |
- net::ProxyService service(config_service, resolver); |
+ SyncProxyService service(config_service, resolver); |
GURL url("http://www.google.com/"); |
// Get the proxy information. |
net::ProxyInfo info; |
- int rv = service.ResolveProxy(url, &info, NULL, NULL); |
+ int rv = service.ResolveProxy(url, &info); |
EXPECT_EQ(rv, net::OK); |
EXPECT_FALSE(info.is_direct()); |
@@ -186,7 +213,7 @@ |
EXPECT_EQ(info.proxy_server(), "foopy1:8080"); |
// Fake an error on the proxy. |
- rv = service.ReconsiderProxyAfterError(url, &info, NULL, NULL); |
+ rv = service.ReconsiderProxyAfterError(url, &info); |
EXPECT_EQ(rv, net::OK); |
// The second proxy should be specified. |
@@ -199,23 +226,23 @@ |
resolver->info_predicate_query_host = "www.google.com"; |
resolver->fail_get_proxy_for_url = false; |
- rv = service.ResolveProxy(url, &info, NULL, NULL); |
+ rv = service.ResolveProxy(url, &info); |
EXPECT_EQ(rv, net::OK); |
EXPECT_FALSE(info.is_direct()); |
EXPECT_EQ(info.proxy_server(), "foopy3:7070"); |
// We fake another error. It should now try the third one. |
- rv = service.ReconsiderProxyAfterError(url, &info, NULL, NULL); |
+ rv = service.ReconsiderProxyAfterError(url, &info); |
EXPECT_EQ(rv, net::OK); |
EXPECT_EQ(info.proxy_server(), "foopy2:9090"); |
// Fake another error, the last proxy is gone, the list should now be empty. |
- rv = service.ReconsiderProxyAfterError(url, &info, NULL, NULL); |
+ rv = service.ReconsiderProxyAfterError(url, &info); |
EXPECT_EQ(rv, net::OK); // We try direct. |
EXPECT_TRUE(info.is_direct()); |
// If it fails again, we don't have anything else to try. |
- rv = service.ReconsiderProxyAfterError(url, &info, NULL, NULL); |
+ rv = service.ReconsiderProxyAfterError(url, &info); |
EXPECT_EQ(rv, net::ERR_FAILED); // We try direct. |
// TODO(nsylvain): Test that the proxy can be retried after the delay. |
@@ -232,13 +259,13 @@ |
resolver->info_predicate_query_host = "www.google.com"; |
resolver->fail_get_proxy_for_url = false; |
- net::ProxyService service(config_service, resolver); |
+ SyncProxyService service(config_service, resolver); |
GURL url("http://www.google.com/"); |
// Get the proxy information. |
net::ProxyInfo info; |
- int rv = service.ResolveProxy(url, &info, NULL, NULL); |
+ int rv = service.ResolveProxy(url, &info); |
EXPECT_EQ(rv, net::OK); |
EXPECT_FALSE(info.is_direct()); |
@@ -249,14 +276,14 @@ |
config_service->config = net::ProxyConfig(); |
config_service->config.pac_url = GURL("http://foopy-new/proxy.pac"); |
- rv = service.ReconsiderProxyAfterError(url, &info, NULL, NULL); |
+ rv = service.ReconsiderProxyAfterError(url, &info); |
EXPECT_EQ(rv, net::OK); |
// The first proxy is still there since the configuration changed. |
EXPECT_EQ(info.proxy_server(), "foopy1:8080"); |
// We fake another error. It should now ignore the first one. |
- rv = service.ReconsiderProxyAfterError(url, &info, NULL, NULL); |
+ rv = service.ReconsiderProxyAfterError(url, &info); |
EXPECT_EQ(rv, net::OK); |
EXPECT_EQ(info.proxy_server(), "foopy2:9090"); |
@@ -265,7 +292,7 @@ |
config_service->config.pac_url = GURL("http://foopy-new2/proxy.pac"); |
// We fake anothe error. It should go back to the first proxy. |
- rv = service.ReconsiderProxyAfterError(url, &info, NULL, NULL); |
+ rv = service.ReconsiderProxyAfterError(url, &info); |
EXPECT_EQ(rv, net::OK); |
EXPECT_EQ(info.proxy_server(), "foopy1:8080"); |
} |
@@ -281,13 +308,13 @@ |
resolver->info_predicate_query_host = "www.google.com"; |
resolver->fail_get_proxy_for_url = false; |
- net::ProxyService service(config_service, resolver); |
+ SyncProxyService service(config_service, resolver); |
GURL url("http://www.google.com/"); |
// Get the proxy information. |
net::ProxyInfo info; |
- int rv = service.ResolveProxy(url, &info, NULL, NULL); |
+ int rv = service.ResolveProxy(url, &info); |
EXPECT_EQ(rv, net::OK); |
EXPECT_FALSE(info.is_direct()); |
@@ -295,7 +322,7 @@ |
EXPECT_EQ(info.proxy_server(), "foopy1:8080"); |
// Fake a proxy error. |
- rv = service.ReconsiderProxyAfterError(url, &info, NULL, NULL); |
+ rv = service.ReconsiderProxyAfterError(url, &info); |
EXPECT_EQ(rv, net::OK); |
// The first proxy is ignored, and the second one is selected. |
@@ -305,8 +332,8 @@ |
// Fake a PAC failure. |
net::ProxyInfo info2; |
resolver->fail_get_proxy_for_url = true; |
- rv = service.ResolveProxy(url, &info2, NULL, NULL); |
- EXPECT_EQ(rv, net::OK); |
+ rv = service.ResolveProxy(url, &info2); |
+ EXPECT_EQ(rv, net::ERR_FAILED); |
// No proxy servers are returned. It's a direct connection. |
EXPECT_TRUE(info2.is_direct()); |
@@ -318,14 +345,14 @@ |
// Try to resolve, it will still return "direct" because we have no reason |
// to check the config since everything works. |
net::ProxyInfo info3; |
- rv = service.ResolveProxy(url, &info3, NULL, NULL); |
+ rv = service.ResolveProxy(url, &info3); |
EXPECT_EQ(rv, net::OK); |
EXPECT_TRUE(info3.is_direct()); |
// But if the direct connection fails, we check if the ProxyInfo tried to |
// resolve the proxy before, and if not (like in this case), we give the |
// PAC another try. |
- rv = service.ReconsiderProxyAfterError(url, &info3, NULL, NULL); |
+ rv = service.ReconsiderProxyAfterError(url, &info3); |
EXPECT_EQ(rv, net::OK); |
// The first proxy is still there since the list of bad proxies got cleared. |
@@ -341,31 +368,31 @@ |
config.auto_detect = false; |
config.proxy_bypass_local_names = true; |
- net::ProxyService service(new MockProxyConfigService(config), |
- new MockProxyResolver()); |
+ SyncProxyService service(new MockProxyConfigService(config), |
+ new MockProxyResolver()); |
GURL url("http://www.google.com/"); |
// Get the proxy information. |
net::ProxyInfo info; |
- int rv = service.ResolveProxy(url, &info, NULL, NULL); |
+ int rv = service.ResolveProxy(url, &info); |
EXPECT_EQ(rv, net::OK); |
EXPECT_FALSE(info.is_direct()); |
- net::ProxyService service1(new MockProxyConfigService(config), |
- new MockProxyResolver()); |
+ SyncProxyService service1(new MockProxyConfigService(config), |
+ new MockProxyResolver()); |
GURL test_url1("local"); |
net::ProxyInfo info1; |
- rv = service1.ResolveProxy(test_url1, &info1, NULL, NULL); |
+ rv = service1.ResolveProxy(test_url1, &info1); |
EXPECT_EQ(rv, net::OK); |
EXPECT_TRUE(info1.is_direct()); |
config.proxy_bypass.clear(); |
config.proxy_bypass.push_back("*.org"); |
config.proxy_bypass_local_names = true; |
- net::ProxyService service2(new MockProxyConfigService(config), |
- new MockProxyResolver); |
+ SyncProxyService service2(new MockProxyConfigService(config), |
+ new MockProxyResolver); |
GURL test_url2("http://www.webkit.org"); |
net::ProxyInfo info2; |
- rv = service2.ResolveProxy(test_url2, &info2, NULL, NULL); |
+ rv = service2.ResolveProxy(test_url2, &info2); |
EXPECT_EQ(rv, net::OK); |
EXPECT_TRUE(info2.is_direct()); |
@@ -373,44 +400,44 @@ |
config.proxy_bypass.push_back("*.org"); |
config.proxy_bypass.push_back("7*"); |
config.proxy_bypass_local_names = true; |
- net::ProxyService service3(new MockProxyConfigService(config), |
- new MockProxyResolver); |
+ SyncProxyService service3(new MockProxyConfigService(config), |
+ new MockProxyResolver); |
GURL test_url3("http://74.125.19.147"); |
net::ProxyInfo info3; |
- rv = service3.ResolveProxy(test_url3, &info3, NULL, NULL); |
+ rv = service3.ResolveProxy(test_url3, &info3); |
EXPECT_EQ(rv, net::OK); |
EXPECT_TRUE(info3.is_direct()); |
config.proxy_bypass.clear(); |
config.proxy_bypass.push_back("*.org"); |
config.proxy_bypass_local_names = true; |
- net::ProxyService service4(new MockProxyConfigService(config), |
- new MockProxyResolver); |
+ SyncProxyService service4(new MockProxyConfigService(config), |
+ new MockProxyResolver); |
GURL test_url4("http://www.msn.com"); |
net::ProxyInfo info4; |
- rv = service4.ResolveProxy(test_url4, &info4, NULL, NULL); |
+ rv = service4.ResolveProxy(test_url4, &info4); |
EXPECT_EQ(rv, net::OK); |
EXPECT_FALSE(info4.is_direct()); |
config.proxy_bypass.clear(); |
config.proxy_bypass.push_back("*.MSN.COM"); |
config.proxy_bypass_local_names = true; |
- net::ProxyService service5(new MockProxyConfigService(config), |
- new MockProxyResolver); |
+ SyncProxyService service5(new MockProxyConfigService(config), |
+ new MockProxyResolver); |
GURL test_url5("http://www.msnbc.msn.com"); |
net::ProxyInfo info5; |
- rv = service5.ResolveProxy(test_url5, &info5, NULL, NULL); |
+ rv = service5.ResolveProxy(test_url5, &info5); |
EXPECT_EQ(rv, net::OK); |
EXPECT_TRUE(info5.is_direct()); |
config.proxy_bypass.clear(); |
config.proxy_bypass.push_back("*.msn.com"); |
config.proxy_bypass_local_names = true; |
- net::ProxyService service6(new MockProxyConfigService(config), |
- new MockProxyResolver); |
+ SyncProxyService service6(new MockProxyConfigService(config), |
+ new MockProxyResolver); |
GURL test_url6("HTTP://WWW.MSNBC.MSN.COM"); |
net::ProxyInfo info6; |
- rv = service6.ResolveProxy(test_url6, &info6, NULL, NULL); |
+ rv = service6.ResolveProxy(test_url6, &info6); |
EXPECT_EQ(rv, net::OK); |
EXPECT_TRUE(info6.is_direct()); |
} |
@@ -420,39 +447,39 @@ |
config.proxy_server = "http=foopy1:8080;https=foopy2:8080"; |
config.auto_detect = false; |
- net::ProxyService service1(new MockProxyConfigService(config), |
- new MockProxyResolver); |
+ SyncProxyService service1(new MockProxyConfigService(config), |
+ new MockProxyResolver); |
GURL test_url1("http://www.msn.com"); |
net::ProxyInfo info1; |
- int rv = service1.ResolveProxy(test_url1, &info1, NULL, NULL); |
+ int rv = service1.ResolveProxy(test_url1, &info1); |
EXPECT_EQ(rv, net::OK); |
EXPECT_FALSE(info1.is_direct()); |
EXPECT_TRUE(info1.proxy_server() == "foopy1:8080"); |
- net::ProxyService service2(new MockProxyConfigService(config), |
- new MockProxyResolver); |
+ SyncProxyService service2(new MockProxyConfigService(config), |
+ new MockProxyResolver); |
GURL test_url2("ftp://ftp.google.com"); |
net::ProxyInfo info2; |
- rv = service2.ResolveProxy(test_url2, &info2, NULL, NULL); |
+ rv = service2.ResolveProxy(test_url2, &info2); |
EXPECT_EQ(rv, net::OK); |
EXPECT_TRUE(info2.is_direct()); |
EXPECT_TRUE(info2.proxy_server() == ""); |
- net::ProxyService service3(new MockProxyConfigService(config), |
- new MockProxyResolver); |
+ SyncProxyService service3(new MockProxyConfigService(config), |
+ new MockProxyResolver); |
GURL test_url3("https://webbranch.techcu.com"); |
net::ProxyInfo info3; |
- rv = service3.ResolveProxy(test_url3, &info3, NULL, NULL); |
+ rv = service3.ResolveProxy(test_url3, &info3); |
EXPECT_EQ(rv, net::OK); |
EXPECT_FALSE(info3.is_direct()); |
EXPECT_TRUE(info3.proxy_server() == "foopy2:8080"); |
config.proxy_server = "foopy1:8080"; |
- net::ProxyService service4(new MockProxyConfigService(config), |
- new MockProxyResolver); |
+ SyncProxyService service4(new MockProxyConfigService(config), |
+ new MockProxyResolver); |
GURL test_url4("www.microsoft.com"); |
net::ProxyInfo info4; |
- rv = service4.ResolveProxy(test_url4, &info4, NULL, NULL); |
+ rv = service4.ResolveProxy(test_url4, &info4); |
EXPECT_EQ(rv, net::OK); |
EXPECT_FALSE(info4.is_direct()); |
EXPECT_TRUE(info4.proxy_server() == "foopy1:8080"); |