From 40a1772fdea98fc1ecc168a5f75aa296cb7fdf5e Mon Sep 17 00:00:00 2001 From: lufte Date: Fri, 16 Oct 2020 23:09:43 -0300 Subject: Re-install all modules every time a new profile is created. --- qutebrowser/browser/webengine/webenginesettings.py | 11 ++++++++++- qutebrowser/browser/webengine/webenginetab.py | 2 ++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/qutebrowser/browser/webengine/webenginesettings.py b/qutebrowser/browser/webengine/webenginesettings.py index 336540ba0..5a6724484 100644 --- a/qutebrowser/browser/webengine/webenginesettings.py +++ b/qutebrowser/browser/webengine/webenginesettings.py @@ -36,7 +36,7 @@ from qutebrowser.browser.webengine import spell, webenginequtescheme from qutebrowser.config import config, websettings from qutebrowser.config.websettings import AttributeInfo as Attr from qutebrowser.utils import (utils, standarddir, qtutils, message, log, - urlmatch, usertypes) + urlmatch, usertypes, objreg) # The default QWebEngineProfile default_profile = typing.cast(QWebEngineProfile, None) @@ -382,12 +382,21 @@ def init_private_profile(): global private_profile if not qtutils.is_single_process(): + is_first_time = private_profile is None private_profile = QWebEngineProfile() private_profile.setter = ProfileSetter( # type: ignore[attr-defined] private_profile) assert private_profile.isOffTheRecord() private_profile.setter.init_profile() + if not is_first_time: + from qutebrowser.browser.webengine import webenginetab + webenginetab._qute_scheme_handler.install(private_profile) + webenginetab.req_interceptor.install(private_profile) + objreg.get('webengine-download-manager').install(private_profile) + from qutebrowser.browser.webengine import cookies + cookies.install_filter(private_profile) + def _init_site_specific_quirks(): """Add custom user-agent settings for problematic sites. diff --git a/qutebrowser/browser/webengine/webenginetab.py b/qutebrowser/browser/webengine/webenginetab.py index fec87acaf..220e41f94 100644 --- a/qutebrowser/browser/webengine/webenginetab.py +++ b/qutebrowser/browser/webengine/webenginetab.py @@ -46,6 +46,7 @@ from qutebrowser.qt import sip _qute_scheme_handler = None +req_interceptor = None def init(): @@ -54,6 +55,7 @@ def init(): # won't work... # https://www.riverbankcomputing.com/pipermail/pyqt/2016-September/038075.html global _qute_scheme_handler + global req_interceptor app = QApplication.instance() log.init.debug("Initializing qute://* handler...") -- cgit v1.2.3-54-g00ecf From 140c728cc475a929a22e2783a535304a94474e09 Mon Sep 17 00:00:00 2001 From: lufte Date: Sun, 25 Oct 2020 20:09:27 -0300 Subject: Move profile initialization to webenginesettings.py --- qutebrowser/app.py | 9 ++-- qutebrowser/browser/browsertab.py | 9 ---- qutebrowser/browser/webengine/webenginesettings.py | 57 +++++++++++++++++++--- qutebrowser/browser/webengine/webenginetab.py | 53 +------------------- 4 files changed, 54 insertions(+), 74 deletions(-) diff --git a/qutebrowser/app.py b/qutebrowser/app.py index e92a30c44..17ec6a802 100644 --- a/qutebrowser/app.py +++ b/qutebrowser/app.py @@ -465,10 +465,6 @@ def _init_modules(*, args): log.init.debug("Initializing sessions...") sessions.init(q_app) - log.init.debug("Initializing websettings...") - websettings.init(args) - quitter.instance.shutting_down.connect(websettings.shutdown) - if not args.no_err_windows: crashsignal.crash_handler.display_faulthandler() @@ -483,6 +479,10 @@ def _init_modules(*, args): log.init.debug("Initializing cookies...") cookies.init(q_app) + log.init.debug("Initializing websettings...") + websettings.init(args) + quitter.instance.shutting_down.connect(websettings.shutdown) + log.init.debug("Initializing cache...") cache.init(q_app) @@ -496,7 +496,6 @@ def _init_modules(*, args): 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 4501ba4aa..f5049b3d3 100644 --- a/qutebrowser/browser/browsertab.py +++ b/qutebrowser/browser/browsertab.py @@ -81,15 +81,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 5a6724484..e0be18bc2 100644 --- a/qutebrowser/browser/webengine/webenginesettings.py +++ b/qutebrowser/browser/webengine/webenginesettings.py @@ -29,15 +29,19 @@ import operator import typing from PyQt5.QtGui import QFont +from PyQt5.QtWidgets import QApplication from PyQt5.QtWebEngineWidgets import (QWebEngineSettings, QWebEngineProfile, QWebEnginePage) -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 (utils, standarddir, qtutils, message, log, urlmatch, usertypes, objreg) + # The default QWebEngineProfile default_profile = typing.cast(QWebEngineProfile, None) # The QWebEngineProfile used for private (off-the-record) windows @@ -47,6 +51,10 @@ global_settings = typing.cast('WebEngineSettings', None) parsed_user_agent = None +_qute_scheme_handler = None +_req_interceptor = None +_download_manager = None + class _SettingsWrapper: @@ -376,6 +384,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.""" @@ -389,13 +407,16 @@ def init_private_profile(): assert private_profile.isOffTheRecord() private_profile.setter.init_profile() - if not is_first_time: - from qutebrowser.browser.webengine import webenginetab - webenginetab._qute_scheme_handler.install(private_profile) - webenginetab.req_interceptor.install(private_profile) - objreg.get('webengine-download-manager').install(private_profile) - from qutebrowser.browser.webengine import cookies - cookies.install_filter(private_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(): @@ -480,6 +501,26 @@ def init(args): 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 220e41f94..3a6ca58cd 100644 --- a/qutebrowser/browser/webengine/webenginetab.py +++ b/qutebrowser/browser/webengine/webenginetab.py @@ -32,11 +32,8 @@ from PyQt5.QtWidgets import QApplication, QWidget from PyQt5.QtWebEngineWidgets import QWebEnginePage, QWebEngineScript, QWebEngineHistory from qutebrowser.config import configdata, 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.utils import (usertypes, qtutils, log, javascript, utils, @@ -45,54 +42,6 @@ from qutebrowser.keyinput import modeman from qutebrowser.qt import sip -_qute_scheme_handler = None -req_interceptor = 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 - global req_interceptor - - 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, -- cgit v1.2.3-54-g00ecf From 199186f62cf16e4f7f3081c649b5f07dfb2c7f4d Mon Sep 17 00:00:00 2001 From: lufte Date: Sun, 1 Nov 2020 12:34:52 -0300 Subject: Re-apply settings to the newly created private profile. --- qutebrowser/config/websettings.py | 1 + 1 file changed, 1 insertion(+) diff --git a/qutebrowser/config/websettings.py b/qutebrowser/config/websettings.py index cc307dd75..0f4616c4b 100644 --- a/qutebrowser/config/websettings.py +++ b/qutebrowser/config/websettings.py @@ -287,6 +287,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 -- cgit v1.2.3-54-g00ecf From c8e8a359c1fe3ac71c7fcb029ec3da522b9f9afa Mon Sep 17 00:00:00 2001 From: lufte Date: Tue, 10 Nov 2020 20:40:54 -0300 Subject: Fix linters --- qutebrowser/browser/webengine/webenginesettings.py | 9 ++++----- qutebrowser/browser/webengine/webenginetab.py | 4 ++-- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/qutebrowser/browser/webengine/webenginesettings.py b/qutebrowser/browser/webengine/webenginesettings.py index e0be18bc2..24c882d23 100644 --- a/qutebrowser/browser/webengine/webenginesettings.py +++ b/qutebrowser/browser/webengine/webenginesettings.py @@ -51,9 +51,9 @@ global_settings = typing.cast('WebEngineSettings', None) parsed_user_agent = None -_qute_scheme_handler = None +_qute_scheme_handler = typing.cast(webenginequtescheme.QuteSchemeHandler, None) _req_interceptor = None -_download_manager = None +_download_manager = typing.cast(webenginedownloads.DownloadManager, None) class _SettingsWrapper: @@ -385,7 +385,7 @@ def _init_default_profile(): default_profile.setter.set_persistent_cookie_policy() _qute_scheme_handler.install(default_profile) - _req_interceptor.install(default_profile) + _req_interceptor.install(default_profile) # type: ignore _download_manager.install(default_profile) cookies.install_filter(default_profile) @@ -400,7 +400,6 @@ def init_private_profile(): global private_profile if not qtutils.is_single_process(): - is_first_time = private_profile is None private_profile = QWebEngineProfile() private_profile.setter = ProfileSetter( # type: ignore[attr-defined] private_profile) @@ -408,7 +407,7 @@ def init_private_profile(): private_profile.setter.init_profile() _qute_scheme_handler.install(private_profile) - _req_interceptor.install(private_profile) + _req_interceptor.install(private_profile) # type: ignore _download_manager.install(private_profile) cookies.install_filter(private_profile) diff --git a/qutebrowser/browser/webengine/webenginetab.py b/qutebrowser/browser/webengine/webenginetab.py index 3a6ca58cd..db79fe18f 100644 --- a/qutebrowser/browser/webengine/webenginetab.py +++ b/qutebrowser/browser/webengine/webenginetab.py @@ -28,14 +28,14 @@ import typing from PyQt5.QtCore import (pyqtSignal, pyqtSlot, Qt, QPoint, QPointF, QUrl, QTimer, 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 configdata, config from qutebrowser.browser import (browsertab, eventfilter, shared, webelem, greasemonkey) from qutebrowser.browser.webengine import (webview, webengineelem, tabhistory, 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) from qutebrowser.keyinput import modeman -- cgit v1.2.3-54-g00ecf From 6d79d52f99946caa9b05de6403f2fe34150cdcf0 Mon Sep 17 00:00:00 2001 From: lufte Date: Tue, 10 Nov 2020 20:58:59 -0300 Subject: Update "typing" imports. --- qutebrowser/browser/webengine/webenginesettings.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/qutebrowser/browser/webengine/webenginesettings.py b/qutebrowser/browser/webengine/webenginesettings.py index 7bef0d95b..e28250706 100644 --- a/qutebrowser/browser/webengine/webenginesettings.py +++ b/qutebrowser/browser/webengine/webenginesettings.py @@ -50,9 +50,9 @@ global_settings = cast('WebEngineSettings', None) parsed_user_agent = None -_qute_scheme_handler = typing.cast(webenginequtescheme.QuteSchemeHandler, None) +_qute_scheme_handler = cast(webenginequtescheme.QuteSchemeHandler, None) _req_interceptor = None -_download_manager = typing.cast(webenginedownloads.DownloadManager, None) +_download_manager = cast(webenginedownloads.DownloadManager, None) class _SettingsWrapper: -- cgit v1.2.3-54-g00ecf From e1c8f66a75287e9341007ea885f2db8d87e2ad97 Mon Sep 17 00:00:00 2001 From: lufte Date: Tue, 10 Nov 2020 21:05:25 -0300 Subject: Remove unused import --- qutebrowser/browser/webengine/webenginetab.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qutebrowser/browser/webengine/webenginetab.py b/qutebrowser/browser/webengine/webenginetab.py index 95f317131..21c6250e4 100644 --- a/qutebrowser/browser/webengine/webenginetab.py +++ b/qutebrowser/browser/webengine/webenginetab.py @@ -36,7 +36,7 @@ from qutebrowser.browser.webengine import (webview, webengineelem, tabhistory, webenginesettings, certificateerror) 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 -- cgit v1.2.3-54-g00ecf From b374191b35b2a9131edb2a336660f3f47d644b92 Mon Sep 17 00:00:00 2001 From: lufte Date: Thu, 3 Dec 2020 21:02:43 -0300 Subject: Reverting this order switch as apparently it's not needed --- qutebrowser/app.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/qutebrowser/app.py b/qutebrowser/app.py index 8f9650924..fc514a634 100644 --- a/qutebrowser/app.py +++ b/qutebrowser/app.py @@ -461,6 +461,10 @@ def _init_modules(*, args): log.init.debug("Initializing sessions...") sessions.init(q_app) + log.init.debug("Initializing websettings...") + websettings.init(args) + quitter.instance.shutting_down.connect(websettings.shutdown) + if not args.no_err_windows: crashsignal.crash_handler.display_faulthandler() @@ -475,10 +479,6 @@ def _init_modules(*, args): log.init.debug("Initializing cookies...") cookies.init(q_app) - log.init.debug("Initializing websettings...") - websettings.init(args) - quitter.instance.shutting_down.connect(websettings.shutdown) - log.init.debug("Initializing cache...") cache.init(q_app) @@ -491,7 +491,6 @@ def _init_modules(*, args): log.init.debug("Misc initialization...") macros.init() windowundo.init() - # Init backend-specific stuff class Application(QApplication): -- cgit v1.2.3-54-g00ecf From f8693dde04d609e811fd55e99ef47d49953c3c31 Mon Sep 17 00:00:00 2001 From: lufte Date: Thu, 3 Dec 2020 21:16:09 -0300 Subject: Remove unecessary parenthesis --- qutebrowser/browser/webengine/webenginetab.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qutebrowser/browser/webengine/webenginetab.py b/qutebrowser/browser/webengine/webenginetab.py index 21c6250e4..8ba176885 100644 --- a/qutebrowser/browser/webengine/webenginetab.py +++ b/qutebrowser/browser/webengine/webenginetab.py @@ -31,7 +31,7 @@ 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, greasemonkey) +from qutebrowser.browser import browsertab, eventfilter, shared, webelem, greasemonkey from qutebrowser.browser.webengine import (webview, webengineelem, tabhistory, webenginesettings, certificateerror) from qutebrowser.misc import miscwidgets, objects -- cgit v1.2.3-54-g00ecf From b1bf969478e4b64d1f0871fd402ac5822d06286c Mon Sep 17 00:00:00 2001 From: lufte Date: Thu, 3 Dec 2020 21:28:29 -0300 Subject: Add missing type using TYPE_CHECKING conditional --- qutebrowser/browser/webengine/webenginesettings.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/qutebrowser/browser/webengine/webenginesettings.py b/qutebrowser/browser/webengine/webenginesettings.py index e28250706..f2be2c6e9 100644 --- a/qutebrowser/browser/webengine/webenginesettings.py +++ b/qutebrowser/browser/webengine/webenginesettings.py @@ -26,7 +26,7 @@ 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 @@ -39,7 +39,8 @@ from qutebrowser.config import config, websettings from qutebrowser.config.websettings import AttributeInfo as Attr 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) @@ -51,7 +52,7 @@ global_settings = cast('WebEngineSettings', None) parsed_user_agent = None _qute_scheme_handler = cast(webenginequtescheme.QuteSchemeHandler, None) -_req_interceptor = None +_req_interceptor = cast('interceptor.RequestInterceptor', None) _download_manager = cast(webenginedownloads.DownloadManager, None) @@ -354,7 +355,7 @@ def _init_default_profile(): default_profile.setter.set_persistent_cookie_policy() _qute_scheme_handler.install(default_profile) - _req_interceptor.install(default_profile) # type: ignore + _req_interceptor.install(default_profile) _download_manager.install(default_profile) cookies.install_filter(default_profile) @@ -376,7 +377,7 @@ def init_private_profile(): private_profile.setter.init_profile() _qute_scheme_handler.install(private_profile) - _req_interceptor.install(private_profile) # type: ignore + _req_interceptor.install(private_profile) _download_manager.install(private_profile) cookies.install_filter(private_profile) -- cgit v1.2.3-54-g00ecf