From fb6be2e34d02cf43aefe1c701d92d4c363b70f6e Mon Sep 17 00:00:00 2001 From: Delta456 Date: Wed, 3 Dec 2025 00:19:51 +0530 Subject: [PATCH 1/2] [java][BiDi] implement `emulation.setUserAgentOverride` --- .../selenium/bidi/emulation/Emulation.java | 7 ++ .../SetUserAgentOverrideParameters.java | 36 ++++++ .../emulation/SetUserAgentOverrideTest.java | 114 ++++++++++++++++++ 3 files changed, 157 insertions(+) create mode 100644 java/src/org/openqa/selenium/bidi/emulation/SetUserAgentOverrideParameters.java create mode 100644 java/test/org/openqa/selenium/bidi/emulation/SetUserAgentOverrideTest.java diff --git a/java/src/org/openqa/selenium/bidi/emulation/Emulation.java b/java/src/org/openqa/selenium/bidi/emulation/Emulation.java index c84913ffa2ce6..e467fcca0f221 100644 --- a/java/src/org/openqa/selenium/bidi/emulation/Emulation.java +++ b/java/src/org/openqa/selenium/bidi/emulation/Emulation.java @@ -55,4 +55,11 @@ public Map setScriptingEnabled(SetScriptingEnabledParameters par return bidi.send(new Command<>("emulation.setScriptingEnabled", parameters.toMap(), Map.class)); } + + public Map setUserAgentOverride(SetUserAgentOverrideParameters parameters) { + Require.nonNull("SetUserAgentOverride parameters", parameters); + + return bidi.send( + new Command<>("emulation.setUserAgentOverride", parameters.toMap(), Map.class)); + } } diff --git a/java/src/org/openqa/selenium/bidi/emulation/SetUserAgentOverrideParameters.java b/java/src/org/openqa/selenium/bidi/emulation/SetUserAgentOverrideParameters.java new file mode 100644 index 0000000000000..2c35ce0570b5b --- /dev/null +++ b/java/src/org/openqa/selenium/bidi/emulation/SetUserAgentOverrideParameters.java @@ -0,0 +1,36 @@ +// 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.bidi.emulation; + +public class SetUserAgentOverrideParameters extends AbstractOverrideParameters { + public SetUserAgentOverrideParameters(String userAgent) { + map.put("userAgent", userAgent); + } + + @Override + public SetUserAgentOverrideParameters contexts(java.util.List contexts) { + super.contexts(contexts); + return this; + } + + @Override + public SetUserAgentOverrideParameters userContexts(java.util.List userContexts) { + super.userContexts(userContexts); + return this; + } +} diff --git a/java/test/org/openqa/selenium/bidi/emulation/SetUserAgentOverrideTest.java b/java/test/org/openqa/selenium/bidi/emulation/SetUserAgentOverrideTest.java new file mode 100644 index 0000000000000..808951200adf2 --- /dev/null +++ b/java/test/org/openqa/selenium/bidi/emulation/SetUserAgentOverrideTest.java @@ -0,0 +1,114 @@ +// 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.bidi.emulation; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.List; +import java.util.Optional; +import org.junit.jupiter.api.Test; +import org.openqa.selenium.WindowType; +import org.openqa.selenium.bidi.browsingcontext.BrowsingContext; +import org.openqa.selenium.bidi.browsingcontext.CreateContextParameters; +import org.openqa.selenium.bidi.browsingcontext.ReadinessState; +import org.openqa.selenium.bidi.module.Browser; +import org.openqa.selenium.bidi.module.Script; +import org.openqa.selenium.bidi.script.EvaluateResult; +import org.openqa.selenium.bidi.script.EvaluateResultSuccess; +import org.openqa.selenium.testing.JupiterTestBase; +import org.openqa.selenium.testing.NeedsFreshDriver; + +public class SetUserAgentOverrideTest extends JupiterTestBase { + + private String getBrowserUserAgent(String contextId, Script script) { + EvaluateResult result = + script.evaluateFunctionInBrowsingContext( + contextId, "navigator.userAgent", false, Optional.empty()); + return ((EvaluateResultSuccess) result).getResult().getValue().get().toString(); + } + + @Test + @NeedsFreshDriver + void canSetUserAgentOverrideWithContexts() { + BrowsingContext context = new BrowsingContext(driver, driver.getWindowHandle()); + String contextId = context.getId(); + + String url = appServer.whereIs("formPage.html"); + context.navigate(url, ReadinessState.COMPLETE); + + Script script = new Script(driver); + String initialUserAgent = getBrowserUserAgent(contextId, script); + + Emulation emulation = new Emulation(driver); + String customUserAgent = "Mozilla/5.0 (Custom Test Agent)"; + emulation.setUserAgentOverride( + new SetUserAgentOverrideParameters(customUserAgent).contexts(List.of(contextId))); + + String overriddenUserAgent = getBrowserUserAgent(contextId, script); + assertThat(overriddenUserAgent).isEqualTo(customUserAgent); + + // Clear the override + emulation.setUserAgentOverride( + new SetUserAgentOverrideParameters(null).contexts(List.of(contextId))); + + String restoredUserAgent = getBrowserUserAgent(contextId, script); + assertThat(restoredUserAgent).isEqualTo(initialUserAgent); + } + + @Test + @NeedsFreshDriver + void canSetUserAgentOverrideWithUserContexts() { + Browser browser = new Browser(driver); + String userContext = browser.createUserContext(); + + try { + BrowsingContext context = + new BrowsingContext( + driver, new CreateContextParameters(WindowType.TAB).userContext(userContext)); + String contextId = context.getId(); + + try { + driver.switchTo().window(contextId); + String url = appServer.whereIs("formPage.html"); + context.navigate(url, ReadinessState.COMPLETE); + + Script script = new Script(driver); + String initialUserAgent = getBrowserUserAgent(contextId, script); + + Emulation emulation = new Emulation(driver); + String customUserAgent = "Mozilla/5.0 (Custom User Context Agent)"; + emulation.setUserAgentOverride( + new SetUserAgentOverrideParameters(customUserAgent).userContexts(List.of(userContext))); + + String overriddenUserAgent = getBrowserUserAgent(contextId, script); + assertThat(overriddenUserAgent).isEqualTo(customUserAgent); + + // Clear the override + emulation.setUserAgentOverride( + new SetUserAgentOverrideParameters(null).userContexts(List.of(userContext))); + + String restoredUserAgent = getBrowserUserAgent(contextId, script); + assertThat(restoredUserAgent).isEqualTo(initialUserAgent); + } finally { + context.close(); + } + } finally { + browser.removeUserContext(userContext); + } + } +} From 689fb7132be5457e732c7a38d517755ab13fd893 Mon Sep 17 00:00:00 2001 From: Delta456 Date: Wed, 3 Dec 2025 14:02:43 +0530 Subject: [PATCH 2/2] set return type to voic --- java/src/org/openqa/selenium/bidi/emulation/Emulation.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/java/src/org/openqa/selenium/bidi/emulation/Emulation.java b/java/src/org/openqa/selenium/bidi/emulation/Emulation.java index e467fcca0f221..69b8ac3039b9d 100644 --- a/java/src/org/openqa/selenium/bidi/emulation/Emulation.java +++ b/java/src/org/openqa/selenium/bidi/emulation/Emulation.java @@ -56,10 +56,9 @@ public Map setScriptingEnabled(SetScriptingEnabledParameters par return bidi.send(new Command<>("emulation.setScriptingEnabled", parameters.toMap(), Map.class)); } - public Map setUserAgentOverride(SetUserAgentOverrideParameters parameters) { + public void setUserAgentOverride(SetUserAgentOverrideParameters parameters) { Require.nonNull("SetUserAgentOverride parameters", parameters); - return bidi.send( - new Command<>("emulation.setUserAgentOverride", parameters.toMap(), Map.class)); + bidi.send(new Command<>("emulation.setUserAgentOverride", parameters.toMap(), Map.class)); } }