Beispiel #1
0
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
Beispiel #2
0
    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
Beispiel #3
0
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
Beispiel #4
0
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
Beispiel #5
0
    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
Beispiel #6
0
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]
Beispiel #7
0
    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
Beispiel #8
0
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'
Beispiel #9
0
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