diff options
Diffstat (limited to 'Source/WebKit2/WebProcess/ResourceCache/WebResourceCacheManager.cpp')
-rw-r--r-- | Source/WebKit2/WebProcess/ResourceCache/WebResourceCacheManager.cpp | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/Source/WebKit2/WebProcess/ResourceCache/WebResourceCacheManager.cpp b/Source/WebKit2/WebProcess/ResourceCache/WebResourceCacheManager.cpp index 1596319..febf61b 100644 --- a/Source/WebKit2/WebProcess/ResourceCache/WebResourceCacheManager.cpp +++ b/Source/WebKit2/WebProcess/ResourceCache/WebResourceCacheManager.cpp @@ -28,6 +28,7 @@ #include "Connection.h" #include "MessageID.h" +#include "ResourceCachesToClear.h" #include "SecurityOriginData.h" #include "WebCoreArgumentCoders.h" #include "WebResourceCacheManagerProxyMessages.h" @@ -62,6 +63,8 @@ void WebResourceCacheManager::didReceiveMessage(CoreIPC::Connection* connection, void WebResourceCacheManager::getCacheOrigins(uint64_t callbackID) const { + WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared()); + MemoryCache::SecurityOriginSet origins; memoryCache()->getOriginsWithCache(origins); @@ -93,11 +96,18 @@ void WebResourceCacheManager::getCacheOrigins(uint64_t callbackID) const } WebProcess::shared().connection()->send(Messages::WebResourceCacheManagerProxy::DidGetCacheOrigins(identifiers, callbackID), 0); - WebProcess::shared().terminateIfPossible(); } -void WebResourceCacheManager::clearCacheForOrigin(SecurityOriginData originData) const +void WebResourceCacheManager::clearCacheForOrigin(SecurityOriginData originData, uint32_t cachesToClear) const { + WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared()); + +#if USE(CFURLCACHE) + ResourceCachesToClear resourceCachesToClear = static_cast<ResourceCachesToClear>(cachesToClear); +#else + UNUSED_PARAM(cachesToClear); +#endif + RefPtr<SecurityOrigin> origin = SecurityOrigin::create(originData.protocol, originData.host, originData.port); if (!origin) return; @@ -105,19 +115,23 @@ void WebResourceCacheManager::clearCacheForOrigin(SecurityOriginData originData) memoryCache()->removeResourcesWithOrigin(origin.get()); #if USE(CFURLCACHE) - RetainPtr<CFMutableArrayRef> hostArray(AdoptCF, CFArrayCreateMutable(0, 0, &kCFTypeArrayCallBacks)); - RetainPtr<CFStringRef> host(AdoptCF, origin->host().createCFString()); - CFArrayAppendValue(hostArray.get(), host.get()); + if (resourceCachesToClear != InMemoryResourceCachesOnly) { + RetainPtr<CFMutableArrayRef> hostArray(AdoptCF, CFArrayCreateMutable(0, 0, &kCFTypeArrayCallBacks)); + RetainPtr<CFStringRef> host(AdoptCF, origin->host().createCFString()); + CFArrayAppendValue(hostArray.get(), host.get()); - clearCFURLCacheForHostNames(hostArray.get()); + clearCFURLCacheForHostNames(hostArray.get()); + } #endif - WebProcess::shared().terminateIfPossible(); } -void WebResourceCacheManager::clearCacheForAllOrigins() const +void WebResourceCacheManager::clearCacheForAllOrigins(uint32_t cachesToClear) const { - WebProcess::shared().clearResourceCaches(); - WebProcess::shared().terminateIfPossible(); + WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared()); + + ResourceCachesToClear resourceCachesToClear = static_cast<ResourceCachesToClear>(cachesToClear); + + WebProcess::shared().clearResourceCaches(resourceCachesToClear); } } // namespace WebKit |