From a5f0038453648510bee382c42f818fff1e899843 Mon Sep 17 00:00:00 2001 From: Puja Jagani Date: Mon, 17 Feb 2025 19:19:17 +0530 Subject: [PATCH 1/5] [bidi][java] Add Permissions Module commands --- .../openqa/selenium/bidi/module/BUILD.bazel | 1 + .../selenium/bidi/module/Permission.java | 67 +++++ .../selenium/bidi/permissions/BUILD.bazel | 18 ++ .../bidi/permissions/PermissionState.java | 47 +++ .../org/openqa/selenium/remote/BUILD.bazel | 1 + .../openqa/selenium/bidi/input/BUILD.bazel | 1 + .../selenium/bidi/permissions/BUILD.bazel | 41 +++ .../bidi/permissions/PermissionsTest.java | 269 ++++++++++++++++++ 8 files changed, 445 insertions(+) create mode 100644 java/src/org/openqa/selenium/bidi/module/Permission.java create mode 100644 java/src/org/openqa/selenium/bidi/permissions/BUILD.bazel create mode 100644 java/src/org/openqa/selenium/bidi/permissions/PermissionState.java create mode 100644 java/test/org/openqa/selenium/bidi/permissions/BUILD.bazel create mode 100644 java/test/org/openqa/selenium/bidi/permissions/PermissionsTest.java diff --git a/java/src/org/openqa/selenium/bidi/module/BUILD.bazel b/java/src/org/openqa/selenium/bidi/module/BUILD.bazel index 9706b1493f778..330ffaccd3d32 100644 --- a/java/src/org/openqa/selenium/bidi/module/BUILD.bazel +++ b/java/src/org/openqa/selenium/bidi/module/BUILD.bazel @@ -21,6 +21,7 @@ java_library( "//java/src/org/openqa/selenium/bidi/browsingcontext", "//java/src/org/openqa/selenium/bidi/log", "//java/src/org/openqa/selenium/bidi/network", + "//java/src/org/openqa/selenium/bidi/permissions", "//java/src/org/openqa/selenium/bidi/script", "//java/src/org/openqa/selenium/bidi/storage", "//java/src/org/openqa/selenium/json", diff --git a/java/src/org/openqa/selenium/bidi/module/Permission.java b/java/src/org/openqa/selenium/bidi/module/Permission.java new file mode 100644 index 0000000000000..74d8349813b7e --- /dev/null +++ b/java/src/org/openqa/selenium/bidi/module/Permission.java @@ -0,0 +1,67 @@ +// 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.module; + +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.bidi.BiDi; +import org.openqa.selenium.bidi.Command; +import org.openqa.selenium.bidi.HasBiDi; +import org.openqa.selenium.bidi.permissions.PermissionState; +import org.openqa.selenium.internal.Require; + +import java.util.HashMap; +import java.util.Map; + +public class Permission { + + private final BiDi bidi; + + public Permission(WebDriver driver) { + Require.nonNull("WebDriver", driver); + + if (!(driver instanceof HasBiDi)) { + throw new IllegalArgumentException("WebDriver instance must support BiDi protocol"); + } + + this.bidi = ((HasBiDi) driver).getBiDi(); + } + + public void setPermission(Map permissionDescriptor, PermissionState state, String origin) { + this.setPermission(permissionDescriptor, state, origin, null); + } + + public void setPermission( + Map permissionDescriptor, PermissionState state, String origin, String userContext) { + Require.nonNull("Permission descriptor", permissionDescriptor); + Require.nonNull("Permission state", state); + Require.nonNull("Origin", origin); + + Map params = + new HashMap<>( + Map.of( + "descriptor", permissionDescriptor, + "state", state.toString(), + "origin", origin)); + + if (userContext != null) { + params.put("userContext", userContext); + } + + this.bidi.send(new Command<>("permissions.setPermission", params)); + } +} diff --git a/java/src/org/openqa/selenium/bidi/permissions/BUILD.bazel b/java/src/org/openqa/selenium/bidi/permissions/BUILD.bazel new file mode 100644 index 0000000000000..a96434fe1280e --- /dev/null +++ b/java/src/org/openqa/selenium/bidi/permissions/BUILD.bazel @@ -0,0 +1,18 @@ +load("@rules_jvm_external//:defs.bzl", "artifact") +load("//java:defs.bzl", "java_library") + +java_library( + name = "permissions", + srcs = glob( + [ + "*.java", + ], + ), + visibility = [ + "//java/src/org/openqa/selenium/bidi:__subpackages__", + "//java/src/org/openqa/selenium/firefox:__subpackages__", + "//java/src/org/openqa/selenium/remote:__pkg__", + "//java/test/org/openqa/selenium/bidi:__subpackages__", + "//java/test/org/openqa/selenium/grid:__subpackages__", + ], +) diff --git a/java/src/org/openqa/selenium/bidi/permissions/PermissionState.java b/java/src/org/openqa/selenium/bidi/permissions/PermissionState.java new file mode 100644 index 0000000000000..cf7fa15ed8697 --- /dev/null +++ b/java/src/org/openqa/selenium/bidi/permissions/PermissionState.java @@ -0,0 +1,47 @@ +// 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.permissions; + +public enum PermissionState { + + GRANTED("granted"), + DENIED("denied"), + PROMPT("prompt"); + + private final String state; + + PermissionState(String state) { + this.state = state; + } + + @Override + public String toString() { + return state; + } + + public static PermissionState findByName(String name) { + PermissionState result = null; + for (PermissionState state : values()) { + if (state.toString().equalsIgnoreCase(name)) { + result = state; + break; + } + } + return result; + } +} diff --git a/java/src/org/openqa/selenium/remote/BUILD.bazel b/java/src/org/openqa/selenium/remote/BUILD.bazel index 1f4dee171f251..0834343da717f 100644 --- a/java/src/org/openqa/selenium/remote/BUILD.bazel +++ b/java/src/org/openqa/selenium/remote/BUILD.bazel @@ -31,6 +31,7 @@ java_export( "//java/src/org/openqa/selenium/bidi/log", "//java/src/org/openqa/selenium/bidi/module", "//java/src/org/openqa/selenium/bidi/network", + "//java/src/org/openqa/selenium/bidi/permissions", "//java/src/org/openqa/selenium/bidi/script", "//java/src/org/openqa/selenium/bidi/storage", "//java/src/org/openqa/selenium/devtools", diff --git a/java/test/org/openqa/selenium/bidi/input/BUILD.bazel b/java/test/org/openqa/selenium/bidi/input/BUILD.bazel index 9ae9147c3b872..690d36b9a0de4 100644 --- a/java/test/org/openqa/selenium/bidi/input/BUILD.bazel +++ b/java/test/org/openqa/selenium/bidi/input/BUILD.bazel @@ -22,6 +22,7 @@ java_selenium_test_suite( "//java/src/org/openqa/selenium/bidi/log", "//java/src/org/openqa/selenium/bidi/module", "//java/src/org/openqa/selenium/bidi/network", + "//java/src/org/openqa/selenium/bidi/permissions", "//java/src/org/openqa/selenium/bidi/script", "//java/src/org/openqa/selenium/chrome", "//java/src/org/openqa/selenium/firefox", diff --git a/java/test/org/openqa/selenium/bidi/permissions/BUILD.bazel b/java/test/org/openqa/selenium/bidi/permissions/BUILD.bazel new file mode 100644 index 0000000000000..9ae9147c3b872 --- /dev/null +++ b/java/test/org/openqa/selenium/bidi/permissions/BUILD.bazel @@ -0,0 +1,41 @@ +load("@rules_jvm_external//:defs.bzl", "artifact") +load("//java:defs.bzl", "JUNIT5_DEPS", "java_selenium_test_suite") + +java_selenium_test_suite( + name = "large-tests", + size = "large", + srcs = glob(["*Test.java"]), + browsers = [ + "chrome", + "edge", + "firefox", + ], + data = [ + "//third_party/chrome_ext:backspace.crx", + ], + tags = [ + "selenium-remote", + ], + deps = [ + "//java/src/org/openqa/selenium/bidi", + "//java/src/org/openqa/selenium/bidi/browsingcontext", + "//java/src/org/openqa/selenium/bidi/log", + "//java/src/org/openqa/selenium/bidi/module", + "//java/src/org/openqa/selenium/bidi/network", + "//java/src/org/openqa/selenium/bidi/script", + "//java/src/org/openqa/selenium/chrome", + "//java/src/org/openqa/selenium/firefox", + "//java/src/org/openqa/selenium/json", + "//java/src/org/openqa/selenium/remote", + "//java/src/org/openqa/selenium/support", + "//java/test/org/openqa/selenium:helpers", + "//java/test/org/openqa/selenium/build", + "//java/test/org/openqa/selenium/environment", + "//java/test/org/openqa/selenium/testing:annotations", + "//java/test/org/openqa/selenium/testing:test-base", + "//java/test/org/openqa/selenium/testing/drivers", + artifact("org.junit.jupiter:junit-jupiter-api"), + artifact("org.assertj:assertj-core"), + artifact("org.mockito:mockito-core"), + ] + JUNIT5_DEPS, +) diff --git a/java/test/org/openqa/selenium/bidi/permissions/PermissionsTest.java b/java/test/org/openqa/selenium/bidi/permissions/PermissionsTest.java new file mode 100644 index 0000000000000..844a3df2cd6af --- /dev/null +++ b/java/test/org/openqa/selenium/bidi/permissions/PermissionsTest.java @@ -0,0 +1,269 @@ +// 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.permissions; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.Map; +import java.util.Optional; +import java.util.Set; + +import org.junit.jupiter.api.BeforeEach; +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.Permission; +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; +import org.openqa.selenium.testing.Pages; + +public class PermissionsTest extends JupiterTestBase { + private Permission permission; + private Script script; + + private static final String + GET_GEOLOCATION_PERMISSION = + "() => {return navigator.permissions.query({ name: 'geolocation' })" + + ".then(val => val.state, err => err.message)}"; + private static final String GET_ORIGIN = "() => {return window.location.origin;}"; + + @BeforeEach + public void setUp() { + permission = new Permission(driver); + script = new Script(driver); + } + + @Test + @NeedsFreshDriver + public void canSetPermissionToGranted() { + driver.get(new Pages(appServer).blankPage); + + String windowHandle = driver.getWindowHandle(); + + EvaluateResult initialPermission = + script.callFunctionInBrowsingContext( + windowHandle, + GET_GEOLOCATION_PERMISSION, + true, + Optional.empty(), + Optional.empty(), + Optional.empty()); + + String initialPermissionValue = + (String) ((EvaluateResultSuccess) initialPermission).getResult().getValue().get(); + assertThat(initialPermissionValue).isEqualTo("prompt"); + + EvaluateResult origin = + script.callFunctionInBrowsingContext( + windowHandle, + GET_ORIGIN, + true, + Optional.empty(), + Optional.empty(), + Optional.empty()); + + String originValue = (String) ((EvaluateResultSuccess) origin).getResult().getValue().get(); + + permission.setPermission(Map.of("name", "geolocation"), PermissionState.GRANTED, originValue); + + EvaluateResult result = + script.callFunctionInBrowsingContext( + windowHandle, + GET_GEOLOCATION_PERMISSION, + true, + Optional.empty(), + Optional.empty(), + Optional.empty()); + + String resultValue = (String) ((EvaluateResultSuccess) result).getResult().getValue().get(); + assertThat(resultValue).isEqualTo("granted"); + } + + @Test + @NeedsFreshDriver + public void canSetPermissionToDenied() { + driver.get(new Pages(appServer).blankPage); + + String windowHandle = driver.getWindowHandle(); + + EvaluateResult initialPermission = + script.callFunctionInBrowsingContext( + windowHandle, + GET_GEOLOCATION_PERMISSION, + true, + Optional.empty(), + Optional.empty(), + Optional.empty()); + + String initialPermissionValue = + (String) ((EvaluateResultSuccess) initialPermission).getResult().getValue().get(); + assertThat(initialPermissionValue).isEqualTo("prompt"); + + EvaluateResult origin = + script.callFunctionInBrowsingContext( + windowHandle, + GET_ORIGIN, + true, + Optional.empty(), + Optional.empty(), + Optional.empty()); + + String originValue = (String) ((EvaluateResultSuccess) origin).getResult().getValue().get(); + + permission.setPermission(Map.of("name", "geolocation"), PermissionState.DENIED, originValue); + + EvaluateResult result = + script.callFunctionInBrowsingContext( + windowHandle, + GET_GEOLOCATION_PERMISSION, + true, + Optional.empty(), + Optional.empty(), + Optional.empty()); + + String resultValue = (String) ((EvaluateResultSuccess) result).getResult().getValue().get(); + assertThat(resultValue).isEqualTo("denied"); + } + + @Test + @NeedsFreshDriver + public void canSetPermissionToPrompt() { + driver.get(new Pages(appServer).blankPage); + + String windowHandle = driver.getWindowHandle(); + + EvaluateResult origin = + script.callFunctionInBrowsingContext( + windowHandle, + GET_ORIGIN, + true, + Optional.empty(), + Optional.empty(), + Optional.empty()); + + String originValue = (String) ((EvaluateResultSuccess) origin).getResult().getValue().get(); + + permission.setPermission(Map.of("name", "geolocation"), PermissionState.DENIED, originValue); + + permission.setPermission(Map.of("name", "geolocation"), PermissionState.PROMPT, originValue); + + EvaluateResult result = + script.callFunctionInBrowsingContext( + windowHandle, + GET_GEOLOCATION_PERMISSION, + true, + Optional.empty(), + Optional.empty(), + Optional.empty()); + + String resultValue = (String) ((EvaluateResultSuccess) result).getResult().getValue().get(); + assertThat(resultValue).isEqualTo("prompt"); + } + + @Test + @NeedsFreshDriver + public void canSetPermissionForAUserContext() { + Browser browser = new Browser(driver); + + String url = new Pages(appServer).blankPage; + + String userContext = browser.createUserContext(); + + String originalTab = driver.getWindowHandle(); + + BrowsingContext context1 = new BrowsingContext(this.driver, driver.getWindowHandle()); + BrowsingContext context2 = new BrowsingContext(this.driver, new CreateContextParameters(WindowType.TAB).userContext(userContext)); + + String newTab = context2.getId(); + + context1.navigate(url , ReadinessState.COMPLETE); + context2.navigate(url, ReadinessState.COMPLETE); + + EvaluateResult origin = + script.callFunctionInBrowsingContext( + originalTab, + GET_ORIGIN, + true, + Optional.empty(), + Optional.empty(), + Optional.empty()); + + String originValue = (String) ((EvaluateResultSuccess) origin).getResult().getValue().get(); + + EvaluateResult originalTabPermission = + script.callFunctionInBrowsingContext( + originalTab, + GET_GEOLOCATION_PERMISSION, + true, + Optional.empty(), + Optional.empty(), + Optional.empty()); + + String originalTabPermissionValue = + (String) ((EvaluateResultSuccess)originalTabPermission ).getResult().getValue().get(); + assertThat(originalTabPermissionValue).isEqualTo("prompt"); + + EvaluateResult newTabPermission = + script.callFunctionInBrowsingContext( + newTab, + GET_GEOLOCATION_PERMISSION, + true, + Optional.empty(), + Optional.empty(), + Optional.empty()); + + String newTabPermissionValue = + (String) ((EvaluateResultSuccess)newTabPermission ).getResult().getValue().get(); + assertThat(newTabPermissionValue).isEqualTo("prompt"); + + permission.setPermission(Map.of("name", "geolocation"), PermissionState.GRANTED, originValue, userContext); + + EvaluateResult originalTabUpdatedPermission = + script.callFunctionInBrowsingContext( + originalTab, + GET_GEOLOCATION_PERMISSION, + true, + Optional.empty(), + Optional.empty(), + Optional.empty()); + + String originalTabUpdatedPermissionValue = + (String) ((EvaluateResultSuccess)originalTabUpdatedPermission ).getResult().getValue().get(); + assertThat(originalTabUpdatedPermissionValue).isEqualTo("prompt"); + + EvaluateResult newTabUpdatedPermission = + script.callFunctionInBrowsingContext( + newTab, + GET_GEOLOCATION_PERMISSION, + true, + Optional.empty(), + Optional.empty(), + Optional.empty()); + + String newTabUpdatedPermissionValue = + (String) ((EvaluateResultSuccess)newTabUpdatedPermission ).getResult().getValue().get(); + assertThat(newTabUpdatedPermissionValue).isEqualTo("granted"); + } +} + From a6f24069845ddc04ef8deadde49ee5e0bd6ad640 Mon Sep 17 00:00:00 2001 From: Puja Jagani Date: Tue, 18 Feb 2025 09:21:34 +0530 Subject: [PATCH 2/5] Fix formatting --- .../selenium/bidi/module/Permission.java | 13 ++-- .../selenium/bidi/permissions/BUILD.bazel | 1 - .../bidi/permissions/PermissionState.java | 1 - .../bidi/permissions/PermissionsTest.java | 60 +++++++------------ 4 files changed, 28 insertions(+), 47 deletions(-) diff --git a/java/src/org/openqa/selenium/bidi/module/Permission.java b/java/src/org/openqa/selenium/bidi/module/Permission.java index 74d8349813b7e..1edc5c5628fd8 100644 --- a/java/src/org/openqa/selenium/bidi/module/Permission.java +++ b/java/src/org/openqa/selenium/bidi/module/Permission.java @@ -17,6 +17,8 @@ package org.openqa.selenium.bidi.module; +import java.util.HashMap; +import java.util.Map; import org.openqa.selenium.WebDriver; import org.openqa.selenium.bidi.BiDi; import org.openqa.selenium.bidi.Command; @@ -24,9 +26,6 @@ import org.openqa.selenium.bidi.permissions.PermissionState; import org.openqa.selenium.internal.Require; -import java.util.HashMap; -import java.util.Map; - public class Permission { private final BiDi bidi; @@ -41,12 +40,16 @@ public Permission(WebDriver driver) { this.bidi = ((HasBiDi) driver).getBiDi(); } - public void setPermission(Map permissionDescriptor, PermissionState state, String origin) { + public void setPermission( + Map permissionDescriptor, PermissionState state, String origin) { this.setPermission(permissionDescriptor, state, origin, null); } public void setPermission( - Map permissionDescriptor, PermissionState state, String origin, String userContext) { + Map permissionDescriptor, + PermissionState state, + String origin, + String userContext) { Require.nonNull("Permission descriptor", permissionDescriptor); Require.nonNull("Permission state", state); Require.nonNull("Origin", origin); diff --git a/java/src/org/openqa/selenium/bidi/permissions/BUILD.bazel b/java/src/org/openqa/selenium/bidi/permissions/BUILD.bazel index a96434fe1280e..46df58008f913 100644 --- a/java/src/org/openqa/selenium/bidi/permissions/BUILD.bazel +++ b/java/src/org/openqa/selenium/bidi/permissions/BUILD.bazel @@ -1,4 +1,3 @@ -load("@rules_jvm_external//:defs.bzl", "artifact") load("//java:defs.bzl", "java_library") java_library( diff --git a/java/src/org/openqa/selenium/bidi/permissions/PermissionState.java b/java/src/org/openqa/selenium/bidi/permissions/PermissionState.java index cf7fa15ed8697..e4b3ab62c1c18 100644 --- a/java/src/org/openqa/selenium/bidi/permissions/PermissionState.java +++ b/java/src/org/openqa/selenium/bidi/permissions/PermissionState.java @@ -18,7 +18,6 @@ package org.openqa.selenium.bidi.permissions; public enum PermissionState { - GRANTED("granted"), DENIED("denied"), PROMPT("prompt"); diff --git a/java/test/org/openqa/selenium/bidi/permissions/PermissionsTest.java b/java/test/org/openqa/selenium/bidi/permissions/PermissionsTest.java index 844a3df2cd6af..fc5b3185c32d4 100644 --- a/java/test/org/openqa/selenium/bidi/permissions/PermissionsTest.java +++ b/java/test/org/openqa/selenium/bidi/permissions/PermissionsTest.java @@ -21,8 +21,6 @@ import java.util.Map; import java.util.Optional; -import java.util.Set; - import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.openqa.selenium.WindowType; @@ -42,10 +40,9 @@ public class PermissionsTest extends JupiterTestBase { private Permission permission; private Script script; - private static final String - GET_GEOLOCATION_PERMISSION = + private static final String GET_GEOLOCATION_PERMISSION = "() => {return navigator.permissions.query({ name: 'geolocation' })" - + ".then(val => val.state, err => err.message)}"; + + ".then(val => val.state, err => err.message)}"; private static final String GET_ORIGIN = "() => {return window.location.origin;}"; @BeforeEach @@ -76,12 +73,7 @@ public void canSetPermissionToGranted() { EvaluateResult origin = script.callFunctionInBrowsingContext( - windowHandle, - GET_ORIGIN, - true, - Optional.empty(), - Optional.empty(), - Optional.empty()); + windowHandle, GET_ORIGIN, true, Optional.empty(), Optional.empty(), Optional.empty()); String originValue = (String) ((EvaluateResultSuccess) origin).getResult().getValue().get(); @@ -122,12 +114,7 @@ public void canSetPermissionToDenied() { EvaluateResult origin = script.callFunctionInBrowsingContext( - windowHandle, - GET_ORIGIN, - true, - Optional.empty(), - Optional.empty(), - Optional.empty()); + windowHandle, GET_ORIGIN, true, Optional.empty(), Optional.empty(), Optional.empty()); String originValue = (String) ((EvaluateResultSuccess) origin).getResult().getValue().get(); @@ -155,12 +142,7 @@ public void canSetPermissionToPrompt() { EvaluateResult origin = script.callFunctionInBrowsingContext( - windowHandle, - GET_ORIGIN, - true, - Optional.empty(), - Optional.empty(), - Optional.empty()); + windowHandle, GET_ORIGIN, true, Optional.empty(), Optional.empty(), Optional.empty()); String originValue = (String) ((EvaluateResultSuccess) origin).getResult().getValue().get(); @@ -193,21 +175,18 @@ public void canSetPermissionForAUserContext() { String originalTab = driver.getWindowHandle(); BrowsingContext context1 = new BrowsingContext(this.driver, driver.getWindowHandle()); - BrowsingContext context2 = new BrowsingContext(this.driver, new CreateContextParameters(WindowType.TAB).userContext(userContext)); + BrowsingContext context2 = + new BrowsingContext( + this.driver, new CreateContextParameters(WindowType.TAB).userContext(userContext)); String newTab = context2.getId(); - context1.navigate(url , ReadinessState.COMPLETE); + context1.navigate(url, ReadinessState.COMPLETE); context2.navigate(url, ReadinessState.COMPLETE); EvaluateResult origin = script.callFunctionInBrowsingContext( - originalTab, - GET_ORIGIN, - true, - Optional.empty(), - Optional.empty(), - Optional.empty()); + originalTab, GET_ORIGIN, true, Optional.empty(), Optional.empty(), Optional.empty()); String originValue = (String) ((EvaluateResultSuccess) origin).getResult().getValue().get(); @@ -221,10 +200,10 @@ public void canSetPermissionForAUserContext() { Optional.empty()); String originalTabPermissionValue = - (String) ((EvaluateResultSuccess)originalTabPermission ).getResult().getValue().get(); + (String) ((EvaluateResultSuccess) originalTabPermission).getResult().getValue().get(); assertThat(originalTabPermissionValue).isEqualTo("prompt"); - EvaluateResult newTabPermission = + EvaluateResult newTabPermission = script.callFunctionInBrowsingContext( newTab, GET_GEOLOCATION_PERMISSION, @@ -234,12 +213,13 @@ public void canSetPermissionForAUserContext() { Optional.empty()); String newTabPermissionValue = - (String) ((EvaluateResultSuccess)newTabPermission ).getResult().getValue().get(); + (String) ((EvaluateResultSuccess) newTabPermission).getResult().getValue().get(); assertThat(newTabPermissionValue).isEqualTo("prompt"); - permission.setPermission(Map.of("name", "geolocation"), PermissionState.GRANTED, originValue, userContext); + permission.setPermission( + Map.of("name", "geolocation"), PermissionState.GRANTED, originValue, userContext); - EvaluateResult originalTabUpdatedPermission = + EvaluateResult originalTabUpdatedPermission = script.callFunctionInBrowsingContext( originalTab, GET_GEOLOCATION_PERMISSION, @@ -249,10 +229,11 @@ public void canSetPermissionForAUserContext() { Optional.empty()); String originalTabUpdatedPermissionValue = - (String) ((EvaluateResultSuccess)originalTabUpdatedPermission ).getResult().getValue().get(); + (String) + ((EvaluateResultSuccess) originalTabUpdatedPermission).getResult().getValue().get(); assertThat(originalTabUpdatedPermissionValue).isEqualTo("prompt"); - EvaluateResult newTabUpdatedPermission = + EvaluateResult newTabUpdatedPermission = script.callFunctionInBrowsingContext( newTab, GET_GEOLOCATION_PERMISSION, @@ -262,8 +243,7 @@ public void canSetPermissionForAUserContext() { Optional.empty()); String newTabUpdatedPermissionValue = - (String) ((EvaluateResultSuccess)newTabUpdatedPermission ).getResult().getValue().get(); + (String) ((EvaluateResultSuccess) newTabUpdatedPermission).getResult().getValue().get(); assertThat(newTabUpdatedPermissionValue).isEqualTo("granted"); } } - From 804c8391cd3400621a8ed27046d9225bc5559190 Mon Sep 17 00:00:00 2001 From: Puja Jagani Date: Wed, 19 Feb 2025 15:08:44 +0530 Subject: [PATCH 3/5] [bidi][java] Fix tests --- .../bidi/permissions/PermissionsTest.java | 119 ++++-------------- 1 file changed, 21 insertions(+), 98 deletions(-) diff --git a/java/test/org/openqa/selenium/bidi/permissions/PermissionsTest.java b/java/test/org/openqa/selenium/bidi/permissions/PermissionsTest.java index fc5b3185c32d4..e6a1724b9fa3e 100644 --- a/java/test/org/openqa/selenium/bidi/permissions/PermissionsTest.java +++ b/java/test/org/openqa/selenium/bidi/permissions/PermissionsTest.java @@ -44,7 +44,7 @@ public class PermissionsTest extends JupiterTestBase { "() => {return navigator.permissions.query({ name: 'geolocation' })" + ".then(val => val.state, err => err.message)}"; private static final String GET_ORIGIN = "() => {return window.location.origin;}"; - + @BeforeEach public void setUp() { permission = new Permission(driver); @@ -53,24 +53,11 @@ public void setUp() { @Test @NeedsFreshDriver - public void canSetPermissionToGranted() { + public void canSetPermission() { driver.get(new Pages(appServer).blankPage); String windowHandle = driver.getWindowHandle(); - EvaluateResult initialPermission = - script.callFunctionInBrowsingContext( - windowHandle, - GET_GEOLOCATION_PERMISSION, - true, - Optional.empty(), - Optional.empty(), - Optional.empty()); - - String initialPermissionValue = - (String) ((EvaluateResultSuccess) initialPermission).getResult().getValue().get(); - assertThat(initialPermissionValue).isEqualTo("prompt"); - EvaluateResult origin = script.callFunctionInBrowsingContext( windowHandle, GET_ORIGIN, true, Optional.empty(), Optional.empty(), Optional.empty()); @@ -90,37 +77,10 @@ public void canSetPermissionToGranted() { String resultValue = (String) ((EvaluateResultSuccess) result).getResult().getValue().get(); assertThat(resultValue).isEqualTo("granted"); - } - - @Test - @NeedsFreshDriver - public void canSetPermissionToDenied() { - driver.get(new Pages(appServer).blankPage); - - String windowHandle = driver.getWindowHandle(); - - EvaluateResult initialPermission = - script.callFunctionInBrowsingContext( - windowHandle, - GET_GEOLOCATION_PERMISSION, - true, - Optional.empty(), - Optional.empty(), - Optional.empty()); - - String initialPermissionValue = - (String) ((EvaluateResultSuccess) initialPermission).getResult().getValue().get(); - assertThat(initialPermissionValue).isEqualTo("prompt"); - - EvaluateResult origin = - script.callFunctionInBrowsingContext( - windowHandle, GET_ORIGIN, true, Optional.empty(), Optional.empty(), Optional.empty()); - - String originValue = (String) ((EvaluateResultSuccess) origin).getResult().getValue().get(); permission.setPermission(Map.of("name", "geolocation"), PermissionState.DENIED, originValue); - EvaluateResult result = + result = script.callFunctionInBrowsingContext( windowHandle, GET_GEOLOCATION_PERMISSION, @@ -129,28 +89,12 @@ public void canSetPermissionToDenied() { Optional.empty(), Optional.empty()); - String resultValue = (String) ((EvaluateResultSuccess) result).getResult().getValue().get(); + resultValue = (String) ((EvaluateResultSuccess) result).getResult().getValue().get(); assertThat(resultValue).isEqualTo("denied"); - } - - @Test - @NeedsFreshDriver - public void canSetPermissionToPrompt() { - driver.get(new Pages(appServer).blankPage); - - String windowHandle = driver.getWindowHandle(); - - EvaluateResult origin = - script.callFunctionInBrowsingContext( - windowHandle, GET_ORIGIN, true, Optional.empty(), Optional.empty(), Optional.empty()); - - String originValue = (String) ((EvaluateResultSuccess) origin).getResult().getValue().get(); - - permission.setPermission(Map.of("name", "geolocation"), PermissionState.DENIED, originValue); permission.setPermission(Map.of("name", "geolocation"), PermissionState.PROMPT, originValue); - EvaluateResult result = + result = script.callFunctionInBrowsingContext( windowHandle, GET_GEOLOCATION_PERMISSION, @@ -159,7 +103,7 @@ public void canSetPermissionToPrompt() { Optional.empty(), Optional.empty()); - String resultValue = (String) ((EvaluateResultSuccess) result).getResult().getValue().get(); + resultValue = (String) ((EvaluateResultSuccess) result).getResult().getValue().get(); assertThat(resultValue).isEqualTo("prompt"); } @@ -189,21 +133,11 @@ public void canSetPermissionForAUserContext() { originalTab, GET_ORIGIN, true, Optional.empty(), Optional.empty(), Optional.empty()); String originValue = (String) ((EvaluateResultSuccess) origin).getResult().getValue().get(); - - EvaluateResult originalTabPermission = - script.callFunctionInBrowsingContext( - originalTab, - GET_GEOLOCATION_PERMISSION, - true, - Optional.empty(), - Optional.empty(), - Optional.empty()); - - String originalTabPermissionValue = - (String) ((EvaluateResultSuccess) originalTabPermission).getResult().getValue().get(); - assertThat(originalTabPermissionValue).isEqualTo("prompt"); - - EvaluateResult newTabPermission = + + permission.setPermission( + Map.of("name", "geolocation"), PermissionState.GRANTED, originValue, userContext); + + EvaluateResult newTabUpdatedPermission = script.callFunctionInBrowsingContext( newTab, GET_GEOLOCATION_PERMISSION, @@ -212,37 +146,26 @@ public void canSetPermissionForAUserContext() { Optional.empty(), Optional.empty()); - String newTabPermissionValue = - (String) ((EvaluateResultSuccess) newTabPermission).getResult().getValue().get(); - assertThat(newTabPermissionValue).isEqualTo("prompt"); - - permission.setPermission( - Map.of("name", "geolocation"), PermissionState.GRANTED, originValue, userContext); + String newTabUpdatedPermissionValue = + (String) ((EvaluateResultSuccess) newTabUpdatedPermission).getResult().getValue().get(); + assertThat(newTabUpdatedPermissionValue).isEqualTo("granted"); - EvaluateResult originalTabUpdatedPermission = - script.callFunctionInBrowsingContext( - originalTab, - GET_GEOLOCATION_PERMISSION, - true, - Optional.empty(), - Optional.empty(), - Optional.empty()); + BrowsingContext context3 = + new BrowsingContext( + this.driver, new CreateContextParameters(WindowType.TAB).userContext(userContext)); - String originalTabUpdatedPermissionValue = - (String) - ((EvaluateResultSuccess) originalTabUpdatedPermission).getResult().getValue().get(); - assertThat(originalTabUpdatedPermissionValue).isEqualTo("prompt"); + context3.navigate(url, ReadinessState.COMPLETE); - EvaluateResult newTabUpdatedPermission = + newTabUpdatedPermission = script.callFunctionInBrowsingContext( - newTab, + context3.getId(), GET_GEOLOCATION_PERMISSION, true, Optional.empty(), Optional.empty(), Optional.empty()); - String newTabUpdatedPermissionValue = + newTabUpdatedPermissionValue = (String) ((EvaluateResultSuccess) newTabUpdatedPermission).getResult().getValue().get(); assertThat(newTabUpdatedPermissionValue).isEqualTo("granted"); } From 93b8dc2bf86f2f0c2f9daefaec9c27f3bf67e44e Mon Sep 17 00:00:00 2001 From: Puja Jagani Date: Thu, 20 Mar 2025 09:31:10 +0530 Subject: [PATCH 4/5] Fix formatting --- .../openqa/selenium/bidi/permissions/PermissionsTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/java/test/org/openqa/selenium/bidi/permissions/PermissionsTest.java b/java/test/org/openqa/selenium/bidi/permissions/PermissionsTest.java index e6a1724b9fa3e..76cde2b25ed67 100644 --- a/java/test/org/openqa/selenium/bidi/permissions/PermissionsTest.java +++ b/java/test/org/openqa/selenium/bidi/permissions/PermissionsTest.java @@ -44,7 +44,7 @@ public class PermissionsTest extends JupiterTestBase { "() => {return navigator.permissions.query({ name: 'geolocation' })" + ".then(val => val.state, err => err.message)}"; private static final String GET_ORIGIN = "() => {return window.location.origin;}"; - + @BeforeEach public void setUp() { permission = new Permission(driver); @@ -133,10 +133,10 @@ public void canSetPermissionForAUserContext() { originalTab, GET_ORIGIN, true, Optional.empty(), Optional.empty(), Optional.empty()); String originValue = (String) ((EvaluateResultSuccess) origin).getResult().getValue().get(); - + permission.setPermission( Map.of("name", "geolocation"), PermissionState.GRANTED, originValue, userContext); - + EvaluateResult newTabUpdatedPermission = script.callFunctionInBrowsingContext( newTab, From 8530fe21abd4c26d8052ca9d2874b9ce9db8bca4 Mon Sep 17 00:00:00 2001 From: Puja Jagani Date: Thu, 20 Mar 2025 10:02:12 +0530 Subject: [PATCH 5/5] Update test --- .../openqa/selenium/bidi/permissions/BUILD.bazel | 2 -- .../selenium/bidi/permissions/PermissionsTest.java | 14 ++++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/java/test/org/openqa/selenium/bidi/permissions/BUILD.bazel b/java/test/org/openqa/selenium/bidi/permissions/BUILD.bazel index 9ae9147c3b872..33e1bdfd8451e 100644 --- a/java/test/org/openqa/selenium/bidi/permissions/BUILD.bazel +++ b/java/test/org/openqa/selenium/bidi/permissions/BUILD.bazel @@ -6,8 +6,6 @@ java_selenium_test_suite( size = "large", srcs = glob(["*Test.java"]), browsers = [ - "chrome", - "edge", "firefox", ], data = [ diff --git a/java/test/org/openqa/selenium/bidi/permissions/PermissionsTest.java b/java/test/org/openqa/selenium/bidi/permissions/PermissionsTest.java index 76cde2b25ed67..0b3185ead41e3 100644 --- a/java/test/org/openqa/selenium/bidi/permissions/PermissionsTest.java +++ b/java/test/org/openqa/selenium/bidi/permissions/PermissionsTest.java @@ -54,13 +54,15 @@ public void setUp() { @Test @NeedsFreshDriver public void canSetPermission() { - driver.get(new Pages(appServer).blankPage); + BrowsingContext context = new BrowsingContext(driver, driver.getWindowHandle()); - String windowHandle = driver.getWindowHandle(); + context.navigate(new Pages(appServer).blankPage, ReadinessState.COMPLETE); + + String contextId = context.getId(); EvaluateResult origin = script.callFunctionInBrowsingContext( - windowHandle, GET_ORIGIN, true, Optional.empty(), Optional.empty(), Optional.empty()); + contextId, GET_ORIGIN, true, Optional.empty(), Optional.empty(), Optional.empty()); String originValue = (String) ((EvaluateResultSuccess) origin).getResult().getValue().get(); @@ -68,7 +70,7 @@ public void canSetPermission() { EvaluateResult result = script.callFunctionInBrowsingContext( - windowHandle, + contextId, GET_GEOLOCATION_PERMISSION, true, Optional.empty(), @@ -82,7 +84,7 @@ public void canSetPermission() { result = script.callFunctionInBrowsingContext( - windowHandle, + contextId, GET_GEOLOCATION_PERMISSION, true, Optional.empty(), @@ -96,7 +98,7 @@ public void canSetPermission() { result = script.callFunctionInBrowsingContext( - windowHandle, + contextId, GET_GEOLOCATION_PERMISSION, true, Optional.empty(),