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();