diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2019-02-11 16:44:14 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2019-02-25 14:08:39 +0000 |
commit | dc707f0855a7b8a5c98456d4b8cd65d1a7ea3514 (patch) | |
tree | b36c91f37f3345f16168b3104d1b841f6a6b22ef /src/core/net/client_cert_store_data.cpp | |
parent | 678cb710bb07188454b19a70b5e5595b8ea41c2a (diff) |
Make client certificate store thread safe
If the users manipulate the API from the UI, we need to read from the
UI thread as well.
Change-Id: I8af787a357954cff4fbdd94bcf27b880fb6aecb4
Reviewed-by: Michal Klocek <michal.klocek@qt.io>
Diffstat (limited to 'src/core/net/client_cert_store_data.cpp')
-rw-r--r-- | src/core/net/client_cert_store_data.cpp | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/src/core/net/client_cert_store_data.cpp b/src/core/net/client_cert_store_data.cpp index ae4deed1c..d1018a063 100644 --- a/src/core/net/client_cert_store_data.cpp +++ b/src/core/net/client_cert_store_data.cpp @@ -138,12 +138,27 @@ void ClientCertificateStoreData::add(const QSslCertificate &certificate, const Q data->certPtr = net::X509Certificate::CreateFromBytes(certInBytes.data(), certInBytes.length()); data->key = privateKey; data->certificate = certificate; - addedCerts.append(data); + extraCerts.append(data); } -ClientCertificateStoreData::~ClientCertificateStoreData() +void ClientCertificateStoreData::remove(const QSslCertificate &certificate) { - qDeleteAll(deletedCerts); + auto it = extraCerts.begin(); + while (it != extraCerts.end()) { + const QtWebEngineCore::ClientCertificateStoreData::Entry *overrideData = *it; + if (certificate.toDer() == overrideData->certificate.toDer()) { + it = extraCerts.erase(it); + delete overrideData; + continue; + } + ++it; + } +} + +void ClientCertificateStoreData::clear() +{ + qDeleteAll(extraCerts); + extraCerts.clear(); } } // namespace QtWebEngineCore |