summaryrefslogtreecommitdiff
path: root/qutebrowser/browser/webkit/certificateerror.py
diff options
context:
space:
mode:
Diffstat (limited to 'qutebrowser/browser/webkit/certificateerror.py')
-rw-r--r--qutebrowser/browser/webkit/certificateerror.py27
1 files changed, 21 insertions, 6 deletions
diff --git a/qutebrowser/browser/webkit/certificateerror.py b/qutebrowser/browser/webkit/certificateerror.py
index 09237dae9..553538193 100644
--- a/qutebrowser/browser/webkit/certificateerror.py
+++ b/qutebrowser/browser/webkit/certificateerror.py
@@ -19,19 +19,25 @@
"""A wrapper over a list of QSslErrors."""
-from typing import Sequence
+from typing import Sequence, Optional
-from PyQt5.QtNetwork import QSslError
+from qutebrowser.qt.network import QSslError, QNetworkReply
-from qutebrowser.utils import usertypes, utils, debug, jinja
+from qutebrowser.utils import usertypes, utils, debug, jinja, urlutils
class CertificateErrorWrapper(usertypes.AbstractCertificateErrorWrapper):
"""A wrapper over a list of QSslErrors."""
- def __init__(self, errors: Sequence[QSslError]) -> None:
+ def __init__(self, reply: QNetworkReply, errors: Sequence[QSslError]) -> None:
+ super().__init__()
+ self._reply = reply
self._errors = tuple(errors) # needs to be hashable
+ try:
+ self._host_tpl: Optional[urlutils.HostTupleType] = urlutils.host_tuple(reply.url())
+ except ValueError:
+ self._host_tpl = None
def __str__(self) -> str:
return '\n'.join(err.errorString() for err in self._errors)
@@ -43,16 +49,25 @@ class CertificateErrorWrapper(usertypes.AbstractCertificateErrorWrapper):
string=str(self))
def __hash__(self) -> int:
- return hash(self._errors)
+ return hash((self._host_tpl, self._errors))
def __eq__(self, other: object) -> bool:
if not isinstance(other, CertificateErrorWrapper):
return NotImplemented
- return self._errors == other._errors
+ return self._errors == other._errors and self._host_tpl == other._host_tpl
def is_overridable(self) -> bool:
return True
+ def defer(self) -> None:
+ raise usertypes.UndeferrableError("Never deferrable")
+
+ def accept_certificate(self) -> None:
+ super().accept_certificate()
+ self._reply.ignoreSslErrors()
+
+ # Not overriding reject_certificate because that's default in QNetworkReply
+
def html(self):
if len(self._errors) == 1:
return super().html()