summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Bruhin <git@the-compiler.org>2018-06-07 16:03:25 +0200
committerFlorian Bruhin <git@the-compiler.org>2018-06-07 16:04:37 +0200
commit93ebd846ab8af95de91e3dbabcb76cd53533d1be (patch)
treef1f9b9f218711128f0b7bfe7822be9e3ae0cbea5
parent9ee473a54c1283cd97e4cbbbd0da6f50054e969c (diff)
downloadqutebrowser-93ebd846ab8af95de91e3dbabcb76cd53533d1be.tar.gz
qutebrowser-93ebd846ab8af95de91e3dbabcb76cd53533d1be.zip
Implement a better workaround for chrome-error:// URLs
It looks like chrome-error://chromewebdata/ triggers another invalid scheme load which is why the endless loop happens. When we install a custom scheme handler for chrome-error:// we can at least show an error page. (cherry picked from commit b1506274c52f2ea84562407a72c3678868c180b3)
-rw-r--r--qutebrowser/browser/webengine/webenginequtescheme.py11
-rw-r--r--qutebrowser/browser/webengine/webenginetab.py6
2 files changed, 10 insertions, 7 deletions
diff --git a/qutebrowser/browser/webengine/webenginequtescheme.py b/qutebrowser/browser/webengine/webenginequtescheme.py
index ac583a671..80269ba85 100644
--- a/qutebrowser/browser/webengine/webenginequtescheme.py
+++ b/qutebrowser/browser/webengine/webenginequtescheme.py
@@ -19,7 +19,7 @@
"""QtWebEngine specific qute://* handlers and glue code."""
-from PyQt5.QtCore import QBuffer, QIODevice
+from PyQt5.QtCore import QBuffer, QIODevice, QUrl
from PyQt5.QtWebEngineCore import (QWebEngineUrlSchemeHandler,
QWebEngineUrlRequestJob)
@@ -34,6 +34,9 @@ class QuteSchemeHandler(QWebEngineUrlSchemeHandler):
def install(self, profile):
"""Install the handler for qute:// URLs on the given profile."""
profile.installUrlSchemeHandler(b'qute', self)
+ if qtutils.version_check('5.11', compiled=False):
+ # WORKAROUND for https://bugreports.qt.io/browse/QTBUG-63378
+ profile.installUrlSchemeHandler(b'chrome-error', self)
def requestStarted(self, job):
"""Handle a request for a qute: scheme.
@@ -45,6 +48,12 @@ class QuteSchemeHandler(QWebEngineUrlSchemeHandler):
job: QWebEngineUrlRequestJob
"""
url = job.requestUrl()
+
+ if url.scheme() == 'chrome-error':
+ # WORKAROUND for https://bugreports.qt.io/browse/QTBUG-63378
+ job.fail(QWebEngineUrlRequestJob.UrlInvalid)
+ return
+
assert job.requestMethod() == b'GET'
assert url.scheme() == 'qute'
log.misc.debug("Got request for {}".format(url.toDisplayString()))
diff --git a/qutebrowser/browser/webengine/webenginetab.py b/qutebrowser/browser/webengine/webenginetab.py
index 5cc87091a..87fbb1fc7 100644
--- a/qutebrowser/browser/webengine/webenginetab.py
+++ b/qutebrowser/browser/webengine/webenginetab.py
@@ -1021,12 +1021,6 @@ class WebEngineTab(browsertab.AbstractTab):
if not ok and not js_enabled:
self.dump_async(self._error_page_workaround)
- if (not ok and
- self.url() == QUrl('chrome-error://chromewebdata/') and
- qtutils.version_check('5.11', compiled=False)):
- # WORKAROUND for https://bugreports.qt.io/browse/QTBUG-63378
- self._show_error_page(QUrl(), "Unknown URL scheme")
-
if ok and self._reload_url is not None:
# WORKAROUND for https://bugreports.qt.io/browse/QTBUG-66656
log.config.debug(