summaryrefslogtreecommitdiff
path: root/qutebrowser
diff options
context:
space:
mode:
authorFlorian Bruhin <me@the-compiler.org>2021-01-27 14:06:21 +0100
committerFlorian Bruhin <me@the-compiler.org>2021-01-27 14:06:21 +0100
commit7d8fd507924309227ebb6c11c3d32cb0b013d238 (patch)
treeefbc2f302b577b51ed59c8b8092908f843daba4d /qutebrowser
parentb0c812b239e000da384c04f716e8ec9f38ad870a (diff)
downloadqutebrowser-7d8fd507924309227ebb6c11c3d32cb0b013d238.tar.gz
qutebrowser-7d8fd507924309227ebb6c11c3d32cb0b013d238.zip
Add qt.workarounds.remove_service_workers setting
See #5656, #5634
Diffstat (limited to 'qutebrowser')
-rw-r--r--qutebrowser/config/configdata.yml13
-rw-r--r--qutebrowser/misc/backendproblem.py17
2 files changed, 22 insertions, 8 deletions
diff --git a/qutebrowser/config/configdata.yml b/qutebrowser/config/configdata.yml
index 69786f2b3..cee077c14 100644
--- a/qutebrowser/config/configdata.yml
+++ b/qutebrowser/config/configdata.yml
@@ -286,6 +286,19 @@ qt.highdpi:
As an alternative to this, it's possible to set font sizes and the
`zoom.default` setting.
+qt.workarounds.remove_service_workers:
+ type: Bool
+ default: false
+ desc: >-
+ Delete the QtWebEngine Service Worker directory on every start.
+
+ This workaround can help with certain crashes caused by an unknown QtWebEngine bug
+ related to Service Workers. Those crashes happen seemingly immediately on Windows;
+ after one hour of operation on other systems.
+
+ Note however that enabling this option *can lead to data loss* on some pages (as
+ Service Worker data isn't persisted) and will negatively impact start-up time.
+
## auto_save
auto_save.interval:
diff --git a/qutebrowser/misc/backendproblem.py b/qutebrowser/misc/backendproblem.py
index 1011e539d..b5f72b521 100644
--- a/qutebrowser/misc/backendproblem.py
+++ b/qutebrowser/misc/backendproblem.py
@@ -403,21 +403,22 @@ class _BackendProblemChecker:
# Nuke the service worker directory once for every install with Qt
# 5.14, given that it seems to cause a variety of segfaults.
configfiles.state['general']['serviceworker_workaround'] = '514'
- affected = True
+ reason = 'Qt 5.14'
+ elif configfiles.state.qt_version_changed:
+ reason = 'Qt version changed'
+ elif config.val.qt.workarounds.remove_service_workers:
+ reason = 'Explicitly enabled'
else:
- # Otherwise, just nuke it when the Qt version changed.
- affected = configfiles.state.qt_version_changed
-
- if not affected:
return
- service_worker_dir = os.path.join(standarddir.data(), 'webengine',
- 'Service Worker')
+ service_worker_dir = os.path.join(
+ standarddir.data(), 'webengine', 'Service Worker')
bak_dir = service_worker_dir + '-bak'
if not os.path.exists(service_worker_dir):
return
- log.init.info("Qt version changed, removing service workers")
+ log.init.info(
+ f"Removing service workers at {service_worker_dir} (reason: {reason})")
# Keep one backup around - we're not 100% sure what persistent data
# could be in there, but this folder can grow to ~300 MB.