diff options
author | Florian Bruhin <me@the-compiler.org> | 2020-12-04 16:41:47 +0100 |
---|---|---|
committer | Florian Bruhin <me@the-compiler.org> | 2020-12-04 16:41:47 +0100 |
commit | 1f6fab7035db7ab1c25bb17b177a3f486d9012a8 (patch) | |
tree | 84b84552ddaa46ebbae3058b917e2490b77c61a1 | |
parent | 226df4558b7cc88ee231bca610eeace24d00cc01 (diff) | |
parent | b1bf969478e4b64d1f0871fd402ac5822d06286c (diff) | |
download | qutebrowser-1f6fab7035db7ab1c25bb17b177a3f486d9012a8.tar.gz qutebrowser-1f6fab7035db7ab1c25bb17b177a3f486d9012a8.zip |
Merge remote-tracking branch 'origin/pr/5813'
-rw-r--r-- | qutebrowser/app.py | 2 | ||||
-rw-r--r-- | qutebrowser/browser/browsertab.py | 9 | ||||
-rw-r--r-- | qutebrowser/browser/webengine/webenginesettings.py | 57 | ||||
-rw-r--r-- | qutebrowser/browser/webengine/webenginetab.py | 57 | ||||
-rw-r--r-- | qutebrowser/config/websettings.py | 1 |
5 files changed, 59 insertions, 67 deletions
diff --git a/qutebrowser/app.py b/qutebrowser/app.py index bc554bfc0..76d52470a 100644 --- a/qutebrowser/app.py +++ b/qutebrowser/app.py @@ -492,8 +492,6 @@ def _init_modules(*, args): log.init.debug("Misc initialization...") macros.init() windowundo.init() - # Init backend-specific stuff - browsertab.init() class Application(QApplication): diff --git a/qutebrowser/browser/browsertab.py b/qutebrowser/browser/browsertab.py index dd21cd0e0..bf25455a6 100644 --- a/qutebrowser/browser/browsertab.py +++ b/qutebrowser/browser/browsertab.py @@ -83,15 +83,6 @@ def create(win_id: int, parent=parent) -def init() -> None: - """Initialize backend-specific modules.""" - if objects.backend == usertypes.Backend.QtWebEngine: - from qutebrowser.browser.webengine import webenginetab - webenginetab.init() - return - assert objects.backend == usertypes.Backend.QtWebKit, objects.backend - - class WebTabError(Exception): """Base class for various errors.""" 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) diff --git a/qutebrowser/browser/webengine/webenginetab.py b/qutebrowser/browser/webengine/webenginetab.py index f026b7c23..98a6bf05d 100644 --- a/qutebrowser/browser/webengine/webenginetab.py +++ b/qutebrowser/browser/webengine/webenginetab.py @@ -27,68 +27,19 @@ from typing import cast, Union from PyQt5.QtCore import pyqtSignal, pyqtSlot, Qt, QPoint, QPointF, QUrl, QObject from PyQt5.QtNetwork import QAuthenticator -from PyQt5.QtWidgets import QApplication, QWidget +from PyQt5.QtWidgets import QWidget from PyQt5.QtWebEngineWidgets import QWebEnginePage, QWebEngineScript, QWebEngineHistory from qutebrowser.config import config -from qutebrowser.browser import (browsertab, eventfilter, shared, webelem, - history, greasemonkey) +from qutebrowser.browser import browsertab, eventfilter, shared, webelem, greasemonkey from qutebrowser.browser.webengine import (webview, webengineelem, tabhistory, - interceptor, webenginequtescheme, - cookies, webenginedownloads, webenginesettings, certificateerror) -from qutebrowser.misc import miscwidgets, objects, quitter +from qutebrowser.misc import miscwidgets, objects from qutebrowser.utils import (usertypes, qtutils, log, javascript, utils, - message, objreg, jinja, debug) + message, jinja, debug) from qutebrowser.qt import sip -_qute_scheme_handler = None - - -def init(): - """Initialize QtWebEngine-specific modules.""" - # 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) - _qute_scheme_handler.install(webenginesettings.default_profile) - if webenginesettings.private_profile: - _qute_scheme_handler.install(webenginesettings.private_profile) - - log.init.debug("Initializing request interceptor...") - req_interceptor = interceptor.RequestInterceptor(parent=app) - req_interceptor.install(webenginesettings.default_profile) - if webenginesettings.private_profile: - req_interceptor.install(webenginesettings.private_profile) - - log.init.debug("Initializing QtWebEngine downloads...") - download_manager = webenginedownloads.DownloadManager(parent=app) - download_manager.install(webenginesettings.default_profile) - if webenginesettings.private_profile: - download_manager.install(webenginesettings.private_profile) - objreg.register('webengine-download-manager', download_manager) - quitter.instance.shutting_down.connect(download_manager.shutdown) - - log.init.debug("Initializing cookie filter...") - cookies.install_filter(webenginesettings.default_profile) - if webenginesettings.private_profile: - cookies.install_filter(webenginesettings.private_profile) - - # Clear visited links on web history clear - for p in [webenginesettings.default_profile, - webenginesettings.private_profile]: - if not p: - continue - history.web_history.history_cleared.connect(p.clearAllVisitedLinks) - history.web_history.url_cleared.connect( - lambda url, profile=p: profile.clearVisitedLinks([url])) - - # Mapping worlds from usertypes.JsWorld to QWebEngineScript world IDs. _JS_WORLD_MAP = { usertypes.JsWorld.main: QWebEngineScript.MainWorld, diff --git a/qutebrowser/config/websettings.py b/qutebrowser/config/websettings.py index e1cb393dc..2b76ab9c5 100644 --- a/qutebrowser/config/websettings.py +++ b/qutebrowser/config/websettings.py @@ -247,6 +247,7 @@ def clear_private_data() -> None: if objects.backend == usertypes.Backend.QtWebEngine: from qutebrowser.browser.webengine import webenginesettings webenginesettings.init_private_profile() + webenginesettings.global_settings.init_settings() elif objects.backend == usertypes.Backend.QtWebKit: from qutebrowser.browser.webkit import cookies assert cookies.ram_cookie_jar is not None |