diff options
Diffstat (limited to 'qutebrowser/browser/webkit/network/networkmanager.py')
-rw-r--r-- | qutebrowser/browser/webkit/network/networkmanager.py | 39 |
1 files changed, 17 insertions, 22 deletions
diff --git a/qutebrowser/browser/webkit/network/networkmanager.py b/qutebrowser/browser/webkit/network/networkmanager.py index f81e97f52..a600667e9 100644 --- a/qutebrowser/browser/webkit/network/networkmanager.py +++ b/qutebrowser/browser/webkit/network/networkmanager.py @@ -22,7 +22,7 @@ import collections import html import dataclasses -from typing import TYPE_CHECKING, Dict, MutableMapping, Optional, Sequence +from typing import TYPE_CHECKING, Dict, MutableMapping, Optional, Set from PyQt5.QtCore import pyqtSlot, pyqtSignal, QUrl, QByteArray from PyQt5.QtNetwork import (QNetworkAccessManager, QNetworkReply, QSslSocket, @@ -122,7 +122,7 @@ def init(): QSslSocket.setDefaultCiphers(good_ciphers) -_SavedErrorsType = MutableMapping[urlutils.HostTupleType, Sequence[QSslError]] +_SavedErrorsType = MutableMapping[urlutils.HostTupleType, Set[QSslError]] class NetworkManager(QNetworkAccessManager): @@ -141,8 +141,8 @@ class NetworkManager(QNetworkAccessManager): (or None for generic network managers) _tab_id: The tab ID this NetworkManager is associated with. (or None for generic network managers) - _rejected_ssl_errors: A {QUrl: [SslError]} dict of rejected errors. - _accepted_ssl_errors: A {QUrl: [SslError]} dict of accepted errors. + _rejected_ssl_errors: A {QUrl: {SslError}} dict of rejected errors. + _accepted_ssl_errors: A {QUrl: {SslError}} dict of accepted errors. _private: Whether we're in private browsing mode. netrc_used: Whether netrc authentication was performed. @@ -172,8 +172,8 @@ class NetworkManager(QNetworkAccessManager): self._set_cookiejar() self._set_cache() self.sslErrors.connect(self.on_ssl_errors) - self._rejected_ssl_errors: _SavedErrorsType = collections.defaultdict(list) - self._accepted_ssl_errors: _SavedErrorsType = collections.defaultdict(list) + self._rejected_ssl_errors: _SavedErrorsType = collections.defaultdict(set) + self._accepted_ssl_errors: _SavedErrorsType = collections.defaultdict(set) self.authenticationRequired.connect(self.on_authentication_required) self.proxyAuthenticationRequired.connect(self.on_proxy_authentication_required) self.netrc_used = False @@ -221,18 +221,17 @@ class NetworkManager(QNetworkAccessManager): # No @pyqtSlot here, see # https://github.com/qutebrowser/qutebrowser/issues/2213 - def on_ssl_errors(self, reply, errors): # noqa: C901 pragma: no mccabe + def on_ssl_errors(self, reply, qt_errors): # noqa: C901 pragma: no mccabe """Decide if SSL errors should be ignored or not. This slot is called on SSL/TLS errors by the self.sslErrors signal. Args: reply: The QNetworkReply that is encountering the errors. - errors: A list of errors. + qt_errors: A list of errors. """ - errors = [certificateerror.CertificateErrorWrapper(e) for e in errors] - log.network.debug("Certificate errors: {!r}".format( - ' / '.join(str(err) for err in errors))) + errors = certificateerror.CertificateErrorWrapper(qt_errors) + log.network.debug("Certificate errors: {!r}".format(errors)) try: host_tpl: Optional[urlutils.HostTupleType] = urlutils.host_tuple( reply.url()) @@ -242,10 +241,8 @@ class NetworkManager(QNetworkAccessManager): is_rejected = False else: assert host_tpl is not None - is_accepted = set(errors).issubset( - self._accepted_ssl_errors[host_tpl]) - is_rejected = set(errors).issubset( - self._rejected_ssl_errors[host_tpl]) + is_accepted = errors in self._accepted_ssl_errors[host_tpl] + is_rejected = errors in self._rejected_ssl_errors[host_tpl] log.network.debug("Already accepted: {} / " "rejected {}".format(is_accepted, is_rejected)) @@ -257,15 +254,13 @@ class NetworkManager(QNetworkAccessManager): return abort_on = self._get_abort_signals(reply) - ignore = shared.ignore_certificate_errors(reply.url(), errors, - abort_on=abort_on) + ignore = shared.ignore_certificate_error(reply.url(), errors, abort_on=abort_on) if ignore: reply.ignoreSslErrors() - err_dict = self._accepted_ssl_errors - else: - err_dict = self._rejected_ssl_errors - if host_tpl is not None: - err_dict[host_tpl] += errors + if host_tpl is not None: + self._accepted_ssl_errors[host_tpl].add(errors) + elif host_tpl is not None: + self._rejected_ssl_errors[host_tpl].add(errors) def clear_all_ssl_errors(self): """Clear all remembered SSL errors.""" |