summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Bruhin <me@the-compiler.org>2022-06-22 11:52:41 +0200
committerFlorian Bruhin <me@the-compiler.org>2022-06-22 11:52:41 +0200
commitdd68a84bc94da0492e3e49eaea629e604fe8ebee (patch)
tree5ca8722674651a65c8d4b9dc5b26b4313914b0e8
parent9648e79645acde9b456b63fa8fc2a82c7956750f (diff)
downloadqutebrowser-dd68a84bc94da0492e3e49eaea629e604fe8ebee.tar.gz
qutebrowser-dd68a84bc94da0492e3e49eaea629e604fe8ebee.zip
Correctly set initial content.{javascript.clipboard,default_encoding}
Those are handled separately from the other settings, but were never initialized properly in init_settings(). For content.javascript.clipboard, this is a recent regression introduced in 4a6df3a8e84780e9f58dbda31c3a9bfa1e35cebe. For content.default_encoding, this has been around since 2018: 3956f81e730463adcba05d92d0043155609aa422. Fixes #7281
-rw-r--r--qutebrowser/browser/webengine/webenginesettings.py2
-rw-r--r--qutebrowser/config/websettings.py5
-rw-r--r--tests/unit/browser/webengine/test_webenginesettings.py65
3 files changed, 69 insertions, 3 deletions
diff --git a/qutebrowser/browser/webengine/webenginesettings.py b/qutebrowser/browser/webengine/webenginesettings.py
index ad374ed9b..1ffb55337 100644
--- a/qutebrowser/browser/webengine/webenginesettings.py
+++ b/qutebrowser/browser/webengine/webenginesettings.py
@@ -237,11 +237,13 @@ class WebEngineSettings(websettings.AbstractSettings):
self.set_unknown_url_scheme_policy(value)
elif setting == 'content.javascript.clipboard':
self._set_js_clipboard(value)
+ # NOTE: When adding something here, also add it to init_settings()!
super()._update_setting(setting, value)
def init_settings(self):
super().init_settings()
self.update_setting('content.unknown_url_scheme_policy')
+ self.update_setting('content.javascript.clipboard')
class ProfileSetter:
diff --git a/qutebrowser/config/websettings.py b/qutebrowser/config/websettings.py
index 779ed0b6b..7a55c5c97 100644
--- a/qutebrowser/config/websettings.py
+++ b/qutebrowser/config/websettings.py
@@ -167,7 +167,8 @@ class AbstractSettings:
def _update_setting(self, setting: str, value: Any) -> None:
"""Update the given setting/value.
- Unknown settings are ignored."""
+ Unknown settings are ignored.
+ """
if setting in self._ATTRIBUTES:
self.set_attribute(setting, value)
elif setting in self._FONT_SIZES:
@@ -176,6 +177,7 @@ class AbstractSettings:
self.set_font_family(setting, value)
elif setting == 'content.default_encoding':
self.set_default_text_encoding(value)
+ # NOTE: When adding something here, also add it to init_settings()!
def update_setting(self, setting: str) -> None:
"""Update the given setting."""
@@ -197,6 +199,7 @@ class AbstractSettings:
for setting in (list(self._ATTRIBUTES) + list(self._FONT_SIZES) +
list(self._FONT_FAMILIES)):
self.update_setting(setting)
+ self.update_setting('content.default_encoding')
@debugcachestats.register(name='user agent cache')
diff --git a/tests/unit/browser/webengine/test_webenginesettings.py b/tests/unit/browser/webengine/test_webenginesettings.py
index 0f803a172..111323af5 100644
--- a/tests/unit/browser/webengine/test_webenginesettings.py
+++ b/tests/unit/browser/webengine/test_webenginesettings.py
@@ -22,15 +22,20 @@ import logging
import pytest
QtWebEngineWidgets = pytest.importorskip('PyQt5.QtWebEngineWidgets')
+QWebEngineSettings = QtWebEngineWidgets.QWebEngineSettings
from qutebrowser.browser.webengine import webenginesettings
from qutebrowser.utils import usertypes
@pytest.fixture
-def global_settings(monkeypatch, default_profile):
+def settings(default_profile):
wrapper = webenginesettings._SettingsWrapper()
- settings = webenginesettings.WebEngineSettings(wrapper)
+ return webenginesettings.WebEngineSettings(wrapper)
+
+
+@pytest.fixture
+def global_settings(monkeypatch, settings):
settings.init_settings()
monkeypatch.setattr(webenginesettings, '_global_settings', settings)
@@ -57,6 +62,62 @@ def private_profile(monkeypatch):
return profile
+@pytest.mark.parametrize("setting, value, getter, expected", [
+ # attribute
+ (
+ "content.images", False,
+ lambda settings:
+ settings.testAttribute(QWebEngineSettings.WebAttribute.AutoLoadImages),
+ False,
+ ),
+ # font size
+ (
+ "fonts.web.size.default", 23,
+ lambda settings:
+ settings.fontSize(QWebEngineSettings.FontSize.DefaultFontSize),
+ 23,
+ ),
+ # font family
+ (
+ "fonts.web.family.standard", "Comic Sans MS",
+ lambda settings:
+ settings.fontFamily(QWebEngineSettings.FontFamily.StandardFont),
+ "Comic Sans MS",
+ ),
+ # encoding
+ (
+ "content.default_encoding", "utf-16",
+ lambda settings: settings.defaultTextEncoding(),
+ "utf-16",
+ ),
+ # unknown URL scheme policy
+ (
+ "content.unknown_url_scheme_policy", "allow-all",
+ lambda settings: settings.unknownUrlSchemePolicy(),
+ QWebEngineSettings.UnknownUrlSchemePolicy.AllowAllUnknownUrlSchemes,
+ ),
+ # JS clipboard
+ (
+ "content.javascript.clipboard", "access",
+ lambda settings: settings.testAttribute(
+ QWebEngineSettings.WebAttribute.JavascriptCanAccessClipboard),
+ True,
+ ),
+])
+def test_initial_settings(settings, config_stub, default_profile,
+ setting, value, getter, expected):
+ """Make sure initial setting values are applied correctly."""
+ qt_settings = default_profile.settings()
+ initial = getter(qt_settings)
+ assert initial != expected # no point in testing for the Qt default
+
+ config_stub.set_obj(setting, value)
+ settings.init_settings()
+
+ actual = getter(qt_settings)
+ assert actual == expected
+
+
def test_big_cache_size(config_stub, default_profile):
"""Make sure a too big cache size is handled correctly."""
config_stub.val.content.cache.size = 2 ** 63 - 1