Skip to content

Commit 9c686a5

Browse files
committed
[java] wait for the close response #14280
1 parent 095602d commit 9c686a5

File tree

1 file changed

+20
-1
lines changed

1 file changed

+20
-1
lines changed

java/src/org/openqa/selenium/remote/http/jdk/JdkHttpClient.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@ public WebSocket openSocket(HttpRequest request, WebSocket.Listener listener) {
164164
throw new ConnectionFailedException("JdkWebSocket initial request execution error", e);
165165
}
166166

167+
CompletableFuture<Integer> closed = new CompletableFuture<>();
167168
CompletableFuture<java.net.http.WebSocket> webSocketCompletableFuture =
168169
client
169170
.newWebSocketBuilder()
@@ -222,6 +223,7 @@ public CompletionStage<?> onBinary(
222223
public CompletionStage<?> onClose(
223224
java.net.http.WebSocket webSocket, int statusCode, String reason) {
224225
LOG.fine("Closing websocket");
226+
closed.complete(statusCode);
225227
listener.onClose(statusCode, reason);
226228
return null;
227229
}
@@ -277,7 +279,24 @@ public WebSocket send(Message message) {
277279
Level.FINE,
278280
"Sending close message, statusCode {0}, reason: {1}",
279281
new Object[] {statusCode, closeMessage.reason()});
280-
makeCall = () -> underlyingSocket.sendClose(statusCode, closeMessage.reason());
282+
makeCall =
283+
() -> {
284+
CompletableFuture<java.net.http.WebSocket> future =
285+
underlyingSocket.sendClose(statusCode, closeMessage.reason());
286+
try {
287+
closed.get(4, TimeUnit.SECONDS);
288+
} catch (ExecutionException e) {
289+
LOG.log(
290+
Level.WARNING,
291+
"failed to wait for the websocket to close",
292+
e.getCause());
293+
} catch (InterruptedException e) {
294+
Thread.currentThread().interrupt();
295+
} catch (java.util.concurrent.TimeoutException e) {
296+
LOG.finer("wait for the websocket to close timed out");
297+
}
298+
return future;
299+
};
281300
} else {
282301
LOG.fine("Output is closed, not sending close message");
283302
return this;

0 commit comments

Comments
 (0)