summaryrefslogtreecommitdiff
path: root/qutebrowser/browser/webengine/webenginesettings.py
diff options
context:
space:
mode:
Diffstat (limited to 'qutebrowser/browser/webengine/webenginesettings.py')
-rw-r--r--qutebrowser/browser/webengine/webenginesettings.py57
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)