Index: net/proxy/proxy_service_unittest.cc |
diff --git a/net/proxy/proxy_service_unittest.cc b/net/proxy/proxy_service_unittest.cc |
index f153fad2cceeda9189e621c575a9e8234993b90b..6c4ebaacc3cf7e61af753297b675b83c8a1eca27 100644 |
--- a/net/proxy/proxy_service_unittest.cc |
+++ b/net/proxy/proxy_service_unittest.cc |
@@ -3081,4 +3081,89 @@ TEST_F(ProxyServiceTest, PACScriptRefetchAfterActivity) { |
EXPECT_TRUE(info3.is_direct()); |
} |
+// Test that the PAC script is not evaluated if a null callback is supplied. |
+TEST_F(ProxyServiceTest, PACWithNullCallback) { |
+ MockProxyConfigService* config_service = |
+ new MockProxyConfigService("http://foopy/proxy.pac"); |
+ |
+ MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
+ |
+ ProxyService service(config_service, resolver, NULL); |
+ |
+ GURL url("http://www.google.com/"); |
+ |
+ ProxyInfo info; |
+ info.UseDirect(); |
+ net::CompletionCallback null_callback; |
+ ASSERT_TRUE(null_callback.is_null()); |
+ ProxyService::PacRequest* request = NULL; |
+ CapturingBoundNetLog log; |
+ |
+ int rv = service.ResolveProxy( |
+ url, net::LOAD_NORMAL, &info, null_callback, &request, NULL, log.bound()); |
+ EXPECT_EQ(ERR_IO_PENDING, rv); |
+ |
+ // No request should have been queued. |
+ EXPECT_EQ(0u, resolver->pending_requests().size()); |
+ |
+ // |request| should not have been unmodified. |
+ EXPECT_EQ(NULL, request); |
+ |
+ // |info| should not have been modified. |
+ EXPECT_TRUE(info.is_direct()); |
+} |
+ |
+// Test that the PAC script is not evaluated if a null callback and request are |
+// supplied. |
+TEST_F(ProxyServiceTest, PACWithNullCallbackAndRequest) { |
+ MockProxyConfigService* config_service = |
+ new MockProxyConfigService("http://foopy/proxy.pac"); |
+ |
+ MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
+ |
+ ProxyService service(config_service, resolver, NULL); |
+ |
+ GURL url("http://www.google.com/"); |
+ |
+ ProxyInfo info; |
+ info.UseDirect(); |
+ net::CompletionCallback null_callback; |
+ ASSERT_TRUE(null_callback.is_null()); |
+ CapturingBoundNetLog log; |
+ |
+ int rv = service.ResolveProxy( |
+ url, net::LOAD_NORMAL, &info, null_callback, NULL, NULL, log.bound()); |
+ EXPECT_EQ(ERR_IO_PENDING, rv); |
+ |
+ // No request should have been queued. |
+ EXPECT_EQ(0u, resolver->pending_requests().size()); |
+ |
+ // |info| should not have been modified. |
+ EXPECT_TRUE(info.is_direct()); |
+} |
+ |
+// Test that synchronous results are returned correctly if a null callback is |
+// supplied |
+TEST_F(ProxyServiceTest, SynchronousResponseWithNullCallbackAndRequest) { |
+ ProxyConfig config; |
+ config.proxy_rules().ParseFromString("foopy1:8080"); |
+ config.set_auto_detect(false); |
+ |
+ ProxyService service( |
+ new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL); |
+ |
+ GURL url("http://www.google.com/"); |
+ |
+ ProxyInfo info; |
+ net::CompletionCallback null_callback; |
+ ASSERT_TRUE(null_callback.is_null()); |
+ CapturingBoundNetLog log; |
+ |
+ int rv = service.ResolveProxy( |
+ url, net::LOAD_NORMAL, &info, null_callback, NULL, NULL, log.bound()); |
+ EXPECT_EQ(OK, rv); |
+ EXPECT_FALSE(info.is_direct()); |
+ EXPECT_EQ("foopy1", info.proxy_server().host_port_pair().host()); |
+} |
+ |
} // namespace net |