diff --git a/src/lib/network/networkmanager.h b/src/lib/network/networkmanager.h --- a/src/lib/network/networkmanager.h +++ b/src/lib/network/networkmanager.h @@ -55,6 +55,7 @@ NetworkUrlInterceptor *m_urlInterceptor; ExtensionSchemeManager *m_extensionScheme; QHash m_ignoredSslErrors; + QHash m_rejectedSslErrors; }; #endif // NETWORKMANAGER_H diff --git a/src/lib/network/networkmanager.cpp b/src/lib/network/networkmanager.cpp --- a/src/lib/network/networkmanager.cpp +++ b/src/lib/network/networkmanager.cpp @@ -71,6 +71,10 @@ { const QString &host = error.url().host(); + if (m_rejectedSslErrors.contains(host) && m_rejectedSslErrors.value(host) == error.error()) { + return false; + } + if (m_ignoredSslErrors.contains(host) && m_ignoredSslErrors.value(host) == error.error()) return true; @@ -88,10 +92,13 @@ case SslErrorDialog::Yes: // TODO: Permanent exceptions case SslErrorDialog::OnlyForThisSession: - m_ignoredSslErrors[error.url().host()] = error.error(); + m_ignoredSslErrors[host] = error.error(); return true; - case SslErrorDialog::No: + case SslErrorDialog::NoForThisSession: + m_rejectedSslErrors[host] = error.error(); + return false; + default: return false; } diff --git a/src/lib/network/sslerrordialog.h b/src/lib/network/sslerrordialog.h --- a/src/lib/network/sslerrordialog.h +++ b/src/lib/network/sslerrordialog.h @@ -34,7 +34,7 @@ Q_OBJECT public: - enum Result { Yes, No, OnlyForThisSession }; + enum Result { Yes, No, OnlyForThisSession, NoForThisSession }; explicit SslErrorDialog(QWidget* parent = 0); ~SslErrorDialog(); diff --git a/src/lib/network/sslerrordialog.cpp b/src/lib/network/sslerrordialog.cpp --- a/src/lib/network/sslerrordialog.cpp +++ b/src/lib/network/sslerrordialog.cpp @@ -63,6 +63,11 @@ accept(); break; + case QDialogButtonBox::NoRole: + m_result = NoForThisSession; + reject(); + break; + default: m_result = No; reject();