summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Bruhin <me@the-compiler.org>2020-12-04 16:41:47 +0100
committerFlorian Bruhin <me@the-compiler.org>2020-12-04 16:41:47 +0100
commit1f6fab7035db7ab1c25bb17b177a3f486d9012a8 (patch)
tree84b84552ddaa46ebbae3058b917e2490b77c61a1
parent226df4558b7cc88ee231bca610eeace24d00cc01 (diff)
parentb1bf969478e4b64d1f0871fd402ac5822d06286c (diff)
downloadqutebrowser-1f6fab7035db7ab1c25bb17b177a3f486d9012a8.tar.gz
qutebrowser-1f6fab7035db7ab1c25bb17b177a3f486d9012a8.zip
Merge remote-tracking branch 'origin/pr/5813'
-rw-r--r--qutebrowser/app.py2
-rw-r--r--qutebrowser/browser/browsertab.py9
-rw-r--r--qutebrowser/browser/webengine/webenginesettings.py57
-rw-r--r--qutebrowser/browser/webengine/webenginetab.py57
-rw-r--r--qutebrowser/config/websettings.py1
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