diff options
Diffstat (limited to 'qutebrowser/browser/webengine/webenginesettings.py')
-rw-r--r-- | qutebrowser/browser/webengine/webenginesettings.py | 77 |
1 files changed, 46 insertions, 31 deletions
diff --git a/qutebrowser/browser/webengine/webenginesettings.py b/qutebrowser/browser/webengine/webenginesettings.py index 5e83935ca..2b375a7b0 100644 --- a/qutebrowser/browser/webengine/webenginesettings.py +++ b/qutebrowser/browser/webengine/webenginesettings.py @@ -1,19 +1,6 @@ -# Copyright 2016-2021 Florian Bruhin (The Compiler) <mail@qutebrowser.org> +# SPDX-FileCopyrightText: Florian Bruhin (The Compiler) <mail@qutebrowser.org> # -# This file is part of qutebrowser. -# -# qutebrowser is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# qutebrowser is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with qutebrowser. If not, see <https://www.gnu.org/licenses/>. +# SPDX-License-Identifier: GPL-3.0-or-later """Bridge from QWebEngineSettings to our own settings. @@ -37,6 +24,7 @@ from qutebrowser.browser.webengine import (spell, webenginequtescheme, cookies, webenginedownloads, notification) from qutebrowser.config import config, websettings from qutebrowser.config.websettings import AttributeInfo as Attr +from qutebrowser.misc import pakjoy from qutebrowser.utils import (standarddir, qtutils, message, log, urlmatch, usertypes, objreg, version) if TYPE_CHECKING: @@ -63,8 +51,12 @@ class _SettingsWrapper: For read operations, the default profile value is always used. """ + def _default_profile_settings(self): + assert default_profile is not None + return default_profile.settings() + def _settings(self): - yield default_profile.settings() + yield self._default_profile_settings() if private_profile: yield private_profile.settings() @@ -89,19 +81,19 @@ class _SettingsWrapper: settings.setUnknownUrlSchemePolicy(policy) def testAttribute(self, attribute): - return default_profile.settings().testAttribute(attribute) + return self._default_profile_settings().testAttribute(attribute) def fontSize(self, fonttype): - return default_profile.settings().fontSize(fonttype) + return self._default_profile_settings().fontSize(fonttype) def fontFamily(self, which): - return default_profile.settings().fontFamily(which) + return self._default_profile_settings().fontFamily(which) def defaultTextEncoding(self): - return default_profile.settings().defaultTextEncoding() + return self._default_profile_settings().defaultTextEncoding() def unknownUrlSchemePolicy(self): - return default_profile.settings().unknownUrlSchemePolicy() + return self._default_profile_settings().unknownUrlSchemePolicy() class WebEngineSettings(websettings.AbstractSettings): @@ -156,6 +148,12 @@ class WebEngineSettings(websettings.AbstractSettings): Attr(QWebEngineSettings.WebAttribute.AutoLoadIconsForPage, converter=lambda val: val != 'never'), } + try: + _ATTRIBUTES['content.canvas_reading'] = Attr( + QWebEngineSettings.WebAttribute.ReadingFromCanvasEnabled) # type: ignore[attr-defined,unused-ignore] + except AttributeError: + # Added in QtWebEngine 6.6 + pass _FONT_SIZES = { 'fonts.web.size.minimum': @@ -354,7 +352,10 @@ def _init_user_agent_str(ua): def init_user_agent(): - _init_user_agent_str(QWebEngineProfile.defaultProfile().httpUserAgent()) + """Make the default WebEngine user agent available via parsed_user_agent.""" + actual_default_profile = QWebEngineProfile.defaultProfile() + assert actual_default_profile is not None + _init_user_agent_str(actual_default_profile.httpUserAgent()) def _init_profile(profile: QWebEngineProfile) -> None: @@ -443,12 +444,21 @@ def _init_site_specific_quirks(): "AppleWebKit/{webkit_version} (KHTML, like Gecko) " "{upstream_browser_key}/{upstream_browser_version} " "Safari/{webkit_version}") - new_chrome_ua = ("Mozilla/5.0 ({os_info}) " - "AppleWebKit/537.36 (KHTML, like Gecko) " - "Chrome/99 " - "Safari/537.36") firefox_ua = "Mozilla/5.0 ({os_info}; rv:90.0) Gecko/20100101 Firefox/90.0" + def maybe_newer_chrome_ua(at_least_version): + """Return a new UA if our current chrome version isn't at least at_least_version.""" + current_chome_version = version.qtwebengine_versions().chromium_major + if current_chome_version >= at_least_version: + return None + + return ( + "Mozilla/5.0 ({os_info}) " + "AppleWebKit/537.36 (KHTML, like Gecko) " + f"Chrome/{at_least_version} " + "Safari/537.36" + ) + user_agents = [ # Needed to avoid a ""WhatsApp works with Google Chrome 36+" error # page which doesn't allow to use WhatsApp Web at all. Also see the @@ -463,13 +473,14 @@ def _init_site_specific_quirks(): # Needed because Slack adds an error which prevents using it relatively # aggressively, despite things actually working fine. - # September 2020: Qt 5.12 works, but Qt <= 5.11 shows the error. - # FIXME:qt6 Still needed? - # https://github.com/qutebrowser/qutebrowser/issues/4669 - ("ua-slack", 'https://*.slack.com/*', new_chrome_ua), + # October 2023: Slack claims they only support 112+. On #7951 at least + # one user claims it still works fine on 108 based Qt versions. + ("ua-slack", 'https://*.slack.com/*', maybe_newer_chrome_ua(112)), ] for name, pattern, ua in user_agents: + if not ua: + continue if name not in config.val.content.site_specific_quirks.skip: config.instance.set_obj('content.headers.user_agent', ua, pattern=urlmatch.UrlPattern(pattern), @@ -549,7 +560,11 @@ def init(): _global_settings = WebEngineSettings(_SettingsWrapper()) log.init.debug("Initializing profiles...") - _init_default_profile() + + # Apply potential resource patches while initializing profiles. + with pakjoy.patch_webengine(): + _init_default_profile() + init_private_profile() config.instance.changed.connect(_update_settings) |