Chromium Code Reviews| Index: net/proxy/proxy_service_unittest.cc |
| diff --git a/net/proxy/proxy_service_unittest.cc b/net/proxy/proxy_service_unittest.cc |
| index a9cb9ed5acf5a12d6e73ca1a269ecb8daae1eb12..949f8c156b56a4f0f3500f23433aa34f25f5130c 100644 |
| --- a/net/proxy/proxy_service_unittest.cc |
| +++ b/net/proxy/proxy_service_unittest.cc |
| @@ -164,20 +164,21 @@ class MockProxyConfigService: public ProxyConfigService { |
| // A test network delegate that exercises the OnResolveProxy callback. |
| class TestResolveProxyDelegate : public ProxyDelegate { |
| public: |
| TestResolveProxyDelegate() |
| : on_resolve_proxy_called_(false), |
| add_proxy_(false), |
| remove_proxy_(false), |
| proxy_service_(nullptr) {} |
| void OnResolveProxy(const GURL& url, |
| + const std::string& method, |
| int load_flags, |
| const ProxyService& proxy_service, |
| ProxyInfo* result) override { |
| on_resolve_proxy_called_ = true; |
| proxy_service_ = &proxy_service; |
| DCHECK(!add_proxy_ || !remove_proxy_); |
| if (add_proxy_) { |
| result->UseNamedProxy("delegate_proxy.com"); |
| } else if (remove_proxy_) { |
| result->UseDirect(); |
| @@ -225,20 +226,21 @@ class TestResolveProxyDelegate : public ProxyDelegate { |
| }; |
| // A test network delegate that exercises the OnProxyFallback callback. |
| class TestProxyFallbackProxyDelegate : public ProxyDelegate { |
| public: |
| TestProxyFallbackProxyDelegate() |
| : on_proxy_fallback_called_(false), proxy_fallback_net_error_(OK) {} |
| // ProxyDelegate implementation: |
| void OnResolveProxy(const GURL& url, |
| + const std::string& method, |
| int load_flags, |
| const ProxyService& proxy_service, |
| ProxyInfo* result) override {} |
| void OnTunnelConnectCompleted(const HostPortPair& endpoint, |
| const HostPortPair& proxy_server, |
| int net_error) override {} |
| void OnFallback(const ProxyServer& bad_proxy, int net_error) override { |
| proxy_server_ = bad_proxy; |
| proxy_fallback_net_error_ = net_error; |
| on_proxy_fallback_called_ = true; |
| @@ -340,29 +342,30 @@ RequestMap GetCancelledRequestsForURLs(const MockAsyncProxyResolver& resolver, |
| return GetRequestsForURLs(resolver.cancelled_requests(), urls); |
| } |
| } // namespace |
| TEST_F(ProxyServiceTest, Direct) { |
| MockAsyncProxyResolverFactory* factory = |
| new MockAsyncProxyResolverFactory(false); |
| ProxyService service( |
| make_scoped_ptr(new MockProxyConfigService(ProxyConfig::CreateDirect())), |
| - make_scoped_ptr(factory), NULL); |
| + make_scoped_ptr(factory), nullptr); |
| GURL url("http://www.google.com/"); |
| ProxyInfo info; |
| TestCompletionCallback callback; |
| BoundTestNetLog log; |
| - int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback.callback(), |
| - NULL, NULL, log.bound()); |
| + int rv = |
| + service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, |
|
bengr
2016/02/21 21:36:40
#include <string>
RyanSturm
2016/02/26 22:16:18
Done.
|
| + callback.callback(), nullptr, nullptr, log.bound()); |
| EXPECT_EQ(OK, rv); |
| EXPECT_TRUE(factory->pending_requests().empty()); |
| EXPECT_TRUE(info.is_direct()); |
| EXPECT_TRUE(info.proxy_resolve_start_time().is_null()); |
| EXPECT_TRUE(info.proxy_resolve_end_time().is_null()); |
| // Check the NetLog was filled correctly. |
| TestNetLogEntry::List entries; |
| log.GetEntries(&entries); |
| @@ -377,130 +380,135 @@ TEST_F(ProxyServiceTest, Direct) { |
| entries, 2, NetLog::TYPE_PROXY_SERVICE)); |
| } |
| TEST_F(ProxyServiceTest, OnResolveProxyCallbackAddProxy) { |
| ProxyConfig config; |
| config.proxy_rules().ParseFromString("foopy1:8080"); |
| config.set_auto_detect(false); |
| config.proxy_rules().bypass_rules.ParseFromString("*.org"); |
| ProxyService service(make_scoped_ptr(new MockProxyConfigService(config)), |
| - nullptr, NULL); |
| + nullptr, nullptr); |
| GURL url("http://www.google.com/"); |
| GURL bypass_url("http://internet.org"); |
| ProxyInfo info; |
| TestCompletionCallback callback; |
| BoundTestNetLog log; |
| // First, warm up the ProxyService. |
| - int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback.callback(), |
| - NULL, NULL, log.bound()); |
| + int rv = |
| + service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, |
| + callback.callback(), nullptr, nullptr, log.bound()); |
| EXPECT_EQ(OK, rv); |
| // Verify that network delegate is invoked. |
| TestResolveProxyDelegate delegate; |
| - rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback.callback(), NULL, |
| - &delegate, log.bound()); |
| + rv = service.ResolveProxy(url, "GET", LOAD_NORMAL, &info, callback.callback(), |
| + nullptr, &delegate, log.bound()); |
| EXPECT_TRUE(delegate.on_resolve_proxy_called()); |
| EXPECT_EQ(&service, delegate.proxy_service()); |
| // Verify that the ProxyDelegate's behavior is stateless across |
| // invocations of ResolveProxy. Start by having the callback add a proxy |
| // and checking that subsequent requests are not affected. |
| delegate.set_add_proxy(true); |
| // Callback should interpose: |
| - rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback.callback(), NULL, |
| - &delegate, log.bound()); |
| + rv = service.ResolveProxy(url, "GET", LOAD_NORMAL, &info, callback.callback(), |
| + nullptr, &delegate, log.bound()); |
| EXPECT_FALSE(info.is_direct()); |
| EXPECT_EQ(info.proxy_server().host_port_pair().host(), "delegate_proxy.com"); |
| delegate.set_add_proxy(false); |
| // Check non-bypassed URL: |
| - rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback.callback(), NULL, |
| - &delegate, log.bound()); |
| + rv = service.ResolveProxy(url, "GET", LOAD_NORMAL, &info, callback.callback(), |
| + nullptr, &delegate, log.bound()); |
| EXPECT_FALSE(info.is_direct()); |
| EXPECT_EQ(info.proxy_server().host_port_pair().host(), "foopy1"); |
| // Check bypassed URL: |
| - rv = service.ResolveProxy(bypass_url, LOAD_NORMAL, &info, callback.callback(), |
| - NULL, &delegate, log.bound()); |
| + rv = service.ResolveProxy(bypass_url, "GET", LOAD_NORMAL, &info, |
| + callback.callback(), nullptr, &delegate, |
| + log.bound()); |
| EXPECT_TRUE(info.is_direct()); |
| } |
| TEST_F(ProxyServiceTest, OnResolveProxyCallbackRemoveProxy) { |
| // Same as OnResolveProxyCallbackAddProxy, but verify that the |
| // ProxyDelegate's behavior is stateless across invocations after it |
| // *removes* a proxy. |
| ProxyConfig config; |
| config.proxy_rules().ParseFromString("foopy1:8080"); |
| config.set_auto_detect(false); |
| config.proxy_rules().bypass_rules.ParseFromString("*.org"); |
| ProxyService service(make_scoped_ptr(new MockProxyConfigService(config)), |
| - nullptr, NULL); |
| + nullptr, nullptr); |
| GURL url("http://www.google.com/"); |
| GURL bypass_url("http://internet.org"); |
| ProxyInfo info; |
| TestCompletionCallback callback; |
| BoundTestNetLog log; |
| // First, warm up the ProxyService. |
| - int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback.callback(), |
| - NULL, NULL, log.bound()); |
| + int rv = |
| + service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, |
| + callback.callback(), nullptr, nullptr, log.bound()); |
| EXPECT_EQ(OK, rv); |
| TestResolveProxyDelegate delegate; |
| delegate.set_remove_proxy(true); |
| // Callback should interpose: |
| - rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback.callback(), NULL, |
| - &delegate, log.bound()); |
| + rv = service.ResolveProxy(url, "GET", LOAD_NORMAL, &info, callback.callback(), |
| + nullptr, &delegate, log.bound()); |
| EXPECT_TRUE(info.is_direct()); |
| delegate.set_remove_proxy(false); |
| // Check non-bypassed URL: |
| - rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback.callback(), NULL, |
| - &delegate, log.bound()); |
| + rv = service.ResolveProxy(url, "GET", LOAD_NORMAL, &info, callback.callback(), |
| + nullptr, &delegate, log.bound()); |
| EXPECT_FALSE(info.is_direct()); |
| EXPECT_EQ(info.proxy_server().host_port_pair().host(), "foopy1"); |
| // Check bypassed URL: |
| - rv = service.ResolveProxy(bypass_url, LOAD_NORMAL, &info, callback.callback(), |
| - NULL, &delegate, log.bound()); |
| + rv = service.ResolveProxy(bypass_url, "GET", LOAD_NORMAL, &info, |
| + callback.callback(), nullptr, &delegate, |
| + log.bound()); |
| EXPECT_TRUE(info.is_direct()); |
| } |
| TEST_F(ProxyServiceTest, PAC) { |
| MockProxyConfigService* config_service = |
| new MockProxyConfigService("http://foopy/proxy.pac"); |
| MockAsyncProxyResolver resolver; |
| MockAsyncProxyResolverFactory* factory = |
| new MockAsyncProxyResolverFactory(false); |
| ProxyService service(make_scoped_ptr(config_service), |
| - make_scoped_ptr(factory), NULL); |
| + make_scoped_ptr(factory), nullptr); |
| GURL url("http://www.google.com/"); |
| ProxyInfo info; |
| TestCompletionCallback callback; |
| ProxyService::PacRequest* request; |
| BoundTestNetLog log; |
| - int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback.callback(), |
| - &request, NULL, log.bound()); |
| + int rv = |
| + service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, |
| + callback.callback(), &request, nullptr, log.bound()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| EXPECT_EQ(LOAD_STATE_RESOLVING_PROXY_FOR_URL, service.GetLoadState(request)); |
| ASSERT_EQ(1u, factory->pending_requests().size()); |
| EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| factory->pending_requests()[0]->script_data()->url()); |
| factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| ASSERT_EQ(1u, resolver.pending_requests().size()); |
| @@ -538,28 +546,29 @@ TEST_F(ProxyServiceTest, PAC) { |
| // or its reference section. |
| TEST_F(ProxyServiceTest, PAC_NoIdentityOrHash) { |
| MockProxyConfigService* config_service = |
| new MockProxyConfigService("http://foopy/proxy.pac"); |
| MockAsyncProxyResolver resolver; |
| MockAsyncProxyResolverFactory* factory = |
| new MockAsyncProxyResolverFactory(false); |
| ProxyService service(make_scoped_ptr(config_service), |
| - make_scoped_ptr(factory), NULL); |
| + make_scoped_ptr(factory), nullptr); |
| GURL url("http://username:password@www.google.com/?ref#hash#hash"); |
| ProxyInfo info; |
| TestCompletionCallback callback; |
| - int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback.callback(), |
| - NULL, NULL, BoundNetLog()); |
| + int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, |
| + callback.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| factory->pending_requests()[0]->script_data()->url()); |
| factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| ASSERT_EQ(1u, resolver.pending_requests().size()); |
| // The URL should have been simplified, stripping the username/password/hash. |
| EXPECT_EQ(GURL("http://www.google.com/?ref"), |
| resolver.pending_requests()[0]->url()); |
| @@ -569,28 +578,29 @@ TEST_F(ProxyServiceTest, PAC_NoIdentityOrHash) { |
| } |
| TEST_F(ProxyServiceTest, PAC_FailoverWithoutDirect) { |
| MockProxyConfigService* config_service = |
| new MockProxyConfigService("http://foopy/proxy.pac"); |
| MockAsyncProxyResolver resolver; |
| MockAsyncProxyResolverFactory* factory = |
| new MockAsyncProxyResolverFactory(false); |
| ProxyService service(make_scoped_ptr(config_service), |
| - make_scoped_ptr(factory), NULL); |
| + make_scoped_ptr(factory), nullptr); |
| GURL url("http://www.google.com/"); |
| ProxyInfo info; |
| TestCompletionCallback callback1; |
| - int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(), |
| - NULL, NULL, BoundNetLog()); |
| + int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, |
| + callback1.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| factory->pending_requests()[0]->script_data()->url()); |
| factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| ASSERT_EQ(1u, resolver.pending_requests().size()); |
| EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| // Set the result in proxy resolver. |
| @@ -606,45 +616,46 @@ TEST_F(ProxyServiceTest, PAC_FailoverWithoutDirect) { |
| EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); |
| EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); |
| // Now, imagine that connecting to foopy:8080 fails: there is nothing |
| // left to fallback to, since our proxy list was NOT terminated by |
| // DIRECT. |
| TestResolveProxyDelegate proxy_delegate; |
| TestCompletionCallback callback2; |
| ProxyServer expected_proxy_server = info.proxy_server(); |
| rv = service.ReconsiderProxyAfterError( |
| - url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| - callback2.callback(), NULL, &proxy_delegate, BoundNetLog()); |
| + url, "GET", LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| + callback2.callback(), nullptr, &proxy_delegate, BoundNetLog()); |
| // ReconsiderProxyAfterError returns error indicating nothing left. |
| EXPECT_EQ(ERR_FAILED, rv); |
| EXPECT_TRUE(info.is_empty()); |
| } |
| // Test that if the execution of the PAC script fails (i.e. javascript runtime |
| // error), and the PAC settings are non-mandatory, that we fall-back to direct. |
| TEST_F(ProxyServiceTest, PAC_RuntimeError) { |
| MockProxyConfigService* config_service = |
| new MockProxyConfigService("http://foopy/proxy.pac"); |
| MockAsyncProxyResolver resolver; |
| MockAsyncProxyResolverFactory* factory = |
| new MockAsyncProxyResolverFactory(false); |
| ProxyService service(make_scoped_ptr(config_service), |
| - make_scoped_ptr(factory), NULL); |
| + make_scoped_ptr(factory), nullptr); |
| GURL url("http://this-causes-js-error/"); |
| ProxyInfo info; |
| TestCompletionCallback callback1; |
| - int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(), |
| - NULL, NULL, BoundNetLog()); |
| + int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, |
| + callback1.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| factory->pending_requests()[0]->script_data()->url()); |
| factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| ASSERT_EQ(1u, resolver.pending_requests().size()); |
| EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| // Simulate a failure in the PAC executor. |
| @@ -681,104 +692,106 @@ TEST_F(ProxyServiceTest, PAC_RuntimeError) { |
| // The important check of this test is to make sure that DIRECT is not somehow |
| // cached as being a bad proxy. |
| TEST_F(ProxyServiceTest, PAC_FailoverAfterDirect) { |
| MockProxyConfigService* config_service = |
| new MockProxyConfigService("http://foopy/proxy.pac"); |
| MockAsyncProxyResolver resolver; |
| MockAsyncProxyResolverFactory* factory = |
| new MockAsyncProxyResolverFactory(false); |
| ProxyService service(make_scoped_ptr(config_service), |
| - make_scoped_ptr(factory), NULL); |
| + make_scoped_ptr(factory), nullptr); |
| GURL url("http://www.google.com/"); |
| ProxyInfo info; |
| TestCompletionCallback callback1; |
| - int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(), |
| - NULL, NULL, BoundNetLog()); |
| + int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, |
| + callback1.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| factory->pending_requests()[0]->script_data()->url()); |
| factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| ASSERT_EQ(1u, resolver.pending_requests().size()); |
| EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| // Set the result in proxy resolver. |
| resolver.pending_requests()[0]->results()->UsePacString( |
| "DIRECT ; PROXY foobar:10 ; DIRECT ; PROXY foobar:20"); |
| resolver.pending_requests()[0]->CompleteNow(OK); |
| EXPECT_EQ(OK, callback1.WaitForResult()); |
| EXPECT_TRUE(info.is_direct()); |
| // Fallback 1. |
| TestCompletionCallback callback2; |
| rv = service.ReconsiderProxyAfterError( |
| - url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| - callback2.callback(), NULL, NULL, BoundNetLog()); |
| + url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| + callback2.callback(), nullptr, nullptr, BoundNetLog()); |
| EXPECT_EQ(OK, rv); |
| EXPECT_FALSE(info.is_direct()); |
| EXPECT_EQ("foobar:10", info.proxy_server().ToURI()); |
| // Fallback 2. |
| TestResolveProxyDelegate proxy_delegate; |
| ProxyServer expected_proxy_server3 = info.proxy_server(); |
| TestCompletionCallback callback3; |
| rv = service.ReconsiderProxyAfterError( |
| - url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| - callback3.callback(), NULL, &proxy_delegate, BoundNetLog()); |
| + url, "GET", LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| + callback3.callback(), nullptr, &proxy_delegate, BoundNetLog()); |
| EXPECT_EQ(OK, rv); |
| EXPECT_TRUE(info.is_direct()); |
| // Fallback 3. |
| ProxyServer expected_proxy_server4 = info.proxy_server(); |
| TestCompletionCallback callback4; |
| rv = service.ReconsiderProxyAfterError( |
| - url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| - callback4.callback(), NULL, &proxy_delegate, BoundNetLog()); |
| + url, "GET", LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| + callback4.callback(), nullptr, &proxy_delegate, BoundNetLog()); |
| EXPECT_EQ(OK, rv); |
| EXPECT_FALSE(info.is_direct()); |
| EXPECT_EQ("foobar:20", info.proxy_server().ToURI()); |
| // Fallback 4 -- Nothing to fall back to! |
| ProxyServer expected_proxy_server5 = info.proxy_server(); |
| TestCompletionCallback callback5; |
| rv = service.ReconsiderProxyAfterError( |
| - url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| - callback5.callback(), NULL, &proxy_delegate, BoundNetLog()); |
| + url, "GET", LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| + callback5.callback(), nullptr, &proxy_delegate, BoundNetLog()); |
| EXPECT_EQ(ERR_FAILED, rv); |
| EXPECT_TRUE(info.is_empty()); |
| } |
| TEST_F(ProxyServiceTest, PAC_ConfigSourcePropagates) { |
| // Test whether the ProxyConfigSource set by the ProxyConfigService is applied |
| // to ProxyInfo after the proxy is resolved via a PAC script. |
| ProxyConfig config = |
| ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac")); |
| config.set_source(PROXY_CONFIG_SOURCE_TEST); |
| MockProxyConfigService* config_service = new MockProxyConfigService(config); |
| MockAsyncProxyResolver resolver; |
| MockAsyncProxyResolverFactory* factory = |
| new MockAsyncProxyResolverFactory(false); |
| ProxyService service(make_scoped_ptr(config_service), |
| - make_scoped_ptr(factory), NULL); |
| + make_scoped_ptr(factory), nullptr); |
| // Resolve something. |
| GURL url("http://www.google.com/"); |
| ProxyInfo info; |
| TestCompletionCallback callback; |
| - int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback.callback(), |
| - NULL, NULL, BoundNetLog()); |
| + int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, |
| + callback.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| ASSERT_EQ(ERR_IO_PENDING, rv); |
| factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| ASSERT_EQ(1u, resolver.pending_requests().size()); |
| // Set the result in proxy resolver. |
| resolver.pending_requests()[0]->results()->UseNamedProxy("foopy"); |
| resolver.pending_requests()[0]->CompleteNow(OK); |
| EXPECT_EQ(OK, callback.WaitForResult()); |
| EXPECT_EQ(PROXY_CONFIG_SOURCE_TEST, info.config_source()); |
| @@ -795,28 +808,29 @@ TEST_F(ProxyServiceTest, ProxyResolverFails) { |
| // javascript runtime error while calling FindProxyForURL(). |
| MockProxyConfigService* config_service = |
| new MockProxyConfigService("http://foopy/proxy.pac"); |
| MockAsyncProxyResolver resolver; |
| MockAsyncProxyResolverFactory* factory = |
| new MockAsyncProxyResolverFactory(false); |
| ProxyService service(make_scoped_ptr(config_service), |
| - make_scoped_ptr(factory), NULL); |
| + make_scoped_ptr(factory), nullptr); |
| // Start first resolve request. |
| GURL url("http://www.google.com/"); |
| ProxyInfo info; |
| TestCompletionCallback callback1; |
| - int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(), |
| - NULL, NULL, BoundNetLog()); |
| + int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, |
| + callback1.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| factory->pending_requests()[0]->script_data()->url()); |
| factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| ASSERT_EQ(1u, resolver.pending_requests().size()); |
| EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| // Fail the first resolve request in MockAsyncProxyResolver. |
| @@ -828,22 +842,23 @@ TEST_F(ProxyServiceTest, ProxyResolverFails) { |
| EXPECT_TRUE(info.is_direct()); |
| // Failed PAC executions still have proxy resolution times. |
| EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); |
| EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); |
| EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); |
| // The second resolve request will try to run through the proxy resolver, |
| // regardless of whether the first request failed in it. |
| TestCompletionCallback callback2; |
| - rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback2.callback(), NULL, |
| - NULL, BoundNetLog()); |
| + rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, |
| + callback2.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| ASSERT_EQ(1u, resolver.pending_requests().size()); |
| EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| // This time we will have the resolver succeed (perhaps the PAC script has |
| // a dependency on the current time). |
| resolver.pending_requests()[0]->results()->UseNamedProxy("foopy_valid:8080"); |
| resolver.pending_requests()[0]->CompleteNow(OK); |
| @@ -863,23 +878,23 @@ TEST_F(ProxyServiceTest, ProxyResolverTerminatedDuringRequest) { |
| MockAsyncProxyResolverFactory* factory = |
| new MockAsyncProxyResolverFactory(false); |
| ProxyService service(make_scoped_ptr(config_service), |
| make_scoped_ptr(factory), nullptr); |
| // Start first resolve request. |
| GURL url("http://www.google.com/"); |
| ProxyInfo info; |
| TestCompletionCallback callback1; |
| - int rv = |
| - service.ResolveProxy(url, net::LOAD_NORMAL, &info, callback1.callback(), |
| - nullptr, nullptr, BoundNetLog()); |
| + int rv = service.ResolveProxy(url, std::string(), net::LOAD_NORMAL, &info, |
| + callback1.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| ASSERT_EQ(1u, factory->pending_requests().size()); |
| EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| factory->pending_requests()[0]->script_data()->url()); |
| factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| ASSERT_EQ(1u, resolver.pending_requests().size()); |
| EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| @@ -894,22 +909,23 @@ TEST_F(ProxyServiceTest, ProxyResolverTerminatedDuringRequest) { |
| // Failed PAC executions still have proxy resolution times. |
| EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); |
| EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); |
| EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); |
| // With no other requests, the ProxyService waits for a new request before |
| // initializing a new ProxyResolver. |
| EXPECT_TRUE(factory->pending_requests().empty()); |
| TestCompletionCallback callback2; |
| - rv = service.ResolveProxy(url, net::LOAD_NORMAL, &info, callback2.callback(), |
| - nullptr, nullptr, BoundNetLog()); |
| + rv = service.ResolveProxy(url, std::string(), net::LOAD_NORMAL, &info, |
| + callback2.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| ASSERT_EQ(1u, factory->pending_requests().size()); |
| EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| factory->pending_requests()[0]->script_data()->url()); |
| factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| ASSERT_EQ(1u, resolver.pending_requests().size()); |
| EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| @@ -935,27 +951,28 @@ TEST_F(ProxyServiceTest, |
| new MockAsyncProxyResolverFactory(false); |
| ProxyService service(make_scoped_ptr(config_service), |
| make_scoped_ptr(factory), nullptr); |
| // Start two resolve requests. |
| GURL url1("http://www.google.com/"); |
| GURL url2("https://www.google.com/"); |
| ProxyInfo info; |
| TestCompletionCallback callback1; |
| - int rv = |
| - service.ResolveProxy(url1, net::LOAD_NORMAL, &info, callback1.callback(), |
| - nullptr, nullptr, BoundNetLog()); |
| + int rv = service.ResolveProxy(url1, std::string(), net::LOAD_NORMAL, &info, |
| + callback1.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| TestCompletionCallback callback2; |
| - rv = service.ResolveProxy(url2, net::LOAD_NORMAL, &info, callback2.callback(), |
| - nullptr, nullptr, BoundNetLog()); |
| + rv = service.ResolveProxy(url2, std::string(), net::LOAD_NORMAL, &info, |
| + callback2.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| ASSERT_EQ(1u, factory->pending_requests().size()); |
| EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| factory->pending_requests()[0]->script_data()->url()); |
| factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| RequestMap requests = GetPendingRequestsForURLs(resolver, url1, url2); |
| // Fail the first resolve request in MockAsyncProxyResolver. |
| @@ -999,77 +1016,80 @@ TEST_F(ProxyServiceTest, ProxyScriptFetcherFailsDownloadingMandatoryPac) { |
| ProxyConfig config( |
| ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac"))); |
| config.set_pac_mandatory(true); |
| MockProxyConfigService* config_service = new MockProxyConfigService(config); |
| MockAsyncProxyResolverFactory* factory = |
| new MockAsyncProxyResolverFactory(false); |
| ProxyService service(make_scoped_ptr(config_service), |
| - make_scoped_ptr(factory), NULL); |
| + make_scoped_ptr(factory), nullptr); |
| // Start first resolve request. |
| GURL url("http://www.google.com/"); |
| ProxyInfo info; |
| TestCompletionCallback callback1; |
| - int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(), |
| - NULL, NULL, BoundNetLog()); |
| + int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, |
| + callback1.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| factory->pending_requests()[0]->script_data()->url()); |
| factory->pending_requests()[0]->CompleteNow(ERR_FAILED, nullptr); |
| ASSERT_EQ(0u, factory->pending_requests().size()); |
| // As the proxy resolver factory failed the request and is configured for a |
| // mandatory PAC script, ProxyService must not implicitly fall-back to DIRECT. |
| EXPECT_EQ(ERR_MANDATORY_PROXY_CONFIGURATION_FAILED, |
| callback1.WaitForResult()); |
| EXPECT_FALSE(info.is_direct()); |
| // As the proxy resolver factory failed the request and is configured for a |
| // mandatory PAC script, ProxyService must not implicitly fall-back to DIRECT. |
| TestCompletionCallback callback2; |
| - rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback2.callback(), NULL, |
| - NULL, BoundNetLog()); |
| + rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, |
| + callback2.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(ERR_MANDATORY_PROXY_CONFIGURATION_FAILED, rv); |
| EXPECT_FALSE(info.is_direct()); |
| } |
| TEST_F(ProxyServiceTest, ProxyResolverFailsParsingJavaScriptMandatoryPac) { |
| // Test what happens when the ProxyResolver fails that is configured to use a |
| // mandatory PAC script. The download of the PAC script has already |
| // succeeded but the PAC script contains no valid javascript. |
| ProxyConfig config( |
| ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac"))); |
| config.set_pac_mandatory(true); |
| MockProxyConfigService* config_service = new MockProxyConfigService(config); |
| MockAsyncProxyResolverFactory* factory = |
| new MockAsyncProxyResolverFactory(true); |
| ProxyService service(make_scoped_ptr(config_service), |
| - make_scoped_ptr(factory), NULL); |
| + make_scoped_ptr(factory), nullptr); |
| MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| service.SetProxyScriptFetchers( |
| fetcher, make_scoped_ptr(new DoNothingDhcpProxyScriptFetcher())); |
| // Start resolve request. |
| GURL url("http://www.google.com/"); |
| ProxyInfo info; |
| TestCompletionCallback callback; |
| - int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback.callback(), |
| - NULL, NULL, BoundNetLog()); |
| + int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, |
| + callback.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| // Check that nothing has been sent to the proxy resolver factory yet. |
| ASSERT_EQ(0u, factory->pending_requests().size()); |
| // Downloading the PAC script succeeds. |
| EXPECT_TRUE(fetcher->has_pending_request()); |
| EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
| fetcher->NotifyFetchCompletion(OK, "invalid-script-contents"); |
| @@ -1094,28 +1114,29 @@ TEST_F(ProxyServiceTest, ProxyResolverFailsInJavaScriptMandatoryPac) { |
| ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac"))); |
| config.set_pac_mandatory(true); |
| MockProxyConfigService* config_service = new MockProxyConfigService(config); |
| MockAsyncProxyResolver resolver; |
| MockAsyncProxyResolverFactory* factory = |
| new MockAsyncProxyResolverFactory(false); |
| ProxyService service(make_scoped_ptr(config_service), |
| - make_scoped_ptr(factory), NULL); |
| + make_scoped_ptr(factory), nullptr); |
| // Start first resolve request. |
| GURL url("http://www.google.com/"); |
| ProxyInfo info; |
| TestCompletionCallback callback1; |
| - int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(), |
| - NULL, NULL, BoundNetLog()); |
| + int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, |
| + callback1.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| factory->pending_requests()[0]->script_data()->url()); |
| factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| ASSERT_EQ(1u, resolver.pending_requests().size()); |
| EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| // Fail the first resolve request in MockAsyncProxyResolver. |
| @@ -1123,22 +1144,23 @@ TEST_F(ProxyServiceTest, ProxyResolverFailsInJavaScriptMandatoryPac) { |
| // As the proxy resolver failed the request and is configured for a mandatory |
| // PAC script, ProxyService must not implicitly fall-back to DIRECT. |
| EXPECT_EQ(ERR_MANDATORY_PROXY_CONFIGURATION_FAILED, |
| callback1.WaitForResult()); |
| EXPECT_FALSE(info.is_direct()); |
| // The second resolve request will try to run through the proxy resolver, |
| // regardless of whether the first request failed in it. |
| TestCompletionCallback callback2; |
| - rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback2.callback(), NULL, |
| - NULL, BoundNetLog()); |
| + rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, |
| + callback2.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| ASSERT_EQ(1u, resolver.pending_requests().size()); |
| EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| // This time we will have the resolver succeed (perhaps the PAC script has |
| // a dependency on the current time). |
| resolver.pending_requests()[0]->results()->UseNamedProxy("foopy_valid:8080"); |
| resolver.pending_requests()[0]->CompleteNow(OK); |
| @@ -1152,29 +1174,30 @@ TEST_F(ProxyServiceTest, ProxyFallback) { |
| // are bad. |
| MockProxyConfigService* config_service = |
| new MockProxyConfigService("http://foopy/proxy.pac"); |
| MockAsyncProxyResolver resolver; |
| MockAsyncProxyResolverFactory* factory = |
| new MockAsyncProxyResolverFactory(false); |
| ProxyService service(make_scoped_ptr(config_service), |
| - make_scoped_ptr(factory), NULL); |
| + make_scoped_ptr(factory), nullptr); |
| GURL url("http://www.google.com/"); |
| // Get the proxy information. |
| ProxyInfo info; |
| TestCompletionCallback callback1; |
| - int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(), |
| - NULL, NULL, BoundNetLog()); |
| + int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, |
| + callback1.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| factory->pending_requests()[0]->script_data()->url()); |
| factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| ASSERT_EQ(1u, resolver.pending_requests().size()); |
| EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| // Set the result in proxy resolver. |
| @@ -1189,41 +1212,42 @@ TEST_F(ProxyServiceTest, ProxyFallback) { |
| EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); |
| EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); |
| EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); |
| base::TimeTicks proxy_resolve_start_time = info.proxy_resolve_start_time(); |
| base::TimeTicks proxy_resolve_end_time = info.proxy_resolve_end_time(); |
| // Fake an error on the proxy. |
| TestCompletionCallback callback2; |
| rv = service.ReconsiderProxyAfterError( |
| - url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| - callback2.callback(), NULL, NULL, BoundNetLog()); |
| + url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| + callback2.callback(), nullptr, nullptr, BoundNetLog()); |
| EXPECT_EQ(OK, rv); |
| // Proxy times should not have been modified by fallback. |
| EXPECT_EQ(proxy_resolve_start_time, info.proxy_resolve_start_time()); |
| EXPECT_EQ(proxy_resolve_end_time, info.proxy_resolve_end_time()); |
| // The second proxy should be specified. |
| EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); |
| // Report back that the second proxy worked. This will globally mark the |
| // first proxy as bad. |
| TestProxyFallbackProxyDelegate test_delegate; |
| service.ReportSuccess(info, &test_delegate); |
| EXPECT_EQ("foopy1:8080", test_delegate.proxy_server().ToURI()); |
| EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, |
| test_delegate.proxy_fallback_net_error()); |
| TestCompletionCallback callback3; |
| - rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback3.callback(), NULL, |
| - NULL, BoundNetLog()); |
| + rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, |
| + callback3.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| ASSERT_EQ(1u, resolver.pending_requests().size()); |
| EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| // Set the result in proxy resolver -- the second result is already known |
| // to be bad, so we will not try to use it initially. |
| resolver.pending_requests()[0]->results()->UseNamedProxy( |
| "foopy3:7070;foopy1:8080;foopy2:9090"); |
| resolver.pending_requests()[0]->CompleteNow(OK); |
| @@ -1236,53 +1260,54 @@ TEST_F(ProxyServiceTest, ProxyFallback) { |
| EXPECT_LE(proxy_resolve_end_time, info.proxy_resolve_start_time()); |
| EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); |
| EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); |
| EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); |
| proxy_resolve_start_time = info.proxy_resolve_start_time(); |
| proxy_resolve_end_time = info.proxy_resolve_end_time(); |
| // We fake another error. It should now try the third one. |
| TestCompletionCallback callback4; |
| rv = service.ReconsiderProxyAfterError( |
| - url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| - callback4.callback(), NULL, NULL, BoundNetLog()); |
| + url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| + callback4.callback(), nullptr, nullptr, BoundNetLog()); |
| EXPECT_EQ(OK, rv); |
| EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); |
| // We fake another error. At this point we have tried all of the |
| // proxy servers we thought were valid; next we try the proxy server |
| // that was in our bad proxies map (foopy1:8080). |
| TestCompletionCallback callback5; |
| rv = service.ReconsiderProxyAfterError( |
| - url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| - callback5.callback(), NULL, NULL, BoundNetLog()); |
| + url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| + callback5.callback(), nullptr, nullptr, BoundNetLog()); |
| EXPECT_EQ(OK, rv); |
| EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| // Fake another error, the last proxy is gone, the list should now be empty, |
| // so there is nothing left to try. |
| TestCompletionCallback callback6; |
| rv = service.ReconsiderProxyAfterError( |
| - url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| - callback6.callback(), NULL, NULL, BoundNetLog()); |
| + url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| + callback6.callback(), nullptr, nullptr, BoundNetLog()); |
| EXPECT_EQ(ERR_FAILED, rv); |
| EXPECT_FALSE(info.is_direct()); |
| EXPECT_TRUE(info.is_empty()); |
| // Proxy times should not have been modified by fallback. |
| EXPECT_EQ(proxy_resolve_start_time, info.proxy_resolve_start_time()); |
| EXPECT_EQ(proxy_resolve_end_time, info.proxy_resolve_end_time()); |
| // Look up proxies again |
| TestCompletionCallback callback7; |
| - rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback7.callback(), NULL, |
| - NULL, BoundNetLog()); |
| + rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, |
| + callback7.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| ASSERT_EQ(1u, resolver.pending_requests().size()); |
| EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| // This time, the first 3 results have been found to be bad, but only the |
| // first proxy has been confirmed ... |
| resolver.pending_requests()[0]->results()->UseNamedProxy( |
| "foopy1:8080;foopy3:7070;foopy2:9090;foopy4:9091"); |
| resolver.pending_requests()[0]->CompleteNow(OK); |
| @@ -1302,29 +1327,30 @@ TEST_F(ProxyServiceTest, ProxyFallback) { |
| // fallback choice to DIRECT. |
| TEST_F(ProxyServiceTest, ProxyFallbackToDirect) { |
| MockProxyConfigService* config_service = |
| new MockProxyConfigService("http://foopy/proxy.pac"); |
| MockAsyncProxyResolver resolver; |
| MockAsyncProxyResolverFactory* factory = |
| new MockAsyncProxyResolverFactory(false); |
| ProxyService service(make_scoped_ptr(config_service), |
| - make_scoped_ptr(factory), NULL); |
| + make_scoped_ptr(factory), nullptr); |
| GURL url("http://www.google.com/"); |
| // Get the proxy information. |
| ProxyInfo info; |
| TestCompletionCallback callback1; |
| - int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(), |
| - NULL, NULL, BoundNetLog()); |
| + int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, |
| + callback1.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| factory->pending_requests()[0]->script_data()->url()); |
| factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| ASSERT_EQ(1u, resolver.pending_requests().size()); |
| EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| // Set the result in proxy resolver. |
| @@ -1333,71 +1359,72 @@ TEST_F(ProxyServiceTest, ProxyFallbackToDirect) { |
| resolver.pending_requests()[0]->CompleteNow(OK); |
| // Get the first result. |
| EXPECT_EQ(OK, callback1.WaitForResult()); |
| EXPECT_FALSE(info.is_direct()); |
| EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| // Fake an error on the proxy. |
| TestCompletionCallback callback2; |
| rv = service.ReconsiderProxyAfterError( |
| - url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| - callback2.callback(), NULL, NULL, BoundNetLog()); |
| + url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| + callback2.callback(), nullptr, nullptr, BoundNetLog()); |
| EXPECT_EQ(OK, rv); |
| // Now we get back the second proxy. |
| EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); |
| // Fake an error on this proxy as well. |
| TestCompletionCallback callback3; |
| rv = service.ReconsiderProxyAfterError( |
| - url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| - callback3.callback(), NULL, NULL, BoundNetLog()); |
| + url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| + callback3.callback(), nullptr, nullptr, BoundNetLog()); |
| EXPECT_EQ(OK, rv); |
| // Finally, we get back DIRECT. |
| EXPECT_TRUE(info.is_direct()); |
| EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); |
| EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); |
| EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); |
| // Now we tell the proxy service that even DIRECT failed. |
| TestCompletionCallback callback4; |
| rv = service.ReconsiderProxyAfterError( |
| - url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| - callback4.callback(), NULL, NULL, BoundNetLog()); |
| + url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| + callback4.callback(), nullptr, nullptr, BoundNetLog()); |
| // There was nothing left to try after DIRECT, so we are out of |
| // choices. |
| EXPECT_EQ(ERR_FAILED, rv); |
| } |
| TEST_F(ProxyServiceTest, ProxyFallback_NewSettings) { |
| // Test proxy failover when new settings are available. |
| MockProxyConfigService* config_service = |
| new MockProxyConfigService("http://foopy/proxy.pac"); |
| MockAsyncProxyResolver resolver; |
| MockAsyncProxyResolverFactory* factory = |
| new MockAsyncProxyResolverFactory(false); |
| ProxyService service(make_scoped_ptr(config_service), |
| - make_scoped_ptr(factory), NULL); |
| + make_scoped_ptr(factory), nullptr); |
| GURL url("http://www.google.com/"); |
| // Get the proxy information. |
| ProxyInfo info; |
| TestCompletionCallback callback1; |
| - int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(), |
| - NULL, NULL, BoundNetLog()); |
| + int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, |
| + callback1.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| factory->pending_requests()[0]->script_data()->url()); |
| factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| ASSERT_EQ(1u, resolver.pending_requests().size()); |
| EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| // Set the result in proxy resolver. |
| @@ -1409,57 +1436,57 @@ TEST_F(ProxyServiceTest, ProxyFallback_NewSettings) { |
| EXPECT_EQ(OK, callback1.WaitForResult()); |
| EXPECT_FALSE(info.is_direct()); |
| EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| // Fake an error on the proxy, and also a new configuration on the proxy. |
| config_service->SetConfig( |
| ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy-new/proxy.pac"))); |
| TestCompletionCallback callback2; |
| rv = service.ReconsiderProxyAfterError( |
| - url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| - callback2.callback(), NULL, NULL, BoundNetLog()); |
| + url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| + callback2.callback(), nullptr, nullptr, BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| EXPECT_EQ(GURL("http://foopy-new/proxy.pac"), |
| factory->pending_requests()[0]->script_data()->url()); |
| factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| ASSERT_EQ(1u, resolver.pending_requests().size()); |
| EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| resolver.pending_requests()[0]->results()->UseNamedProxy( |
| "foopy1:8080;foopy2:9090"); |
| resolver.pending_requests()[0]->CompleteNow(OK); |
| // The first proxy is still there since the configuration changed. |
| EXPECT_EQ(OK, callback2.WaitForResult()); |
| EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| // We fake another error. It should now ignore the first one. |
| TestCompletionCallback callback3; |
| rv = service.ReconsiderProxyAfterError( |
| - url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| - callback3.callback(), NULL, NULL, BoundNetLog()); |
| + url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| + callback3.callback(), nullptr, nullptr, BoundNetLog()); |
| EXPECT_EQ(OK, rv); |
| EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); |
| // We simulate a new configuration. |
| config_service->SetConfig( |
| ProxyConfig::CreateFromCustomPacURL( |
| GURL("http://foopy-new2/proxy.pac"))); |
| // We fake another error. It should go back to the first proxy. |
| TestCompletionCallback callback4; |
| rv = service.ReconsiderProxyAfterError( |
| - url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| - callback4.callback(), NULL, NULL, BoundNetLog()); |
| + url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| + callback4.callback(), nullptr, nullptr, BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| EXPECT_EQ(GURL("http://foopy-new2/proxy.pac"), |
| factory->pending_requests()[0]->script_data()->url()); |
| factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| ASSERT_EQ(1u, resolver.pending_requests().size()); |
| EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| resolver.pending_requests()[0]->results()->UseNamedProxy( |
| @@ -1478,84 +1505,86 @@ TEST_F(ProxyServiceTest, ProxyFallback_BadConfig) { |
| // Test proxy failover when the configuration is bad. |
| MockProxyConfigService* config_service = |
| new MockProxyConfigService("http://foopy/proxy.pac"); |
| MockAsyncProxyResolver resolver; |
| MockAsyncProxyResolverFactory* factory = |
| new MockAsyncProxyResolverFactory(false); |
| ProxyService service(make_scoped_ptr(config_service), |
| - make_scoped_ptr(factory), NULL); |
| + make_scoped_ptr(factory), nullptr); |
| GURL url("http://www.google.com/"); |
| // Get the proxy information. |
| ProxyInfo info; |
| TestCompletionCallback callback1; |
| - int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(), |
| - NULL, NULL, BoundNetLog()); |
| + int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, |
| + callback1.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| factory->pending_requests()[0]->script_data()->url()); |
| factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| ASSERT_EQ(1u, resolver.pending_requests().size()); |
| EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| resolver.pending_requests()[0]->results()->UseNamedProxy( |
| "foopy1:8080;foopy2:9090"); |
| resolver.pending_requests()[0]->CompleteNow(OK); |
| // The first item is valid. |
| EXPECT_EQ(OK, callback1.WaitForResult()); |
| EXPECT_FALSE(info.is_direct()); |
| EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| // Fake a proxy error. |
| TestCompletionCallback callback2; |
| rv = service.ReconsiderProxyAfterError( |
| - url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| - callback2.callback(), NULL, NULL, BoundNetLog()); |
| + url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| + callback2.callback(), nullptr, nullptr, BoundNetLog()); |
| EXPECT_EQ(OK, rv); |
| // The first proxy is ignored, and the second one is selected. |
| EXPECT_FALSE(info.is_direct()); |
| EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); |
| // Fake a PAC failure. |
| ProxyInfo info2; |
| TestCompletionCallback callback3; |
| - rv = service.ResolveProxy(url, LOAD_NORMAL, &info2, callback3.callback(), |
| - NULL, NULL, BoundNetLog()); |
| + rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info2, |
| + callback3.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| ASSERT_EQ(1u, resolver.pending_requests().size()); |
| EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| // This simulates a javascript runtime error in the PAC script. |
| resolver.pending_requests()[0]->CompleteNow(ERR_FAILED); |
| // 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 |
| // "just work" the next time we call it. |
| ProxyInfo info3; |
| TestCompletionCallback callback4; |
| rv = service.ReconsiderProxyAfterError( |
| - url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info3, |
| - callback4.callback(), NULL, NULL, BoundNetLog()); |
| + url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info3, |
| + callback4.callback(), nullptr, nullptr, BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| ASSERT_EQ(1u, resolver.pending_requests().size()); |
| EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| resolver.pending_requests()[0]->results()->UseNamedProxy( |
| "foopy1:8080;foopy2:9090"); |
| resolver.pending_requests()[0]->CompleteNow(OK); |
| // The first proxy is not there since the it was added to the bad proxies |
| @@ -1576,62 +1605,64 @@ TEST_F(ProxyServiceTest, ProxyFallback_BadConfigMandatory) { |
| ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac"))); |
| config.set_pac_mandatory(true); |
| MockProxyConfigService* config_service = new MockProxyConfigService(config); |
| MockAsyncProxyResolver resolver; |
| MockAsyncProxyResolverFactory* factory = |
| new MockAsyncProxyResolverFactory(false); |
| ProxyService service(make_scoped_ptr(config_service), |
| - make_scoped_ptr(factory), NULL); |
| + make_scoped_ptr(factory), nullptr); |
| GURL url("http://www.google.com/"); |
| // Get the proxy information. |
| ProxyInfo info; |
| TestCompletionCallback callback1; |
| - int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(), |
| - NULL, NULL, BoundNetLog()); |
| + int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, |
| + callback1.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| factory->pending_requests()[0]->script_data()->url()); |
| factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| ASSERT_EQ(1u, resolver.pending_requests().size()); |
| EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| resolver.pending_requests()[0]->results()->UseNamedProxy( |
| "foopy1:8080;foopy2:9090"); |
| resolver.pending_requests()[0]->CompleteNow(OK); |
| // The first item is valid. |
| EXPECT_EQ(OK, callback1.WaitForResult()); |
| EXPECT_FALSE(info.is_direct()); |
| EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| // Fake a proxy error. |
| TestCompletionCallback callback2; |
| rv = service.ReconsiderProxyAfterError( |
| - url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| - callback2.callback(), NULL, NULL, BoundNetLog()); |
| + url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| + callback2.callback(), nullptr, nullptr, BoundNetLog()); |
| EXPECT_EQ(OK, rv); |
| // The first proxy is ignored, and the second one is selected. |
| EXPECT_FALSE(info.is_direct()); |
| EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); |
| // Fake a PAC failure. |
| ProxyInfo info2; |
| TestCompletionCallback callback3; |
| - rv = service.ResolveProxy(url, LOAD_NORMAL, &info2, callback3.callback(), |
| - NULL, NULL, BoundNetLog()); |
| + rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info2, |
| + callback3.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| ASSERT_EQ(1u, resolver.pending_requests().size()); |
| EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| // This simulates a javascript runtime error in the PAC script. |
| resolver.pending_requests()[0]->CompleteNow(ERR_FAILED); |
| // Although the resolver failed, the ProxyService will NOT fall-back |
| // to a DIRECT connection as it is configured as mandatory. |
| @@ -1639,22 +1670,22 @@ TEST_F(ProxyServiceTest, ProxyFallback_BadConfigMandatory) { |
| callback3.WaitForResult()); |
| EXPECT_FALSE(info2.is_direct()); |
| EXPECT_TRUE(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 |
| // "just work" the next time we call it. |
| ProxyInfo info3; |
| TestCompletionCallback callback4; |
| rv = service.ReconsiderProxyAfterError( |
| - url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info3, |
| - callback4.callback(), NULL, NULL, BoundNetLog()); |
| + url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info3, |
| + callback4.callback(), nullptr, nullptr, BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| ASSERT_EQ(1u, resolver.pending_requests().size()); |
| EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| resolver.pending_requests()[0]->results()->UseNamedProxy( |
| "foopy1:8080;foopy2:9090"); |
| resolver.pending_requests()[0]->CompleteNow(OK); |
| // The first proxy is not there since the it was added to the bad proxies |
| @@ -1668,35 +1699,37 @@ TEST_F(ProxyServiceTest, ProxyBypassList) { |
| // Test that the proxy bypass rules are consulted. |
| TestCompletionCallback callback[2]; |
| ProxyInfo info[2]; |
| ProxyConfig config; |
| config.proxy_rules().ParseFromString("foopy1:8080;foopy2:9090"); |
| config.set_auto_detect(false); |
| config.proxy_rules().bypass_rules.ParseFromString("*.org"); |
| ProxyService service(make_scoped_ptr(new MockProxyConfigService(config)), |
| - nullptr, NULL); |
| + nullptr, nullptr); |
| int rv; |
| GURL url1("http://www.webkit.org"); |
| GURL url2("http://www.webkit.com"); |
| // Request for a .org domain should bypass proxy. |
| - rv = service.ResolveProxy(url1, LOAD_NORMAL, &info[0], callback[0].callback(), |
| - NULL, NULL, BoundNetLog()); |
| + rv = service.ResolveProxy(url1, std::string(), LOAD_NORMAL, &info[0], |
| + callback[0].callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(OK, rv); |
| EXPECT_TRUE(info[0].is_direct()); |
| // Request for a .com domain hits the proxy. |
| - rv = service.ResolveProxy(url2, LOAD_NORMAL, &info[1], callback[1].callback(), |
| - NULL, NULL, BoundNetLog()); |
| + rv = service.ResolveProxy(url2, std::string(), LOAD_NORMAL, &info[1], |
| + callback[1].callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(OK, rv); |
| EXPECT_EQ("foopy1:8080", info[1].proxy_server().ToURI()); |
| } |
| TEST_F(ProxyServiceTest, MarkProxiesAsBadTests) { |
| ProxyConfig config; |
| config.proxy_rules().ParseFromString( |
| "http=foopy1:8080;http=foopy2:8080;http=foopy3.8080;http=foopy4:8080"); |
| config.set_auto_detect(false); |
| @@ -1707,253 +1740,256 @@ TEST_F(ProxyServiceTest, MarkProxiesAsBadTests) { |
| proxy_list.AddProxyServer(proxy_server); |
| if (proxy_server == config.proxy_rules().proxies_for_http.Get()) |
| continue; |
| additional_bad_proxies.push_back(proxy_server); |
| } |
| EXPECT_EQ(3u, additional_bad_proxies.size()); |
| ProxyService service(make_scoped_ptr(new MockProxyConfigService(config)), |
| - nullptr, NULL); |
| + nullptr, nullptr); |
| ProxyInfo proxy_info; |
| proxy_info.UseProxyList(proxy_list); |
| const ProxyRetryInfoMap& retry_info = service.proxy_retry_info(); |
| service.MarkProxiesAsBadUntil(proxy_info, base::TimeDelta::FromSeconds(1), |
| additional_bad_proxies, BoundNetLog()); |
| ASSERT_EQ(4u, retry_info.size()); |
| for (const ProxyServer& proxy_server : |
| config.proxy_rules().proxies_for_http.GetAll()) { |
| ProxyRetryInfoMap::const_iterator i = |
| retry_info.find(proxy_server.host_port_pair().ToString()); |
| ASSERT_TRUE(i != retry_info.end()); |
| } |
| } |
| TEST_F(ProxyServiceTest, PerProtocolProxyTests) { |
| ProxyConfig config; |
| config.proxy_rules().ParseFromString("http=foopy1:8080;https=foopy2:8080"); |
| config.set_auto_detect(false); |
| { |
| ProxyService service(make_scoped_ptr(new MockProxyConfigService(config)), |
| - nullptr, NULL); |
| + nullptr, nullptr); |
| GURL test_url("http://www.msn.com"); |
| ProxyInfo info; |
| TestCompletionCallback callback; |
| - int rv = |
| - service.ResolveProxy(test_url, LOAD_NORMAL, &info, callback.callback(), |
| - NULL, NULL, BoundNetLog()); |
| + int rv = service.ResolveProxy(test_url, std::string(), LOAD_NORMAL, &info, |
| + callback.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(OK, rv); |
| EXPECT_FALSE(info.is_direct()); |
| EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| } |
| { |
| ProxyService service(make_scoped_ptr(new MockProxyConfigService(config)), |
| - nullptr, NULL); |
| + nullptr, nullptr); |
| GURL test_url("ftp://ftp.google.com"); |
| ProxyInfo info; |
| TestCompletionCallback callback; |
| - int rv = |
| - service.ResolveProxy(test_url, LOAD_NORMAL, &info, callback.callback(), |
| - NULL, NULL, BoundNetLog()); |
| + int rv = service.ResolveProxy(test_url, std::string(), LOAD_NORMAL, &info, |
| + callback.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(OK, rv); |
| EXPECT_TRUE(info.is_direct()); |
| EXPECT_EQ("direct://", info.proxy_server().ToURI()); |
| } |
| { |
| ProxyService service(make_scoped_ptr(new MockProxyConfigService(config)), |
| - nullptr, NULL); |
| + nullptr, nullptr); |
| GURL test_url("https://webbranch.techcu.com"); |
| ProxyInfo info; |
| TestCompletionCallback callback; |
| - int rv = |
| - service.ResolveProxy(test_url, LOAD_NORMAL, &info, callback.callback(), |
| - NULL, NULL, BoundNetLog()); |
| + int rv = service.ResolveProxy(test_url, std::string(), LOAD_NORMAL, &info, |
| + callback.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(OK, rv); |
| EXPECT_FALSE(info.is_direct()); |
| EXPECT_EQ("foopy2:8080", info.proxy_server().ToURI()); |
| } |
| { |
| config.proxy_rules().ParseFromString("foopy1:8080"); |
| ProxyService service(make_scoped_ptr(new MockProxyConfigService(config)), |
| - nullptr, NULL); |
| + nullptr, nullptr); |
| GURL test_url("http://www.microsoft.com"); |
| ProxyInfo info; |
| TestCompletionCallback callback; |
| - int rv = |
| - service.ResolveProxy(test_url, LOAD_NORMAL, &info, callback.callback(), |
| - NULL, NULL, BoundNetLog()); |
| + int rv = service.ResolveProxy(test_url, std::string(), LOAD_NORMAL, &info, |
| + callback.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(OK, rv); |
| EXPECT_FALSE(info.is_direct()); |
| EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| } |
| } |
| TEST_F(ProxyServiceTest, ProxyConfigSourcePropagates) { |
| // Test that the proxy config source is set correctly when resolving proxies |
| // using manual proxy rules. Namely, the config source should only be set if |
| // any of the rules were applied. |
| { |
| ProxyConfig config; |
| config.set_source(PROXY_CONFIG_SOURCE_TEST); |
| config.proxy_rules().ParseFromString("https=foopy2:8080"); |
| ProxyService service(make_scoped_ptr(new MockProxyConfigService(config)), |
| - nullptr, NULL); |
| + nullptr, nullptr); |
| GURL test_url("http://www.google.com"); |
| ProxyInfo info; |
| TestCompletionCallback callback; |
| - int rv = |
| - service.ResolveProxy(test_url, LOAD_NORMAL, &info, callback.callback(), |
| - NULL, NULL, BoundNetLog()); |
| + int rv = service.ResolveProxy(test_url, std::string(), LOAD_NORMAL, &info, |
| + callback.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| ASSERT_EQ(OK, rv); |
| // Should be SOURCE_TEST, even if there are no HTTP proxies configured. |
| EXPECT_EQ(PROXY_CONFIG_SOURCE_TEST, info.config_source()); |
| } |
| { |
| ProxyConfig config; |
| config.set_source(PROXY_CONFIG_SOURCE_TEST); |
| config.proxy_rules().ParseFromString("https=foopy2:8080"); |
| ProxyService service(make_scoped_ptr(new MockProxyConfigService(config)), |
| - nullptr, NULL); |
| + nullptr, nullptr); |
| GURL test_url("https://www.google.com"); |
| ProxyInfo info; |
| TestCompletionCallback callback; |
| - int rv = |
| - service.ResolveProxy(test_url, LOAD_NORMAL, &info, callback.callback(), |
| - NULL, NULL, BoundNetLog()); |
| + int rv = service.ResolveProxy(test_url, std::string(), LOAD_NORMAL, &info, |
| + callback.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| ASSERT_EQ(OK, rv); |
| // Used the HTTPS proxy. So source should be TEST. |
| EXPECT_EQ(PROXY_CONFIG_SOURCE_TEST, info.config_source()); |
| } |
| { |
| ProxyConfig config; |
| config.set_source(PROXY_CONFIG_SOURCE_TEST); |
| ProxyService service(make_scoped_ptr(new MockProxyConfigService(config)), |
| - nullptr, NULL); |
| + nullptr, nullptr); |
| GURL test_url("http://www.google.com"); |
| ProxyInfo info; |
| TestCompletionCallback callback; |
| - int rv = |
| - service.ResolveProxy(test_url, LOAD_NORMAL, &info, callback.callback(), |
| - NULL, NULL, BoundNetLog()); |
| + int rv = service.ResolveProxy(test_url, std::string(), LOAD_NORMAL, &info, |
| + callback.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| ASSERT_EQ(OK, rv); |
| // ProxyConfig is empty. Source should still be TEST. |
| EXPECT_EQ(PROXY_CONFIG_SOURCE_TEST, info.config_source()); |
| } |
| } |
| // If only HTTP and a SOCKS proxy are specified, check if ftp/https queries |
| // fall back to the SOCKS proxy. |
| TEST_F(ProxyServiceTest, DefaultProxyFallbackToSOCKS) { |
| ProxyConfig config; |
| config.proxy_rules().ParseFromString("http=foopy1:8080;socks=foopy2:1080"); |
| config.set_auto_detect(false); |
| EXPECT_EQ(ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, |
| config.proxy_rules().type); |
| { |
| ProxyService service(make_scoped_ptr(new MockProxyConfigService(config)), |
| - nullptr, NULL); |
| + nullptr, nullptr); |
| GURL test_url("http://www.msn.com"); |
| ProxyInfo info; |
| TestCompletionCallback callback; |
| - int rv = |
| - service.ResolveProxy(test_url, LOAD_NORMAL, &info, callback.callback(), |
| - NULL, NULL, BoundNetLog()); |
| + int rv = service.ResolveProxy(test_url, std::string(), LOAD_NORMAL, &info, |
| + callback.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(OK, rv); |
| EXPECT_FALSE(info.is_direct()); |
| EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| } |
| { |
| ProxyService service(make_scoped_ptr(new MockProxyConfigService(config)), |
| - nullptr, NULL); |
| + nullptr, nullptr); |
| GURL test_url("ftp://ftp.google.com"); |
| ProxyInfo info; |
| TestCompletionCallback callback; |
| - int rv = |
| - service.ResolveProxy(test_url, LOAD_NORMAL, &info, callback.callback(), |
| - NULL, NULL, BoundNetLog()); |
| + int rv = service.ResolveProxy(test_url, std::string(), LOAD_NORMAL, &info, |
| + callback.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(OK, rv); |
| EXPECT_FALSE(info.is_direct()); |
| EXPECT_EQ("socks4://foopy2:1080", info.proxy_server().ToURI()); |
| } |
| { |
| ProxyService service(make_scoped_ptr(new MockProxyConfigService(config)), |
| - nullptr, NULL); |
| + nullptr, nullptr); |
| GURL test_url("https://webbranch.techcu.com"); |
| ProxyInfo info; |
| TestCompletionCallback callback; |
| - int rv = |
| - service.ResolveProxy(test_url, LOAD_NORMAL, &info, callback.callback(), |
| - NULL, NULL, BoundNetLog()); |
| + int rv = service.ResolveProxy(test_url, std::string(), LOAD_NORMAL, &info, |
| + callback.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(OK, rv); |
| EXPECT_FALSE(info.is_direct()); |
| EXPECT_EQ("socks4://foopy2:1080", info.proxy_server().ToURI()); |
| } |
| { |
| ProxyService service(make_scoped_ptr(new MockProxyConfigService(config)), |
| - nullptr, NULL); |
| + nullptr, nullptr); |
| GURL test_url("unknown://www.microsoft.com"); |
| ProxyInfo info; |
| TestCompletionCallback callback; |
| - int rv = |
| - service.ResolveProxy(test_url, LOAD_NORMAL, &info, callback.callback(), |
| - NULL, NULL, BoundNetLog()); |
| + int rv = service.ResolveProxy(test_url, std::string(), LOAD_NORMAL, &info, |
| + callback.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(OK, rv); |
| EXPECT_FALSE(info.is_direct()); |
| EXPECT_EQ("socks4://foopy2:1080", info.proxy_server().ToURI()); |
| } |
| } |
| // Test cancellation of an in-progress request. |
| TEST_F(ProxyServiceTest, CancelInProgressRequest) { |
| const GURL url1("http://request1"); |
| const GURL url2("http://request2"); |
| const GURL url3("http://request3"); |
| MockProxyConfigService* config_service = |
| new MockProxyConfigService("http://foopy/proxy.pac"); |
| MockAsyncProxyResolver resolver; |
| MockAsyncProxyResolverFactory* factory = |
| new MockAsyncProxyResolverFactory(false); |
| ProxyService service(make_scoped_ptr(config_service), |
| - make_scoped_ptr(factory), NULL); |
| + make_scoped_ptr(factory), nullptr); |
| // Start 3 requests. |
| ProxyInfo info1; |
| TestCompletionCallback callback1; |
| - int rv = service.ResolveProxy(url1, LOAD_NORMAL, &info1, callback1.callback(), |
| - NULL, NULL, BoundNetLog()); |
| + int rv = service.ResolveProxy(url1, std::string(), LOAD_NORMAL, &info1, |
| + callback1.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| // Successfully initialize the PAC script. |
| EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| factory->pending_requests()[0]->script_data()->url()); |
| factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| GetPendingRequestsForURLs(resolver, url1); |
| ProxyInfo info2; |
| TestCompletionCallback callback2; |
| ProxyService::PacRequest* request2; |
| - rv = service.ResolveProxy(url2, LOAD_NORMAL, &info2, callback2.callback(), |
| - &request2, NULL, BoundNetLog()); |
| + rv = service.ResolveProxy(url2, std::string(), LOAD_NORMAL, &info2, |
| + callback2.callback(), &request2, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| GetPendingRequestsForURLs(resolver, url1, url2); |
| ProxyInfo info3; |
| TestCompletionCallback callback3; |
| - rv = service.ResolveProxy(url3, LOAD_NORMAL, &info3, callback3.callback(), |
| - NULL, NULL, BoundNetLog()); |
| + rv = service.ResolveProxy(url3, std::string(), LOAD_NORMAL, &info3, |
| + callback3.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| GetPendingRequestsForURLs(resolver, url1, url2, url3); |
| // Cancel the second request |
| service.CancelPacRequest(request2); |
| RequestMap requests = GetPendingRequestsForURLs(resolver, url1, url3); |
| // Complete the two un-cancelled requests. |
| // We complete the last one first, just to mix it up a bit. |
| @@ -1980,51 +2016,54 @@ TEST_F(ProxyServiceTest, InitialPACScriptDownload) { |
| const GURL url2("http://request2"); |
| const GURL url3("http://request3"); |
| MockProxyConfigService* config_service = |
| new MockProxyConfigService("http://foopy/proxy.pac"); |
| MockAsyncProxyResolver resolver; |
| MockAsyncProxyResolverFactory* factory = |
| new MockAsyncProxyResolverFactory(true); |
| ProxyService service(make_scoped_ptr(config_service), |
| - make_scoped_ptr(factory), NULL); |
| + make_scoped_ptr(factory), nullptr); |
| MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| service.SetProxyScriptFetchers( |
| fetcher, make_scoped_ptr(new DoNothingDhcpProxyScriptFetcher())); |
| // Start 3 requests. |
| ProxyInfo info1; |
| TestCompletionCallback callback1; |
| ProxyService::PacRequest* request1; |
| - int rv = service.ResolveProxy(url1, LOAD_NORMAL, &info1, callback1.callback(), |
| - &request1, NULL, BoundNetLog()); |
| + int rv = service.ResolveProxy(url1, std::string(), LOAD_NORMAL, &info1, |
| + callback1.callback(), &request1, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| // The first request should have triggered download of PAC script. |
| EXPECT_TRUE(fetcher->has_pending_request()); |
| EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
| ProxyInfo info2; |
| TestCompletionCallback callback2; |
| ProxyService::PacRequest* request2; |
| - rv = service.ResolveProxy(url2, LOAD_NORMAL, &info2, callback2.callback(), |
| - &request2, NULL, BoundNetLog()); |
| + rv = service.ResolveProxy(url2, std::string(), LOAD_NORMAL, &info2, |
| + callback2.callback(), &request2, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| ProxyInfo info3; |
| TestCompletionCallback callback3; |
| ProxyService::PacRequest* request3; |
| - rv = service.ResolveProxy(url3, LOAD_NORMAL, &info3, callback3.callback(), |
| - &request3, NULL, BoundNetLog()); |
| + rv = service.ResolveProxy(url3, std::string(), LOAD_NORMAL, &info3, |
| + callback3.callback(), &request3, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| // Nothing has been sent to the factory yet. |
| EXPECT_TRUE(factory->pending_requests().empty()); |
| EXPECT_EQ(LOAD_STATE_DOWNLOADING_PROXY_SCRIPT, |
| service.GetLoadState(request1)); |
| EXPECT_EQ(LOAD_STATE_DOWNLOADING_PROXY_SCRIPT, |
| service.GetLoadState(request2)); |
| EXPECT_EQ(LOAD_STATE_DOWNLOADING_PROXY_SCRIPT, |
| @@ -2083,42 +2122,44 @@ TEST_F(ProxyServiceTest, ChangeScriptFetcherWhilePACDownloadInProgress) { |
| const GURL url1("http://request1"); |
| const GURL url2("http://request2"); |
| MockProxyConfigService* config_service = |
| new MockProxyConfigService("http://foopy/proxy.pac"); |
| MockAsyncProxyResolver resolver; |
| MockAsyncProxyResolverFactory* factory = |
| new MockAsyncProxyResolverFactory(true); |
| ProxyService service(make_scoped_ptr(config_service), |
| - make_scoped_ptr(factory), NULL); |
| + make_scoped_ptr(factory), nullptr); |
| MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| service.SetProxyScriptFetchers( |
| fetcher, make_scoped_ptr(new DoNothingDhcpProxyScriptFetcher())); |
| // Start 2 requests. |
| ProxyInfo info1; |
| TestCompletionCallback callback1; |
| - int rv = service.ResolveProxy(url1, LOAD_NORMAL, &info1, callback1.callback(), |
| - NULL, NULL, BoundNetLog()); |
| + int rv = service.ResolveProxy(url1, std::string(), LOAD_NORMAL, &info1, |
| + callback1.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| // The first request should have triggered download of PAC script. |
| EXPECT_TRUE(fetcher->has_pending_request()); |
| EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
| ProxyInfo info2; |
| TestCompletionCallback callback2; |
| - rv = service.ResolveProxy(url2, LOAD_NORMAL, &info2, callback2.callback(), |
| - NULL, NULL, BoundNetLog()); |
| + rv = service.ResolveProxy(url2, std::string(), LOAD_NORMAL, &info2, |
| + callback2.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| // At this point the ProxyService should be waiting for the |
| // ProxyScriptFetcher to invoke its completion callback, notifying it of |
| // PAC script download completion. |
| // We now change out the ProxyService's script fetcher. We should restart |
| // the initialization with the new fetcher. |
| fetcher = new MockProxyScriptFetcher; |
| @@ -2142,52 +2183,53 @@ TEST_F(ProxyServiceTest, ChangeScriptFetcherWhilePACDownloadInProgress) { |
| // Test cancellation of a request, while the PAC script is being fetched. |
| TEST_F(ProxyServiceTest, CancelWhilePACFetching) { |
| MockProxyConfigService* config_service = |
| new MockProxyConfigService("http://foopy/proxy.pac"); |
| MockAsyncProxyResolver resolver; |
| MockAsyncProxyResolverFactory* factory = |
| new MockAsyncProxyResolverFactory(true); |
| ProxyService service(make_scoped_ptr(config_service), |
| - make_scoped_ptr(factory), NULL); |
| + make_scoped_ptr(factory), nullptr); |
| MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| service.SetProxyScriptFetchers( |
| fetcher, make_scoped_ptr(new DoNothingDhcpProxyScriptFetcher())); |
| // Start 3 requests. |
| ProxyInfo info1; |
| TestCompletionCallback callback1; |
| ProxyService::PacRequest* request1; |
| BoundTestNetLog log1; |
| - int rv = |
| - service.ResolveProxy(GURL("http://request1"), LOAD_NORMAL, &info1, |
| - callback1.callback(), &request1, NULL, log1.bound()); |
| + int rv = service.ResolveProxy(GURL("http://request1"), std::string(), |
| + LOAD_NORMAL, &info1, callback1.callback(), |
| + &request1, nullptr, log1.bound()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| // The first request should have triggered download of PAC script. |
| EXPECT_TRUE(fetcher->has_pending_request()); |
| EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
| ProxyInfo info2; |
| TestCompletionCallback callback2; |
| ProxyService::PacRequest* request2; |
| - rv = service.ResolveProxy(GURL("http://request2"), LOAD_NORMAL, &info2, |
| - callback2.callback(), &request2, NULL, |
| + rv = service.ResolveProxy(GURL("http://request2"), std::string(), LOAD_NORMAL, |
| + &info2, callback2.callback(), &request2, nullptr, |
| BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| ProxyInfo info3; |
| TestCompletionCallback callback3; |
| - rv = service.ResolveProxy(GURL("http://request3"), LOAD_NORMAL, &info3, |
| - callback3.callback(), NULL, NULL, BoundNetLog()); |
| + rv = service.ResolveProxy(GURL("http://request3"), std::string(), LOAD_NORMAL, |
| + &info3, callback3.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| // Nothing has been sent to the factory yet. |
| EXPECT_TRUE(factory->pending_requests().empty()); |
| // Cancel the first 2 requests. |
| service.CancelPacRequest(request1); |
| service.CancelPacRequest(request2); |
| // At this point the ProxyService should be waiting for the |
| @@ -2240,39 +2282,41 @@ TEST_F(ProxyServiceTest, FallbackFromAutodetectToCustomPac) { |
| ProxyConfig config; |
| config.set_auto_detect(true); |
| config.set_pac_url(GURL("http://foopy/proxy.pac")); |
| config.proxy_rules().ParseFromString("http=foopy:80"); // Won't be used. |
| MockProxyConfigService* config_service = new MockProxyConfigService(config); |
| MockAsyncProxyResolver resolver; |
| MockAsyncProxyResolverFactory* factory = |
| new MockAsyncProxyResolverFactory(true); |
| ProxyService service(make_scoped_ptr(config_service), |
| - make_scoped_ptr(factory), NULL); |
| + make_scoped_ptr(factory), nullptr); |
| MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| service.SetProxyScriptFetchers( |
| fetcher, make_scoped_ptr(new DoNothingDhcpProxyScriptFetcher())); |
| // Start 2 requests. |
| ProxyInfo info1; |
| TestCompletionCallback callback1; |
| - int rv = service.ResolveProxy(url1, LOAD_NORMAL, &info1, callback1.callback(), |
| - NULL, NULL, BoundNetLog()); |
| + int rv = service.ResolveProxy(url1, std::string(), LOAD_NORMAL, &info1, |
| + callback1.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| ProxyInfo info2; |
| TestCompletionCallback callback2; |
| ProxyService::PacRequest* request2; |
| - rv = service.ResolveProxy(url2, LOAD_NORMAL, &info2, callback2.callback(), |
| - &request2, NULL, BoundNetLog()); |
| + rv = service.ResolveProxy(url2, std::string(), LOAD_NORMAL, &info2, |
| + callback2.callback(), &request2, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| // Check that nothing has been sent to the proxy resolver factory yet. |
| ASSERT_EQ(0u, factory->pending_requests().size()); |
| // It should be trying to auto-detect first -- FAIL the autodetect during |
| // the script download. |
| EXPECT_TRUE(fetcher->has_pending_request()); |
| EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url()); |
| fetcher->NotifyFetchCompletion(ERR_FAILED, std::string()); |
| @@ -2319,39 +2363,41 @@ TEST_F(ProxyServiceTest, FallbackFromAutodetectToCustomPac2) { |
| ProxyConfig config; |
| config.set_auto_detect(true); |
| config.set_pac_url(GURL("http://foopy/proxy.pac")); |
| config.proxy_rules().ParseFromString("http=foopy:80"); // Won't be used. |
| MockProxyConfigService* config_service = new MockProxyConfigService(config); |
| MockAsyncProxyResolver resolver; |
| MockAsyncProxyResolverFactory* factory = |
| new MockAsyncProxyResolverFactory(true); |
| ProxyService service(make_scoped_ptr(config_service), |
| - make_scoped_ptr(factory), NULL); |
| + make_scoped_ptr(factory), nullptr); |
| MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| service.SetProxyScriptFetchers( |
| fetcher, make_scoped_ptr(new DoNothingDhcpProxyScriptFetcher())); |
| // Start 2 requests. |
| ProxyInfo info1; |
| TestCompletionCallback callback1; |
| - int rv = service.ResolveProxy(url1, LOAD_NORMAL, &info1, callback1.callback(), |
| - NULL, NULL, BoundNetLog()); |
| + int rv = service.ResolveProxy(url1, std::string(), LOAD_NORMAL, &info1, |
| + callback1.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| ProxyInfo info2; |
| TestCompletionCallback callback2; |
| ProxyService::PacRequest* request2; |
| - rv = service.ResolveProxy(url2, LOAD_NORMAL, &info2, callback2.callback(), |
| - &request2, NULL, BoundNetLog()); |
| + rv = service.ResolveProxy(url2, std::string(), LOAD_NORMAL, &info2, |
| + callback2.callback(), &request2, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| // Check that nothing has been sent to the proxy resolver factory yet. |
| ASSERT_EQ(0u, factory->pending_requests().size()); |
| // It should be trying to auto-detect first -- succeed the download. |
| EXPECT_TRUE(fetcher->has_pending_request()); |
| EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url()); |
| fetcher->NotifyFetchCompletion(OK, "invalid-script-contents"); |
| @@ -2391,40 +2437,40 @@ TEST_F(ProxyServiceTest, FallbackFromAutodetectToCustomPac2) { |
| TEST_F(ProxyServiceTest, FallbackFromAutodetectToCustomToManual) { |
| ProxyConfig config; |
| config.set_auto_detect(true); |
| config.set_pac_url(GURL("http://foopy/proxy.pac")); |
| config.proxy_rules().ParseFromString("http=foopy:80"); |
| MockProxyConfigService* config_service = new MockProxyConfigService(config); |
| MockAsyncProxyResolverFactory* factory = |
| new MockAsyncProxyResolverFactory(true); |
| ProxyService service(make_scoped_ptr(config_service), |
| - make_scoped_ptr(factory), NULL); |
| + make_scoped_ptr(factory), nullptr); |
| MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| service.SetProxyScriptFetchers( |
| fetcher, make_scoped_ptr(new DoNothingDhcpProxyScriptFetcher())); |
| // Start 2 requests. |
| ProxyInfo info1; |
| TestCompletionCallback callback1; |
| - int rv = |
| - service.ResolveProxy(GURL("http://request1"), LOAD_NORMAL, &info1, |
| - callback1.callback(), NULL, NULL, BoundNetLog()); |
| + int rv = service.ResolveProxy(GURL("http://request1"), std::string(), |
| + LOAD_NORMAL, &info1, callback1.callback(), |
| + nullptr, nullptr, BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| ProxyInfo info2; |
| TestCompletionCallback callback2; |
| ProxyService::PacRequest* request2; |
| - rv = service.ResolveProxy(GURL("http://request2"), LOAD_NORMAL, &info2, |
| - callback2.callback(), &request2, NULL, |
| + rv = service.ResolveProxy(GURL("http://request2"), std::string(), LOAD_NORMAL, |
| + &info2, callback2.callback(), &request2, nullptr, |
| BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| // Check that nothing has been sent to the proxy resolver factory yet. |
| ASSERT_EQ(0u, factory->pending_requests().size()); |
| // It should be trying to auto-detect first -- fail the download. |
| EXPECT_TRUE(fetcher->has_pending_request()); |
| EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url()); |
| fetcher->NotifyFetchCompletion(ERR_FAILED, std::string()); |
| @@ -2453,33 +2499,33 @@ TEST_F(ProxyServiceTest, BypassDoesntApplyToPac) { |
| config.set_auto_detect(true); |
| config.set_pac_url(GURL("http://foopy/proxy.pac")); |
| config.proxy_rules().ParseFromString("http=foopy:80"); // Not used. |
| config.proxy_rules().bypass_rules.ParseFromString("www.google.com"); |
| MockProxyConfigService* config_service = new MockProxyConfigService(config); |
| MockAsyncProxyResolver resolver; |
| MockAsyncProxyResolverFactory* factory = |
| new MockAsyncProxyResolverFactory(true); |
| ProxyService service(make_scoped_ptr(config_service), |
| - make_scoped_ptr(factory), NULL); |
| + make_scoped_ptr(factory), nullptr); |
| MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| service.SetProxyScriptFetchers( |
| fetcher, make_scoped_ptr(new DoNothingDhcpProxyScriptFetcher())); |
| // Start 1 requests. |
| ProxyInfo info1; |
| TestCompletionCallback callback1; |
| - int rv = |
| - service.ResolveProxy(GURL("http://www.google.com"), LOAD_NORMAL, &info1, |
| - callback1.callback(), NULL, NULL, BoundNetLog()); |
| + int rv = service.ResolveProxy(GURL("http://www.google.com"), std::string(), |
| + LOAD_NORMAL, &info1, callback1.callback(), |
| + nullptr, nullptr, BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| // Check that nothing has been sent to the proxy resolver factory yet. |
| ASSERT_EQ(0u, factory->pending_requests().size()); |
| // It should be trying to auto-detect first -- succeed the download. |
| EXPECT_TRUE(fetcher->has_pending_request()); |
| EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url()); |
| fetcher->NotifyFetchCompletion(OK, kValidPacScript1); |
| @@ -2495,22 +2541,23 @@ TEST_F(ProxyServiceTest, BypassDoesntApplyToPac) { |
| resolver.pending_requests()[0]->results()->UseNamedProxy("request1:80"); |
| resolver.pending_requests()[0]->CompleteNow(OK); |
| // Verify that request ran as expected. |
| EXPECT_EQ(OK, callback1.WaitForResult()); |
| EXPECT_EQ("request1:80", info1.proxy_server().ToURI()); |
| // Start another request, it should pickup the bypass item. |
| ProxyInfo info2; |
| TestCompletionCallback callback2; |
| - rv = service.ResolveProxy(GURL("http://www.google.com"), LOAD_NORMAL, &info2, |
| - callback2.callback(), NULL, NULL, BoundNetLog()); |
| + rv = service.ResolveProxy(GURL("http://www.google.com"), std::string(), |
| + LOAD_NORMAL, &info2, callback2.callback(), nullptr, |
| + nullptr, BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| ASSERT_EQ(1u, resolver.pending_requests().size()); |
| EXPECT_EQ(GURL("http://www.google.com"), |
| resolver.pending_requests()[0]->url()); |
| // Complete the pending request. |
| resolver.pending_requests()[0]->results()->UseNamedProxy("request2:80"); |
| resolver.pending_requests()[0]->CompleteNow(OK); |
| @@ -2523,33 +2570,33 @@ TEST_F(ProxyServiceTest, BypassDoesntApplyToPac) { |
| // have any memory errors (used to be that the ProxyScriptFetcher was |
| // being deleted prior to the InitProxyResolver). |
| TEST_F(ProxyServiceTest, DeleteWhileInitProxyResolverHasOutstandingFetch) { |
| ProxyConfig config = |
| ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac")); |
| MockProxyConfigService* config_service = new MockProxyConfigService(config); |
| MockAsyncProxyResolverFactory* factory = |
| new MockAsyncProxyResolverFactory(true); |
| ProxyService service(make_scoped_ptr(config_service), |
| - make_scoped_ptr(factory), NULL); |
| + make_scoped_ptr(factory), nullptr); |
| MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| service.SetProxyScriptFetchers( |
| fetcher, make_scoped_ptr(new DoNothingDhcpProxyScriptFetcher())); |
| // Start 1 request. |
| ProxyInfo info1; |
| TestCompletionCallback callback1; |
| - int rv = |
| - service.ResolveProxy(GURL("http://www.google.com"), LOAD_NORMAL, &info1, |
| - callback1.callback(), NULL, NULL, BoundNetLog()); |
| + int rv = service.ResolveProxy(GURL("http://www.google.com"), std::string(), |
| + LOAD_NORMAL, &info1, callback1.callback(), |
| + nullptr, nullptr, BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| // Check that nothing has been sent to the proxy resolver factory yet. |
| ASSERT_EQ(0u, factory->pending_requests().size()); |
| // InitProxyResolver should have issued a request to the ProxyScriptFetcher |
| // and be waiting on that to complete. |
| EXPECT_TRUE(fetcher->has_pending_request()); |
| EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
| } |
| @@ -2559,80 +2606,82 @@ TEST_F(ProxyServiceTest, DeleteWhileInitProxyResolverHasOutstandingFetch) { |
| // have any memory errors (used to be that the ProxyResolver was |
| // being deleted prior to the InitProxyResolver). |
| TEST_F(ProxyServiceTest, DeleteWhileInitProxyResolverHasOutstandingSet) { |
| MockProxyConfigService* config_service = |
| new MockProxyConfigService("http://foopy/proxy.pac"); |
| MockAsyncProxyResolverFactory* factory = |
| new MockAsyncProxyResolverFactory(false); |
| ProxyService service(make_scoped_ptr(config_service), |
| - make_scoped_ptr(factory), NULL); |
| + make_scoped_ptr(factory), nullptr); |
| GURL url("http://www.google.com/"); |
| ProxyInfo info; |
| TestCompletionCallback callback; |
| - int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback.callback(), |
| - NULL, NULL, BoundNetLog()); |
| + int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, |
| + callback.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| factory->pending_requests()[0]->script_data()->url()); |
| } |
| TEST_F(ProxyServiceTest, ResetProxyConfigService) { |
| ProxyConfig config1; |
| config1.proxy_rules().ParseFromString("foopy1:8080"); |
| config1.set_auto_detect(false); |
| ProxyService service(make_scoped_ptr(new MockProxyConfigService(config1)), |
| - nullptr, NULL); |
| + nullptr, nullptr); |
| ProxyInfo info; |
| TestCompletionCallback callback1; |
| - int rv = |
| - service.ResolveProxy(GURL("http://request1"), LOAD_NORMAL, &info, |
| - callback1.callback(), NULL, NULL, BoundNetLog()); |
| + int rv = service.ResolveProxy(GURL("http://request1"), std::string(), |
| + LOAD_NORMAL, &info, callback1.callback(), |
| + nullptr, nullptr, BoundNetLog()); |
| EXPECT_EQ(OK, rv); |
| EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| ProxyConfig config2; |
| config2.proxy_rules().ParseFromString("foopy2:8080"); |
| config2.set_auto_detect(false); |
| service.ResetConfigService( |
| make_scoped_ptr(new MockProxyConfigService(config2))); |
| TestCompletionCallback callback2; |
| - rv = service.ResolveProxy(GURL("http://request2"), LOAD_NORMAL, &info, |
| - callback2.callback(), NULL, NULL, BoundNetLog()); |
| + rv = service.ResolveProxy(GURL("http://request2"), std::string(), LOAD_NORMAL, |
| + &info, callback2.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(OK, rv); |
| EXPECT_EQ("foopy2:8080", info.proxy_server().ToURI()); |
| } |
| // Test that when going from a configuration that required PAC to one |
| // that does NOT, we unset the variable |should_use_proxy_resolver_|. |
| TEST_F(ProxyServiceTest, UpdateConfigFromPACToDirect) { |
| ProxyConfig config = ProxyConfig::CreateAutoDetect(); |
| MockProxyConfigService* config_service = new MockProxyConfigService(config); |
| MockAsyncProxyResolver resolver; |
| MockAsyncProxyResolverFactory* factory = |
| new MockAsyncProxyResolverFactory(false); |
| ProxyService service(make_scoped_ptr(config_service), |
| - make_scoped_ptr(factory), NULL); |
| + make_scoped_ptr(factory), nullptr); |
| // Start 1 request. |
| ProxyInfo info1; |
| TestCompletionCallback callback1; |
| - int rv = |
| - service.ResolveProxy(GURL("http://www.google.com"), LOAD_NORMAL, &info1, |
| - callback1.callback(), NULL, NULL, BoundNetLog()); |
| + int rv = service.ResolveProxy(GURL("http://www.google.com"), std::string(), |
| + LOAD_NORMAL, &info1, callback1.callback(), |
| + nullptr, nullptr, BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| // Successfully set the autodetect script. |
| EXPECT_EQ(ProxyResolverScriptData::TYPE_AUTO_DETECT, |
| factory->pending_requests()[0]->script_data()->type()); |
| factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| // Complete the pending request. |
| ASSERT_EQ(1u, resolver.pending_requests().size()); |
| resolver.pending_requests()[0]->results()->UseNamedProxy("request1:80"); |
| @@ -2645,22 +2694,23 @@ TEST_F(ProxyServiceTest, UpdateConfigFromPACToDirect) { |
| // Force the ProxyService to pull down a new proxy configuration. |
| // (Even though the configuration isn't old/bad). |
| // |
| // This new configuration no longer has auto_detect set, so |
| // requests should complete synchronously now as direct-connect. |
| config_service->SetConfig(ProxyConfig::CreateDirect()); |
| // Start another request -- the effective configuration has changed. |
| ProxyInfo info2; |
| TestCompletionCallback callback2; |
| - rv = service.ResolveProxy(GURL("http://www.google.com"), LOAD_NORMAL, &info2, |
| - callback2.callback(), NULL, NULL, BoundNetLog()); |
| + rv = service.ResolveProxy(GURL("http://www.google.com"), std::string(), |
| + LOAD_NORMAL, &info2, callback2.callback(), nullptr, |
| + nullptr, BoundNetLog()); |
| EXPECT_EQ(OK, rv); |
| EXPECT_TRUE(info2.is_direct()); |
| } |
| TEST_F(ProxyServiceTest, NetworkChangeTriggersPacRefetch) { |
| MockProxyConfigService* config_service = |
| new MockProxyConfigService("http://foopy/proxy.pac"); |
| MockAsyncProxyResolver resolver; |
| @@ -2677,23 +2727,23 @@ TEST_F(ProxyServiceTest, NetworkChangeTriggersPacRefetch) { |
| fetcher, make_scoped_ptr(new DoNothingDhcpProxyScriptFetcher())); |
| // Disable the "wait after IP address changes" hack, so this unit-test can |
| // complete quickly. |
| service.set_stall_proxy_auto_config_delay(base::TimeDelta()); |
| // Start 1 request. |
| ProxyInfo info1; |
| TestCompletionCallback callback1; |
| - int rv = |
| - service.ResolveProxy(GURL("http://request1"), LOAD_NORMAL, &info1, |
| - callback1.callback(), NULL, NULL, BoundNetLog()); |
| + int rv = service.ResolveProxy(GURL("http://request1"), std::string(), |
| + LOAD_NORMAL, &info1, callback1.callback(), |
| + nullptr, nullptr, BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| // The first request should have triggered initial download of PAC script. |
| EXPECT_TRUE(fetcher->has_pending_request()); |
| EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
| // Nothing has been sent to the factory yet. |
| EXPECT_TRUE(factory->pending_requests().empty()); |
| // At this point the ProxyService should be waiting for the |
| @@ -2720,22 +2770,23 @@ TEST_F(ProxyServiceTest, NetworkChangeTriggersPacRefetch) { |
| // Now simluate a change in the network. The ProxyConfigService is still |
| // going to return the same PAC URL as before, but this URL needs to be |
| // refetched on the new network. |
| NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); |
| base::MessageLoop::current()->RunUntilIdle(); // Notification happens async. |
| // Start a second request. |
| ProxyInfo info2; |
| TestCompletionCallback callback2; |
| - rv = service.ResolveProxy(GURL("http://request2"), LOAD_NORMAL, &info2, |
| - callback2.callback(), NULL, NULL, BoundNetLog()); |
| + rv = service.ResolveProxy(GURL("http://request2"), std::string(), LOAD_NORMAL, |
| + &info2, callback2.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| // This second request should have triggered the re-download of the PAC |
| // script (since we marked the network as having changed). |
| EXPECT_TRUE(fetcher->has_pending_request()); |
| EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
| // Nothing has been sent to the factory yet. |
| EXPECT_TRUE(factory->pending_requests().empty()); |
| @@ -2784,33 +2835,33 @@ TEST_F(ProxyServiceTest, PACScriptRefetchAfterFailure) { |
| ProxyService::set_pac_script_poll_policy(&poll_policy); |
| MockProxyConfigService* config_service = |
| new MockProxyConfigService("http://foopy/proxy.pac"); |
| MockAsyncProxyResolver resolver; |
| MockAsyncProxyResolverFactory* factory = |
| new MockAsyncProxyResolverFactory(true); |
| ProxyService service(make_scoped_ptr(config_service), |
| - make_scoped_ptr(factory), NULL); |
| + make_scoped_ptr(factory), nullptr); |
| MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| service.SetProxyScriptFetchers( |
| fetcher, make_scoped_ptr(new DoNothingDhcpProxyScriptFetcher())); |
| // Start 1 request. |
| ProxyInfo info1; |
| TestCompletionCallback callback1; |
| - int rv = |
| - service.ResolveProxy(GURL("http://request1"), LOAD_NORMAL, &info1, |
| - callback1.callback(), NULL, NULL, BoundNetLog()); |
| + int rv = service.ResolveProxy(GURL("http://request1"), std::string(), |
| + LOAD_NORMAL, &info1, callback1.callback(), |
| + nullptr, nullptr, BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| // The first request should have triggered initial download of PAC script. |
| EXPECT_TRUE(fetcher->has_pending_request()); |
| EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
| // Nothing has been sent to the factory yet. |
| EXPECT_TRUE(factory->pending_requests().empty()); |
| // At this point the ProxyService should be waiting for the |
| @@ -2855,22 +2906,23 @@ TEST_F(ProxyServiceTest, PACScriptRefetchAfterFailure) { |
| factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| // At this point the ProxyService should have re-configured itself to use the |
| // PAC script (thereby recovering from the initial fetch failure). We will |
| // verify that the next Resolve request uses the resolver rather than |
| // DIRECT. |
| // Start a second request. |
| ProxyInfo info2; |
| TestCompletionCallback callback2; |
| - rv = service.ResolveProxy(GURL("http://request2"), LOAD_NORMAL, &info2, |
| - callback2.callback(), NULL, NULL, BoundNetLog()); |
| + rv = service.ResolveProxy(GURL("http://request2"), std::string(), LOAD_NORMAL, |
| + &info2, callback2.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| // Check that it was sent to the resolver. |
| ASSERT_EQ(1u, resolver.pending_requests().size()); |
| EXPECT_EQ(GURL("http://request2"), resolver.pending_requests()[0]->url()); |
| // Complete the pending second request. |
| resolver.pending_requests()[0]->results()->UseNamedProxy("request2:80"); |
| resolver.pending_requests()[0]->CompleteNow(OK); |
| @@ -2890,33 +2942,33 @@ TEST_F(ProxyServiceTest, PACScriptRefetchAfterContentChange) { |
| ProxyService::set_pac_script_poll_policy(&poll_policy); |
| MockProxyConfigService* config_service = |
| new MockProxyConfigService("http://foopy/proxy.pac"); |
| MockAsyncProxyResolver resolver; |
| MockAsyncProxyResolverFactory* factory = |
| new MockAsyncProxyResolverFactory(true); |
| ProxyService service(make_scoped_ptr(config_service), |
| - make_scoped_ptr(factory), NULL); |
| + make_scoped_ptr(factory), nullptr); |
| MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| service.SetProxyScriptFetchers( |
| fetcher, make_scoped_ptr(new DoNothingDhcpProxyScriptFetcher())); |
| // Start 1 request. |
| ProxyInfo info1; |
| TestCompletionCallback callback1; |
| - int rv = |
| - service.ResolveProxy(GURL("http://request1"), LOAD_NORMAL, &info1, |
| - callback1.callback(), NULL, NULL, BoundNetLog()); |
| + int rv = service.ResolveProxy(GURL("http://request1"), std::string(), |
| + LOAD_NORMAL, &info1, callback1.callback(), |
| + nullptr, nullptr, BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| // The first request should have triggered initial download of PAC script. |
| EXPECT_TRUE(fetcher->has_pending_request()); |
| EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
| // Nothing has been sent to the factory yet. |
| EXPECT_TRUE(factory->pending_requests().empty()); |
| // At this point the ProxyService should be waiting for the |
| @@ -2967,22 +3019,23 @@ TEST_F(ProxyServiceTest, PACScriptRefetchAfterContentChange) { |
| EXPECT_EQ(ASCIIToUTF16(kValidPacScript2), |
| factory->pending_requests()[0]->script_data()->utf16()); |
| factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| // At this point the ProxyService should have re-configured itself to use the |
| // new PAC script. |
| // Start a second request. |
| ProxyInfo info2; |
| TestCompletionCallback callback2; |
| - rv = service.ResolveProxy(GURL("http://request2"), LOAD_NORMAL, &info2, |
| - callback2.callback(), NULL, NULL, BoundNetLog()); |
| + rv = service.ResolveProxy(GURL("http://request2"), std::string(), LOAD_NORMAL, |
| + &info2, callback2.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| // Check that it was sent to the resolver. |
| ASSERT_EQ(1u, resolver.pending_requests().size()); |
| EXPECT_EQ(GURL("http://request2"), resolver.pending_requests()[0]->url()); |
| // Complete the pending second request. |
| resolver.pending_requests()[0]->results()->UseNamedProxy("request2:80"); |
| resolver.pending_requests()[0]->CompleteNow(OK); |
| @@ -3002,33 +3055,33 @@ TEST_F(ProxyServiceTest, PACScriptRefetchAfterContentUnchanged) { |
| ProxyService::set_pac_script_poll_policy(&poll_policy); |
| MockProxyConfigService* config_service = |
| new MockProxyConfigService("http://foopy/proxy.pac"); |
| MockAsyncProxyResolver resolver; |
| MockAsyncProxyResolverFactory* factory = |
| new MockAsyncProxyResolverFactory(true); |
| ProxyService service(make_scoped_ptr(config_service), |
| - make_scoped_ptr(factory), NULL); |
| + make_scoped_ptr(factory), nullptr); |
| MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| service.SetProxyScriptFetchers( |
| fetcher, make_scoped_ptr(new DoNothingDhcpProxyScriptFetcher())); |
| // Start 1 request. |
| ProxyInfo info1; |
| TestCompletionCallback callback1; |
| - int rv = |
| - service.ResolveProxy(GURL("http://request1"), LOAD_NORMAL, &info1, |
| - callback1.callback(), NULL, NULL, BoundNetLog()); |
| + int rv = service.ResolveProxy(GURL("http://request1"), std::string(), |
| + LOAD_NORMAL, &info1, callback1.callback(), |
| + nullptr, nullptr, BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| // The first request should have triggered initial download of PAC script. |
| EXPECT_TRUE(fetcher->has_pending_request()); |
| EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
| // Nothing has been sent to the factory yet. |
| EXPECT_TRUE(factory->pending_requests().empty()); |
| // At this point the ProxyService should be waiting for the |
| @@ -3076,22 +3129,23 @@ TEST_F(ProxyServiceTest, PACScriptRefetchAfterContentUnchanged) { |
| ASSERT_TRUE(factory->pending_requests().empty()); |
| ASSERT_TRUE(resolver.pending_requests().empty()); |
| // At this point the ProxyService is still running the same PAC script as |
| // before. |
| // Start a second request. |
| ProxyInfo info2; |
| TestCompletionCallback callback2; |
| - rv = service.ResolveProxy(GURL("http://request2"), LOAD_NORMAL, &info2, |
| - callback2.callback(), NULL, NULL, BoundNetLog()); |
| + rv = service.ResolveProxy(GURL("http://request2"), std::string(), LOAD_NORMAL, |
| + &info2, callback2.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| // Check that it was sent to the resolver. |
| ASSERT_EQ(1u, resolver.pending_requests().size()); |
| EXPECT_EQ(GURL("http://request2"), resolver.pending_requests()[0]->url()); |
| // Complete the pending second request. |
| resolver.pending_requests()[0]->results()->UseNamedProxy("request2:80"); |
| resolver.pending_requests()[0]->CompleteNow(OK); |
| @@ -3111,33 +3165,33 @@ TEST_F(ProxyServiceTest, PACScriptRefetchAfterSuccess) { |
| ProxyService::set_pac_script_poll_policy(&poll_policy); |
| MockProxyConfigService* config_service = |
| new MockProxyConfigService("http://foopy/proxy.pac"); |
| MockAsyncProxyResolver resolver; |
| MockAsyncProxyResolverFactory* factory = |
| new MockAsyncProxyResolverFactory(true); |
| ProxyService service(make_scoped_ptr(config_service), |
| - make_scoped_ptr(factory), NULL); |
| + make_scoped_ptr(factory), nullptr); |
| MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| service.SetProxyScriptFetchers( |
| fetcher, make_scoped_ptr(new DoNothingDhcpProxyScriptFetcher())); |
| // Start 1 request. |
| ProxyInfo info1; |
| TestCompletionCallback callback1; |
| - int rv = |
| - service.ResolveProxy(GURL("http://request1"), LOAD_NORMAL, &info1, |
| - callback1.callback(), NULL, NULL, BoundNetLog()); |
| + int rv = service.ResolveProxy(GURL("http://request1"), std::string(), |
| + LOAD_NORMAL, &info1, callback1.callback(), |
| + nullptr, nullptr, BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| // The first request should have triggered initial download of PAC script. |
| EXPECT_TRUE(fetcher->has_pending_request()); |
| EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
| // Nothing has been sent to the factory yet. |
| EXPECT_TRUE(factory->pending_requests().empty()); |
| // At this point the ProxyService should be waiting for the |
| @@ -3182,22 +3236,23 @@ TEST_F(ProxyServiceTest, PACScriptRefetchAfterSuccess) { |
| fetcher->NotifyFetchCompletion(ERR_FAILED, std::string()); |
| base::MessageLoop::current()->RunUntilIdle(); |
| // At this point the ProxyService should have re-configured itself to use |
| // DIRECT connections rather than the given proxy resolver. |
| // Start a second request. |
| ProxyInfo info2; |
| TestCompletionCallback callback2; |
| - rv = service.ResolveProxy(GURL("http://request2"), LOAD_NORMAL, &info2, |
| - callback2.callback(), NULL, NULL, BoundNetLog()); |
| + rv = service.ResolveProxy(GURL("http://request2"), std::string(), LOAD_NORMAL, |
| + &info2, callback2.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(OK, rv); |
| EXPECT_TRUE(info2.is_direct()); |
| } |
| // Tests that the code which decides at what times to poll the PAC |
| // script follows the expected policy. |
| TEST_F(ProxyServiceTest, PACScriptPollingPolicy) { |
| // Retrieve the internal polling policy implementation used by ProxyService. |
| scoped_ptr<ProxyService::PacPollPolicy> policy = |
| ProxyService::CreateDefaultPacPollPolicy(); |
| @@ -3265,33 +3320,33 @@ TEST_F(ProxyServiceTest, PACScriptRefetchAfterActivity) { |
| ProxyService::set_pac_script_poll_policy(&poll_policy); |
| MockProxyConfigService* config_service = |
| new MockProxyConfigService("http://foopy/proxy.pac"); |
| MockAsyncProxyResolver resolver; |
| MockAsyncProxyResolverFactory* factory = |
| new MockAsyncProxyResolverFactory(true); |
| ProxyService service(make_scoped_ptr(config_service), |
| - make_scoped_ptr(factory), NULL); |
| + make_scoped_ptr(factory), nullptr); |
| MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| service.SetProxyScriptFetchers( |
| fetcher, make_scoped_ptr(new DoNothingDhcpProxyScriptFetcher())); |
| // Start 1 request. |
| ProxyInfo info1; |
| TestCompletionCallback callback1; |
| - int rv = |
| - service.ResolveProxy(GURL("http://request1"), LOAD_NORMAL, &info1, |
| - callback1.callback(), NULL, NULL, BoundNetLog()); |
| + int rv = service.ResolveProxy(GURL("http://request1"), std::string(), |
| + LOAD_NORMAL, &info1, callback1.callback(), |
| + nullptr, nullptr, BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| // The first request should have triggered initial download of PAC script. |
| EXPECT_TRUE(fetcher->has_pending_request()); |
| EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
| // Nothing has been sent to the factory yet. |
| EXPECT_TRUE(factory->pending_requests().empty()); |
| // At this point the ProxyService should be waiting for the |
| @@ -3320,22 +3375,23 @@ TEST_F(ProxyServiceTest, PACScriptRefetchAfterActivity) { |
| // Our PAC poller is set to update ONLY in response to network activity, |
| // (i.e. another call to ResolveProxy()). |
| ASSERT_FALSE(fetcher->has_pending_request()); |
| ASSERT_TRUE(factory->pending_requests().empty()); |
| ASSERT_TRUE(resolver.pending_requests().empty()); |
| // Start a second request. |
| ProxyInfo info2; |
| TestCompletionCallback callback2; |
| - rv = service.ResolveProxy(GURL("http://request2"), LOAD_NORMAL, &info2, |
| - callback2.callback(), NULL, NULL, BoundNetLog()); |
| + rv = service.ResolveProxy(GURL("http://request2"), std::string(), LOAD_NORMAL, |
| + &info2, callback2.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(ERR_IO_PENDING, rv); |
| // This request should have sent work to the resolver; complete it. |
| ASSERT_EQ(1u, resolver.pending_requests().size()); |
| EXPECT_EQ(GURL("http://request2"), resolver.pending_requests()[0]->url()); |
| resolver.pending_requests()[0]->results()->UseNamedProxy("request2:80"); |
| resolver.pending_requests()[0]->CompleteNow(OK); |
| EXPECT_EQ(OK, callback2.WaitForResult()); |
| EXPECT_EQ("request2:80", info2.proxy_server().ToURI()); |
| @@ -3350,70 +3406,71 @@ TEST_F(ProxyServiceTest, PACScriptRefetchAfterActivity) { |
| fetcher->NotifyFetchCompletion(ERR_FAILED, std::string()); |
| // Drain the message loop, so ProxyService is notified of the change |
| // and has a chance to re-configure itself. |
| base::MessageLoop::current()->RunUntilIdle(); |
| // Start a third request -- this time we expect to get a direct connection |
| // since the PAC script poller experienced a failure. |
| ProxyInfo info3; |
| TestCompletionCallback callback3; |
| - rv = service.ResolveProxy(GURL("http://request3"), LOAD_NORMAL, &info3, |
| - callback3.callback(), NULL, NULL, BoundNetLog()); |
| + rv = service.ResolveProxy(GURL("http://request3"), std::string(), LOAD_NORMAL, |
| + &info3, callback3.callback(), nullptr, nullptr, |
| + BoundNetLog()); |
| EXPECT_EQ(OK, rv); |
| EXPECT_TRUE(info3.is_direct()); |
| } |
| // Test that the synchronous resolution fails when a PAC script is active. |
| TEST_F(ProxyServiceTest, SynchronousWithPAC) { |
| MockProxyConfigService* config_service = |
| new MockProxyConfigService("http://foopy/proxy.pac"); |
| MockAsyncProxyResolverFactory* factory = |
| new MockAsyncProxyResolverFactory(false); |
| ProxyService service(make_scoped_ptr(config_service), |
| - make_scoped_ptr(factory), NULL); |
| + make_scoped_ptr(factory), nullptr); |
| GURL url("http://www.google.com/"); |
| ProxyInfo info; |
| info.UseDirect(); |
| BoundTestNetLog log; |
| bool synchronous_success = service.TryResolveProxySynchronously( |
| - url, LOAD_NORMAL, &info, NULL, log.bound()); |
| + url, std::string(), LOAD_NORMAL, &info, nullptr, log.bound()); |
| EXPECT_FALSE(synchronous_success); |
| // |info| should not have been modified. |
| EXPECT_TRUE(info.is_direct()); |
| } |
| // Test that synchronous results are returned correctly if a fixed proxy |
| // configuration is active. |
| TEST_F(ProxyServiceTest, SynchronousWithFixedConfiguration) { |
| ProxyConfig config; |
| config.proxy_rules().ParseFromString("foopy1:8080"); |
| config.set_auto_detect(false); |
| MockAsyncProxyResolverFactory* factory = |
| new MockAsyncProxyResolverFactory(false); |
| ProxyService service(make_scoped_ptr(new MockProxyConfigService(config)), |
| - make_scoped_ptr(factory), NULL); |
| + make_scoped_ptr(factory), nullptr); |
| GURL url("http://www.google.com/"); |
| ProxyInfo info; |
| BoundTestNetLog log; |
| bool synchronous_success = service.TryResolveProxySynchronously( |
| - url, LOAD_NORMAL, &info, NULL, log.bound()); |
| + url, std::string(), LOAD_NORMAL, &info, nullptr, log.bound()); |
| EXPECT_TRUE(synchronous_success); |
| EXPECT_FALSE(info.is_direct()); |
| EXPECT_EQ("foopy1", info.proxy_server().host_port_pair().host()); |
| // No request should have been queued. |
| EXPECT_EQ(0u, factory->pending_requests().size()); |
| } |
| } // namespace net |