diff --git a/src/core/net/url_request_context_getter_qt.cpp b/src/core/net/url_request_context_getter_qt.cpp
index 90413061121fd664d64f4ca3b8815b951416d841..1bb7b080f275c6dfc36ea03344f21b0fabf8b33e 100644
--- a/src/core/net/url_request_context_getter_qt.cpp
+++ b/src/core/net/url_request_context_getter_qt.cpp
@@ -64,6 +64,7 @@
 #include "net/http/http_auth_scheme.h"
 #include "net/http/http_cache.h"
 #include "net/http/http_server_properties_impl.h"
+#include "net/http/transport_security_persister.h"
 #include "net/proxy/proxy_script_fetcher_impl.h"
 #include "net/proxy/proxy_service.h"
 #include "net/ssl/channel_id_service.h"
@@ -142,6 +143,7 @@ void URLRequestContextGetterQt::setFullConfiguration(QSharedPointer<BrowserConte
     m_httpCachePath = browserContext->httpCachePath();
     m_httpCacheMaxSize = browserContext->httpCacheMaxSize();
     m_customUrlSchemes = browserContext->customUrlSchemes();
+    m_dataPath = browserContext->dataPath();
 }
 
 net::URLRequestContext *URLRequestContextGetterQt::GetURLRequestContext()
@@ -235,6 +237,7 @@ void URLRequestContextGetterQt::generateStorage()
         // we need to get rid of dangling pointer due to coming storage deletion
         m_urlRequestContext->set_http_transaction_factory(0);
         m_httpNetworkSession.reset();
+        m_transportSecurityPersister.reset();
     }
 
 
@@ -266,7 +269,20 @@ void URLRequestContextGetterQt::generateStorage()
                                      m_networkDelegate.get()));
 
     m_storage->set_ssl_config_service(new net::SSLConfigServiceDefaults);
-    m_storage->set_transport_security_state(std::unique_ptr<net::TransportSecurityState>(new net::TransportSecurityState()));
+    m_storage->set_transport_security_state(std::make_unique<net::TransportSecurityState>());
+
+    if (!m_dataPath.isEmpty()) {
+        scoped_refptr<base::SequencedTaskRunner> background_task_runner(
+            base::CreateSequencedTaskRunnerWithTraits(
+                {base::MayBlock(),
+                 base::TaskPriority::BACKGROUND,
+                 base::TaskShutdownBehavior::BLOCK_SHUTDOWN}));
+        m_transportSecurityPersister =
+            std::make_unique<net::TransportSecurityPersister>(
+                m_urlRequestContext->transport_security_state(),
+                toFilePath(m_dataPath),
+                background_task_runner);
+    }
 
     if (!m_httpAuthPreferences) {
         std::vector<std::string> auth_types(std::begin(kDefaultAuthSchemes), std::end(kDefaultAuthSchemes));
diff --git a/src/core/net/url_request_context_getter_qt.h b/src/core/net/url_request_context_getter_qt.h
index 0eb4a2fe4dae18077aa6dca8cfb90bf502b7e883..717827543167c90aca657f00bc36e128f68f6813 100644
--- a/src/core/net/url_request_context_getter_qt.h
+++ b/src/core/net/url_request_context_getter_qt.h
@@ -63,6 +63,7 @@ namespace net {
 class HttpAuthPreferences;
 class MappedHostResolver;
 class ProxyConfigService;
+class TransportSecurityPersister;
 }
 
 namespace QtWebEngineCore {
@@ -126,6 +127,7 @@ private:
     std::unique_ptr<net::HttpNetworkSession> m_httpNetworkSession;
     std::unique_ptr<net::HttpAuthPreferences> m_httpAuthPreferences;
     proxy_resolver::mojom::ProxyResolverFactoryPtr m_proxyResolverFactory;
+    std::unique_ptr<net::TransportSecurityPersister> m_transportSecurityPersister;
 
     QList<QByteArray> m_installedCustomSchemes;
     QWebEngineUrlRequestInterceptor* m_requestInterceptor;
@@ -141,6 +143,7 @@ private:
     QString m_httpCachePath;
     int m_httpCacheMaxSize;
     QList<QByteArray> m_customUrlSchemes;
+    QString m_dataPath;
 
     friend class NetworkDelegateQt;
 };