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:
Florian Bruhin 2021-02-11 16:04:22 +01:00
parent 83aeed38f1
commit 94967ee979
4 changed files with 114 additions and 117 deletions

View File

@ -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}='

View File

@ -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()):

View File

@ -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'),

View File

@ -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