diff --git a/qutebrowser/browser/qutescheme.py b/qutebrowser/browser/qutescheme.py index bca93e3c8..accdab4ba 100644 --- a/qutebrowser/browser/qutescheme.py +++ b/qutebrowser/browser/qutescheme.py @@ -276,15 +276,10 @@ def qute_history(url): return 'text/html', json.dumps(history_data(start_time)) else: - try: - from PyQt5.QtWebKit import qWebKitVersion - is_webkit_ng = qtutils.is_qtwebkit_ng(qWebKitVersion()) - except ImportError: # pragma: no cover - is_webkit_ng = False - if ( config.get('content', 'allow-javascript') and - (objects.backend == usertypes.Backend.QtWebEngine or is_webkit_ng) + (objects.backend == usertypes.Backend.QtWebEngine or + qtutils.is_qtwebkit_ng()) ): return 'text/html', jinja.render( 'history.html', diff --git a/qutebrowser/browser/webkit/tabhistory.py b/qutebrowser/browser/webkit/tabhistory.py index d2efca257..3f80676a9 100644 --- a/qutebrowser/browser/webkit/tabhistory.py +++ b/qutebrowser/browser/webkit/tabhistory.py @@ -21,7 +21,6 @@ from PyQt5.QtCore import QByteArray, QDataStream, QIODevice, QUrl -from PyQt5.QtWebKit import qWebKitVersion from qutebrowser.utils import qtutils @@ -181,7 +180,7 @@ def serialize(items): else: current_idx = 0 - if qtutils.is_qtwebkit_ng(qWebKitVersion()): + if qtutils.is_qtwebkit_ng(): _serialize_ng(items, current_idx, stream) else: _serialize_old(items, current_idx, stream) diff --git a/qutebrowser/browser/webkit/webkitsettings.py b/qutebrowser/browser/webkit/webkitsettings.py index caeef296f..747af9b5d 100644 --- a/qutebrowser/browser/webkit/webkitsettings.py +++ b/qutebrowser/browser/webkit/webkitsettings.py @@ -26,7 +26,7 @@ Module attributes: import os.path -from PyQt5.QtWebKit import QWebSettings, qWebKitVersion +from PyQt5.QtWebKit import QWebSettings from qutebrowser.config import config, websettings from qutebrowser.utils import standarddir, objreg, urlutils, qtutils, message @@ -90,7 +90,7 @@ def _set_user_stylesheet(): def _init_private_browsing(): if config.get('general', 'private-browsing'): - if qtutils.is_qtwebkit_ng(qWebKitVersion()): + if qtutils.is_qtwebkit_ng(): message.warning("Private browsing is not fully implemented by " "QtWebKit-NG!") QWebSettings.setIconDatabasePath('') diff --git a/qutebrowser/utils/qtutils.py b/qutebrowser/utils/qtutils.py index adf0b2737..72092cfee 100644 --- a/qutebrowser/utils/qtutils.py +++ b/qutebrowser/utils/qtutils.py @@ -36,6 +36,10 @@ import contextlib from PyQt5.QtCore import (qVersion, QEventLoop, QDataStream, QByteArray, QIODevice, QSaveFile, QT_VERSION_STR) from PyQt5.QtWidgets import QApplication +try: + from PyQt5.QtWebKit import qWebKitVersion +except ImportError: + pass from qutebrowser.utils import log @@ -100,13 +104,9 @@ def version_check(version, exact=False, strict=False): return result -def is_qtwebkit_ng(version): - """Check if the given version is QtWebKit-NG. - - This is typically used as is_webkit_ng(qWebKitVersion) but we don't want to - have QtWebKit imports in here. - """ - return (pkg_resources.parse_version(version) > +def is_qtwebkit_ng(): + """Check if the given version is QtWebKit-NG.""" + return (pkg_resources.parse_version(qWebKitVersion()) > pkg_resources.parse_version('538.1')) diff --git a/qutebrowser/utils/version.py b/qutebrowser/utils/version.py index e6a011f44..0565281bc 100644 --- a/qutebrowser/utils/version.py +++ b/qutebrowser/utils/version.py @@ -257,8 +257,7 @@ def _backend(): """Get the backend line with relevant information.""" if objects.backend == usertypes.Backend.QtWebKit: return 'QtWebKit{} (WebKit {})'.format( - '-NG' if qtutils.is_qtwebkit_ng(qWebKitVersion()) else '', - qWebKitVersion()) + '-NG' if qtutils.is_qtwebkit_ng() else '', qWebKitVersion()) else: webengine = usertypes.Backend.QtWebEngine assert objects.backend == webengine, objects.backend diff --git a/tests/end2end/conftest.py b/tests/end2end/conftest.py index 7d1c0e90d..b374f53dd 100644 --- a/tests/end2end/conftest.py +++ b/tests/end2end/conftest.py @@ -136,16 +136,6 @@ if not getattr(sys, 'frozen', False): def pytest_collection_modifyitems(config, items): """Apply @qtwebengine_* markers; skip unittests with QUTE_BDD_WEBENGINE.""" - if config.webengine: - qtwebkit_ng_used = False - else: - try: - from PyQt5.QtWebKit import qWebKitVersion - except ImportError: - qtwebkit_ng_used = False - else: - qtwebkit_ng_used = qtutils.is_qtwebkit_ng(qWebKitVersion()) - markers = [ ('qtwebengine_todo', 'QtWebEngine TODO', pytest.mark.xfail, config.webengine), @@ -154,9 +144,9 @@ def pytest_collection_modifyitems(config, items): ('qtwebkit_skip', 'Skipped with QtWebKit', pytest.mark.skipif, not config.webengine), ('qtwebkit_ng_xfail', 'Failing with QtWebKit-NG', pytest.mark.xfail, - qtwebkit_ng_used), + not config.webengine and qtutils.is_qtwebkit_ng()), ('qtwebkit_ng_skip', 'Skipped with QtWebKit-NG', pytest.mark.skipif, - qtwebkit_ng_used), + not config.webengine and qtutils.is_qtwebkit_ng()), ('qtwebengine_flaky', 'Flaky with QtWebEngine', pytest.mark.skipif, config.webengine), ('qtwebengine_osx_xfail', 'Fails on OS X with QtWebEngine', diff --git a/tests/unit/utils/test_qtutils.py b/tests/unit/utils/test_qtutils.py index 74da2ac4f..e0b4bf934 100644 --- a/tests/unit/utils/test_qtutils.py +++ b/tests/unit/utils/test_qtutils.py @@ -88,8 +88,9 @@ def test_version_check(monkeypatch, qversion, compiled, version, exact, ('538.1', False), # Qt 5.8 ('602.1', True) # QtWebKit-NG TP5 ]) -def test_is_qtwebkit_ng(version, ng): - assert qtutils.is_qtwebkit_ng(version) == ng +def test_is_qtwebkit_ng(monkeypatch, version, ng): + monkeypatch.setattr(qtutils, 'qWebKitVersion', lambda: version) + assert qtutils.is_qtwebkit_ng() == ng class TestCheckOverflow: diff --git a/tests/unit/utils/test_version.py b/tests/unit/utils/test_version.py index c6e629ef1..13c0a5d13 100644 --- a/tests/unit/utils/test_version.py +++ b/tests/unit/utils/test_version.py @@ -725,13 +725,13 @@ def test_version_output(git_commit, frozen, style, with_webkit, stubs, patches['objects.backend'] = usertypes.Backend.QtWebKit patches['QWebEngineProfile'] = None if with_webkit == 'ng': - patches['qtutils.is_qtwebkit_ng'] = lambda v: True + patches['qtutils.is_qtwebkit_ng'] = lambda: True substitutions['backend'] = 'QtWebKit-NG (WebKit WEBKIT VERSION)' else: - patches['qtutils.is_qtwebkit_ng'] = lambda v: False + patches['qtutils.is_qtwebkit_ng'] = lambda: False substitutions['backend'] = 'QtWebKit (WebKit WEBKIT VERSION)' else: - patches['qWebKitVersion'] = None + monkeypatch.delattr(version, 'qtutils.qWebKitVersion', raising=False) patches['objects.backend'] = usertypes.Backend.QtWebEngine patches['QWebEngineProfile'] = FakeWebEngineProfile substitutions['backend'] = 'QtWebEngine (Chromium CHROMIUMVERSION)'