From a7d1dfff364f8c318417129d8d12716c992116ef Mon Sep 17 00:00:00 2001 From: seethinajayadileep Date: Mon, 2 Mar 2026 11:17:22 +0530 Subject: [PATCH 1/4] Add toString() to ScriptKey for improved debugging readability --- java/src/org/openqa/selenium/ScriptKey.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/java/src/org/openqa/selenium/ScriptKey.java b/java/src/org/openqa/selenium/ScriptKey.java index e5f61c226a6c3..8bcf53ac6ae04 100644 --- a/java/src/org/openqa/selenium/ScriptKey.java +++ b/java/src/org/openqa/selenium/ScriptKey.java @@ -33,6 +33,11 @@ public String getIdentifier() { return identifier; } + @Override + public String toString() { + return identifier; + } + @Override public boolean equals(@Nullable Object o) { if (!(o instanceof ScriptKey)) { From f4a0071011745b62b4784b46c39a538afb6d41e4 Mon Sep 17 00:00:00 2001 From: seethinajayadileep Date: Mon, 2 Mar 2026 12:22:46 +0530 Subject: [PATCH 2/4] Avoid logging raw script content in UnpinnedScriptKey.toString() --- java/src/org/openqa/selenium/UnpinnedScriptKey.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/java/src/org/openqa/selenium/UnpinnedScriptKey.java b/java/src/org/openqa/selenium/UnpinnedScriptKey.java index b61f443d5f5b8..db17d7db626bc 100644 --- a/java/src/org/openqa/selenium/UnpinnedScriptKey.java +++ b/java/src/org/openqa/selenium/UnpinnedScriptKey.java @@ -112,4 +112,12 @@ public boolean equals(@Nullable Object o) { public int hashCode() { return Objects.hash(super.hashCode(), script); } + + @Override + public String toString() { + // Avoid dumping raw JavaScript into logs: in UnpinnedScriptKey the identifier is the script. + return String.format( + "UnpinnedScriptKey{handle=%s, scriptId=%s, length=%d}", + scriptHandle, scriptId, script.length()); + } } From 2a9b9c2d4bb7da279433bd838d0568b4f7d64ed4 Mon Sep 17 00:00:00 2001 From: seethinajayadileep Date: Mon, 2 Mar 2026 23:15:13 +0530 Subject: [PATCH 3/4] [java] Add unit tests for ScriptKey and UnpinnedScriptKey toString() behavior --- .../openqa/selenium/UnpinnedScriptKey.java | 2 +- .../org/openqa/selenium/ScriptKeyTest.java | 33 ++++++++++++++ .../selenium/UnpinnedScriptKeyTest.java | 45 +++++++++++++++++++ 3 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 java/test/org/openqa/selenium/ScriptKeyTest.java create mode 100644 java/test/org/openqa/selenium/UnpinnedScriptKeyTest.java diff --git a/java/src/org/openqa/selenium/UnpinnedScriptKey.java b/java/src/org/openqa/selenium/UnpinnedScriptKey.java index db17d7db626bc..fb7990f2298a7 100644 --- a/java/src/org/openqa/selenium/UnpinnedScriptKey.java +++ b/java/src/org/openqa/selenium/UnpinnedScriptKey.java @@ -118,6 +118,6 @@ public String toString() { // Avoid dumping raw JavaScript into logs: in UnpinnedScriptKey the identifier is the script. return String.format( "UnpinnedScriptKey{handle=%s, scriptId=%s, length=%d}", - scriptHandle, scriptId, script.length()); + scriptHandle, Objects.toString(scriptId, "unset"), script.length()); } } diff --git a/java/test/org/openqa/selenium/ScriptKeyTest.java b/java/test/org/openqa/selenium/ScriptKeyTest.java new file mode 100644 index 0000000000000..1de043da69f03 --- /dev/null +++ b/java/test/org/openqa/selenium/ScriptKeyTest.java @@ -0,0 +1,33 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package org.openqa.selenium; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.Test; + +class ScriptKeyTest { + @Test + void hasToStringEqualToIdentifier() { + assertThat(new ScriptKey("xxx")).hasToString("xxx"); + } + + @Test + void hasToStringWorksForEmptyIdentifier() { + assertThat(new ScriptKey("")).hasToString(""); + } +} diff --git a/java/test/org/openqa/selenium/UnpinnedScriptKeyTest.java b/java/test/org/openqa/selenium/UnpinnedScriptKeyTest.java new file mode 100644 index 0000000000000..3a9aef9d10530 --- /dev/null +++ b/java/test/org/openqa/selenium/UnpinnedScriptKeyTest.java @@ -0,0 +1,45 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package org.openqa.selenium; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.Test; + +class UnpinnedScriptKeyTest { + + @Test + void toStringDoesNotExposeRawScript() { + String script = "return 'SECRET_TOKEN';"; + UnpinnedScriptKey key = new UnpinnedScriptKey(script); + + assertThat(key.toString()).doesNotContain(script); + } + + @Test + void toStringContainsHandleAndScriptIdWhenPresent() { + UnpinnedScriptKey key = new UnpinnedScriptKey("return 1;"); + key.setScriptId("script-99"); + + String value = key.toString(); + + assertThat(value).contains("UnpinnedScriptKey{"); + assertThat(value).contains("handle="); + assertThat(value).contains("scriptId=script-99"); + } +} From cb1caa1a743cab18bdab7203b87faeb8d23d4337 Mon Sep 17 00:00:00 2001 From: seethinajayadileep Date: Mon, 2 Mar 2026 23:54:26 +0530 Subject: [PATCH 4/4] [java] Refine UnpinnedScriptKey.toString() and update corresponding tests --- java/src/org/openqa/selenium/UnpinnedScriptKey.java | 11 ++++++++--- .../org/openqa/selenium/UnpinnedScriptKeyTest.java | 4 ++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/java/src/org/openqa/selenium/UnpinnedScriptKey.java b/java/src/org/openqa/selenium/UnpinnedScriptKey.java index fb7990f2298a7..f8eac4303963c 100644 --- a/java/src/org/openqa/selenium/UnpinnedScriptKey.java +++ b/java/src/org/openqa/selenium/UnpinnedScriptKey.java @@ -116,8 +116,13 @@ public int hashCode() { @Override public String toString() { // Avoid dumping raw JavaScript into logs: in UnpinnedScriptKey the identifier is the script. - return String.format( - "UnpinnedScriptKey{handle=%s, scriptId=%s, length=%d}", - scriptHandle, Objects.toString(scriptId, "unset"), script.length()); + return "UnpinnedScriptKey{" + + "scriptHash=" + + script.hashCode() + + ", scriptId=" + + Objects.toString(scriptId, "unset") + + ", length=" + + script.length() + + "}"; } } diff --git a/java/test/org/openqa/selenium/UnpinnedScriptKeyTest.java b/java/test/org/openqa/selenium/UnpinnedScriptKeyTest.java index 3a9aef9d10530..3f7bfc8d2545a 100644 --- a/java/test/org/openqa/selenium/UnpinnedScriptKeyTest.java +++ b/java/test/org/openqa/selenium/UnpinnedScriptKeyTest.java @@ -32,14 +32,14 @@ void toStringDoesNotExposeRawScript() { } @Test - void toStringContainsHandleAndScriptIdWhenPresent() { + void toStringContainsScriptIdWhenPresent() { UnpinnedScriptKey key = new UnpinnedScriptKey("return 1;"); key.setScriptId("script-99"); String value = key.toString(); assertThat(value).contains("UnpinnedScriptKey{"); - assertThat(value).contains("handle="); assertThat(value).contains("scriptId=script-99"); + assertThat(value).contains("length="); } }