summaryrefslogtreecommitdiff
path: root/qutebrowser/browser/webkit/network/networkmanager.py
diff options
context:
space:
mode:
Diffstat (limited to 'qutebrowser/browser/webkit/network/networkmanager.py')
-rw-r--r--qutebrowser/browser/webkit/network/networkmanager.py39
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."""