Make it possible to provide a converter for websettings

This commit is contained in:
Florian Bruhin 2018-06-11 19:14:31 +02:00
parent b7c1d7fe37
commit c5b7ed350e
3 changed files with 55 additions and 39 deletions

View File

@ -32,6 +32,7 @@ from PyQt5.QtWebEngineWidgets import (QWebEngineSettings, QWebEngineProfile,
from qutebrowser.browser.webengine import spell
from qutebrowser.config import config, websettings
from qutebrowser.config.websettings import AttributeInfo as Attr
from qutebrowser.utils import utils, standarddir, qtutils, message, log
# The default QWebEngineProfile
@ -88,35 +89,35 @@ class WebEngineSettings(websettings.AbstractSettings):
_ATTRIBUTES = {
'content.xss_auditing':
[QWebEngineSettings.XSSAuditingEnabled],
Attr(QWebEngineSettings.XSSAuditingEnabled),
'content.images':
[QWebEngineSettings.AutoLoadImages],
Attr(QWebEngineSettings.AutoLoadImages),
'content.javascript.enabled':
[QWebEngineSettings.JavascriptEnabled],
Attr(QWebEngineSettings.JavascriptEnabled),
'content.javascript.can_open_tabs_automatically':
[QWebEngineSettings.JavascriptCanOpenWindows],
Attr(QWebEngineSettings.JavascriptCanOpenWindows),
'content.javascript.can_access_clipboard':
[QWebEngineSettings.JavascriptCanAccessClipboard],
Attr(QWebEngineSettings.JavascriptCanAccessClipboard),
'content.plugins':
[QWebEngineSettings.PluginsEnabled],
Attr(QWebEngineSettings.PluginsEnabled),
'content.hyperlink_auditing':
[QWebEngineSettings.HyperlinkAuditingEnabled],
Attr(QWebEngineSettings.HyperlinkAuditingEnabled),
'content.local_content_can_access_remote_urls':
[QWebEngineSettings.LocalContentCanAccessRemoteUrls],
Attr(QWebEngineSettings.LocalContentCanAccessRemoteUrls),
'content.local_content_can_access_file_urls':
[QWebEngineSettings.LocalContentCanAccessFileUrls],
Attr(QWebEngineSettings.LocalContentCanAccessFileUrls),
'content.webgl':
[QWebEngineSettings.WebGLEnabled],
Attr(QWebEngineSettings.WebGLEnabled),
'content.local_storage':
[QWebEngineSettings.LocalStorageEnabled],
Attr(QWebEngineSettings.LocalStorageEnabled),
'input.spatial_navigation':
[QWebEngineSettings.SpatialNavigationEnabled],
Attr(QWebEngineSettings.SpatialNavigationEnabled),
'input.links_included_in_focus_chain':
[QWebEngineSettings.LinksIncludedInFocusChain],
Attr(QWebEngineSettings.LinksIncludedInFocusChain),
'scrolling.smooth':
[QWebEngineSettings.ScrollAnimatorEnabled],
Attr(QWebEngineSettings.ScrollAnimatorEnabled),
}
_FONT_SIZES = {
@ -163,7 +164,7 @@ class WebEngineSettings(websettings.AbstractSettings):
except AttributeError:
continue
self._ATTRIBUTES[name] = [value]
self._ATTRIBUTES[name] = Attr(value)
class ProfileSetter:

View File

@ -30,6 +30,7 @@ from PyQt5.QtGui import QFont
from PyQt5.QtWebKit import QWebSettings
from qutebrowser.config import config, websettings
from qutebrowser.config.websettings import AttributeInfo as Attr
from qutebrowser.utils import standarddir, urlutils
from qutebrowser.browser import shared
@ -44,48 +45,48 @@ class WebKitSettings(websettings.AbstractSettings):
_ATTRIBUTES = {
'content.images':
[QWebSettings.AutoLoadImages],
Attr(QWebSettings.AutoLoadImages),
'content.javascript.enabled':
[QWebSettings.JavascriptEnabled],
Attr(QWebSettings.JavascriptEnabled),
'content.javascript.can_open_tabs_automatically':
[QWebSettings.JavascriptCanOpenWindows],
Attr(QWebSettings.JavascriptCanOpenWindows),
'content.javascript.can_close_tabs':
[QWebSettings.JavascriptCanCloseWindows],
Attr(QWebSettings.JavascriptCanCloseWindows),
'content.javascript.can_access_clipboard':
[QWebSettings.JavascriptCanAccessClipboard],
Attr(QWebSettings.JavascriptCanAccessClipboard),
'content.plugins':
[QWebSettings.PluginsEnabled],
Attr(QWebSettings.PluginsEnabled),
'content.webgl':
[QWebSettings.WebGLEnabled],
Attr(QWebSettings.WebGLEnabled),
'content.hyperlink_auditing':
[QWebSettings.HyperlinkAuditingEnabled],
Attr(QWebSettings.HyperlinkAuditingEnabled),
'content.local_content_can_access_remote_urls':
[QWebSettings.LocalContentCanAccessRemoteUrls],
Attr(QWebSettings.LocalContentCanAccessRemoteUrls),
'content.local_content_can_access_file_urls':
[QWebSettings.LocalContentCanAccessFileUrls],
Attr(QWebSettings.LocalContentCanAccessFileUrls),
'content.dns_prefetch':
[QWebSettings.DnsPrefetchEnabled],
Attr(QWebSettings.DnsPrefetchEnabled),
'content.frame_flattening':
[QWebSettings.FrameFlatteningEnabled],
Attr(QWebSettings.FrameFlatteningEnabled),
'content.cache.appcache':
[QWebSettings.OfflineWebApplicationCacheEnabled],
Attr(QWebSettings.OfflineWebApplicationCacheEnabled),
'content.local_storage':
[QWebSettings.LocalStorageEnabled,
QWebSettings.OfflineStorageDatabaseEnabled],
Attr(QWebSettings.LocalStorageEnabled,
QWebSettings.OfflineStorageDatabaseEnabled),
'content.print_element_backgrounds':
[QWebSettings.PrintElementBackgrounds],
Attr(QWebSettings.PrintElementBackgrounds),
'content.xss_auditing':
[QWebSettings.XSSAuditingEnabled],
Attr(QWebSettings.XSSAuditingEnabled),
'input.spatial_navigation':
[QWebSettings.SpatialNavigationEnabled],
Attr(QWebSettings.SpatialNavigationEnabled),
'input.links_included_in_focus_chain':
[QWebSettings.LinksIncludedInFocusChain],
Attr(QWebSettings.LinksIncludedInFocusChain),
'zoom.text_only':
[QWebSettings.ZoomTextOnly],
Attr(QWebSettings.ZoomTextOnly),
'scrolling.smooth':
[QWebSettings.ScrollAnimatorEnabled],
Attr(QWebSettings.ScrollAnimatorEnabled),
}
_FONT_SIZES = {

View File

@ -28,6 +28,18 @@ from qutebrowser.misc import objects
UNSET = object()
class AttributeInfo:
"""Info about a settings attribute."""
def __init__(self, *attributes, converter=None):
self.attributes = attributes
if converter is None:
self.converter = lambda val: val
else:
self.converter = converter
class AbstractSettings:
"""Abstract base class for settings set via QWeb(Engine)Settings."""
@ -50,12 +62,13 @@ class AbstractSettings:
"""
old_value = self.test_attribute(name)
for attribute in self._ATTRIBUTES[name]:
info = self._ATTRIBUTES[name]
for attribute in info.attributes:
if value is configutils.UNSET:
self._settings.resetAttribute(attribute)
new_value = self.test_attribute(name)
else:
self._settings.setAttribute(attribute, value)
self._settings.setAttribute(attribute, info.converter(value))
new_value = value
return old_value != new_value
@ -66,7 +79,8 @@ class AbstractSettings:
If the setting resolves to a list of attributes, only the first
attribute is tested.
"""
return self._settings.testAttribute(self._ATTRIBUTES[name][0])
info = self._ATTRIBUTES[name]
return self._settings.testAttribute(info.attributes[0])
def set_font_size(self, name, value):
"""Set the given QWebSettings/QWebEngineSettings font size.