Refactor configinit.qt_args

This commit is contained in:
Florian Bruhin 2018-09-17 19:33:39 +02:00
parent 17c7663ad0
commit 91df81f5ab

View File

@ -171,59 +171,67 @@ def qt_args(namespace):
argv += ['--' + arg for arg in config.val.qt.args]
if objects.backend == usertypes.Backend.QtWebEngine:
if not qtutils.version_check('5.11', compiled=False):
# WORKAROUND equivalent to
# https://codereview.qt-project.org/#/c/217932/
# Needed for Qt < 5.9.5 and < 5.10.1
argv.append('--disable-shared-workers')
if config.val.qt.force_software_rendering == 'chromium':
argv.append('--disable-gpu')
if not config.val.content.canvas_reading:
argv.append('--disable-reading-from-canvas')
if not qtutils.version_check('5.11'):
# On Qt 5.11, we can control this via QWebEngineSettings
if not config.val.content.autoplay:
argv.append('--autoplay-policy=user-gesture-required')
webrtc_policy = config.val.content.webrtc_ip_handling_policy
if webrtc_policy != 'all-interfaces':
argv.append('--force-webrtc-ip-handling-policy=' +
webrtc_policy.replace('-', '_'))
process_model = config.val.qt.process_model
if process_model == 'process-per-site-instance':
pass
elif process_model == 'process-per-site':
argv.append('--process-per-site')
elif process_model == 'single-process':
argv.append('--single-process')
else:
raise utils.Unreachable("Unknown process model {}"
.format(process_model))
low_end_device_mode = config.val.qt.low_end_device_mode
if low_end_device_mode == 'auto':
pass
elif low_end_device_mode == 'force-on':
argv.append('--enable-low-end-device-mode')
elif low_end_device_mode == 'force-off':
argv.append('--disable-low-end-device-mode')
else:
raise utils.Unreachable("Unknown low-end device mode {}"
.format(low_end_device_mode))
referrer = config.val.content.headers.referer
if referrer == 'always':
pass
elif referrer == 'never':
argv.append('--no-referrers')
elif referrer == 'same-domain':
argv.append('--reduced-referrer-granularity')
else:
raise utils.Unreachable("Unknown referrer {}"
.format(referrer))
argv += list(_qtwebengine_args())
return argv
def _qtwebengine_args():
"""Get the QtWebEngine arguments to use based on the config."""
if not qtutils.version_check('5.11', compiled=False):
# WORKAROUND equivalent to
# https://codereview.qt-project.org/#/c/217932/
# Needed for Qt < 5.9.5 and < 5.10.1
yield '--disable-shared-workers'
settings = {
'qt.force_software_rendering': {
'software-opengl': None,
'qt-quick': None,
'chromium': '--disable-gpu',
'none': None,
},
'content.canvas_reading': {
True: None,
False: '--disable-reading-from-canvas',
},
'content.webrtc_ip_handling_policy': {
'all-interfaces': None,
'default-public-and-private-interfaces':
'--force-webrtc-ip-handling-policy='
'default_public_and_private_interfaces',
'default-public-interface-only':
'--force-webrtc-ip-handling-policy='
'default_public_interface_only',
'disable-non-proxied-udp':
'--force-webrtc-ip-handling-policy='
'disable_non_proxied_udp',
},
'qt.process_model': {
'process-per-site-instance': None,
'process-per-site': '--process-per-site',
'single-process': '--single-process',
},
'qt.low_end_device_mode': {
'auto': None,
'force-on': '--enable-low-end-device-mode',
'force-off': '--disable-low-end-device-mode',
},
'content.headers.referer': {
'always': None,
'never': '--no-referrers',
'same-domain': '--reduced-referrer-granularity',
}
}
if not qtutils.version_check('5.11'):
# On Qt 5.11, we can control this via QWebEngineSettings
settings['content.autoplay'] = {
True: None,
False: '--autoplay-policy=user-gesture-required',
}
for setting, args in sorted(settings.items()):
arg = args[config.instance.get(setting)]
if arg is not None:
yield arg