Changeset 177038 in webkit


Ignore:
Timestamp:
Dec 9, 2014, 1:53:45 PM (11 years ago)
Author:
andersca@apple.com
Message:

Add support for clearing the disk cache
https://bugs.webkit.org/show_bug.cgi?id=139458

Reviewed by Antti Koivisto.

  • NetworkProcess/NetworkProcess.cpp:

(WebKit::NetworkProcess::deleteWebsiteData):
If we're asked to clear the disk cache, do so. Clearing the cache is asynchronous,
so we make sure not to call the completion handler right away in that case.

  • NetworkProcess/NetworkProcess.h:

Add clearDiskCache member function.

  • NetworkProcess/cocoa/NetworkProcessCocoa.mm:

(WebKit::NetworkProcess::clearDiskCache):
Clear the disk cache, then call the completion handler.

  • NetworkProcess/mac/NetworkProcessMac.mm:

(WebKit::NetworkProcess::clearCacheForAllOrigins):
Call the new clearDiskCache function.

  • Shared/WebsiteData/WebsiteDataTypes.h:

Add WebsiteDataTypeDiskCache.

  • UIProcess/API/Cocoa/_WKWebsiteDataStore.h:
  • UIProcess/API/Cocoa/_WKWebsiteDataStore.mm:

(toWebsiteDataTypes):
Handle WKWebsiteDataTypeDiskCache.

Location:
trunk/Source/WebKit2
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r177035 r177038  
     12014-12-09  Anders Carlsson  <andersca@apple.com>
     2
     3        Add support for clearing the disk cache
     4        https://bugs.webkit.org/show_bug.cgi?id=139458
     5
     6        Reviewed by Antti Koivisto.
     7
     8        * NetworkProcess/NetworkProcess.cpp:
     9        (WebKit::NetworkProcess::deleteWebsiteData):
     10        If we're asked to clear the disk cache, do so. Clearing the cache is asynchronous,
     11        so we make sure not to call the completion handler right away in that case.
     12
     13        * NetworkProcess/NetworkProcess.h:
     14        Add clearDiskCache member function.
     15
     16        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
     17        (WebKit::NetworkProcess::clearDiskCache):
     18        Clear the disk cache, then call the completion handler.
     19
     20        * NetworkProcess/mac/NetworkProcessMac.mm:
     21        (WebKit::NetworkProcess::clearCacheForAllOrigins):
     22        Call the new clearDiskCache function.
     23
     24        * Shared/WebsiteData/WebsiteDataTypes.h:
     25        Add WebsiteDataTypeDiskCache.
     26
     27        * UIProcess/API/Cocoa/_WKWebsiteDataStore.h:
     28        * UIProcess/API/Cocoa/_WKWebsiteDataStore.mm:
     29        (toWebsiteDataTypes):
     30        Handle WKWebsiteDataTypeDiskCache.
     31
    1322014-12-09  Myles C. Maxfield  <mmaxfield@apple.com>
    233
  • trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp

    r177032 r177038  
    244244    }
    245245
    246     parentProcessConnection()->send(Messages::NetworkProcessProxy::DidDeleteWebsiteData(callbackID), 0);
     246    auto completionHandler = [this, callbackID] {
     247        parentProcessConnection()->send(Messages::NetworkProcessProxy::DidDeleteWebsiteData(callbackID), 0);
     248    };
     249
     250    if ((websiteDataTypes & WebsiteDataTypeDiskCache) & !sessionID.isEphemeral()) {
     251        clearDiskCache(modifiedSince, WTF::move(completionHandler));
     252        return;
     253    }
     254
     255    completionHandler();
    247256}
    248257
  • trunk/Source/WebKit2/NetworkProcess/NetworkProcess.h

    r177032 r177038  
    116116    void deleteWebsiteData(WebCore::SessionID, uint64_t websiteDataTypes, std::chrono::system_clock::time_point modifiedSince, uint64_t callbackID);
    117117
     118    // FIXME: This should take a session ID so we can identify which disk cache to delete.
     119    void clearDiskCache(std::chrono::system_clock::time_point modifiedSince, std::function<void ()> completionHandler);
     120
    118121    void downloadRequest(uint64_t downloadID, const WebCore::ResourceRequest&);
    119122    void resumeDownload(uint64_t downloadID, const IPC::DataReference& resumeData, const String& path, const SandboxExtension::Handle&);
  • trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkProcessCocoa.mm

    r176347 r177038  
    134134}
    135135
     136void NetworkProcess::clearDiskCache(std::chrono::system_clock::time_point modifiedSince, std::function<void ()> completionHandler)
     137{
     138    if (!m_clearCacheDispatchGroup)
     139        m_clearCacheDispatchGroup = dispatch_group_create();
     140
     141    dispatch_group_async(m_clearCacheDispatchGroup, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), [modifiedSince, completionHandler] {
     142        NSURLCache *cache = [NSURLCache sharedURLCache];
     143
     144#if PLATFORM(IOS) || __MAC_OS_X_VERSION_MIN_REQUIRED >= 101000
     145        NSTimeInterval timeInterval = std::chrono::duration_cast<std::chrono::duration<double>>(modifiedSince.time_since_epoch()).count();
     146        NSDate *date = [NSDate dateWithTimeIntervalSince1970:timeInterval];
     147        [cache removeCachedResponsesSinceDate:date];
     148#else
     149        [cache removeAllCachedResponses];
     150#endif
     151        dispatch_async(dispatch_get_main_queue(), [completionHandler] {
     152            completionHandler();
     153        });
     154    });
     155}
     156
    136157}
    137158
  • trunk/Source/WebKit2/NetworkProcess/mac/NetworkProcessMac.mm

    r166385 r177038  
    130130        return;
    131131
    132     if (!m_clearCacheDispatchGroup)
    133         m_clearCacheDispatchGroup = dispatch_group_create();
    134 
    135     dispatch_group_async(m_clearCacheDispatchGroup, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    136         [[NSURLCache sharedURLCache] removeAllCachedResponses];
    137     });
     132    clearDiskCache(std::chrono::system_clock::time_point::min(), [] { });
    138133}
    139134
  • trunk/Source/WebKit2/Shared/WebsiteData/WebsiteDataTypes.h

    r177032 r177038  
    3131enum WebsiteDataTypes {
    3232    WebsiteDataTypeCookies = 1 << 0,
     33    WebsiteDataTypeDiskCache = 1 << 1,
    3334};
    3435
  • trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKWebsiteDataStore.h

    r177018 r177038  
    3232typedef NS_OPTIONS(NSUInteger, WKWebsiteDataTypes) {
    3333    WKWebsiteDataTypeCookies = 1 << 0,
     34    WKWebsiteDataTypeDiskCache = 1 << 1,
    3435
    3536    WKWebsiteDataTypeAll = NSUIntegerMax,
  • trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKWebsiteDataStore.mm

    r177032 r177038  
    6161    if (wkWebsiteDataTypes & WKWebsiteDataTypeCookies)
    6262        websiteDataTypes |= WebsiteDataTypes::WebsiteDataTypeCookies;
     63    if (wkWebsiteDataTypes & WKWebsiteDataTypeDiskCache)
     64        websiteDataTypes |= WebsiteDataTypes::WebsiteDataTypeDiskCache;
    6365
    6466    return static_cast<WebsiteDataTypes>(websiteDataTypes);
Note: See TracChangeset for help on using the changeset viewer.