From 7d1e5d412b0150bda634bff9425a07b91cd020ce Mon Sep 17 00:00:00 2001 From: Nanne Wielinga Date: Tue, 27 Jan 2026 14:55:13 +0100 Subject: [PATCH] fix: handle null close code and reason in WebSocketRoute When a WebSocket connection closes due to page navigation, the driver may send close events without code, reason, or wasClean fields. This caused a NullPointerException when accessing these fields directly. Fixes #1882 --- .../playwright/impl/WebSocketRouteImpl.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/playwright/src/main/java/com/microsoft/playwright/impl/WebSocketRouteImpl.java b/playwright/src/main/java/com/microsoft/playwright/impl/WebSocketRouteImpl.java index ab9ed40a0..e39ba4a15 100644 --- a/playwright/src/main/java/com/microsoft/playwright/impl/WebSocketRouteImpl.java +++ b/playwright/src/main/java/com/microsoft/playwright/impl/WebSocketRouteImpl.java @@ -160,9 +160,9 @@ protected void handleEvent(String event, JsonObject params) { sendMessageAsync("sendToPage", messageParams); } } else if ("closePage".equals(event)) { - int code = params.get("code").getAsInt(); - String reason = params.get("reason").getAsString(); - boolean wasClean = params.get("wasClean").getAsBoolean(); + Integer code = params.has("code") ? params.get("code").getAsInt() : null; + String reason = params.has("reason") ? params.get("reason").getAsString() : null; + boolean wasClean = params.has("wasClean") && params.get("wasClean").getAsBoolean(); if (onPageClose != null) { onPageClose.accept(code, reason); } else { @@ -173,9 +173,9 @@ protected void handleEvent(String event, JsonObject params) { sendMessageAsync("closeServer", closeParams); } } else if ("closeServer".equals(event)) { - int code = params.get("code").getAsInt(); - String reason = params.get("reason").getAsString(); - boolean wasClean = params.get("wasClean").getAsBoolean(); + Integer code = params.has("code") ? params.get("code").getAsInt() : null; + String reason = params.has("reason") ? params.get("reason").getAsString() : null; + boolean wasClean = params.has("wasClean") && params.get("wasClean").getAsBoolean(); if (onServerClose != null) { onServerClose.accept(code, reason); } else {