summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Bruhin <me@the-compiler.org>2020-11-23 19:20:29 +0100
committerFlorian Bruhin <me@the-compiler.org>2020-11-23 19:57:20 +0100
commit120f8ce1d48cee39b785b9e74cb541652a2ca26d (patch)
treed49cabfe5a6a5badf25603bcb99a5d175723e96b
parent63a0803b67344f90f40171f35948dc299d2db826 (diff)
downloadqutebrowser-120f8ce1d48cee39b785b9e74cb541652a2ca26d.tar.gz
qutebrowser-120f8ce1d48cee39b785b9e74cb541652a2ca26d.zip
Fix content.headers.referer = 'never' with Qt 5.15
The --no-referrers flag was removed in Chromium 79: https://chromium-review.googlesource.com/c/chromium/src/+/1808144 We now instead use the request interceptor to remove the referrer, which is possible ever since Qt 5.12.4 and 5.13.1 and something we've wanted to do anyways, see #4793. The setting is still marked as "requires a restart" (and it doesn't support URL patterns) because that's partially true: The `same-domain` value is still handled via CLI arguments. Fixes #5892 (together with the last commit for 'same-domain')
-rw-r--r--qutebrowser/browser/webengine/interceptor.py8
-rw-r--r--qutebrowser/config/qtargs.py8
-rw-r--r--tests/unit/config/test_qtargs.py20
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)