def test_result(qapp, caplog): """Test the real result of ELF parsing. NOTE: If you're a distribution packager (or contributor) and see this test failing, I'd like your help with making either the code or the test more reliable! The underlying code is susceptible to changes in the environment, and while it's been tested in various environments (Archlinux, Ubuntu), might break in yours. If that happens, please report a bug about it! """ pytest.importorskip('PyQt5.QtWebEngineCore') versions = elf.parse_webenginecore() assert versions is not None # No failing mmap assert len(caplog.messages) == 2 assert caplog.messages[0].startswith('QtWebEngine .so found at') assert caplog.messages[1].startswith('Got versions from ELF:') from qutebrowser.browser.webengine import webenginesettings webenginesettings.init_user_agent() ua = webenginesettings.parsed_user_agent assert ua.qt_version == versions.webengine assert ua.upstream_browser_version == versions.chromium
def test_real_chromium_version(self, qapp): """Compare the inferred Chromium version with the real one.""" if '.dev' in PYQT_VERSION_STR: pytest.skip("dev version of PyQt5") try: from PyQt5.QtWebEngine import PYQT_WEBENGINE_VERSION_STR except ImportError as e: # QtWebKit or QtWebEngine < 5.13 pytest.skip(str(e)) pyqt_webengine_version = version._get_pyqt_webengine_qt_version() if pyqt_webengine_version is None: pyqt_webengine_version = PYQT_WEBENGINE_VERSION_STR versions = version.WebEngineVersions.from_pyqt(pyqt_webengine_version) if pyqt_webengine_version == '5.15.3': # Transient situation - we expect to get QtWebEngine 5.15.3 soon, # so this will line up again. assert versions.chromium == '87.0.4280.144' pytest.xfail("Transient situation") else: from qutebrowser.browser.webengine import webenginesettings webenginesettings.init_user_agent() expected = webenginesettings.parsed_user_agent.upstream_browser_version assert versions.chromium == expected
def _chromium_version() -> str: """Get the Chromium version for QtWebEngine. This can also be checked by looking at this file with the right Qt tag: http://code.qt.io/cgit/qt/qtwebengine.git/tree/tools/scripts/version_resolver.py#n41 Quick reference: Qt 5.12: Chromium 69 (LTS) 69.0.3497.128 (~2018-09-11) 5.12.0: Security fixes up to 70.0.3538.102 (~2018-10-24) 5.12.1: Security fixes up to 71.0.3578.94 (2018-12-12) 5.12.2: Security fixes up to 72.0.3626.121 (2019-03-01) 5.12.3: Security fixes up to 73.0.3683.75 (2019-03-12) 5.12.4: Security fixes up to 74.0.3729.157 (2019-05-14) 5.12.5: Security fixes up to 76.0.3809.87 (2019-07-30) 5.12.6: Security fixes up to 77.0.3865.120 (~2019-09-10) 5.12.7: Security fixes up to 79.0.3945.130 (2020-01-16) 5.12.8: Security fixes up to 80.0.3987.149 (2020-03-18) 5.12.9: Security fixes up to 83.0.4103.97 (2020-06-03) 5.12.10: Security fixes up to 86.0.4240.75 (2020-10-06) Qt 5.13: Chromium 73 73.0.3683.105 (~2019-02-28) 5.13.0: Security fixes up to 74.0.3729.157 (2019-05-14) 5.13.1: Security fixes up to 76.0.3809.87 (2019-07-30) 5.13.2: Security fixes up to 77.0.3865.120 (2019-10-10) Qt 5.14: Chromium 77 77.0.3865.129 (~2019-10-10) 5.14.0: Security fixes up to 77.0.3865.129 (~2019-09-10) 5.14.1: Security fixes up to 79.0.3945.117 (2020-01-07) 5.14.2: Security fixes up to 80.0.3987.132 (2020-03-03) Qt 5.15: Chromium 80 80.0.3987.163 (2020-04-02) 5.15.0: Security fixes up to 81.0.4044.138 (2020-05-05) 5.15.1: Security fixes up to 85.0.4183.83 (2020-08-25) 5.15.2: Updated to 83.0.4103.122 (~2020-06-24) Security fixes up to 86.0.4240.111 (2020-10-20) Also see: - https://chromiumdash.appspot.com/schedule - https://www.chromium.org/developers/calendar - https://chromereleases.googleblog.com/ """ if webenginesettings is None: return 'unavailable' # type: ignore[unreachable] if webenginesettings.parsed_user_agent is None: if 'avoid-chromium-init' in objects.debug_flags: return 'avoided' webenginesettings.init_user_agent() assert webenginesettings.parsed_user_agent is not None return webenginesettings.parsed_user_agent.upstream_browser_version
def _chromium_version() -> str: """Get the Chromium version for QtWebEngine. This can also be checked by looking at this file with the right Qt tag: http://code.qt.io/cgit/qt/qtwebengine.git/tree/tools/scripts/version_resolver.py#n41 Quick reference: Qt 5.7: Chromium 49 49.0.2623.111 (2016-03-31) 5.7.1: Security fixes up to 54.0.2840.87 (2016-11-01) Qt 5.8: Chromium 53 53.0.2785.148 (2016-08-31) 5.8.0: Security fixes up to 55.0.2883.75 (2016-12-01) Qt 5.9: Chromium 56 (LTS) 56.0.2924.122 (2017-01-25) 5.9.9: Security fixes up to 78.0.3904.108 (2019-11-18) Qt 5.10: Chromium 61 61.0.3163.140 (2017-09-05) 5.10.1: Security fixes up to 64.0.3282.140 (2018-02-01) Qt 5.11: Chromium 65 65.0.3325.151 (.1: .230) (2018-03-06) 5.11.3: Security fixes up to 70.0.3538.102 (2018-11-09) Qt 5.12: Chromium 69 (LTS) 69.0.3497.113 (2018-09-27) 5.12.8: Security fixes up to 80.0.3987.149 (2020-03-18) Qt 5.13: Chromium 73 73.0.3683.105 (~2019-02-28) 5.13.2: Security fixes up to 77.0.3865.120 (2019-10-10) Qt 5.14: Chromium 77 77.0.3865.129 (~2019-10-10) 5.14.2: Security fixes up to 80.0.3987.132 (2020-03-03) Qt 5.15: Chromium 80 80.0.3987.163 (2020-04-02) 5.15.0: Security fixes up to 81.0.4044.122 (2020-04-21) Also see https://www.chromium.org/developers/calendar and https://chromereleases.googleblog.com/ """ if webenginesettings is None: return 'unavailable' # type: ignore[unreachable] if webenginesettings.parsed_user_agent is None: webenginesettings.init_user_agent() assert webenginesettings.parsed_user_agent is not None return webenginesettings.parsed_user_agent.upstream_browser_version
def test_real_chromium_version(self, qapp): """Compare the inferred Chromium version with the real one.""" try: from PyQt5.QtWebEngine import PYQT_WEBENGINE_VERSION_STR except ImportError as e: # QtWebKit or QtWebEngine < 5.13 pytest.skip(str(e)) from qutebrowser.browser.webengine import webenginesettings webenginesettings.init_user_agent() expected = webenginesettings.parsed_user_agent.upstream_browser_version versions = version.WebEngineVersions.from_pyqt(PYQT_WEBENGINE_VERSION_STR) assert versions.chromium == expected
def qtwebengine_versions(*, avoid_init: bool = False) -> WebEngineVersions: """Get the QtWebEngine and Chromium version numbers. If we have a parsed user agent, we use it here. If not, we avoid initializing things at all costs (because this gets called early to find out about commandline arguments). Instead, we fall back on looking at the ELF file (on Linux), or, if that fails, use the PyQtWebEngine version. This can also be checked by looking at this file with the right Qt tag: https://code.qt.io/cgit/qt/qtwebengine.git/tree/tools/scripts/version_resolver.py#n41 See WebEngineVersions above for a quick reference. Also see: - https://chromiumdash.appspot.com/schedule - https://www.chromium.org/developers/calendar - https://chromereleases.googleblog.com/ """ from qutebrowser.browser.webengine import webenginesettings if webenginesettings.parsed_user_agent is None and not avoid_init: webenginesettings.init_user_agent() if webenginesettings.parsed_user_agent is not None: return WebEngineVersions.from_ua(webenginesettings.parsed_user_agent) override = os.environ.get('QUTE_QTWEBENGINE_VERSION_OVERRIDE') if override is not None: return WebEngineVersions.from_qt(override, source='override') versions = elf.parse_webenginecore() if versions is not None: return WebEngineVersions.from_elf(versions) pyqt_webengine_qt_version = _get_pyqt_webengine_qt_version() if pyqt_webengine_qt_version is not None: return WebEngineVersions.from_importlib(pyqt_webengine_qt_version) if PYQT_WEBENGINE_VERSION_STR is not None: return WebEngineVersions.from_pyqt(PYQT_WEBENGINE_VERSION_STR) return WebEngineVersions.from_qt(qVersion()) # type: ignore[unreachable]
def test_real_chromium_version(self, qapp): """Compare the inferred Chromium version with the real one.""" if '.dev' in PYQT_VERSION_STR: pytest.skip("dev version of PyQt5") try: from PyQt5.QtWebEngine import PYQT_WEBENGINE_VERSION_STR except ImportError as e: # QtWebKit or QtWebEngine < 5.1'../3 pytest.skip(str(e)) pyqt_webengine_version = version._get_pyqt_webengine_qt_version() if pyqt_webengine_version is None: pyqt_webengine_version = PYQT_WEBENGINE_VERSION_STR versions = version.WebEngineVersions.from_pyqt(pyqt_webengine_version) webenginesettings.init_user_agent() expected = webenginesettings.parsed_user_agent.upstream_browser_version assert versions.chromium == expected
def test_parsed_user_agent(qapp): webenginesettings.init_user_agent() parsed = webenginesettings.parsed_user_agent assert parsed.upstream_browser_key == 'Chrome' assert parsed.qt_key == 'QtWebEngine'
def _chromium_version() -> str: """Get the Chromium version for QtWebEngine. This can also be checked by looking at this file with the right Qt tag: http://code.qt.io/cgit/qt/qtwebengine.git/tree/tools/scripts/version_resolver.py#n41 Quick reference: Qt 5.7: Chromium 49 49.0.2623.111 (2016-03-31) 5.7.0: Security fixes from Chromium 50 and 51 5.7.1: Security fixes up to 54.0.2840.87 (2016-11-01) Qt 5.8: Chromium 53 53.0.2785.148 (2016-08-31) 5.8.0: Security fixes up to 55.0.2883.75 (2016-12-01) Qt 5.9: Chromium 56 (LTS) 56.0.2924.122 (2017-01-25) 5.9.0: Security fixes up to 56.0.2924.122 (?) 5.9.1: Security fixes up to 59.0.3071.104 (2017-06-15) 5.9.2: Security fixes up to 61.0.3163.79 (2017-09-05) 5.9.3: Security fixes up to 62.0.3202.89 (2017-11-06) 5.9.4: Security fixes up to 63.0.3239.132 (~2017-12-14) 5.9.5: Security fixes up to 65.0.3325.146 (~2018-03-13) 5.9.6: Security fixes up to 66.0.3359.170 (2018-05-10) 5.9.7: Security fixes up to 69.0.3497.113 (~2018-09-11) 5.9.8: Security fixes up to 72.0.3626.121 (2019-03-01) 5.9.9: Security fixes up to 78.0.3904.108 (2019-11-18) Qt 5.10: Chromium 61 61.0.3163.140 (2017-09-05) 5.10.0: Security fixes up to 62.0.3202.94 (2017-11-13) 5.10.1: Security fixes up to 64.0.3282.140 (2018-02-01) Qt 5.11: Chromium 65 65.0.3325.151 (2018-03-06) 5.11.0: Security fixes up to 66.0.3359.139 (2018-04-26) 5.11.1: Updated to 65.0.3325.15.230 Security fixes up to 67.0.3396.87 (2018-06-12) 5.11.2: Security fixes up to 68.0.3440.75 (~2018-07-31) 5.11.3: Security fixes up to 70.0.3538.102 (2018-11-09) Qt 5.12: Chromium 69 (LTS) 69.0.3497.128 (~2018-09-11) 5.12.0: Security fixes up to 70.0.3538.102 (~2018-10-24) 5.12.1: Security fixes up to 71.0.3578.94 (2018-12-12) 5.12.2: Security fixes up to 72.0.3626.121 (2019-03-01) 5.12.3: Security fixes up to 73.0.3683.75 (2019-03-12) 5.12.4: Security fixes up to 74.0.3729.157 (2019-05-14) 5.12.5: Security fixes up to 76.0.3809.87 (2019-07-30) 5.12.6: Security fixes up to 77.0.3865.120 (~2019-09-10) 5.12.7: Security fixes up to 79.0.3945.130 (2020-01-16) 5.12.8: Security fixes up to 80.0.3987.149 (2020-03-18) 5.12.9: Security fixes up to 83.0.4103.97 (2020-06-03) Qt 5.13: Chromium 73 73.0.3683.105 (~2019-02-28) 5.13.0: Security fixes up to 74.0.3729.157 (2019-05-14) 5.13.1: Security fixes up to 76.0.3809.87 (2019-07-30) 5.13.2: Security fixes up to 77.0.3865.120 (2019-10-10) Qt 5.14: Chromium 77 77.0.3865.129 (~2019-10-10) 5.14.0: Security fixes up to 77.0.3865.129 (~2019-09-10) 5.14.1: Security fixes up to 79.0.3945.117 (2020-01-07) 5.14.2: Security fixes up to 80.0.3987.132 (2020-03-03) Qt 5.15: Chromium 80 80.0.3987.163 (2020-04-02) 5.15.0: Security fixes up to 81.0.4044.138 (2020-05-05) Also see: - https://chromiumdash.appspot.com/schedule - https://www.chromium.org/developers/calendar - https://chromereleases.googleblog.com/ """ if webenginesettings is None: return 'unavailable' # type: ignore[unreachable] if webenginesettings.parsed_user_agent is None: webenginesettings.init_user_agent() assert webenginesettings.parsed_user_agent is not None return webenginesettings.parsed_user_agent.upstream_browser_version