Index: net/proxy/proxy_service_unittest.cc |
diff --git a/net/proxy/proxy_service_unittest.cc b/net/proxy/proxy_service_unittest.cc |
index c57b23834f90683b68f594eb962f5dd284b2adfd..bffd00033dc8520aee49c1d56c87eab2e5bbbe87 100644 |
--- a/net/proxy/proxy_service_unittest.cc |
+++ b/net/proxy/proxy_service_unittest.cc |
@@ -3685,4 +3685,65 @@ TEST_F(ProxyServiceTest, SanitizeUrlForPacScriptCryptographic) { |
} |
} |
+TEST_F(ProxyServiceTest, OnShutdownWithLiveRequest) { |
+ MockProxyConfigService* config_service = |
+ new MockProxyConfigService("http://foopy/proxy.pac"); |
+ |
+ MockAsyncProxyResolver resolver; |
+ MockAsyncProxyResolverFactory* factory = |
+ new MockAsyncProxyResolverFactory(true); |
+ |
+ ProxyService service(base::WrapUnique(config_service), |
+ base::WrapUnique(factory), nullptr); |
+ |
+ MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
+ service.SetProxyScriptFetchers( |
+ fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher())); |
+ |
+ ProxyInfo info; |
+ TestCompletionCallback callback; |
+ ProxyService::PacRequest* request; |
+ int rv = service.ResolveProxy(GURL("http://request/"), std::string(), &info, |
+ callback.callback(), &request, nullptr, |
+ NetLogWithSource()); |
+ EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
+ |
+ // 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()); |
+ |
+ service.OnShutdown(); |
+ EXPECT_THAT(callback.WaitForResult(), IsOk()); |
+ EXPECT_FALSE(fetcher->has_pending_request()); |
+ EXPECT_TRUE(info.is_direct()); |
+} |
+ |
+TEST_F(ProxyServiceTest, OnShutdownFollowedByRequest) { |
+ MockProxyConfigService* config_service = |
+ new MockProxyConfigService("http://foopy/proxy.pac"); |
+ |
+ MockAsyncProxyResolver resolver; |
+ MockAsyncProxyResolverFactory* factory = |
+ new MockAsyncProxyResolverFactory(true); |
+ |
+ ProxyService service(base::WrapUnique(config_service), |
+ base::WrapUnique(factory), nullptr); |
+ |
+ MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
+ service.SetProxyScriptFetchers( |
+ fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher())); |
+ |
+ service.OnShutdown(); |
+ |
+ ProxyInfo info; |
+ TestCompletionCallback callback; |
+ ProxyService::PacRequest* request; |
+ int rv = service.ResolveProxy(GURL("http://request/"), std::string(), &info, |
+ callback.callback(), &request, nullptr, |
+ NetLogWithSource()); |
+ EXPECT_THAT(rv, IsOk()); |
+ EXPECT_FALSE(fetcher->has_pending_request()); |
+ EXPECT_TRUE(info.is_direct()); |
+} |
+ |
} // namespace net |