src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/HttpClientImpl.java
--- a/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/HttpClientImpl.java Thu Nov 16 12:15:55 2017 +0000
+++ b/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/HttpClientImpl.java Thu Nov 16 19:56:44 2017 +0000
@@ -44,6 +44,7 @@
import java.security.AccessControlContext;
import java.security.AccessController;
import java.security.NoSuchAlgorithmException;
+import java.security.PrivilegedAction;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
@@ -54,7 +55,6 @@
import java.util.Set;
import java.util.TreeSet;
import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.CompletionException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
@@ -114,6 +114,7 @@
private final CookieHandler cookieHandler;
private final Redirect followRedirects;
+ private final Optional<ProxySelector> userProxySelector;
private final ProxySelector proxySelector;
private final Authenticator authenticator;
private final Version version;
@@ -231,7 +232,11 @@
cookieHandler = builder.cookieHandler;
followRedirects = builder.followRedirects == null ?
Redirect.NEVER : builder.followRedirects;
- this.proxySelector = builder.proxy;
+ this.userProxySelector = Optional.ofNullable(builder.proxy);
+ this.proxySelector = userProxySelector
+ .orElseGet(HttpClientImpl::getDefaultProxySelector);
+ debug.log(Level.DEBUG, "proxySelector is %s (user-supplied=%s)",
+ this.proxySelector, userProxySelector.isPresent());
authenticator = builder.authenticator;
if (builder.version == null) {
version = HttpClient.Version.HTTP_2;
@@ -279,6 +284,11 @@
return params;
}
+ private static ProxySelector getDefaultProxySelector() {
+ PrivilegedAction<ProxySelector> action = ProxySelector::getDefault;
+ return AccessController.doPrivileged(action);
+ }
+
// Returns the facade that was returned to the application code.
// May be null if that facade is no longer referenced.
final HttpClientFacade facade() {
@@ -906,7 +916,12 @@
@Override
public Optional<ProxySelector> proxy() {
- return Optional.ofNullable(this.proxySelector);
+ return this.userProxySelector;
+ }
+
+ // Return the effective proxy that this client uses.
+ ProxySelector proxySelector() {
+ return proxySelector;
}
@Override
@@ -917,7 +932,7 @@
// WebSocket has been created, at which point the pendingOperationCount
// will have been incremented by the DetachedConnectionChannel
// (see PlainHttpConnection.detachChannel())
- return new BuilderImpl(this.facade(), uri, listener);
+ return new BuilderImpl(this.facade(), uri, listener, proxySelector);
}
@Override
@@ -936,12 +951,6 @@
return super.toString() + ("(" + id + ")");
}
- //private final HashMap<String, Boolean> http2NotSupported = new HashMap<>();
-
-// boolean getHttp2Allowed() {
-// return version.equals(Version.HTTP_2);
-// }
-
private void initFilters() {
addFilter(AuthenticationFilter.class);
addFilter(RedirectFilter.class);