diff options
author | Florian Bruhin <me@the-compiler.org> | 2022-06-22 11:52:41 +0200 |
---|---|---|
committer | Florian Bruhin <me@the-compiler.org> | 2022-06-22 11:52:41 +0200 |
commit | dd68a84bc94da0492e3e49eaea629e604fe8ebee (patch) | |
tree | 5ca8722674651a65c8d4b9dc5b26b4313914b0e8 | |
parent | 9648e79645acde9b456b63fa8fc2a82c7956750f (diff) | |
download | qutebrowser-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.py | 2 | ||||
-rw-r--r-- | qutebrowser/config/websettings.py | 5 | ||||
-rw-r--r-- | tests/unit/browser/webengine/test_webenginesettings.py | 65 |
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 |