Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

import pytest
from support.addons import is_addon_temporary_installed
from support.helpers import clear_pref, set_pref
from tests.bidi.web_extension import assert_extension_id
from webdriver.bidi import error
pytestmark = pytest.mark.asyncio
@pytest.mark.allow_system_access
@pytest.mark.parametrize(
"permanent", [None, False, True], ids=["default", "temporary", "permanent"]
)
@pytest.mark.parametrize("mode", ["archivePath", "base64", "path"])
@pytest.mark.parametrize("signed", [True, False], ids=["signed", "unsigned"])
async def test_install_with_permanent(
bidi_session, current_session, extension_data, mode, permanent, signed
):
if mode == "path" and signed:
# Unpacked extensions are not signed
return
data = {"type": mode}
unsigned_tag = "" if signed or mode == "path" else "Unsigned"
extension_data_value = extension_data[f"{mode}{unsigned_tag}"]
if mode == "base64":
data.update({"value": extension_data_value})
else:
data.update({"path": extension_data_value})
kwargs = {"moz:permanent": permanent} if permanent is not None else {}
if permanent and not signed:
try:
with pytest.raises(error.InvalidWebExtensionException):
set_pref(current_session, "xpinstall.signatures.required", True)
await bidi_session.web_extension.install(
extension_data=data,
**kwargs,
)
finally:
clear_pref(current_session, "xpinstall.signatures.required")
return
try:
set_pref(current_session, "xpinstall.signatures.required", True)
web_extension = await bidi_session.web_extension.install(
extension_data=data,
**kwargs,
)
assert_extension_id(web_extension, extension_data)
assert is_addon_temporary_installed(current_session, web_extension) is not bool(
permanent
)
finally:
# Clean up the extension.
clear_pref(current_session, "xpinstall.signatures.required")
await bidi_session.web_extension.uninstall(extension=web_extension)