diff options
Diffstat (limited to 'Source/WebKit2/UIProcess/API/C/WKResourceCacheManager.cpp')
-rw-r--r-- | Source/WebKit2/UIProcess/API/C/WKResourceCacheManager.cpp | 57 |
1 files changed, 49 insertions, 8 deletions
diff --git a/Source/WebKit2/UIProcess/API/C/WKResourceCacheManager.cpp b/Source/WebKit2/UIProcess/API/C/WKResourceCacheManager.cpp index a5711e014..c0621d5a8 100644 --- a/Source/WebKit2/UIProcess/API/C/WKResourceCacheManager.cpp +++ b/Source/WebKit2/UIProcess/API/C/WKResourceCacheManager.cpp @@ -26,27 +26,68 @@ #include "config.h" #include "WKResourceCacheManager.h" -#include "WebResourceCacheManagerProxy.h" +#include "APIWebsiteDataStore.h" #include "WKAPICast.h" +#include "WebsiteDataRecord.h" using namespace WebKit; WKTypeID WKResourceCacheManagerGetTypeID() { - return toAPI(WebResourceCacheManagerProxy::APIType); + return toAPI(API::WebsiteDataStore::APIType); } -void WKResourceCacheManagerGetCacheOrigins(WKResourceCacheManagerRef cacheManagerRef, void* context, WKResourceCacheManagerGetCacheOriginsFunction callback) +static OptionSet<WebsiteDataType> toWebsiteDataTypes(WKResourceCachesToClear cachesToClear) { - toImpl(cacheManagerRef)->getCacheOrigins(ArrayCallback::create(context, callback)); + OptionSet<WebsiteDataType> websiteDataTypes; + + websiteDataTypes |= WebsiteDataType::MemoryCache; + + if (cachesToClear == WKResourceCachesToClearAll) + websiteDataTypes |= WebsiteDataType::DiskCache; + + return websiteDataTypes; +} + +void WKResourceCacheManagerGetCacheOrigins(WKResourceCacheManagerRef cacheManager, void* context, WKResourceCacheManagerGetCacheOriginsFunction callback) +{ + auto& websiteDataStore = toImpl(reinterpret_cast<WKWebsiteDataStoreRef>(cacheManager))->websiteDataStore(); + websiteDataStore.fetchData(toWebsiteDataTypes(WKResourceCachesToClearAll), { }, [context, callback](auto dataRecords) { + Vector<RefPtr<API::Object>> securityOrigins; + for (const auto& dataRecord : dataRecords) { + for (const auto& origin : dataRecord.origins) + securityOrigins.append(API::SecurityOrigin::create(origin.securityOrigin())); + } + + callback(toAPI(API::Array::create(WTFMove(securityOrigins)).ptr()), nullptr, context); + }); } -void WKResourceCacheManagerClearCacheForOrigin(WKResourceCacheManagerRef cacheManagerRef, WKSecurityOriginRef originRef, WKResourceCachesToClear cachesToClear) +void WKResourceCacheManagerClearCacheForOrigin(WKResourceCacheManagerRef cacheManager, WKSecurityOriginRef origin, WKResourceCachesToClear cachesToClear) { - toImpl(cacheManagerRef)->clearCacheForOrigin(toImpl(originRef), toResourceCachesToClear(cachesToClear)); + auto& websiteDataStore = toImpl(reinterpret_cast<WKWebsiteDataStoreRef>(cacheManager))->websiteDataStore(); + + Vector<WebsiteDataRecord> dataRecords; + + { + WebsiteDataRecord dataRecord; + dataRecord.add(WebsiteDataType::MemoryCache, WebCore::SecurityOriginData::fromSecurityOrigin(toImpl(origin)->securityOrigin())); + + dataRecords.append(dataRecord); + } + + if (cachesToClear == WKResourceCachesToClearAll) { + WebsiteDataRecord dataRecord; + dataRecord.add(WebsiteDataType::DiskCache, WebCore::SecurityOriginData::fromSecurityOrigin(toImpl(origin)->securityOrigin())); + + dataRecords.append(dataRecord); + } + + websiteDataStore.removeData(toWebsiteDataTypes(cachesToClear), dataRecords, [] { }); } -void WKResourceCacheManagerClearCacheForAllOrigins(WKResourceCacheManagerRef cacheManagerRef, WKResourceCachesToClear cachesToClear) +void WKResourceCacheManagerClearCacheForAllOrigins(WKResourceCacheManagerRef cacheManager, WKResourceCachesToClear cachesToClear) { - toImpl(cacheManagerRef)->clearCacheForAllOrigins(toResourceCachesToClear(cachesToClear)); + auto& websiteDataStore = toImpl(reinterpret_cast<WKWebsiteDataStoreRef>(cacheManager))->websiteDataStore(); + websiteDataStore.removeData(toWebsiteDataTypes(cachesToClear), std::chrono::system_clock::time_point::min(), [] { }); } |