From 530befd68154440348c776a7dbf3683a7d90d9d1 Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Thu, 3 Jan 2019 14:38:12 +0100 Subject: [PATCH] Register qute:// scheme with Qt See #3992, #4198 --- .../browser/webengine/webenginequtescheme.py | 21 +++++++++++++++++++ .../browser/webengine/webenginesettings.py | 3 ++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/qutebrowser/browser/webengine/webenginequtescheme.py b/qutebrowser/browser/webengine/webenginequtescheme.py index 4e42e0eb5..816589514 100644 --- a/qutebrowser/browser/webengine/webenginequtescheme.py +++ b/qutebrowser/browser/webengine/webenginequtescheme.py @@ -22,6 +22,11 @@ from PyQt5.QtCore import QBuffer, QIODevice, QUrl from PyQt5.QtWebEngineCore import (QWebEngineUrlSchemeHandler, QWebEngineUrlRequestJob) +try: + from PyQt5.QtWebEngineCore import QWebEngineUrlScheme # type: ignore +except ImportError: + # Added in Qt 5.12 + QWebEngineUrlScheme = None from qutebrowser.browser import qutescheme from qutebrowser.utils import log, qtutils @@ -33,6 +38,9 @@ class QuteSchemeHandler(QWebEngineUrlSchemeHandler): def install(self, profile): """Install the handler for qute:// URLs on the given profile.""" + if QWebEngineUrlScheme is not None: + assert QWebEngineUrlScheme.schemeByName(b'qute') is not None + profile.installUrlSchemeHandler(b'qute', self) if (qtutils.version_check('5.11', compiled=False) and not qtutils.version_check('5.12', compiled=False)): @@ -131,3 +139,16 @@ class QuteSchemeHandler(QWebEngineUrlSchemeHandler): buf.seek(0) buf.close() job.reply(mimetype.encode('ascii'), buf) + + +def init(): + """Register the qute:// scheme. + + Note this needs to be called early, before constructing any QtWebEngine + classes. + """ + if QWebEngineUrlScheme is not None: + scheme = QWebEngineUrlScheme(b'qute') + scheme.setFlags(QWebEngineUrlScheme.LocalScheme | + QWebEngineUrlScheme.LocalAccessAllowed) + QWebEngineUrlScheme.registerScheme(scheme) diff --git a/qutebrowser/browser/webengine/webenginesettings.py b/qutebrowser/browser/webengine/webenginesettings.py index da569eef6..10c4d4e6b 100644 --- a/qutebrowser/browser/webengine/webenginesettings.py +++ b/qutebrowser/browser/webengine/webenginesettings.py @@ -30,7 +30,7 @@ from PyQt5.QtGui import QFont from PyQt5.QtWebEngineWidgets import (QWebEngineSettings, QWebEngineProfile, QWebEnginePage) -from qutebrowser.browser.webengine import spell +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 @@ -298,6 +298,7 @@ def init(args): not hasattr(QWebEnginePage, 'setInspectedPage')): # only Qt < 5.11 os.environ['QTWEBENGINE_REMOTE_DEBUGGING'] = str(utils.random_port()) + webenginequtescheme.init() spell.init() _init_profiles()