From e5ed72eb42b33dad80a659646244e40ad585da0b Mon Sep 17 00:00:00 2001 From: Coiby Xu Date: Fri, 20 Mar 2020 18:04:46 +0800 Subject: [PATCH] Pass tests - Add types to pass mypy test - Deal with the case that Qt<5.11 doesn't support UnknownUrlSchemePolicy - pass flake8, pylint tests - Limit UnknownUrlSchemePolicy to webengine --- doc/help/settings.asciidoc | 2 +- .../browser/webengine/webenginesettings.py | 7 +-- qutebrowser/browser/webkit/webkitsettings.py | 26 +--------- qutebrowser/config/configdata.yml | 2 +- qutebrowser/config/websettings.py | 52 ++++--------------- 5 files changed, 16 insertions(+), 73 deletions(-) diff --git a/doc/help/settings.asciidoc b/doc/help/settings.asciidoc index 884e4bf4a..b0e4e683b 100644 --- a/doc/help/settings.asciidoc +++ b/doc/help/settings.asciidoc @@ -3705,7 +3705,7 @@ Default: +pass:[true]+ [[unknown_url.scheme.policy]] === unknown_url.scheme.policy Set UnknownUrlSchemePolicy. -Only valid for webengine backend. 1: DisallowUnknownUrlSchemes, 2: AllowUnknownUrlSchemesFromUserInteraction, 3: AllowAllUnknownUrlSchemes. +Only valid for webengine backend (Qt > 5.10). 1: DisallowUnknownUrlSchemes, 2: AllowUnknownUrlSchemesFromUserInteraction, 3: AllowAllUnknownUrlSchemes. Type: <> diff --git a/qutebrowser/browser/webengine/webenginesettings.py b/qutebrowser/browser/webengine/webenginesettings.py index e96567467..199e037a0 100644 --- a/qutebrowser/browser/webengine/webenginesettings.py +++ b/qutebrowser/browser/webengine/webenginesettings.py @@ -48,7 +48,7 @@ global_settings = typing.cast('WebEngineSettings', None) parsed_user_agent = None -class _SettingsWrapper(websettings.AbstractSettingsWrapper): +class _SettingsWrapper: """Expose a QWebEngineSettings interface which acts on all profiles. @@ -95,6 +95,7 @@ class _SettingsWrapper(websettings.AbstractSettingsWrapper): for settings in self._settings: settings.setUnknownUrlSchemePolicy(policy) + class WebEngineSettings(websettings.AbstractSettings): """A wrapper for the config for QWebEngineSettings.""" @@ -137,9 +138,9 @@ class WebEngineSettings(websettings.AbstractSettings): Attr(QWebEngineSettings.ScrollAnimatorEnabled), } + # 2: AllowUnknownUrlSchemesFromUserInteraction _UnknownUrlSchemePolicy = { - 'unknown_url.scheme.policy': - QWebEngineSettings.UnknownUrlSchemePolicy, + 'unknown_url.scheme.policy': 2, } _FONT_SIZES = { diff --git a/qutebrowser/browser/webkit/webkitsettings.py b/qutebrowser/browser/webkit/webkitsettings.py index 110a82ce8..0db1a738d 100644 --- a/qutebrowser/browser/webkit/webkitsettings.py +++ b/qutebrowser/browser/webkit/webkitsettings.py @@ -44,18 +44,6 @@ global_settings = typing.cast('WebKitSettings', None) parsed_user_agent = None - -class _SettingsWrapper(websettings.AbstractSettingsWrapper): - - """Expose a QWebSettings interface which acts on all profiles. - - For read operations, the default profile value is always used. - """ - - def __init__(self): - self._settings = [QWebSettings.globalSettings()] - - class WebKitSettings(websettings.AbstractSettings): """A wrapper for the config for QWebSettings.""" @@ -108,10 +96,6 @@ class WebKitSettings(websettings.AbstractSettings): Attr(QWebSettings.ScrollAnimatorEnabled), } - _UnknownUrlSchemePolicy = { - 'unknown_url.scheme.policy': 0, - } - _FONT_SIZES = { 'fonts.web.size.minimum': QWebSettings.MinimumFontSize, @@ -143,14 +127,6 @@ class WebKitSettings(websettings.AbstractSettings): QWebSettings.FantasyFont: QFont.Fantasy, } - def update_setting(self, setting: str) -> None: - """Update the given setting.""" - # QWebSettings doesn't provide interface for - # setting UnknownUrlSchemePolicy - if setting == 'unknown_url.scheme.policy': - return - value = config.instance.get(setting) - self._update_setting(setting, value) def _set_user_stylesheet(settings): """Set the generated user-stylesheet.""" @@ -219,7 +195,7 @@ def init(_args): config.instance.changed.connect(_update_settings) global global_settings - global_settings = WebKitSettings(_SettingsWrapper()) + global_settings = WebKitSettings(QWebSettings.globalSettings()) global_settings.init_settings() diff --git a/qutebrowser/config/configdata.yml b/qutebrowser/config/configdata.yml index e9439b6e6..72305f35a 100644 --- a/qutebrowser/config/configdata.yml +++ b/qutebrowser/config/configdata.yml @@ -2523,7 +2523,7 @@ unknown_url.scheme.policy: desc: >- Set UnknownUrlSchemePolicy. - Only valid for webengine backend. + Only valid for webengine backend (Qt > 5.10). 1: DisallowUnknownUrlSchemes, 2: AllowUnknownUrlSchemesFromUserInteraction, 3: AllowAllUnknownUrlSchemes. diff --git a/qutebrowser/config/websettings.py b/qutebrowser/config/websettings.py index d29d28b9e..afba2a8b7 100644 --- a/qutebrowser/config/websettings.py +++ b/qutebrowser/config/websettings.py @@ -35,47 +35,6 @@ from qutebrowser.misc import objects, debugcachestats UNSET = object() -class AbstractSettingsWrapper: - - """Expose a QWebEngineSettings interface which acts on all profiles. - - For read operations, the default profile value is always used. - """ - - def setAttribute(self, attribute, on): - for settings in self._settings: - settings.setAttribute(attribute, on) - - def setFontFamily(self, which, family): - for settings in self._settings: - settings.setFontFamily(which, family) - - def setFontSize(self, fonttype, size): - for settings in self._settings: - settings.setFontSize(fonttype, size) - - def setDefaultTextEncoding(self, encoding): - for settings in self._settings: - settings.setDefaultTextEncoding(encoding) - - def testAttribute(self, attribute): - return self._settings[0].testAttribute(attribute) - - def fontSize(self, fonttype): - return self._settings[0].fontSize(fonttype) - - def fontFamily(self, which): - return self._settings[0].fontFamily(which) - - def defaultTextEncoding(self): - return self._settings[0].defaultTextEncoding() - - def unknownUrlSchemePolicy(self): - return self._settings[0].unknownUrlSchemePolicy() - - def setUnknownUrlSchemePolicy(self, policy): - for settings in self._settings: - settings.setUnknownUrlSchemePolicy(policy) @attr.s class UserAgent: @@ -138,9 +97,9 @@ class AbstractSettings: _ATTRIBUTES = {} # type: typing.Dict[str, AttributeInfo] _FONT_SIZES = {} # type: typing.Dict[str, typing.Any] - _UnknownUrlSchemePolicy = {} # type: typing.Dict[str, typing.Any] _FONT_FAMILIES = {} # type: typing.Dict[str, typing.Any] _FONT_TO_QFONT = {} # type: typing.Dict[typing.Any, QFont.StyleHint] + _UnknownUrlSchemePolicy = {} # type: typing.Dict[str, typing.Any] def __init__(self, settings: typing.Any) -> None: self._settings = settings @@ -247,7 +206,14 @@ class AbstractSettings: elif setting == 'content.default_encoding': return self.set_default_text_encoding(value) elif setting == 'unknown_url.scheme.policy': - return self.set_unknown_url_scheme_policy(value) + # QtWebKit and QWebEngine < 5.11 doesn't provide interfaces + # for processing UnknownUrlSchemePolicy. + # + # AttributeError is expected for such cases. + try: + return self.set_unknown_url_scheme_policy(value) + except AttributeError: + pass return False def update_setting(self, setting: str) -> None: