commit 26756143306596419f04518a7d622061fff035a9 parent fcb89ab88f85f6151c6de995dc5d3c552b024b50 Author: Henrik Skupin <mail@hskupin.info> Date: Tue, 9 Dec 2025 14:06:20 +0000 Bug 1944568 - [webdriver-client] Add support for extension parameters for commands to the BiDi client. r=jgraham,jdescottes Differential Revision: https://phabricator.services.mozilla.com/D275230 Diffstat:
4 files changed, 14 insertions(+), 11 deletions(-)
diff --git a/testing/web-platform/mozilla/tests/webdriver/bidi/web_extension/invalid.py b/testing/web-platform/mozilla/tests/webdriver/bidi/web_extension/invalid.py @@ -6,13 +6,11 @@ pytestmark = pytest.mark.asyncio @pytest.mark.parametrize("value", ["", 42, [], {}]) async def test_params_moz_permanent_invalid_type(bidi_session, extension_data, value): - kwargs = {"moz:permanent": value} - with pytest.raises(error.InvalidArgumentException): await bidi_session.web_extension.install( extension_data={ "type": "base64", "value": extension_data["base64"], }, - **kwargs + _extension_params={"moz:permanent": value}, ) diff --git a/testing/web-platform/mozilla/tests/webdriver/bidi/web_extension/moz_permanent.py b/testing/web-platform/mozilla/tests/webdriver/bidi/web_extension/moz_permanent.py @@ -27,7 +27,7 @@ async def test_install_with_permanent( else: data.update({"path": extension_data_value}) - kwargs = {"moz:permanent": permanent} if permanent is not None else {} + extension_params = {"moz:permanent": permanent} if permanent is not None else {} if permanent and not signed: try: @@ -35,7 +35,7 @@ async def test_install_with_permanent( set_pref(current_session, "xpinstall.signatures.required", True) await bidi_session.web_extension.install( extension_data=data, - **kwargs, + _extension_params=extension_params, ) finally: clear_pref(current_session, "xpinstall.signatures.required") @@ -45,7 +45,7 @@ async def test_install_with_permanent( set_pref(current_session, "xpinstall.signatures.required", True) web_extension = await bidi_session.web_extension.install( extension_data=data, - **kwargs, + _extension_params=extension_params, ) assert_extension_id(web_extension, extension_data) diff --git a/testing/web-platform/tests/tools/webdriver/webdriver/bidi/modules/_module.py b/testing/web-platform/tests/tools/webdriver/webdriver/bidi/modules/_module.py @@ -64,6 +64,8 @@ class command: @functools.wraps(params_fn) async def inner(self: Any, **kwargs: Any) -> Any: raw_result = kwargs.pop("raw_result", False) + extension_params = kwargs.pop("_extension_params", {}) + params = remove_undefined(params_fn(self, **kwargs)) # Convert the classname and the method name to a bidi command name @@ -72,6 +74,14 @@ class command: mod_name = f"{owner.prefix}:{mod_name}" cmd_name = f"{mod_name}.{to_camelcase(name)}" + # Verify specified vendor parameters + for key in extension_params: + if ":" not in key: + raise ValueError(f"Extension parameter '{key}' misses prefix.") + + # Merge into params (vendor keys win if duplicates) + params.update(extension_params) + future = await self.session.send_command(cmd_name, params) result = await future diff --git a/testing/web-platform/tests/tools/webdriver/webdriver/bidi/modules/web_extension.py b/testing/web-platform/tests/tools/webdriver/webdriver/bidi/modules/web_extension.py @@ -7,13 +7,8 @@ class WebExtension(BidiModule): def install( self, extension_data: Mapping[str, Any], - **kwargs: Mapping[str, Any] ) -> Mapping[str, Any]: params: MutableMapping[str, Any] = {"extensionData": extension_data} - - # Allow vendor specific parameters - params.update(**kwargs) - return params @install.result