Improve QtWebEngine version checking in qtargs.py
We now use versions.webengine_versions() to get the real QtWebEngine version. This is more accurate and also allows us to drop the InstalledApp workaround with QtWebEngine 5.15.3. Also, we pass a WebEngineVersions object around instead of asking for the versions multiple times. This also leads to less patching in tests. See #3785
This commit is contained in:
parent
83aeed38f1
commit
94967ee979
|
|
@ -332,7 +332,7 @@ _PREFERRED_COLOR_SCHEME_DEFINITIONS = {
|
|||
}
|
||||
|
||||
|
||||
def _variant() -> Variant:
|
||||
def _variant(versions: version.WebEngineVersions) -> Variant:
|
||||
"""Get the dark mode variant based on the underlying Qt version."""
|
||||
env_var = os.environ.get('QUTE_DARKMODE_VARIANT')
|
||||
if env_var is not None:
|
||||
|
|
@ -341,7 +341,6 @@ def _variant() -> Variant:
|
|||
except KeyError:
|
||||
log.init.warning(f"Ignoring invalid QUTE_DARKMODE_VARIANT={env_var}")
|
||||
|
||||
versions = version.qtwebengine_versions(avoid_init=True)
|
||||
if (versions.webengine == utils.VersionNumber(5, 15, 2) and
|
||||
versions.chromium is not None and
|
||||
versions.chromium.startswith('87.')):
|
||||
|
|
@ -362,7 +361,11 @@ def _variant() -> Variant:
|
|||
raise utils.Unreachable(versions.webengine)
|
||||
|
||||
|
||||
def settings(special_flags: Sequence[str]) -> Mapping[str, Sequence[Tuple[str, str]]]:
|
||||
def settings(
|
||||
*,
|
||||
versions: version.WebEngineVersions,
|
||||
special_flags: Sequence[str],
|
||||
) -> Mapping[str, Sequence[Tuple[str, str]]]:
|
||||
"""Get necessary blink settings to configure dark mode for QtWebEngine.
|
||||
|
||||
Args:
|
||||
|
|
@ -373,7 +376,7 @@ def settings(special_flags: Sequence[str]) -> Mapping[str, Sequence[Tuple[str, s
|
|||
to a sequence of tuples, each tuple being a key/value pair to pass to that
|
||||
setting.
|
||||
"""
|
||||
variant = _variant()
|
||||
variant = _variant(versions)
|
||||
result: Mapping[str, List[Tuple[str, str]]] = collections.defaultdict(list)
|
||||
|
||||
blink_settings_flag = f'--{_BLINK_SETTINGS}='
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ from typing import Any, Dict, Iterator, List, Optional, Sequence, Tuple
|
|||
|
||||
from qutebrowser.config import config
|
||||
from qutebrowser.misc import objects
|
||||
from qutebrowser.utils import usertypes, qtutils, utils, log
|
||||
from qutebrowser.utils import usertypes, qtutils, utils, log, version
|
||||
|
||||
|
||||
_ENABLE_FEATURES = '--enable-features='
|
||||
|
|
@ -67,11 +67,13 @@ def qt_args(namespace: argparse.Namespace) -> List[str]:
|
|||
|
||||
|
||||
def _qtwebengine_features(
|
||||
versions: version.WebEngineVersions,
|
||||
special_flags: Sequence[str],
|
||||
) -> Tuple[Sequence[str], Sequence[str]]:
|
||||
"""Get a tuple of --enable-features/--disable-features flags for QtWebEngine.
|
||||
|
||||
Args:
|
||||
versions: The WebEngineVersions to get flags for.
|
||||
special_flags: Existing flags passed via the commandline.
|
||||
"""
|
||||
enabled_features = []
|
||||
|
|
@ -89,7 +91,7 @@ def _qtwebengine_features(
|
|||
else:
|
||||
raise utils.Unreachable(flag)
|
||||
|
||||
if qtutils.version_check('5.15', compiled=False) and utils.is_linux:
|
||||
if versions.webengine >= utils.VersionNumber(5, 15, 1) and utils.is_linux:
|
||||
# Enable WebRTC PipeWire for screen capturing on Wayland.
|
||||
#
|
||||
# This is disabled in Chromium by default because of the "dialog hell":
|
||||
|
|
@ -101,8 +103,7 @@ def _qtwebengine_features(
|
|||
#
|
||||
# In theory this would be supported with Qt 5.13 already, but
|
||||
# QtWebEngine only started picking up PipeWire correctly with Qt
|
||||
# 5.15.1. Checking for 5.15 here to pick up Archlinux' patched package
|
||||
# as well.
|
||||
# 5.15.1.
|
||||
#
|
||||
# This only should be enabled on Wayland, but it's too early to check
|
||||
# that, as we don't have a QApplication available at this point. Thus,
|
||||
|
|
@ -125,20 +126,18 @@ def _qtwebengine_features(
|
|||
if config.val.scrolling.bar == 'overlay':
|
||||
enabled_features.append('OverlayScrollbar')
|
||||
|
||||
if (qtutils.version_check('5.14', compiled=False) and
|
||||
if (versions.webengine >= utils.VersionNumber(5, 14) and
|
||||
config.val.content.headers.referer == 'same-domain'):
|
||||
# Handling of reduced-referrer-granularity in Chromium 76+
|
||||
# https://chromium-review.googlesource.com/c/chromium/src/+/1572699
|
||||
#
|
||||
# Note that this is removed entirely (and apparently the default) starting with
|
||||
# Chromium 89 (Qt 5.15.x or 6.x):
|
||||
# Chromium 89 (presumably arriving with Qt 6.2):
|
||||
# https://chromium-review.googlesource.com/c/chromium/src/+/2545444
|
||||
enabled_features.append('ReducedReferrerGranularity')
|
||||
|
||||
if qtutils.version_check('5.15.2', compiled=False, exact=True):
|
||||
if versions.webengine == utils.VersionNumber(5, 15, 2):
|
||||
# WORKAROUND for https://bugreports.qt.io/browse/QTBUG-89740
|
||||
# FIXME Not needed anymore with QtWebEngne 5.15.3 (or Qt 6), but we'll probably
|
||||
# have no way to detect that...
|
||||
disabled_features.append('InstalledApp')
|
||||
|
||||
return (enabled_features, disabled_features)
|
||||
|
|
@ -149,10 +148,11 @@ def _qtwebengine_args(
|
|||
special_flags: Sequence[str],
|
||||
) -> Iterator[str]:
|
||||
"""Get the QtWebEngine arguments to use based on the config."""
|
||||
is_qt_514 = (qtutils.version_check('5.14', compiled=False) and
|
||||
not qtutils.version_check('5.15', compiled=False))
|
||||
versions = version.qtwebengine_versions(avoid_init=True)
|
||||
|
||||
if is_qt_514:
|
||||
qt_514_ver = utils.VersionNumber(5, 14)
|
||||
qt_515_ver = utils.VersionNumber(5, 15)
|
||||
if qt_514_ver <= versions.webengine < qt_515_ver:
|
||||
# WORKAROUND for https://bugreports.qt.io/browse/QTBUG-82105
|
||||
yield '--disable-shared-workers'
|
||||
|
||||
|
|
@ -160,7 +160,7 @@ def _qtwebengine_args(
|
|||
# https://codereview.qt-project.org/c/qt/qtwebengine/+/256786
|
||||
# also see:
|
||||
# https://codereview.qt-project.org/c/qt/qtwebengine-chromium/+/265753
|
||||
if qtutils.version_check('5.12.3', compiled=False):
|
||||
if versions.webengine >= utils.VersionNumber(5, 12, 3):
|
||||
if 'stack' in namespace.debug_flags:
|
||||
# Only actually available in Qt 5.12.5, but let's save another
|
||||
# check, as passing the option won't hurt.
|
||||
|
|
@ -177,22 +177,26 @@ def _qtwebengine_args(
|
|||
yield '--renderer-startup-dialog'
|
||||
|
||||
from qutebrowser.browser.webengine import darkmode
|
||||
for switch_name, values in darkmode.settings(special_flags).items():
|
||||
darkmode_settings = darkmode.settings(
|
||||
versions=versions,
|
||||
special_flags=special_flags,
|
||||
)
|
||||
for switch_name, values in darkmode_settings.items():
|
||||
# If we need to use other switches (say, --enable-features), we might need to
|
||||
# refactor this so values still get combined with existing ones.
|
||||
assert switch_name in ['dark-mode-settings', 'blink-settings'], switch_name
|
||||
yield f'--{switch_name}=' + ','.join(f'{k}={v}' for k, v in values)
|
||||
|
||||
enabled_features, disabled_features = _qtwebengine_features(special_flags)
|
||||
enabled_features, disabled_features = _qtwebengine_features(versions, special_flags)
|
||||
if enabled_features:
|
||||
yield _ENABLE_FEATURES + ','.join(enabled_features)
|
||||
if disabled_features:
|
||||
yield _DISABLE_FEATURES + ','.join(disabled_features)
|
||||
|
||||
yield from _qtwebengine_settings_args()
|
||||
yield from _qtwebengine_settings_args(versions)
|
||||
|
||||
|
||||
def _qtwebengine_settings_args() -> Iterator[str]:
|
||||
def _qtwebengine_settings_args(versions: version.WebEngineVersions) -> Iterator[str]:
|
||||
settings: Dict[str, Dict[Any, Optional[str]]] = {
|
||||
'qt.force_software_rendering': {
|
||||
'software-opengl': None,
|
||||
|
|
@ -230,9 +234,9 @@ def _qtwebengine_settings_args() -> Iterator[str]:
|
|||
'always': None,
|
||||
}
|
||||
}
|
||||
qt_514_ver = utils.VersionNumber(5, 14)
|
||||
|
||||
if (qtutils.version_check('5.14', compiled=False) and
|
||||
not qtutils.version_check('5.15.2', compiled=False)):
|
||||
if qt_514_ver <= versions.webengine < utils.VersionNumber(5, 15, 2):
|
||||
# In Qt 5.14 to 5.15.1, `--force-dark-mode` is used to set the
|
||||
# preferred colorscheme. In Qt 5.15.2, this is handled by a
|
||||
# blink-setting in browser/webengine/darkmode.py instead.
|
||||
|
|
@ -243,17 +247,17 @@ def _qtwebengine_settings_args() -> Iterator[str]:
|
|||
}
|
||||
|
||||
referrer_setting = settings['content.headers.referer']
|
||||
if qtutils.version_check('5.14', compiled=False):
|
||||
if versions.webengine >= qt_514_ver:
|
||||
# Starting with Qt 5.14, this is handled via --enable-features
|
||||
referrer_setting['same-domain'] = None
|
||||
else:
|
||||
referrer_setting['same-domain'] = '--reduced-referrer-granularity'
|
||||
|
||||
can_override_referer = (
|
||||
qtutils.version_check('5.12.4', compiled=False) and
|
||||
not qtutils.version_check('5.13.0', compiled=False, exact=True)
|
||||
)
|
||||
# WORKAROUND for https://bugreports.qt.io/browse/QTBUG-60203
|
||||
can_override_referer = (
|
||||
versions.webengine >= utils.VersionNumber(5, 12, 4) and
|
||||
versions.webengine != utils.VersionNumber(5, 13)
|
||||
)
|
||||
referrer_setting['never'] = None if can_override_referer else '--no-referrers'
|
||||
|
||||
for setting, args in sorted(settings.items()):
|
||||
|
|
|
|||
|
|
@ -33,13 +33,12 @@ def patch_backend(monkeypatch):
|
|||
|
||||
|
||||
@pytest.fixture
|
||||
def gentoo_version_patch(monkeypatch):
|
||||
versions = version.WebEngineVersions(
|
||||
def gentoo_versions():
|
||||
return version.WebEngineVersions(
|
||||
webengine=utils.VersionNumber(5, 15, 2),
|
||||
chromium='87.0.4280.144',
|
||||
source='faked',
|
||||
)
|
||||
monkeypatch.setattr(version, 'qtwebengine_versions', lambda avoid_init: versions)
|
||||
|
||||
|
||||
@pytest.mark.parametrize('value, webengine_version, expected', [
|
||||
|
|
@ -76,18 +75,20 @@ def gentoo_version_patch(monkeypatch):
|
|||
("light", "6.0.0", [("preferredColorScheme", "1")]),
|
||||
])
|
||||
@testutils.qt514
|
||||
def test_colorscheme(config_stub, monkeypatch, value, webengine_version, expected):
|
||||
def test_colorscheme(config_stub, value, webengine_version, expected):
|
||||
versions = version.WebEngineVersions.from_pyqt(webengine_version)
|
||||
monkeypatch.setattr(version, 'qtwebengine_versions', lambda avoid_init: versions)
|
||||
if value is not None:
|
||||
config_stub.val.colors.webpage.preferred_color_scheme = value
|
||||
assert darkmode.settings([])['blink-settings'] == expected
|
||||
|
||||
darkmode_settings = darkmode.settings(versions=versions, special_flags=[])
|
||||
assert darkmode_settings['blink-settings'] == expected
|
||||
|
||||
|
||||
@testutils.qt514
|
||||
def test_colorscheme_gentoo_workaround(config_stub, gentoo_version_patch):
|
||||
def test_colorscheme_gentoo_workaround(config_stub, gentoo_versions):
|
||||
config_stub.val.colors.webpage.preferred_color_scheme = "dark"
|
||||
assert darkmode.settings([])['blink-settings'] == [("preferredColorScheme", "0")]
|
||||
darkmode_settings = darkmode.settings(versions=gentoo_versions, special_flags=[])
|
||||
assert darkmode_settings['blink-settings'] == [("preferredColorScheme", "0")]
|
||||
|
||||
|
||||
@pytest.mark.parametrize('settings, expected', [
|
||||
|
|
@ -106,17 +107,17 @@ def test_colorscheme_gentoo_workaround(config_stub, gentoo_version_patch):
|
|||
],
|
||||
),
|
||||
])
|
||||
def test_basics(config_stub, monkeypatch, settings, expected):
|
||||
def test_basics(config_stub, settings, expected):
|
||||
for k, v in settings.items():
|
||||
config_stub.set_obj('colors.webpage.darkmode.' + k, v)
|
||||
|
||||
# Using Qt 5.15.1 because it has the least special cases.
|
||||
monkeypatch.setattr(darkmode, '_variant', lambda: darkmode.Variant.qt_515_1)
|
||||
|
||||
if expected:
|
||||
expected.append(('darkModeImagePolicy', '2'))
|
||||
|
||||
assert darkmode.settings([])['blink-settings'] == expected
|
||||
# Using Qt 5.15.1 because it has the least special cases.
|
||||
versions = version.WebEngineVersions.from_pyqt('5.15.1')
|
||||
darkmode_settings = darkmode.settings(versions=versions, special_flags=[])
|
||||
assert darkmode_settings['blink-settings'] == expected
|
||||
|
||||
|
||||
QT_514_SETTINGS = {'blink-settings': [
|
||||
|
|
@ -171,10 +172,7 @@ QT_515_3_SETTINGS = {
|
|||
('5.15.2', QT_515_2_SETTINGS),
|
||||
('5.15.3', QT_515_3_SETTINGS),
|
||||
])
|
||||
def test_qt_version_differences(config_stub, monkeypatch, qversion, expected):
|
||||
versions = version.WebEngineVersions.from_pyqt(qversion)
|
||||
monkeypatch.setattr(version, 'qtwebengine_versions', lambda avoid_init: versions)
|
||||
|
||||
def test_qt_version_differences(config_stub, qversion, expected):
|
||||
settings = {
|
||||
'enabled': True,
|
||||
'algorithm': 'brightness-rgb',
|
||||
|
|
@ -183,7 +181,9 @@ def test_qt_version_differences(config_stub, monkeypatch, qversion, expected):
|
|||
for k, v in settings.items():
|
||||
config_stub.set_obj('colors.webpage.darkmode.' + k, v)
|
||||
|
||||
assert darkmode.settings([]) == expected
|
||||
versions = version.WebEngineVersions.from_pyqt(qversion)
|
||||
darkmode_settings = darkmode.settings(versions=versions, special_flags=[])
|
||||
assert darkmode_settings == expected
|
||||
|
||||
|
||||
@testutils.qt514
|
||||
|
|
@ -203,10 +203,9 @@ def test_qt_version_differences(config_stub, monkeypatch, qversion, expected):
|
|||
('grayscale.images', 0.5,
|
||||
'ImageGrayscale', '0.5'),
|
||||
])
|
||||
def test_customization(config_stub, monkeypatch, setting, value, exp_key, exp_val):
|
||||
def test_customization(config_stub, setting, value, exp_key, exp_val):
|
||||
config_stub.val.colors.webpage.darkmode.enabled = True
|
||||
config_stub.set_obj('colors.webpage.darkmode.' + setting, value)
|
||||
monkeypatch.setattr(darkmode, '_variant', lambda: darkmode.Variant.qt_515_1)
|
||||
|
||||
expected = []
|
||||
expected.append(('darkModeEnabled', 'true'))
|
||||
|
|
@ -214,7 +213,9 @@ def test_customization(config_stub, monkeypatch, setting, value, exp_key, exp_va
|
|||
expected.append(('darkModeImagePolicy', '2'))
|
||||
expected.append(('darkMode' + exp_key, exp_val))
|
||||
|
||||
assert darkmode.settings([])['blink-settings'] == expected
|
||||
versions = version.WebEngineVersions.from_pyqt('5.15.1')
|
||||
darkmode_settings = darkmode.settings(versions=versions, special_flags=[])
|
||||
assert darkmode_settings['blink-settings'] == expected
|
||||
|
||||
|
||||
@pytest.mark.parametrize('webengine_version, expected', [
|
||||
|
|
@ -226,14 +227,13 @@ def test_customization(config_stub, monkeypatch, setting, value, exp_key, exp_va
|
|||
('5.15.3', darkmode.Variant.qt_515_3),
|
||||
('6.0.0', darkmode.Variant.qt_515_3),
|
||||
])
|
||||
def test_variant(monkeypatch, webengine_version, expected):
|
||||
def test_variant(webengine_version, expected):
|
||||
versions = version.WebEngineVersions.from_pyqt(webengine_version)
|
||||
monkeypatch.setattr(version, 'qtwebengine_versions', lambda avoid_init: versions)
|
||||
assert darkmode._variant() == expected
|
||||
assert darkmode._variant(versions) == expected
|
||||
|
||||
|
||||
def test_variant_gentoo_workaround(gentoo_version_patch):
|
||||
assert darkmode._variant() == darkmode.Variant.qt_515_3
|
||||
def test_variant_gentoo_workaround(gentoo_versions):
|
||||
assert darkmode._variant(gentoo_versions) == darkmode.Variant.qt_515_3
|
||||
|
||||
|
||||
@pytest.mark.parametrize('value, is_valid, expected', [
|
||||
|
|
@ -242,24 +242,22 @@ def test_variant_gentoo_workaround(gentoo_version_patch):
|
|||
])
|
||||
def test_variant_override(monkeypatch, caplog, value, is_valid, expected):
|
||||
versions = version.WebEngineVersions.from_pyqt('5.15.0')
|
||||
monkeypatch.setattr(version, 'qtwebengine_versions', lambda avoid_init: versions)
|
||||
monkeypatch.setenv('QUTE_DARKMODE_VARIANT', value)
|
||||
|
||||
with caplog.at_level(logging.WARNING):
|
||||
assert darkmode._variant() == expected
|
||||
assert darkmode._variant(versions) == expected
|
||||
|
||||
log_msg = 'Ignoring invalid QUTE_DARKMODE_VARIANT=invalid_value'
|
||||
assert (log_msg in caplog.messages) != is_valid
|
||||
|
||||
|
||||
def test_broken_smart_images_policy(config_stub, monkeypatch, caplog):
|
||||
def test_broken_smart_images_policy(config_stub, caplog):
|
||||
config_stub.val.colors.webpage.darkmode.enabled = True
|
||||
config_stub.val.colors.webpage.darkmode.policy.images = 'smart'
|
||||
versions = version.WebEngineVersions.from_pyqt('5.15.0')
|
||||
monkeypatch.setattr(version, 'qtwebengine_versions', lambda avoid_init: versions)
|
||||
|
||||
with caplog.at_level(logging.WARNING):
|
||||
settings = darkmode.settings([])['blink-settings']
|
||||
darkmode_settings = darkmode.settings(versions=versions, special_flags=[])
|
||||
|
||||
assert caplog.messages[-1] == (
|
||||
'Ignoring colors.webpage.darkmode.policy.images = smart because of '
|
||||
|
|
@ -269,7 +267,7 @@ def test_broken_smart_images_policy(config_stub, monkeypatch, caplog):
|
|||
[('darkModeEnabled', 'true')], # Qt 5.15
|
||||
[('darkMode', '4')], # Qt 5.14
|
||||
]
|
||||
assert settings in expected
|
||||
assert darkmode_settings['blink-settings'] in expected
|
||||
|
||||
|
||||
@pytest.mark.parametrize('flag, expected', [
|
||||
|
|
@ -278,11 +276,10 @@ def test_broken_smart_images_policy(config_stub, monkeypatch, caplog):
|
|||
('--blink-settings=one=1,two=2', [('one', '1'), ('two', '2')]),
|
||||
('--enable-features=feat', []),
|
||||
])
|
||||
def test_pass_through_existing_settings(config_stub, monkeypatch, flag, expected):
|
||||
def test_pass_through_existing_settings(config_stub, flag, expected):
|
||||
config_stub.val.colors.webpage.darkmode.enabled = True
|
||||
versions = version.WebEngineVersions.from_pyqt('5.15.1')
|
||||
monkeypatch.setattr(version, 'qtwebengine_versions', lambda avoid_init: versions)
|
||||
settings = darkmode.settings([flag])
|
||||
settings = darkmode.settings(versions=versions, special_flags=[flag])
|
||||
|
||||
dark_mode_expected = [
|
||||
('darkModeEnabled', 'true'),
|
||||
|
|
|
|||
|
|
@ -40,11 +40,20 @@ def parser(mocker):
|
|||
|
||||
|
||||
@pytest.fixture
|
||||
def reduce_args(monkeypatch, config_stub):
|
||||
def version_patcher(monkeypatch):
|
||||
"""Get a patching function to patch the QtWebEngine version."""
|
||||
def run(ver):
|
||||
versions = version.WebEngineVersions.from_pyqt(ver)
|
||||
monkeypatch.setattr(qtargs.objects, 'backend', usertypes.Backend.QtWebEngine)
|
||||
monkeypatch.setattr(version, 'qtwebengine_versions', lambda avoid_init: versions)
|
||||
|
||||
return run
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def reduce_args(config_stub, version_patcher):
|
||||
"""Make sure no --disable-shared-workers/referer argument get added."""
|
||||
monkeypatch.setattr(qtargs.qtutils, 'qVersion', lambda: '5.15.0')
|
||||
versions = version.WebEngineVersions.from_pyqt('5.15.0')
|
||||
monkeypatch.setattr(version, 'qtwebengine_versions', lambda avoid_init: versions)
|
||||
version_patcher('5.15.0')
|
||||
config_stub.val.content.headers.referer = 'always'
|
||||
|
||||
|
||||
|
|
@ -107,31 +116,30 @@ class TestWebEngineArgs:
|
|||
(usertypes.Backend.QtWebEngine, True),
|
||||
(usertypes.Backend.QtWebKit, False),
|
||||
])
|
||||
def test_shared_workers(self, config_stub, monkeypatch, parser,
|
||||
def test_shared_workers(self, config_stub, version_patcher, monkeypatch, parser,
|
||||
backend, expected):
|
||||
monkeypatch.setattr(qtargs.qtutils, 'qVersion', lambda: '5.14.0')
|
||||
version_patcher('5.14.0')
|
||||
monkeypatch.setattr(qtargs.objects, 'backend', backend)
|
||||
parsed = parser.parse_args([])
|
||||
args = qtargs.qt_args(parsed)
|
||||
assert ('--disable-shared-workers' in args) == expected
|
||||
|
||||
@pytest.mark.parametrize('backend, version_check, debug_flag, expected', [
|
||||
@pytest.mark.parametrize('backend, qt_version, debug_flag, expected', [
|
||||
# Qt >= 5.12.3: Enable with -D stack, do nothing without it.
|
||||
(usertypes.Backend.QtWebEngine, True, True, True),
|
||||
(usertypes.Backend.QtWebEngine, True, False, None),
|
||||
(usertypes.Backend.QtWebEngine, '5.12.3', True, True),
|
||||
(usertypes.Backend.QtWebEngine, '5.12.3', False, None),
|
||||
# Qt < 5.12.3: Do nothing with -D stack, disable without it.
|
||||
(usertypes.Backend.QtWebEngine, False, True, None),
|
||||
(usertypes.Backend.QtWebEngine, False, False, False),
|
||||
(usertypes.Backend.QtWebEngine, '5.12.2', True, None),
|
||||
(usertypes.Backend.QtWebEngine, '5.12.2', False, False),
|
||||
# QtWebKit: Do nothing
|
||||
(usertypes.Backend.QtWebKit, True, True, None),
|
||||
(usertypes.Backend.QtWebKit, True, False, None),
|
||||
(usertypes.Backend.QtWebKit, False, True, None),
|
||||
(usertypes.Backend.QtWebKit, False, False, None),
|
||||
(usertypes.Backend.QtWebKit, '5.12.3', True, None),
|
||||
(usertypes.Backend.QtWebKit, '5.12.3', False, None),
|
||||
(usertypes.Backend.QtWebKit, '5.12.2', True, None),
|
||||
(usertypes.Backend.QtWebKit, '5.12.2', False, None),
|
||||
])
|
||||
def test_in_process_stack_traces(self, monkeypatch, parser, backend,
|
||||
version_check, debug_flag, expected):
|
||||
monkeypatch.setattr(qtargs.qtutils, 'version_check',
|
||||
lambda version, compiled=False, exact=False: version_check)
|
||||
def test_in_process_stack_traces(self, monkeypatch, parser, backend, version_patcher,
|
||||
qt_version, debug_flag, expected):
|
||||
version_patcher(qt_version)
|
||||
monkeypatch.setattr(qtargs.objects, 'backend', backend)
|
||||
parsed = parser.parse_args(['--debug-flag', 'stack'] if debug_flag
|
||||
else [])
|
||||
|
|
@ -153,8 +161,7 @@ class TestWebEngineArgs:
|
|||
(['--debug-flag', 'wait-renderer-process'], ['--renderer-startup-dialog']),
|
||||
])
|
||||
def test_chromium_flags(self, monkeypatch, parser, flags, args):
|
||||
monkeypatch.setattr(qtargs.objects, 'backend',
|
||||
usertypes.Backend.QtWebEngine)
|
||||
monkeypatch.setattr(qtargs.objects, 'backend', usertypes.Backend.QtWebEngine)
|
||||
parsed = parser.parse_args(flags)
|
||||
args = qtargs.qt_args(parsed)
|
||||
|
||||
|
|
@ -172,10 +179,8 @@ class TestWebEngineArgs:
|
|||
('software-opengl', False),
|
||||
('chromium', True),
|
||||
])
|
||||
def test_disable_gpu(self, config, added,
|
||||
config_stub, monkeypatch, parser):
|
||||
monkeypatch.setattr(qtargs.objects, 'backend',
|
||||
usertypes.Backend.QtWebEngine)
|
||||
def test_disable_gpu(self, config, added, config_stub, monkeypatch, parser):
|
||||
monkeypatch.setattr(qtargs.objects, 'backend', usertypes.Backend.QtWebEngine)
|
||||
config_stub.val.qt.force_software_rendering = config
|
||||
parsed = parser.parse_args([])
|
||||
args = qtargs.qt_args(parsed)
|
||||
|
|
@ -196,10 +201,8 @@ class TestWebEngineArgs:
|
|||
'--force-webrtc-ip-handling-policy='
|
||||
'disable_non_proxied_udp'),
|
||||
])
|
||||
def test_webrtc(self, config_stub, monkeypatch, parser,
|
||||
policy, arg):
|
||||
monkeypatch.setattr(qtargs.objects, 'backend',
|
||||
usertypes.Backend.QtWebEngine)
|
||||
def test_webrtc(self, config_stub, monkeypatch, parser, policy, arg):
|
||||
monkeypatch.setattr(qtargs.objects, 'backend', usertypes.Backend.QtWebEngine)
|
||||
config_stub.val.content.webrtc_ip_handling_policy = policy
|
||||
|
||||
parsed = parser.parse_args([])
|
||||
|
|
@ -217,8 +220,7 @@ class TestWebEngineArgs:
|
|||
])
|
||||
def test_canvas_reading(self, config_stub, monkeypatch, parser,
|
||||
canvas_reading, added):
|
||||
monkeypatch.setattr(qtargs.objects, 'backend',
|
||||
usertypes.Backend.QtWebEngine)
|
||||
monkeypatch.setattr(qtargs.objects, 'backend', usertypes.Backend.QtWebEngine)
|
||||
|
||||
config_stub.val.content.canvas_reading = canvas_reading
|
||||
parsed = parser.parse_args([])
|
||||
|
|
@ -232,8 +234,7 @@ class TestWebEngineArgs:
|
|||
])
|
||||
def test_process_model(self, config_stub, monkeypatch, parser,
|
||||
process_model, added):
|
||||
monkeypatch.setattr(qtargs.objects, 'backend',
|
||||
usertypes.Backend.QtWebEngine)
|
||||
monkeypatch.setattr(qtargs.objects, 'backend', usertypes.Backend.QtWebEngine)
|
||||
|
||||
config_stub.val.qt.process_model = process_model
|
||||
parsed = parser.parse_args([])
|
||||
|
|
@ -254,8 +255,7 @@ class TestWebEngineArgs:
|
|||
])
|
||||
def test_low_end_device_mode(self, config_stub, monkeypatch, parser,
|
||||
low_end_device_mode, arg):
|
||||
monkeypatch.setattr(qtargs.objects, 'backend',
|
||||
usertypes.Backend.QtWebEngine)
|
||||
monkeypatch.setattr(qtargs.objects, 'backend', usertypes.Backend.QtWebEngine)
|
||||
|
||||
config_stub.val.qt.low_end_device_mode = low_end_device_mode
|
||||
parsed = parser.parse_args([])
|
||||
|
|
@ -284,9 +284,10 @@ class TestWebEngineArgs:
|
|||
('5.14.0', 'same-domain', '--enable-features=ReducedReferrerGranularity'),
|
||||
('5.15.0', 'same-domain', '--enable-features=ReducedReferrerGranularity'),
|
||||
])
|
||||
def test_referer(self, config_stub, monkeypatch, parser, qt_version, referer, arg):
|
||||
def test_referer(self, config_stub, monkeypatch, version_patcher, parser,
|
||||
qt_version, referer, arg):
|
||||
monkeypatch.setattr(qtargs.objects, 'backend', usertypes.Backend.QtWebEngine)
|
||||
monkeypatch.setattr(qtargs.qtutils, 'qVersion', lambda: qt_version)
|
||||
version_patcher(qt_version)
|
||||
|
||||
# Avoid WebRTC pipewire feature
|
||||
monkeypatch.setattr(qtargs.utils, 'is_linux', False)
|
||||
|
|
@ -334,10 +335,8 @@ class TestWebEngineArgs:
|
|||
])
|
||||
@utils.qt514
|
||||
def test_preferred_color_scheme(
|
||||
self, config_stub, monkeypatch, parser, value, qt_version, added):
|
||||
monkeypatch.setattr(qtargs.objects, 'backend',
|
||||
usertypes.Backend.QtWebEngine)
|
||||
monkeypatch.setattr(qtargs.qtutils, 'qVersion', lambda: qt_version)
|
||||
self, config_stub, version_patcher, parser, value, qt_version, added):
|
||||
version_patcher(qt_version)
|
||||
|
||||
config_stub.val.colors.webpage.preferred_color_scheme = value
|
||||
|
||||
|
|
@ -358,8 +357,7 @@ class TestWebEngineArgs:
|
|||
])
|
||||
def test_overlay_scrollbar(self, config_stub, monkeypatch, parser,
|
||||
bar, is_mac, added):
|
||||
monkeypatch.setattr(qtargs.objects, 'backend',
|
||||
usertypes.Backend.QtWebEngine)
|
||||
monkeypatch.setattr(qtargs.objects, 'backend', usertypes.Backend.QtWebEngine)
|
||||
monkeypatch.setattr(qtargs.utils, 'is_mac', is_mac)
|
||||
# Avoid WebRTC pipewire feature
|
||||
monkeypatch.setattr(qtargs.utils, 'is_linux', False)
|
||||
|
|
@ -372,14 +370,10 @@ class TestWebEngineArgs:
|
|||
assert ('--enable-features=OverlayScrollbar' in args) == added
|
||||
|
||||
@pytest.fixture
|
||||
def feature_flag_patch(self, monkeypatch, config_stub):
|
||||
def feature_flag_patch(self, monkeypatch, config_stub, version_patcher):
|
||||
"""Patch away things affecting feature flags."""
|
||||
config_stub.val.scrolling.bar = 'never'
|
||||
monkeypatch.setattr(qtargs.objects, 'backend',
|
||||
usertypes.Backend.QtWebEngine)
|
||||
monkeypatch.setattr(qtargs.qtutils, 'version_check',
|
||||
lambda version, exact=False, compiled=True:
|
||||
True)
|
||||
version_patcher('5.15.3')
|
||||
monkeypatch.setattr(qtargs.utils, 'is_mac', False)
|
||||
# Avoid WebRTC pipewire feature
|
||||
monkeypatch.setattr(qtargs.utils, 'is_linux', False)
|
||||
|
|
@ -465,10 +459,8 @@ class TestWebEngineArgs:
|
|||
('5.15.3', False),
|
||||
('6.0.0', False),
|
||||
])
|
||||
def test_installedapp_workaround(self, parser, monkeypatch, qt_version, has_workaround):
|
||||
monkeypatch.setattr(qtargs.qtutils, 'qVersion', lambda: qt_version)
|
||||
monkeypatch.setattr(qtargs.objects, 'backend',
|
||||
usertypes.Backend.QtWebEngine)
|
||||
def test_installedapp_workaround(self, parser, version_patcher, qt_version, has_workaround):
|
||||
version_patcher(qt_version)
|
||||
|
||||
parsed = parser.parse_args([])
|
||||
args = qtargs.qt_args(parsed)
|
||||
|
|
@ -507,7 +499,8 @@ class TestWebEngineArgs:
|
|||
variant, expected):
|
||||
from qutebrowser.browser.webengine import darkmode
|
||||
monkeypatch.setattr(qtargs.objects, 'backend', usertypes.Backend.QtWebEngine)
|
||||
monkeypatch.setattr(darkmode, '_variant', lambda: darkmode.Variant[variant])
|
||||
monkeypatch.setattr(
|
||||
darkmode, '_variant', lambda _versions: darkmode.Variant[variant])
|
||||
|
||||
config_stub.val.colors.webpage.darkmode.enabled = True
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue