Changeset 178526 in webkit


Ignore:
Timestamp:
Jan 15, 2015 1:26:53 PM (9 years ago)
Author:
andersca@apple.com
Message:

Clearing the website data store should clear local storage
https://bugs.webkit.org/show_bug.cgi?id=140507

Reviewed by Andreas Kling.

  • Shared/WebsiteData/WebsiteDataTypes.h:

Add WebsiteDataTypeLocalStorage.

  • UIProcess/API/Cocoa/_WKWebsiteDataStore.h:

Add WKWebsiteDataTypeLocalStorage

  • UIProcess/API/Cocoa/_WKWebsiteDataStore.mm:

(toWebsiteDataTypes):
Handle WKWebsiteDataTypeLocalStorage.

  • UIProcess/Storage/LocalStorageDatabaseTracker.cpp:

(WebKit::fileModificationTime):
Use an early return.

(WebKit::LocalStorageDatabaseTracker::deleteDatabasesModifiedSince):
Change this to take an std::chrono::system_clock::time_point and don't
try to modifiy m_origins while iterating it.

  • UIProcess/Storage/LocalStorageDatabaseTracker.h:

Update declarations.

  • UIProcess/Storage/StorageManager.cpp:

(WebKit::StorageManager::deleteLocalStorageOriginsModifiedSince):
Change this to take an std::chrono::system_clock::time_point.

  • UIProcess/Storage/StorageManager.h:

Update declarations.

  • UIProcess/WebsiteData/WebsiteDataStore.cpp:

(WebKit::WebsiteDataStore::removeData):
Remove data from the storage manager as well.

Location:
trunk/Source/WebKit2
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r178524 r178526  
     12015-01-15  Anders Carlsson  <andersca@apple.com>
     2
     3        Clearing the website data store should clear local storage
     4        https://bugs.webkit.org/show_bug.cgi?id=140507
     5
     6        Reviewed by Andreas Kling.
     7
     8        * Shared/WebsiteData/WebsiteDataTypes.h:
     9        Add WebsiteDataTypeLocalStorage.
     10
     11        * UIProcess/API/Cocoa/_WKWebsiteDataStore.h:
     12        Add WKWebsiteDataTypeLocalStorage
     13
     14        * UIProcess/API/Cocoa/_WKWebsiteDataStore.mm:
     15        (toWebsiteDataTypes):
     16        Handle WKWebsiteDataTypeLocalStorage.
     17
     18        * UIProcess/Storage/LocalStorageDatabaseTracker.cpp:
     19        (WebKit::fileModificationTime):
     20        Use an early return.
     21
     22        (WebKit::LocalStorageDatabaseTracker::deleteDatabasesModifiedSince):
     23        Change this to take an std::chrono::system_clock::time_point and don't
     24        try to modifiy m_origins while iterating it.
     25
     26        * UIProcess/Storage/LocalStorageDatabaseTracker.h:
     27        Update declarations.
     28
     29        * UIProcess/Storage/StorageManager.cpp:
     30        (WebKit::StorageManager::deleteLocalStorageOriginsModifiedSince):
     31        Change this to take an std::chrono::system_clock::time_point.
     32
     33        * UIProcess/Storage/StorageManager.h:
     34        Update declarations.
     35
     36        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
     37        (WebKit::WebsiteDataStore::removeData):
     38        Remove data from the storage manager as well.
     39
    1402015-01-15  Anders Carlsson  <andersca@apple.com>
    241
  • trunk/Source/WebKit2/Shared/WebsiteData/WebsiteDataTypes.h

    r177038 r178526  
    3232    WebsiteDataTypeCookies = 1 << 0,
    3333    WebsiteDataTypeDiskCache = 1 << 1,
     34    WebsiteDataTypeLocalStorage = 1 << 2,
    3435};
    3536
  • trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKWebsiteDataStore.h

    r177747 r178526  
    3434    WKWebsiteDataTypeDiskCache = 1 << 1,
    3535
     36    WKWebsiteDataTypeLocalStorage = 1 << 2,
    3637    WKWebsiteDataTypeAll = NSUIntegerMax,
    3738} WK_ENUM_AVAILABLE(WK_MAC_TBA, WK_IOS_TBA);
  • trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKWebsiteDataStore.mm

    r177038 r178526  
    6363    if (wkWebsiteDataTypes & WKWebsiteDataTypeDiskCache)
    6464        websiteDataTypes |= WebsiteDataTypes::WebsiteDataTypeDiskCache;
     65    if (wkWebsiteDataTypes & WKWebsiteDataTypeLocalStorage)
     66        websiteDataTypes |= WebsiteDataTypes::WebsiteDataTypeLocalStorage;
    6567
    6668    return static_cast<WebsiteDataTypes>(websiteDataTypes);
  • trunk/Source/WebKit2/UIProcess/Storage/LocalStorageDatabaseTracker.cpp

    r176802 r178526  
    135135{
    136136    time_t time;
    137     return getFileModificationTime(filePath, time) ? time : Optional<time_t>(Nullopt);
    138 }
    139 
    140 Vector<RefPtr<SecurityOrigin>> LocalStorageDatabaseTracker::deleteDatabasesModifiedSince(time_t time)
    141 {
    142     Vector<RefPtr<SecurityOrigin>> deletedDatabaseOrigins;
     137    if (!getFileModificationTime(filePath, time))
     138        return Nullopt;
     139
     140    return time;
     141}
     142
     143Vector<Ref<SecurityOrigin>> LocalStorageDatabaseTracker::deleteDatabasesModifiedSince(std::chrono::system_clock::time_point time)
     144{
     145    Vector<String> originIdentifiersToDelete;
    143146
    144147    for (const String& origin : m_origins) {
     
    149152            continue;
    150153
    151         if (modificationTime.value() >= time) {
    152             removeDatabaseWithOriginIdentifier(origin);
    153 
    154             deletedDatabaseOrigins.append(SecurityOrigin::createFromDatabaseIdentifier(origin));
    155         }
     154        if (modificationTime.value() >= std::chrono::system_clock::to_time_t(time))
     155            originIdentifiersToDelete.append(origin);
     156    }
     157
     158    Vector<Ref<SecurityOrigin>> deletedDatabaseOrigins;
     159    deletedDatabaseOrigins.reserveInitialCapacity(originIdentifiersToDelete.size());
     160
     161    for (const auto& originIdentifier : originIdentifiersToDelete) {
     162        removeDatabaseWithOriginIdentifier(originIdentifier);
     163
     164        deletedDatabaseOrigins.uncheckedAppend(SecurityOrigin::createFromDatabaseIdentifier(originIdentifier));
    156165    }
    157166
  • trunk/Source/WebKit2/UIProcess/Storage/LocalStorageDatabaseTracker.h

    r176794 r178526  
    5757
    5858    // Returns a vector of the origins whose databases have been deleted.
    59     Vector<RefPtr<WebCore::SecurityOrigin>> deleteDatabasesModifiedSince(time_t);
     59    Vector<Ref<WebCore::SecurityOrigin>> deleteDatabasesModifiedSince(std::chrono::system_clock::time_point);
    6060
    6161    Vector<RefPtr<WebCore::SecurityOrigin>> origins() const;
  • trunk/Source/WebKit2/UIProcess/Storage/StorageManager.cpp

    r178511 r178526  
    9393    void didDestroyStorageArea(StorageArea*);
    9494
    95     void clearStorageAreasMatchingOrigin(SecurityOrigin*);
     95    void clearStorageAreasMatchingOrigin(const SecurityOrigin&);
    9696    void clearAllStorageAreas();
    9797
     
    341341}
    342342
    343 void StorageManager::LocalStorageNamespace::clearStorageAreasMatchingOrigin(SecurityOrigin* securityOrigin)
    344 {
    345     for (auto it = m_storageAreaMap.begin(), end = m_storageAreaMap.end(); it != end; ++it) {
    346         if (it->key->equal(securityOrigin))
    347             it->value->clear();
     343void StorageManager::LocalStorageNamespace::clearStorageAreasMatchingOrigin(const SecurityOrigin& securityOrigin)
     344{
     345    for (const auto& originAndStorageArea : m_storageAreaMap) {
     346        if (originAndStorageArea.key->equal(&securityOrigin))
     347            originAndStorageArea.value->clear();
    348348    }
    349349}
     
    547547    m_queue->dispatch([storageManager, copiedOrigin] {
    548548        for (auto& localStorageNamespace : storageManager->m_localStorageNamespaces.values())
    549             localStorageNamespace->clearStorageAreasMatchingOrigin(copiedOrigin.get());
     549            localStorageNamespace->clearStorageAreasMatchingOrigin(*copiedOrigin);
    550550
    551551        for (auto& transientLocalStorageNamespace : storageManager->m_transientLocalStorageNamespaces.values())
     
    571571}
    572572
    573 void StorageManager::deleteLocalStorageOriginsModifiedSince(time_t time, std::function<void ()> completionHandler)
     573void StorageManager::deleteLocalStorageOriginsModifiedSince(std::chrono::system_clock::time_point time, std::function<void ()> completionHandler)
    574574{
    575575    RefPtr<StorageManager> storageManager(this);
  • trunk/Source/WebKit2/UIProcess/Storage/StorageManager.h

    r178511 r178526  
    6565    void deleteAllEntries();
    6666
    67     void deleteLocalStorageOriginsModifiedSince(time_t, std::function<void ()> completionHandler);
     67    void deleteLocalStorageOriginsModifiedSince(std::chrono::system_clock::time_point, std::function<void ()> completionHandler);
    6868
    6969private:
  • trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp

    r178524 r178526  
    174174    }
    175175
     176    if (dataTypes & WebsiteDataTypeLocalStorage && m_storageManager) {
     177        callbackAggregator->addPendingCallback();
     178
     179        m_storageManager->deleteLocalStorageOriginsModifiedSince(modifiedSince, [callbackAggregator] {
     180            callbackAggregator->removePendingCallback();
     181        });
     182    }
     183
    176184    // There's a chance that we don't have any pending callbacks. If so, we want to dispatch the completion handler right away.
    177185    callbackAggregator->callIfNeeded();
Note: See TracChangeset for help on using the changeset viewer.