tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

moz_permanent.py (2215B)


      1 import pytest
      2 from support.addons import is_addon_temporary_installed
      3 from support.helpers import clear_pref, set_pref
      4 from tests.bidi.web_extension import assert_extension_id
      5 from webdriver.bidi import error
      6 
      7 pytestmark = pytest.mark.asyncio
      8 
      9 
     10 @pytest.mark.allow_system_access
     11 @pytest.mark.parametrize(
     12    "permanent", [None, False, True], ids=["default", "temporary", "permanent"]
     13 )
     14 @pytest.mark.parametrize("mode", ["archivePath", "base64", "path"])
     15 @pytest.mark.parametrize("signed", [True, False], ids=["signed", "unsigned"])
     16 async def test_install_with_permanent(
     17    bidi_session, current_session, extension_data, mode, permanent, signed
     18 ):
     19    if mode == "path" and signed:
     20        # Unpacked extensions are not signed
     21        return
     22    data = {"type": mode}
     23    unsigned_tag = "" if signed or mode == "path" else "Unsigned"
     24    extension_data_value = extension_data[f"{mode}{unsigned_tag}"]
     25    if mode == "base64":
     26        data.update({"value": extension_data_value})
     27    else:
     28        data.update({"path": extension_data_value})
     29 
     30    extension_params = {"moz:permanent": permanent} if permanent is not None else {}
     31 
     32    if permanent and not signed:
     33        try:
     34            with pytest.raises(error.InvalidWebExtensionException):
     35                set_pref(current_session, "xpinstall.signatures.required", True)
     36                await bidi_session.web_extension.install(
     37                    extension_data=data,
     38                    _extension_params=extension_params,
     39                )
     40        finally:
     41            clear_pref(current_session, "xpinstall.signatures.required")
     42        return
     43 
     44    try:
     45        set_pref(current_session, "xpinstall.signatures.required", True)
     46        web_extension = await bidi_session.web_extension.install(
     47            extension_data=data,
     48            _extension_params=extension_params,
     49        )
     50 
     51        assert_extension_id(web_extension, extension_data)
     52        assert is_addon_temporary_installed(current_session, web_extension) is not bool(
     53            permanent
     54        )
     55    finally:
     56        # Clean up the extension.
     57        clear_pref(current_session, "xpinstall.signatures.required")
     58        await bidi_session.web_extension.uninstall(extension=web_extension)