diff options
Diffstat (limited to 'Source/WebKit2/WebProcess/soup/WebProcessSoup.cpp')
-rw-r--r-- | Source/WebKit2/WebProcess/soup/WebProcessSoup.cpp | 167 |
1 files changed, 11 insertions, 156 deletions
diff --git a/Source/WebKit2/WebProcess/soup/WebProcessSoup.cpp b/Source/WebKit2/WebProcess/soup/WebProcessSoup.cpp index 461a858a9..c854cd731 100644 --- a/Source/WebKit2/WebProcess/soup/WebProcessSoup.cpp +++ b/Source/WebKit2/WebProcess/soup/WebProcessSoup.cpp @@ -27,180 +27,35 @@ #include "config.h" #include "WebProcess.h" -#if PLATFORM(EFL) -#include "SeccompFiltersWebProcessEfl.h" -#endif - -#include "CertificateInfo.h" -#include "WebCookieManager.h" #include "WebProcessCreationParameters.h" -#include <WebCore/FileSystem.h> -#include <WebCore/Language.h> #include <WebCore/MemoryCache.h> -#include <WebCore/PageCache.h> -#include <WebCore/ResourceHandle.h> +#include <WebCore/NetworkStorageSession.h> #include <WebCore/SoupNetworkSession.h> -#include <libsoup/soup.h> -#include <wtf/gobject/GRefPtr.h> -#include <wtf/gobject/GUniquePtr.h> - -#if !ENABLE(CUSTOM_PROTOCOLS) -#include "WebSoupRequestManager.h" -#endif namespace WebKit { -static uint64_t getCacheDiskFreeSize(SoupCache* cache) -{ - ASSERT(cache); - - GUniqueOutPtr<char> cacheDir; - g_object_get(G_OBJECT(cache), "cache-dir", &cacheDir.outPtr(), NULL); - if (!cacheDir) - return 0; - - return WebCore::getVolumeFreeSizeForPath(cacheDir.get()); -} - -static uint64_t getMemorySize() -{ - static uint64_t kDefaultMemorySize = 512; -#if !OS(WINDOWS) - long pageSize = sysconf(_SC_PAGESIZE); - if (pageSize == -1) - return kDefaultMemorySize; - - long physPages = sysconf(_SC_PHYS_PAGES); - if (physPages == -1) - return kDefaultMemorySize; - - return ((pageSize / 1024) * physPages) / 1024; -#else - // Fallback to default for other platforms. - return kDefaultMemorySize; -#endif -} - void WebProcess::platformSetCacheModel(CacheModel cacheModel) { - unsigned cacheTotalCapacity = 0; - unsigned cacheMinDeadCapacity = 0; - unsigned cacheMaxDeadCapacity = 0; - double deadDecodedDataDeletionInterval = 0; - unsigned pageCacheCapacity = 0; - - unsigned long urlCacheMemoryCapacity = 0; - unsigned long urlCacheDiskCapacity = 0; - - uint64_t diskFreeSize = 0; - SoupCache* cache = nullptr; - - if (!usesNetworkProcess()) { - cache = WebCore::SoupNetworkSession::defaultSession().cache(); - diskFreeSize = getCacheDiskFreeSize(cache) / 1024 / 1024; - } - - uint64_t memSize = getMemorySize(); - calculateCacheSizes(cacheModel, memSize, diskFreeSize, - cacheTotalCapacity, cacheMinDeadCapacity, cacheMaxDeadCapacity, deadDecodedDataDeletionInterval, - pageCacheCapacity, urlCacheMemoryCapacity, urlCacheDiskCapacity); - - WebCore::memoryCache()->setDisabled(cacheModel == CacheModelDocumentViewer); - WebCore::memoryCache()->setCapacities(cacheMinDeadCapacity, cacheMaxDeadCapacity, cacheTotalCapacity); - WebCore::memoryCache()->setDeadDecodedDataDeletionInterval(deadDecodedDataDeletionInterval); - WebCore::pageCache()->setCapacity(pageCacheCapacity); - -#if PLATFORM(GTK) && USE(ACCELERATED_COMPOSITING) - WebCore::pageCache()->setShouldClearBackingStores(true); -#endif - - if (!usesNetworkProcess()) { - if (urlCacheDiskCapacity > soup_cache_get_max_size(cache)) - soup_cache_set_max_size(cache, urlCacheDiskCapacity); - } -} - -void WebProcess::platformClearResourceCaches(ResourceCachesToClear cachesToClear) -{ - if (cachesToClear == InMemoryResourceCachesOnly) - return; - - // If we're using the network process then it is the only one that needs to clear the disk cache. - if (usesNetworkProcess()) - return; - - soup_cache_clear(WebCore::SoupNetworkSession::defaultSession().cache()); -} - -static void setSoupSessionAcceptLanguage(const Vector<String>& languages) -{ - WebCore::SoupNetworkSession::defaultSession().setAcceptLanguages(languages); -} - -static void languageChanged(void*) -{ - setSoupSessionAcceptLanguage(WebCore::userPreferredLanguages()); + WebCore::MemoryCache::singleton().setDisabled(cacheModel == CacheModelDocumentViewer); } -void WebProcess::platformInitializeWebProcess(const WebProcessCreationParameters& parameters, IPC::MessageDecoder&) +void WebProcess::platformInitializeWebProcess(WebProcessCreationParameters&& parameters) { -#if ENABLE(SECCOMP_FILTERS) - { -#if PLATFORM(EFL) - SeccompFiltersWebProcessEfl seccompFilters(parameters); -#endif - seccompFilters.initialize(); - } -#endif - - if (usesNetworkProcess()) - return; - - ASSERT(!parameters.diskCacheDirectory.isEmpty()); - GRefPtr<SoupCache> soupCache = adoptGRef(soup_cache_new(parameters.diskCacheDirectory.utf8().data(), SOUP_CACHE_SINGLE_USER)); - WebCore::SoupNetworkSession::defaultSession().setCache(soupCache.get()); - // Set an initial huge max_size for the SoupCache so the call to soup_cache_load() won't evict any cached - // resource. The final size of the cache will be set by NetworkProcess::platformSetCacheModel(). - unsigned initialMaxSize = soup_cache_get_max_size(soupCache.get()); - soup_cache_set_max_size(soupCache.get(), G_MAXUINT); - soup_cache_load(soupCache.get()); - soup_cache_set_max_size(soupCache.get(), initialMaxSize); - - if (!parameters.cookiePersistentStoragePath.isEmpty()) { - supplement<WebCookieManager>()->setCookiePersistentStorage(parameters.cookiePersistentStoragePath, - parameters.cookiePersistentStorageType); - } - supplement<WebCookieManager>()->setHTTPCookieAcceptPolicy(parameters.cookieAcceptPolicy); - - if (!parameters.languages.isEmpty()) - setSoupSessionAcceptLanguage(parameters.languages); - -#if !ENABLE(CUSTOM_PROTOCOLS) - for (size_t i = 0; i < parameters.urlSchemesRegistered.size(); i++) - supplement<WebSoupRequestManager>()->registerURIScheme(parameters.urlSchemesRegistered[i]); -#endif - - setIgnoreTLSErrors(parameters.ignoreTLSErrors); - - WebCore::addLanguageChangeObserver(this, languageChanged); + if (parameters.proxySettings.mode != WebCore::SoupNetworkProxySettings::Mode::Default) + setNetworkProxySettings(parameters.proxySettings); } void WebProcess::platformTerminate() { - if (!usesNetworkProcess()) - WebCore::removeLanguageChangeObserver(this); -} - -void WebProcess::setIgnoreTLSErrors(bool ignoreTLSErrors) -{ - ASSERT(!usesNetworkProcess()); - WebCore::ResourceHandle::setIgnoreSSLErrors(ignoreTLSErrors); } -void WebProcess::allowSpecificHTTPSCertificateForHost(const WebCore::CertificateInfo& certificateInfo, const String& host) +void WebProcess::setNetworkProxySettings(const WebCore::SoupNetworkProxySettings& settings) { - ASSERT(!usesNetworkProcess()); - WebCore::ResourceHandle::setClientCertificate(host, certificateInfo.certificate()); + WebCore::SoupNetworkSession::setProxySettings(settings); + WebCore::NetworkStorageSession::forEach([](const WebCore::NetworkStorageSession& session) { + if (auto* soupSession = session.soupNetworkSession()) + soupSession->setupProxy(); + }); } } // namespace WebKit |