summaryrefslogtreecommitdiff
path: root/tests
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 /tests
parentb0c812b239e000da384c04f716e8ec9f38ad870a (diff)
downloadqutebrowser-7d8fd507924309227ebb6c11c3d32cb0b013d238.tar.gz
qutebrowser-7d8fd507924309227ebb6c11c3d32cb0b013d238.zip
Add qt.workarounds.remove_service_workers setting
See #5656, #5634
Diffstat (limited to 'tests')
-rw-r--r--tests/end2end/data/service-worker/data.json1
-rw-r--r--tests/end2end/data/service-worker/index.html11
-rw-r--r--tests/end2end/data/service-worker/worker.js8
-rw-r--r--tests/end2end/test_invocations.py55
4 files changed, 75 insertions, 0 deletions
diff --git a/tests/end2end/data/service-worker/data.json b/tests/end2end/data/service-worker/data.json
new file mode 100644
index 000000000..6d9590305
--- /dev/null
+++ b/tests/end2end/data/service-worker/data.json
@@ -0,0 +1 @@
+{"foo": "bar"}
diff --git a/tests/end2end/data/service-worker/index.html b/tests/end2end/data/service-worker/index.html
new file mode 100644
index 000000000..b79c9f47b
--- /dev/null
+++ b/tests/end2end/data/service-worker/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <title>Service worker test</title>
+ <script>navigator.serviceWorker.register('worker.js')</script>
+ </head>
+ <body>
+ This page will register a service worker when loaded.
+ </body>
+</html>
diff --git a/tests/end2end/data/service-worker/worker.js b/tests/end2end/data/service-worker/worker.js
new file mode 100644
index 000000000..26a063520
--- /dev/null
+++ b/tests/end2end/data/service-worker/worker.js
@@ -0,0 +1,8 @@
+self.addEventListener('install', event => {
+ console.log("Installing service worker");
+ event.waitUntil(
+ caches.open('example-cache')
+ .then(cache => cache.add('data.json'))
+ .then(self.skipWaiting())
+ );
+});
diff --git a/tests/end2end/test_invocations.py b/tests/end2end/test_invocations.py
index c4f7282fd..b509e355b 100644
--- a/tests/end2end/test_invocations.py
+++ b/tests/end2end/test_invocations.py
@@ -19,6 +19,7 @@
"""Test starting qutebrowser with special arguments/environments."""
+import configparser
import subprocess
import sys
import logging
@@ -435,3 +436,57 @@ def test_preferred_colorscheme(request, quteproc_new):
quteproc_new.send_cmd(':jseval matchMedia("(prefers-color-scheme: dark)").matches')
quteproc_new.wait_for(message='True')
+
+
+@pytest.mark.qtwebkit_skip
+@pytest.mark.parametrize('reason', [
+ 'Explicitly enabled',
+ pytest.param('Qt 5.14', marks=utils.qt514),
+ 'Qt version changed',
+ None,
+])
+def test_service_worker_workaround(
+ request, server, quteproc_new, short_tmpdir, reason):
+ """Make sure we remove the QtWebEngine Service Worker directory if configured."""
+ args = _base_args(request.config) + ['--basedir', str(short_tmpdir)]
+ if reason == 'Explicitly enabled':
+ settings_args = ['-s', 'qt.workarounds.remove_service_workers', 'true']
+ else:
+ settings_args = []
+
+ service_worker_dir = short_tmpdir / 'data' / 'webengine' / 'Service Worker'
+
+ # First invocation: Create directory
+ quteproc_new.start(args)
+ quteproc_new.open_path('data/service-worker/index.html')
+ server.wait_for(verb='GET', path='/data/service-worker/data.json')
+ quteproc_new.send_cmd(':quit')
+ quteproc_new.wait_for_quit()
+ assert service_worker_dir.exists()
+
+ # Edit state file if needed
+ state_file = short_tmpdir / 'data' / 'state'
+ if reason == 'Qt 5.14':
+ state_file.remove()
+ elif reason == 'Qt version changed':
+ parser = configparser.ConfigParser()
+ parser.read(state_file)
+ del parser['general']['qt_version']
+ with state_file.open('w', encoding='utf-8') as f:
+ parser.write(f)
+
+ # Second invocation: Directory gets removed (if workaround enabled)
+ quteproc_new.start(args + settings_args)
+ if reason is not None:
+ quteproc_new.wait_for(
+ message=(f'Removing service workers at {service_worker_dir} '
+ f'(reason: {reason})'))
+
+ quteproc_new.send_cmd(':quit')
+ quteproc_new.wait_for_quit()
+
+ if reason is None:
+ assert service_worker_dir.exists()
+ quteproc_new.ensure_not_logged(message='Removing service workers at *')
+ else:
+ assert not service_worker_dir.exists()