From 4ceddb01e6dd6de9a3c40d7ca47410514562ef17 Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Wed, 13 Jan 2021 12:39:07 +0100 Subject: dataclasses: Use normal class for WebEngineRequest While we use dataclasses for its base class (interceptors.Request), it causes more problems than it solves here. See #6023 --- qutebrowser/browser/webengine/interceptor.py | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/qutebrowser/browser/webengine/interceptor.py b/qutebrowser/browser/webengine/interceptor.py index 652e4b8ef..436e2f7fe 100644 --- a/qutebrowser/browser/webengine/interceptor.py +++ b/qutebrowser/browser/webengine/interceptor.py @@ -33,32 +33,30 @@ from qutebrowser.extensions import interceptors from qutebrowser.misc import objects -_WHITELISTED_REQUEST_METHODS: Set[QByteArray] = { - QByteArray(b'GET'), - QByteArray(b'HEAD'), -} - - -@dataclasses.dataclass class WebEngineRequest(interceptors.Request): """QtWebEngine-specific request interceptor functionality.""" - webengine_info: Optional[QWebEngineUrlRequestInfo] = None # FIXME private - #: If this request has been redirected already - _redirected: bool = dataclasses.field(init=False, default=False) + _WHITELISTED_REQUEST_METHODS = {QByteArray(b'GET'), QByteArray(b'HEAD')} + + def __init__(self, *args, webengine_info, **kwargs): + super().__init__(*args, **kwargs) + self._webengine_info = webengine_info + self._redirected = False def redirect(self, url: QUrl) -> None: if self._redirected: raise interceptors.RedirectException("Request already redirected.") - if self.webengine_info is None: + if self._webengine_info is None: raise interceptors.RedirectException("Request improperly initialized.") + # Redirecting a request that contains payload data is not allowed. # To be safe, abort on any request not in a whitelist. - if self.webengine_info.requestMethod() not in _WHITELISTED_REQUEST_METHODS: + verb = self._webengine_info.requestMethod() + if verb not in self._WHITELISTED_REQUEST_METHODS: raise interceptors.RedirectException( "Request method does not support redirection.") - self.webengine_info.redirect(url) + self._webengine_info.redirect(url) self._redirected = True -- cgit v1.2.3-54-g00ecf