diff options
author | Florian Bruhin <me@the-compiler.org> | 2021-01-27 14:06:21 +0100 |
---|---|---|
committer | Florian Bruhin <me@the-compiler.org> | 2021-01-27 14:06:21 +0100 |
commit | 7d8fd507924309227ebb6c11c3d32cb0b013d238 (patch) | |
tree | efbc2f302b577b51ed59c8b8092908f843daba4d /tests | |
parent | b0c812b239e000da384c04f716e8ec9f38ad870a (diff) | |
download | qutebrowser-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.json | 1 | ||||
-rw-r--r-- | tests/end2end/data/service-worker/index.html | 11 | ||||
-rw-r--r-- | tests/end2end/data/service-worker/worker.js | 8 | ||||
-rw-r--r-- | tests/end2end/test_invocations.py | 55 |
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() |