diff options
author | Florian Bruhin <me@the-compiler.org> | 2022-05-14 16:14:33 +0200 |
---|---|---|
committer | Florian Bruhin <me@the-compiler.org> | 2022-06-22 17:41:11 +0200 |
commit | d81d400ed1cbd6279a6d5e39e03b5ff88c9176bb (patch) | |
tree | f562fb90206d391f0325a8e4f2e55a89db0ba9ca | |
parent | 1b85c2980af48fd2a9973fe1a33b455a31b89c0f (diff) | |
download | qutebrowser-d81d400ed1cbd6279a6d5e39e03b5ff88c9176bb.tar.gz qutebrowser-d81d400ed1cbd6279a6d5e39e03b5ff88c9176bb.zip |
qt6: Use new API to get Chromium/QtWebEngine versions
-rw-r--r-- | qutebrowser/utils/version.py | 27 | ||||
-rw-r--r-- | tests/unit/utils/test_version.py | 24 |
2 files changed, 44 insertions, 7 deletions
diff --git a/qutebrowser/utils/version.py b/qutebrowser/utils/version.py index b3becea8a..2aff43759 100644 --- a/qutebrowser/utils/version.py +++ b/qutebrowser/utils/version.py @@ -660,6 +660,20 @@ class WebEngineVersions: return cls._CHROMIUM_VERSIONS.get(minor_version) @classmethod + def from_api(cls, qtwe_version: str, chromium_version: str) -> 'WebEngineVersions': + """Get the versions based on the exact versions. + + This is called if we have proper APIs to get the versions easily + (Qt 6.2 with PyQt 6.3.1+). + """ + parsed = utils.VersionNumber.parse(qtwe_version) + return cls( + webengine=parsed, + chromium=chromium_version, + source='api', + ) + + @classmethod def from_importlib(cls, pyqt_webengine_qt_version: str) -> 'WebEngineVersions': """Get the versions based on the PyQtWebEngine version. @@ -741,6 +755,19 @@ def qtwebengine_versions(*, avoid_init: bool = False) -> WebEngineVersions: """ from qutebrowser.browser.webengine import webenginesettings + try: + from qutebrowser.qt.webenginecore import ( + qWebEngineVersion, + qWebEngineChromiumVersion, + ) + except ImportError: + pass # Needs QtWebEngine 6.2+ with PyQtWebEngine 6.3.1+ + else: + return WebEngineVersions.from_api( + qtwe_version=qWebEngineVersion(), + chromium_version=qWebEngineChromiumVersion(), + ) + if webenginesettings.parsed_user_agent is None and not avoid_init: webenginesettings.init_user_agent() diff --git a/tests/unit/utils/test_version.py b/tests/unit/utils/test_version.py index 551439258..5fe1ea2dc 100644 --- a/tests/unit/utils/test_version.py +++ b/tests/unit/utils/test_version.py @@ -1066,13 +1066,13 @@ class TestChromiumVersion: # Not available with QtWebKit monkeypatch.setattr(webenginesettings, 'parsed_user_agent', None) - def test_fake_ua(self, monkeypatch, caplog): + def test_fake_ua(self, monkeypatch, caplog, patch_no_api): ver = '77.0.3865.98' webenginesettings._init_user_agent_str(_QTWE_USER_AGENT.format(ver)) assert version.qtwebengine_versions().chromium == ver - def test_prefers_saved_user_agent(self, monkeypatch): + def test_prefers_saved_user_agent(self, monkeypatch, patch_no_api): webenginesettings._init_user_agent_str(_QTWE_USER_AGENT.format('87')) class FakeProfile: @@ -1088,7 +1088,16 @@ class TestChromiumVersion: def test_avoided(self, monkeypatch): versions = version.qtwebengine_versions(avoid_init=True) - assert versions.source in ['ELF', 'importlib', 'PyQt', 'Qt'] + assert versions.source in ['api', 'ELF', 'importlib', 'PyQt', 'Qt'] + + @pytest.fixture + def patch_no_api(self, monkeypatch): + """Simulate no PyQt API for getting its version.""" + monkeypatch.delattr( + qutebrowser.qt.webenginecore, + "qWebEngineVersion", + raising=False, + ) @pytest.fixture def patch_elf_fail(self, monkeypatch): @@ -1135,9 +1144,10 @@ class TestChromiumVersion: importlib_patcher(qt=None, qt5=None) @pytest.mark.parametrize('patches, sources', [ - (['elf_fail'], ['importlib', 'PyQt', 'Qt']), - (['elf_fail', 'no_importlib'], ['PyQt', 'Qt']), - (['elf_fail', 'importlib_no_package'], ['PyQt', 'Qt']), + (['no_api'], ['ELF', 'importlib', 'PyQt', 'Qt']), + (['no_api', 'elf_fail'], ['importlib', 'PyQt', 'Qt']), + (['no_api', 'elf_fail', 'no_importlib'], ['PyQt', 'Qt']), + (['no_api', 'elf_fail', 'importlib_no_package'], ['PyQt', 'Qt']), ], ids=','.join) def test_simulated(self, request, patches, sources): """Test various simulated error conditions. @@ -1158,7 +1168,7 @@ class TestChromiumVersion: ('5.15.3', None, utils.VersionNumber(5, 15, 3)), ('5.15.3', '5.15.4', utils.VersionNumber(5, 15, 4)), # -Qt5 takes precedence ]) - def test_importlib(self, qt, qt5, expected, patch_elf_fail, importlib_patcher): + def test_importlib(self, qt, qt5, expected, patch_elf_fail, patch_no_api, importlib_patcher): """Test the importlib version logic with different Qt packages. With PyQtWebEngine 5.15.4, PyQtWebEngine-Qt was renamed to PyQtWebEngine-Qt5. |