diff options
Diffstat (limited to 'qutebrowser/browser/webengine/interceptor.py')
-rw-r--r-- | qutebrowser/browser/webengine/interceptor.py | 92 |
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'') |