summaryrefslogtreecommitdiff
path: root/qutebrowser/browser/webengine/interceptor.py
diff options
context:
space:
mode:
Diffstat (limited to 'qutebrowser/browser/webengine/interceptor.py')
-rw-r--r--qutebrowser/browser/webengine/interceptor.py92
1 files changed, 40 insertions, 52 deletions
diff --git a/qutebrowser/browser/webengine/interceptor.py b/qutebrowser/browser/webengine/interceptor.py
index 0b1040c4d..bd1feaad1 100644
--- a/qutebrowser/browser/webengine/interceptor.py
+++ b/qutebrowser/browser/webengine/interceptor.py
@@ -19,13 +19,13 @@
"""A request interceptor taking care of adblocking and custom headers."""
-from PyQt5.QtCore import QUrl, QByteArray
-from PyQt5.QtWebEngineCore import (QWebEngineUrlRequestInterceptor,
+from qutebrowser.qt.core import QUrl, QByteArray
+from qutebrowser.qt.webenginecore import (QWebEngineUrlRequestInterceptor,
QWebEngineUrlRequestInfo)
from qutebrowser.config import websettings, config
from qutebrowser.browser import shared
-from qutebrowser.utils import utils, log, debug, qtutils
+from qutebrowser.utils import debug, log
from qutebrowser.extensions import interceptors
from qutebrowser.misc import objects
@@ -71,80 +71,71 @@ class RequestInterceptor(QWebEngineUrlRequestInterceptor):
# extension ResourceTypes. If a ResourceType is added to Qt, this table
# should be updated too.
self._resource_types = {
- QWebEngineUrlRequestInfo.ResourceTypeMainFrame:
+ QWebEngineUrlRequestInfo.ResourceType.ResourceTypeMainFrame:
interceptors.ResourceType.main_frame,
- QWebEngineUrlRequestInfo.ResourceTypeSubFrame:
+ QWebEngineUrlRequestInfo.ResourceType.ResourceTypeSubFrame:
interceptors.ResourceType.sub_frame,
- QWebEngineUrlRequestInfo.ResourceTypeStylesheet:
+ QWebEngineUrlRequestInfo.ResourceType.ResourceTypeStylesheet:
interceptors.ResourceType.stylesheet,
- QWebEngineUrlRequestInfo.ResourceTypeScript:
+ QWebEngineUrlRequestInfo.ResourceType.ResourceTypeScript:
interceptors.ResourceType.script,
- QWebEngineUrlRequestInfo.ResourceTypeImage:
+ QWebEngineUrlRequestInfo.ResourceType.ResourceTypeImage:
interceptors.ResourceType.image,
- QWebEngineUrlRequestInfo.ResourceTypeFontResource:
+ QWebEngineUrlRequestInfo.ResourceType.ResourceTypeFontResource:
interceptors.ResourceType.font_resource,
- QWebEngineUrlRequestInfo.ResourceTypeSubResource:
+ QWebEngineUrlRequestInfo.ResourceType.ResourceTypeSubResource:
interceptors.ResourceType.sub_resource,
- QWebEngineUrlRequestInfo.ResourceTypeObject:
+ QWebEngineUrlRequestInfo.ResourceType.ResourceTypeObject:
interceptors.ResourceType.object,
- QWebEngineUrlRequestInfo.ResourceTypeMedia:
+ QWebEngineUrlRequestInfo.ResourceType.ResourceTypeMedia:
interceptors.ResourceType.media,
- QWebEngineUrlRequestInfo.ResourceTypeWorker:
+ QWebEngineUrlRequestInfo.ResourceType.ResourceTypeWorker:
interceptors.ResourceType.worker,
- QWebEngineUrlRequestInfo.ResourceTypeSharedWorker:
+ QWebEngineUrlRequestInfo.ResourceType.ResourceTypeSharedWorker:
interceptors.ResourceType.shared_worker,
- QWebEngineUrlRequestInfo.ResourceTypePrefetch:
+ QWebEngineUrlRequestInfo.ResourceType.ResourceTypePrefetch:
interceptors.ResourceType.prefetch,
- QWebEngineUrlRequestInfo.ResourceTypeFavicon:
+ QWebEngineUrlRequestInfo.ResourceType.ResourceTypeFavicon:
interceptors.ResourceType.favicon,
- QWebEngineUrlRequestInfo.ResourceTypeXhr:
+ QWebEngineUrlRequestInfo.ResourceType.ResourceTypeXhr:
interceptors.ResourceType.xhr,
- QWebEngineUrlRequestInfo.ResourceTypePing:
+ QWebEngineUrlRequestInfo.ResourceType.ResourceTypePing:
interceptors.ResourceType.ping,
- QWebEngineUrlRequestInfo.ResourceTypeServiceWorker:
+ QWebEngineUrlRequestInfo.ResourceType.ResourceTypeServiceWorker:
interceptors.ResourceType.service_worker,
- QWebEngineUrlRequestInfo.ResourceTypeCspReport:
+ QWebEngineUrlRequestInfo.ResourceType.ResourceTypeCspReport:
interceptors.ResourceType.csp_report,
- QWebEngineUrlRequestInfo.ResourceTypePluginResource:
+ QWebEngineUrlRequestInfo.ResourceType.ResourceTypePluginResource:
interceptors.ResourceType.plugin_resource,
- QWebEngineUrlRequestInfo.ResourceTypeUnknown:
+ QWebEngineUrlRequestInfo.ResourceType.ResourceTypeUnknown:
interceptors.ResourceType.unknown,
+ QWebEngineUrlRequestInfo.ResourceType.ResourceTypeNavigationPreloadMainFrame:
+ interceptors.ResourceType.preload_main_frame,
+ QWebEngineUrlRequestInfo.ResourceType.ResourceTypeNavigationPreloadSubFrame:
+ interceptors.ResourceType.preload_sub_frame,
}
-
- try:
- preload_main_frame = (QWebEngineUrlRequestInfo.
- ResourceTypeNavigationPreloadMainFrame)
- preload_sub_frame = (QWebEngineUrlRequestInfo.
- ResourceTypeNavigationPreloadSubFrame)
- except AttributeError:
- # Added in Qt 5.14
- pass
- else:
- self._resource_types[preload_main_frame] = (
- interceptors.ResourceType.preload_main_frame)
- self._resource_types[preload_sub_frame] = (
- interceptors.ResourceType.preload_sub_frame)
+ new_types = {
+ "WebSocket": interceptors.ResourceType.websocket, # added in Qt 6.4
+ }
+ for qt_name, qb_value in new_types.items():
+ qt_value = getattr(
+ QWebEngineUrlRequestInfo.ResourceType,
+ f"ResourceType{qt_name}",
+ None,
+ )
+ if qt_value is not None:
+ self._resource_types[qt_value] = qb_value
def install(self, profile):
"""Install the interceptor on the given QWebEngineProfile."""
- try:
- # Qt >= 5.13, GUI thread
- profile.setUrlRequestInterceptor(self)
- except AttributeError:
- # Qt 5.12, IO thread
- profile.setRequestInterceptor(self)
-
- # Gets called in the IO thread -> showing crash window will fail
- @utils.prevent_exceptions(None, not qtutils.version_check('5.13'))
+ profile.setUrlRequestInterceptor(self)
+
def interceptRequest(self, info):
"""Handle the given request.
Reimplementing this virtual function and setting the interceptor on a
profile makes it possible to intercept URL requests.
- On Qt < 5.13, this function is executed on the IO thread, and therefore
- running long tasks here will block networking.
-
info contains the information about the URL request and will track
internally whether its members have been altered.
@@ -181,7 +172,7 @@ class RequestInterceptor(QWebEngineUrlRequestInterceptor):
info.resourceType())))
resource_type = interceptors.ResourceType.unknown
- is_xhr = info.resourceType() == QWebEngineUrlRequestInfo.ResourceTypeXhr
+ is_xhr = info.resourceType() == QWebEngineUrlRequestInfo.ResourceType.ResourceTypeXhr
if ((url.scheme(), url.host(), url.path()) ==
('qute', 'settings', '/set')):
@@ -214,9 +205,6 @@ class RequestInterceptor(QWebEngineUrlRequestInterceptor):
continue
info.setHttpHeader(header, value)
- # Note this is ignored before Qt 5.12.4 and 5.13.1 due to
- # https://bugreports.qt.io/browse/QTBUG-60203 - there, we set the
- # commandline-flag in qtargs.py instead.
if config.cache['content.headers.referer'] == 'never':
info.setHttpHeader(b'Referer', b'')