Title: [266112] trunk/Source
Revision
266112
Author
[email protected]
Date
2020-08-25 08:07:22 -0700 (Tue, 25 Aug 2020)

Log Message

[SOUP] Initialize HSTS storage directory from network session initialization
https://bugs.webkit.org/show_bug.cgi?id=215802

Patch by Carlos Garcia Campos <[email protected]> on 2020-08-25
Reviewed by Alex Christensen.

Source/WebCore:

Stop handling HSTS persistent storage as a global setting. SoupNetworkSession::setHSTSPersistentStorage() is no
longer static and it does what setupHSTSEnforcer() did but simplified. The session is now always created with a
memory enforcer that is only replaced by a persistent one when setHSTSPersistentStorage() is called on
non-ephemeral sessions.

* platform/network/soup/SoupNetworkSession.cpp:
(WebCore::SoupNetworkSession::SoupNetworkSession):
(WebCore::SoupNetworkSession::setHSTSPersistentStorage):
(WebCore::SoupNetworkSession::getHostNamesWithHSTSCache):
(WebCore::SoupNetworkSession::deleteHSTSCacheForHostNames):
(WebCore::SoupNetworkSession::clearHSTSCache):
(WebCore::hstsStorageDirectory): Deleted.
(WebCore::SoupNetworkSession::setupHSTSEnforcer): Deleted.
* platform/network/soup/SoupNetworkSession.h:

Source/WebKit:

Instead of network process initialization, since it's not actually a global setting.

* NetworkProcess/soup/NetworkProcessSoup.cpp:
(WebKit::NetworkProcess::platformInitializeNetworkProcess): Remove code to initialize HSTS storage.
* NetworkProcess/soup/NetworkSessionSoup.cpp:
(WebKit::NetworkSessionSoup::NetworkSessionSoup): Call SoupNetworkSession::setHSTSPersistentStorage() if the
path is not mpety.
* UIProcess/API/glib/WebKitWebContext.cpp:
(webkitWebContextConstructed): Remove the ode to set the HSTS storage directory as process pool configuration.
* UIProcess/WebProcessPool.cpp:
(WebKit::WebProcessPool::ensureNetworkProcess): Initialize hstsStorageDirectory in default network session parameters.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (266111 => 266112)


--- trunk/Source/WebCore/ChangeLog	2020-08-25 14:35:10 UTC (rev 266111)
+++ trunk/Source/WebCore/ChangeLog	2020-08-25 15:07:22 UTC (rev 266112)
@@ -1,3 +1,25 @@
+2020-08-25  Carlos Garcia Campos  <[email protected]>
+
+        [SOUP] Initialize HSTS storage directory from network session initialization
+        https://bugs.webkit.org/show_bug.cgi?id=215802
+
+        Reviewed by Alex Christensen.
+
+        Stop handling HSTS persistent storage as a global setting. SoupNetworkSession::setHSTSPersistentStorage() is no
+        longer static and it does what setupHSTSEnforcer() did but simplified. The session is now always created with a
+        memory enforcer that is only replaced by a persistent one when setHSTSPersistentStorage() is called on
+        non-ephemeral sessions.
+
+        * platform/network/soup/SoupNetworkSession.cpp:
+        (WebCore::SoupNetworkSession::SoupNetworkSession):
+        (WebCore::SoupNetworkSession::setHSTSPersistentStorage):
+        (WebCore::SoupNetworkSession::getHostNamesWithHSTSCache):
+        (WebCore::SoupNetworkSession::deleteHSTSCacheForHostNames):
+        (WebCore::SoupNetworkSession::clearHSTSCache):
+        (WebCore::hstsStorageDirectory): Deleted.
+        (WebCore::SoupNetworkSession::setupHSTSEnforcer): Deleted.
+        * platform/network/soup/SoupNetworkSession.h:
+
 2020-08-25  Philippe Normand  <[email protected]>
 
         Unreviewed, follow-up to r266109

Modified: trunk/Source/WebCore/platform/network/soup/SoupNetworkSession.cpp (266111 => 266112)


--- trunk/Source/WebCore/platform/network/soup/SoupNetworkSession.cpp	2020-08-25 14:35:10 UTC (rev 266111)
+++ trunk/Source/WebCore/platform/network/soup/SoupNetworkSession.cpp	2020-08-25 15:07:22 UTC (rev 266112)
@@ -58,12 +58,6 @@
     return settings.get();
 }
 
-static CString& hstsStorageDirectory()
-{
-    static NeverDestroyed<CString> directory;
-    return directory.get();
-}
-
 #if !LOG_DISABLED || !RELEASE_LOG_DISABLED
 inline static void soupLogPrinter(SoupLogger*, SoupLoggerLogLevel, char direction, const char* data, gpointer)
 {
@@ -132,6 +126,9 @@
         SOUP_SESSION_TIMEOUT, 0,
         SOUP_SESSION_IDLE_TIMEOUT, 0,
         SOUP_SESSION_ADD_FEATURE_BY_TYPE, SOUP_TYPE_CONTENT_SNIFFER,
+#if SOUP_CHECK_VERSION(2, 67, 1)
+        SOUP_SESSION_ADD_FEATURE_BY_TYPE, SOUP_TYPE_HSTS_ENFORCER,
+#endif
 #if SOUP_CHECK_VERSION(2, 67, 90)
         SOUP_SESSION_ADD_FEATURE_BY_TYPE, SOUP_TYPE_WEBSOCKET_EXTENSION_MANAGER,
 #endif
@@ -149,7 +146,6 @@
     if (proxySettings().mode != SoupNetworkProxySettings::Mode::Default)
         setupProxy();
     setupLogger();
-    setupHSTSEnforcer();
 }
 
 SoupNetworkSession::~SoupNetworkSession() = default;
@@ -178,31 +174,24 @@
     return SOUP_COOKIE_JAR(soup_session_get_feature(m_soupSession.get(), SOUP_TYPE_COOKIE_JAR));
 }
 
-void SoupNetworkSession::setHSTSPersistentStorage(const CString& directory)
+void SoupNetworkSession::setHSTSPersistentStorage(const String& directory)
 {
-    hstsStorageDirectory() = directory;
-}
+    if (m_sessionID.isEphemeral())
+        return;
 
-void SoupNetworkSession::setupHSTSEnforcer()
-{
 #if SOUP_CHECK_VERSION(2, 67, 1)
-    if (soup_session_has_feature(m_soupSession.get(), SOUP_TYPE_HSTS_ENFORCER))
-        soup_session_remove_feature_by_type(m_soupSession.get(), SOUP_TYPE_HSTS_ENFORCER);
+    if (!FileSystem::makeAllDirectories(directory)) {
+        RELEASE_LOG_ERROR(Network, "Unable to create the HSTS storage directory \"%s\". Using a memory enforcer instead.", directory.utf8().data());
+        return;
+    }
 
-    GRefPtr<SoupHSTSEnforcer> enforcer;
-    if (m_sessionID.isEphemeral() || hstsStorageDirectory().isNull())
-        enforcer = adoptGRef(soup_hsts_enforcer_new());
-    else {
-        if (FileSystem::makeAllDirectories(hstsStorageDirectory().data())) {
-            CString storagePath = FileSystem::fileSystemRepresentation(hstsStorageDirectory().data());
-            GUniquePtr<char> dbFilename(g_build_filename(storagePath.data(), "hsts-storage.sqlite", nullptr));
-            enforcer = adoptGRef(soup_hsts_enforcer_db_new(dbFilename.get()));
-        } else {
-            RELEASE_LOG_ERROR(Network, "Unable to create the HSTS storage directory \"%s\". Using a memory enforcer instead.", hstsStorageDirectory().data());
-            enforcer = adoptGRef(soup_hsts_enforcer_new());
-        }
-    }
+    CString storagePath = FileSystem::fileSystemRepresentation(directory);
+    GUniquePtr<char> dbFilename(g_build_filename(storagePath.data(), "hsts-storage.sqlite", nullptr));
+    GRefPtr<SoupHSTSEnforcer> enforcer = adoptGRef(soup_hsts_enforcer_db_new(dbFilename.get()));
+    soup_session_remove_feature_by_type(m_soupSession.get(), SOUP_TYPE_HSTS_ENFORCER);
     soup_session_add_feature(m_soupSession.get(), SOUP_SESSION_FEATURE(enforcer.get()));
+#else
+    UNUSED_PARAM(directory);
 #endif
 }
 
@@ -209,9 +198,8 @@
 void SoupNetworkSession::getHostNamesWithHSTSCache(HashSet<String>& hostNames)
 {
 #if SOUP_CHECK_VERSION(2, 67, 91)
-    SoupHSTSEnforcer* enforcer = SOUP_HSTS_ENFORCER(soup_session_get_feature(m_soupSession.get(), SOUP_TYPE_HSTS_ENFORCER));
-    if (!enforcer)
-        return;
+    auto* enforcer = SOUP_HSTS_ENFORCER(soup_session_get_feature(m_soupSession.get(), SOUP_TYPE_HSTS_ENFORCER));
+    ASSERT(enforcer);
 
     GUniquePtr<GList> domains(soup_hsts_enforcer_get_domains(enforcer, FALSE));
     for (GList* iter = domains.get(); iter; iter = iter->next) {
@@ -226,9 +214,8 @@
 void SoupNetworkSession::deleteHSTSCacheForHostNames(const Vector<String>& hostNames)
 {
 #if SOUP_CHECK_VERSION(2, 67, 1)
-    SoupHSTSEnforcer* enforcer = SOUP_HSTS_ENFORCER(soup_session_get_feature(m_soupSession.get(), SOUP_TYPE_HSTS_ENFORCER));
-    if (!enforcer)
-        return;
+    auto* enforcer = SOUP_HSTS_ENFORCER(soup_session_get_feature(m_soupSession.get(), SOUP_TYPE_HSTS_ENFORCER));
+    ASSERT(enforcer);
 
     for (const auto& hostName : hostNames) {
         GUniquePtr<SoupHSTSPolicy> policy(soup_hsts_policy_new(hostName.utf8().data(), SOUP_HSTS_POLICY_MAX_AGE_PAST, FALSE));
@@ -242,9 +229,8 @@
 void SoupNetworkSession::clearHSTSCache(WallTime modifiedSince)
 {
 #if SOUP_CHECK_VERSION(2, 67, 91)
-    SoupHSTSEnforcer* enforcer = SOUP_HSTS_ENFORCER(soup_session_get_feature(m_soupSession.get(), SOUP_TYPE_HSTS_ENFORCER));
-    if (!enforcer)
-        return;
+    auto* enforcer = SOUP_HSTS_ENFORCER(soup_session_get_feature(m_soupSession.get(), SOUP_TYPE_HSTS_ENFORCER));
+    ASSERT(enforcer);
 
     GUniquePtr<GList> policies(soup_hsts_enforcer_get_policies(enforcer, FALSE));
     for (GList* iter = policies.get(); iter != nullptr; iter = iter->next) {

Modified: trunk/Source/WebCore/platform/network/soup/SoupNetworkSession.h (266111 => 266112)


--- trunk/Source/WebCore/platform/network/soup/SoupNetworkSession.h	2020-08-25 14:35:10 UTC (rev 266111)
+++ trunk/Source/WebCore/platform/network/soup/SoupNetworkSession.h	2020-08-25 15:07:22 UTC (rev 266112)
@@ -23,8 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef SoupNetworkSession_h
-#define SoupNetworkSession_h
+#pragma once
 
 #include <gio/gio.h>
 #include <glib-object.h>
@@ -57,8 +56,7 @@
     void setCookieJar(SoupCookieJar*);
     SoupCookieJar* cookieJar() const;
 
-    static void setHSTSPersistentStorage(const CString& hstsStorageDirectory);
-    void setupHSTSEnforcer();
+    void setHSTSPersistentStorage(const String& hstsStorageDirectory);
 
     static void clearOldSoupCache(const String& cacheDirectory);
 
@@ -84,5 +82,3 @@
 };
 
 } // namespace WebCore
-
-#endif

Modified: trunk/Source/WebKit/ChangeLog (266111 => 266112)


--- trunk/Source/WebKit/ChangeLog	2020-08-25 14:35:10 UTC (rev 266111)
+++ trunk/Source/WebKit/ChangeLog	2020-08-25 15:07:22 UTC (rev 266112)
@@ -1,3 +1,22 @@
+2020-08-25  Carlos Garcia Campos  <[email protected]>
+
+        [SOUP] Initialize HSTS storage directory from network session initialization
+        https://bugs.webkit.org/show_bug.cgi?id=215802
+
+        Reviewed by Alex Christensen.
+
+        Instead of network process initialization, since it's not actually a global setting.
+
+        * NetworkProcess/soup/NetworkProcessSoup.cpp:
+        (WebKit::NetworkProcess::platformInitializeNetworkProcess): Remove code to initialize HSTS storage.
+        * NetworkProcess/soup/NetworkSessionSoup.cpp:
+        (WebKit::NetworkSessionSoup::NetworkSessionSoup): Call SoupNetworkSession::setHSTSPersistentStorage() if the
+        path is not mpety.
+        * UIProcess/API/glib/WebKitWebContext.cpp:
+        (webkitWebContextConstructed): Remove the ode to set the HSTS storage directory as process pool configuration.
+        * UIProcess/WebProcessPool.cpp:
+        (WebKit::WebProcessPool::ensureNetworkProcess): Initialize hstsStorageDirectory in default network session parameters.
+
 2020-08-24  Brady Eidson  <[email protected]>
 
         CrashTracer: com.apple.WebKit.WebContent at com.apple.WebKit: WebKit::PDFPlugin::createScrollbar

Modified: trunk/Source/WebKit/NetworkProcess/soup/NetworkProcessSoup.cpp (266111 => 266112)


--- trunk/Source/WebKit/NetworkProcess/soup/NetworkProcessSoup.cpp	2020-08-25 14:35:10 UTC (rev 266111)
+++ trunk/Source/WebKit/NetworkProcess/soup/NetworkProcessSoup.cpp	2020-08-25 15:07:22 UTC (rev 266112)
@@ -138,12 +138,6 @@
         userPreferredLanguagesChanged(parameters.languages);
 
     setIgnoreTLSErrors(parameters.ignoreTLSErrors);
-
-    if (!parameters.hstsStorageDirectory.isEmpty())
-        SoupNetworkSession::setHSTSPersistentStorage(parameters.hstsStorageDirectory.utf8());
-    forEachNetworkSession([](const auto& session) {
-        static_cast<const NetworkSessionSoup&>(session).soupNetworkSession().setupHSTSEnforcer();
-    });
 }
 
 std::unique_ptr<WebCore::NetworkStorageSession> NetworkProcess::platformCreateDefaultStorageSession() const

Modified: trunk/Source/WebKit/NetworkProcess/soup/NetworkSessionSoup.cpp (266111 => 266112)


--- trunk/Source/WebKit/NetworkProcess/soup/NetworkSessionSoup.cpp	2020-08-25 14:35:10 UTC (rev 266111)
+++ trunk/Source/WebKit/NetworkProcess/soup/NetworkSessionSoup.cpp	2020-08-25 15:07:22 UTC (rev 266112)
@@ -55,6 +55,9 @@
     storageSession->setCookieObserverHandler([this] {
         this->networkProcess().supplement<WebCookieManager>()->notifyCookiesDidChange(m_sessionID);
     });
+
+    if (!parameters.hstsStorageDirectory.isEmpty())
+        m_networkSession->setHSTSPersistentStorage(parameters.hstsStorageDirectory);
 }
 
 NetworkSessionSoup::~NetworkSessionSoup()

Modified: trunk/Source/WebKit/UIProcess/API/glib/WebKitWebContext.cpp (266111 => 266112)


--- trunk/Source/WebKit/UIProcess/API/glib/WebKitWebContext.cpp	2020-08-25 14:35:10 UTC (rev 266111)
+++ trunk/Source/WebKit/UIProcess/API/glib/WebKitWebContext.cpp	2020-08-25 15:07:22 UTC (rev 266112)
@@ -402,9 +402,6 @@
     if (!priv->websiteDataManager)
         priv->websiteDataManager = adoptGRef(webkit_website_data_manager_new("local-storage-directory", priv->localStorageDirectory.data(), nullptr));
 
-    if (!webkit_website_data_manager_is_ephemeral(priv->websiteDataManager.get()))
-        configuration.setHSTSStorageDirectory(FileSystem::stringFromFileSystemRepresentation(webkit_website_data_manager_get_hsts_cache_directory(priv->websiteDataManager.get())));
-
     priv->processPool = WebProcessPool::create(configuration);
     priv->processPool->setPrimaryDataStore(webkitWebsiteDataManagerGetDataStore(priv->websiteDataManager.get()));
     priv->processPool->setUserMessageHandler([webContext](UserMessage&& message, CompletionHandler<void(UserMessage&&)>&& completionHandler) {

Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.cpp (266111 => 266112)


--- trunk/Source/WebKit/UIProcess/WebProcessPool.cpp	2020-08-25 14:35:10 UTC (rev 266111)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.cpp	2020-08-25 15:07:22 UTC (rev 266112)
@@ -651,6 +651,12 @@
             parameters.defaultDataStoreParameters.networkSessionParameters.networkCacheDirectory = networkCacheDirectory;
             SandboxExtension::createHandle(networkCacheDirectory, SandboxExtension::Type::ReadWrite, parameters.defaultDataStoreParameters.networkSessionParameters.networkCacheDirectoryExtensionHandle);
         }
+
+        const auto& hstsStorageDirectory = withWebsiteDataStore->resolvedHSTSStorageDirectory();
+        if (!hstsStorageDirectory.isNull()) {
+            parameters.defaultDataStoreParameters.networkSessionParameters.hstsStorageDirectory = hstsStorageDirectory;
+            SandboxExtension::createHandle(hstsStorageDirectory, SandboxExtension::Type::ReadWrite, parameters.defaultDataStoreParameters.networkSessionParameters.hstsStorageDirectoryExtensionHandle);
+        }
     } else if (m_websiteDataStore) {
         enableResourceLoadStatistics = m_websiteDataStore->resourceLoadStatisticsEnabled();
 #if ENABLE(RESOURCE_LOAD_STATISTICS)
@@ -679,6 +685,12 @@
             parameters.defaultDataStoreParameters.networkSessionParameters.networkCacheDirectory = networkCacheDirectory;
             SandboxExtension::createHandle(networkCacheDirectory, SandboxExtension::Type::ReadWrite, parameters.defaultDataStoreParameters.networkSessionParameters.networkCacheDirectoryExtensionHandle);
         }
+
+        const auto& hstsStorageDirectory = m_websiteDataStore->resolvedHSTSStorageDirectory();
+        if (!hstsStorageDirectory.isNull()) {
+            parameters.defaultDataStoreParameters.networkSessionParameters.hstsStorageDirectory = hstsStorageDirectory;
+            SandboxExtension::createHandle(hstsStorageDirectory, SandboxExtension::Type::ReadWrite, parameters.defaultDataStoreParameters.networkSessionParameters.hstsStorageDirectoryExtensionHandle);
+        }
     } else {
         if (WebsiteDataStore::defaultDataStoreExists())
             enableResourceLoadStatistics = WebsiteDataStore::defaultDataStore()->resourceLoadStatisticsEnabled();
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to