diff options
-rw-r--r-- | qutebrowser/browser/webengine/interceptor.py | 8 | ||||
-rw-r--r-- | qutebrowser/config/qtargs.py | 8 | ||||
-rw-r--r-- | tests/unit/config/test_qtargs.py | 20 |
3 files changed, 29 insertions, 7 deletions
diff --git a/qutebrowser/browser/webengine/interceptor.py b/qutebrowser/browser/webengine/interceptor.py index 95e01588b..1e48cd113 100644 --- a/qutebrowser/browser/webengine/interceptor.py +++ b/qutebrowser/browser/webengine/interceptor.py @@ -25,7 +25,7 @@ from PyQt5.QtCore import QUrl, QByteArray from PyQt5.QtWebEngineCore import (QWebEngineUrlRequestInterceptor, QWebEngineUrlRequestInfo) -from qutebrowser.config import websettings +from qutebrowser.config import websettings, config from qutebrowser.browser import shared from qutebrowser.utils import utils, log, debug, qtutils from qutebrowser.extensions import interceptors @@ -204,5 +204,11 @@ class RequestInterceptor(QWebEngineUrlRequestInterceptor): for header, value in shared.custom_headers(url=url): info.setHttpHeader(header, value) + # Note this is ignored before Qt 5.12.4 and 5.13.1 due to + # https://bugreports.qt.io/browse/QTBUG-60203 - there, we set the + # commandline-flag in qtargs.py instead. + if config.val.content.headers.referer == 'never': + info.setHttpHeader(b'Referer', b'') + user_agent = websettings.user_agent(url) info.setHttpHeader(b'User-Agent', user_agent.encode('ascii')) diff --git a/qutebrowser/config/qtargs.py b/qutebrowser/config/qtargs.py index 6786d7973..7b66c6d92 100644 --- a/qutebrowser/config/qtargs.py +++ b/qutebrowser/config/qtargs.py @@ -201,7 +201,6 @@ def _qtwebengine_settings_args() -> Iterator[str]: }, 'content.headers.referer': { 'always': None, - 'never': '--no-referrers', } } @@ -216,6 +215,13 @@ def _qtwebengine_settings_args() -> Iterator[str]: 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 + referrer_setting['never'] = None if can_override_referer else '--no-referrers' + for setting, args in sorted(settings.items()): arg = args[config.instance.get(setting)] if arg is not None: diff --git a/tests/unit/config/test_qtargs.py b/tests/unit/config/test_qtargs.py index a2af26800..051956a00 100644 --- a/tests/unit/config/test_qtargs.py +++ b/tests/unit/config/test_qtargs.py @@ -253,11 +253,21 @@ class TestQtArgs: assert arg in args @pytest.mark.parametrize('qt_version, referer, arg', [ - ('5.15', 'always', None), - ('5.15', 'never', '--no-referrers'), - ('5.15', 'same-domain', '--enable-features=ReducedReferrerGranularity'), - ('5.14', 'same-domain', '--enable-features=ReducedReferrerGranularity'), - ('5.13', 'same-domain', '--reduced-referrer-granularity'), + # 'always' -> no arguments + ('5.15.0', 'always', None), + + # 'never' is handled via interceptor for most Qt versions + ('5.12.3', 'never', '--no-referrers'), + ('5.12.4', 'never', None), + ('5.13.0', 'never', '--no-referrers'), + ('5.13.1', 'never', None), + ('5.14.0', 'never', None), + ('5.15.0', 'never', None), + + # 'same-domain' - arguments depend on Qt versions + ('5.13.0', 'same-domain', '--reduced-referrer-granularity'), + ('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): monkeypatch.setattr(qtargs.objects, 'backend', usertypes.Backend.QtWebEngine) |