diff options
Diffstat (limited to 'qutebrowser/browser/webengine/webenginesettings.py')
-rw-r--r-- | qutebrowser/browser/webengine/webenginesettings.py | 57 |
1 files changed, 54 insertions, 3 deletions
diff --git a/qutebrowser/browser/webengine/webenginesettings.py b/qutebrowser/browser/webengine/webenginesettings.py index 1526574a7..f2be2c6e9 100644 --- a/qutebrowser/browser/webengine/webenginesettings.py +++ b/qutebrowser/browser/webengine/webenginesettings.py @@ -26,15 +26,21 @@ Module attributes: import os import operator -from typing import cast, Any, List, Optional, Tuple, Union +from typing import cast, Any, List, Optional, Tuple, Union, TYPE_CHECKING from PyQt5.QtGui import QFont +from PyQt5.QtWidgets import QApplication from PyQt5.QtWebEngineWidgets import QWebEngineSettings, QWebEngineProfile -from qutebrowser.browser.webengine import spell, webenginequtescheme +from qutebrowser.browser import history +from qutebrowser.browser.webengine import (spell, webenginequtescheme, cookies, + webenginedownloads) from qutebrowser.config import config, websettings from qutebrowser.config.websettings import AttributeInfo as Attr -from qutebrowser.utils import standarddir, qtutils, message, log, urlmatch, usertypes +from qutebrowser.utils import (standarddir, qtutils, message, log, + urlmatch, usertypes, objreg) +if TYPE_CHECKING: + from qutebrowser.browser.webengine import interceptor # The default QWebEngineProfile default_profile = cast(QWebEngineProfile, None) @@ -45,6 +51,10 @@ global_settings = cast('WebEngineSettings', None) parsed_user_agent = None +_qute_scheme_handler = cast(webenginequtescheme.QuteSchemeHandler, None) +_req_interceptor = cast('interceptor.RequestInterceptor', None) +_download_manager = cast(webenginedownloads.DownloadManager, None) + class _SettingsWrapper: @@ -344,6 +354,16 @@ def _init_default_profile(): default_profile.setter.init_profile() default_profile.setter.set_persistent_cookie_policy() + _qute_scheme_handler.install(default_profile) + _req_interceptor.install(default_profile) + _download_manager.install(default_profile) + cookies.install_filter(default_profile) + + # Clear visited links on web history clear + history.web_history.history_cleared.connect(default_profile.clearAllVisitedLinks) + history.web_history.url_cleared.connect( + lambda url, profile=default_profile: profile.clearVisitedLinks([url])) + def init_private_profile(): """Init the private QWebEngineProfile.""" @@ -356,6 +376,17 @@ def init_private_profile(): assert private_profile.isOffTheRecord() private_profile.setter.init_profile() + _qute_scheme_handler.install(private_profile) + _req_interceptor.install(private_profile) + _download_manager.install(private_profile) + cookies.install_filter(private_profile) + + # Clear visited links on web history clear + history.web_history.history_cleared.connect( + default_profile.clearAllVisitedLinks) + history.web_history.url_cleared.connect( + lambda url, profile=private_profile: profile.clearVisitedLinks([url])) + def _init_site_specific_quirks(): """Add custom user-agent settings for problematic sites. @@ -430,6 +461,26 @@ def init(): webenginequtescheme.init() spell.init() + # For some reason we need to keep a reference, otherwise the scheme handler + # won't work... + # https://www.riverbankcomputing.com/pipermail/pyqt/2016-September/038075.html + global _qute_scheme_handler + app = QApplication.instance() + log.init.debug("Initializing qute://* handler...") + _qute_scheme_handler = webenginequtescheme.QuteSchemeHandler(parent=app) + + global _req_interceptor + log.init.debug("Initializing request interceptor...") + from qutebrowser.browser.webengine import interceptor + _req_interceptor = interceptor.RequestInterceptor(parent=app) + + global _download_manager + log.init.debug("Initializing QtWebEngine downloads...") + _download_manager = webenginedownloads.DownloadManager(parent=app) + objreg.register('webengine-download-manager', _download_manager) + from qutebrowser.misc import quitter + quitter.instance.shutting_down.connect(_download_manager.shutdown) + _init_default_profile() init_private_profile() config.instance.changed.connect(_update_settings) |