Title: [178526] trunk/Source/WebKit2
Revision
178526
Author
[email protected]
Date
2015-01-15 13:26:53 -0800 (Thu, 15 Jan 2015)

Log 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.

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (178525 => 178526)


--- trunk/Source/WebKit2/ChangeLog	2015-01-15 20:28:10 UTC (rev 178525)
+++ trunk/Source/WebKit2/ChangeLog	2015-01-15 21:26:53 UTC (rev 178526)
@@ -1,5 +1,44 @@
 2015-01-15  Anders Carlsson  <[email protected]>
 
+        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.
+
+2015-01-15  Anders Carlsson  <[email protected]>
+
         Give WebsiteDataStore a StorageManager
         https://bugs.webkit.org/show_bug.cgi?id=140505
 

Modified: trunk/Source/WebKit2/Shared/WebsiteData/WebsiteDataTypes.h (178525 => 178526)


--- trunk/Source/WebKit2/Shared/WebsiteData/WebsiteDataTypes.h	2015-01-15 20:28:10 UTC (rev 178525)
+++ trunk/Source/WebKit2/Shared/WebsiteData/WebsiteDataTypes.h	2015-01-15 21:26:53 UTC (rev 178526)
@@ -31,6 +31,7 @@
 enum WebsiteDataTypes {
     WebsiteDataTypeCookies = 1 << 0,
     WebsiteDataTypeDiskCache = 1 << 1,
+    WebsiteDataTypeLocalStorage = 1 << 2,
 };
 
 };

Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKWebsiteDataStore.h (178525 => 178526)


--- trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKWebsiteDataStore.h	2015-01-15 20:28:10 UTC (rev 178525)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKWebsiteDataStore.h	2015-01-15 21:26:53 UTC (rev 178526)
@@ -33,6 +33,7 @@
     WKWebsiteDataTypeCookies = 1 << 0,
     WKWebsiteDataTypeDiskCache = 1 << 1,
 
+    WKWebsiteDataTypeLocalStorage = 1 << 2,
     WKWebsiteDataTypeAll = NSUIntegerMax,
 } WK_ENUM_AVAILABLE(WK_MAC_TBA, WK_IOS_TBA);
 

Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKWebsiteDataStore.mm (178525 => 178526)


--- trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKWebsiteDataStore.mm	2015-01-15 20:28:10 UTC (rev 178525)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKWebsiteDataStore.mm	2015-01-15 21:26:53 UTC (rev 178526)
@@ -62,6 +62,8 @@
         websiteDataTypes |= WebsiteDataTypes::WebsiteDataTypeCookies;
     if (wkWebsiteDataTypes & WKWebsiteDataTypeDiskCache)
         websiteDataTypes |= WebsiteDataTypes::WebsiteDataTypeDiskCache;
+    if (wkWebsiteDataTypes & WKWebsiteDataTypeLocalStorage)
+        websiteDataTypes |= WebsiteDataTypes::WebsiteDataTypeLocalStorage;
 
     return static_cast<WebsiteDataTypes>(websiteDataTypes);
 }

Modified: trunk/Source/WebKit2/UIProcess/Storage/LocalStorageDatabaseTracker.cpp (178525 => 178526)


--- trunk/Source/WebKit2/UIProcess/Storage/LocalStorageDatabaseTracker.cpp	2015-01-15 20:28:10 UTC (rev 178525)
+++ trunk/Source/WebKit2/UIProcess/Storage/LocalStorageDatabaseTracker.cpp	2015-01-15 21:26:53 UTC (rev 178526)
@@ -134,12 +134,15 @@
 static Optional<time_t> fileModificationTime(const String& filePath)
 {
     time_t time;
-    return getFileModificationTime(filePath, time) ? time : Optional<time_t>(Nullopt);
+    if (!getFileModificationTime(filePath, time))
+        return Nullopt;
+
+    return time;
 }
 
-Vector<RefPtr<SecurityOrigin>> LocalStorageDatabaseTracker::deleteDatabasesModifiedSince(time_t time)
+Vector<Ref<SecurityOrigin>> LocalStorageDatabaseTracker::deleteDatabasesModifiedSince(std::chrono::system_clock::time_point time)
 {
-    Vector<RefPtr<SecurityOrigin>> deletedDatabaseOrigins;
+    Vector<String> originIdentifiersToDelete;
 
     for (const String& origin : m_origins) {
         String filePath = pathForDatabaseWithOriginIdentifier(origin);
@@ -148,11 +151,17 @@
         if (!modificationTime)
             continue;
 
-        if (modificationTime.value() >= time) {
-            removeDatabaseWithOriginIdentifier(origin);
+        if (modificationTime.value() >= std::chrono::system_clock::to_time_t(time))
+            originIdentifiersToDelete.append(origin);
+    }
 
-            deletedDatabaseOrigins.append(SecurityOrigin::createFromDatabaseIdentifier(origin));
-        }
+    Vector<Ref<SecurityOrigin>> deletedDatabaseOrigins;
+    deletedDatabaseOrigins.reserveInitialCapacity(originIdentifiersToDelete.size());
+
+    for (const auto& originIdentifier : originIdentifiersToDelete) {
+        removeDatabaseWithOriginIdentifier(originIdentifier);
+
+        deletedDatabaseOrigins.uncheckedAppend(SecurityOrigin::createFromDatabaseIdentifier(originIdentifier));
     }
 
     return deletedDatabaseOrigins;

Modified: trunk/Source/WebKit2/UIProcess/Storage/LocalStorageDatabaseTracker.h (178525 => 178526)


--- trunk/Source/WebKit2/UIProcess/Storage/LocalStorageDatabaseTracker.h	2015-01-15 20:28:10 UTC (rev 178525)
+++ trunk/Source/WebKit2/UIProcess/Storage/LocalStorageDatabaseTracker.h	2015-01-15 21:26:53 UTC (rev 178526)
@@ -56,7 +56,7 @@
     void deleteAllDatabases();
 
     // Returns a vector of the origins whose databases have been deleted.
-    Vector<RefPtr<WebCore::SecurityOrigin>> deleteDatabasesModifiedSince(time_t);
+    Vector<Ref<WebCore::SecurityOrigin>> deleteDatabasesModifiedSince(std::chrono::system_clock::time_point);
 
     Vector<RefPtr<WebCore::SecurityOrigin>> origins() const;
     Vector<LocalStorageDetails> details();

Modified: trunk/Source/WebKit2/UIProcess/Storage/StorageManager.cpp (178525 => 178526)


--- trunk/Source/WebKit2/UIProcess/Storage/StorageManager.cpp	2015-01-15 20:28:10 UTC (rev 178525)
+++ trunk/Source/WebKit2/UIProcess/Storage/StorageManager.cpp	2015-01-15 21:26:53 UTC (rev 178526)
@@ -92,7 +92,7 @@
     Ref<StorageArea> getOrCreateStorageArea(RefPtr<SecurityOrigin>&&);
     void didDestroyStorageArea(StorageArea*);
 
-    void clearStorageAreasMatchingOrigin(SecurityOrigin*);
+    void clearStorageAreasMatchingOrigin(const SecurityOrigin&);
     void clearAllStorageAreas();
 
 private:
@@ -340,11 +340,11 @@
     m_storageManager->m_localStorageNamespaces.remove(m_storageNamespaceID);
 }
 
-void StorageManager::LocalStorageNamespace::clearStorageAreasMatchingOrigin(SecurityOrigin* securityOrigin)
+void StorageManager::LocalStorageNamespace::clearStorageAreasMatchingOrigin(const SecurityOrigin& securityOrigin)
 {
-    for (auto it = m_storageAreaMap.begin(), end = m_storageAreaMap.end(); it != end; ++it) {
-        if (it->key->equal(securityOrigin))
-            it->value->clear();
+    for (const auto& originAndStorageArea : m_storageAreaMap) {
+        if (originAndStorageArea.key->equal(&securityOrigin))
+            originAndStorageArea.value->clear();
     }
 }
 
@@ -546,7 +546,7 @@
     RefPtr<SecurityOrigin> copiedOrigin = securityOrigin.isolatedCopy();
     m_queue->dispatch([storageManager, copiedOrigin] {
         for (auto& localStorageNamespace : storageManager->m_localStorageNamespaces.values())
-            localStorageNamespace->clearStorageAreasMatchingOrigin(copiedOrigin.get());
+            localStorageNamespace->clearStorageAreasMatchingOrigin(*copiedOrigin);
 
         for (auto& transientLocalStorageNamespace : storageManager->m_transientLocalStorageNamespaces.values())
             transientLocalStorageNamespace->clearStorageAreasMatchingOrigin(*copiedOrigin);
@@ -570,7 +570,7 @@
     });
 }
 
-void StorageManager::deleteLocalStorageOriginsModifiedSince(time_t time, std::function<void ()> completionHandler)
+void StorageManager::deleteLocalStorageOriginsModifiedSince(std::chrono::system_clock::time_point time, std::function<void ()> completionHandler)
 {
     RefPtr<StorageManager> storageManager(this);
 

Modified: trunk/Source/WebKit2/UIProcess/Storage/StorageManager.h (178525 => 178526)


--- trunk/Source/WebKit2/UIProcess/Storage/StorageManager.h	2015-01-15 20:28:10 UTC (rev 178525)
+++ trunk/Source/WebKit2/UIProcess/Storage/StorageManager.h	2015-01-15 21:26:53 UTC (rev 178526)
@@ -64,7 +64,7 @@
     void deleteEntriesForOrigin(const WebCore::SecurityOrigin&);
     void deleteAllEntries();
 
-    void deleteLocalStorageOriginsModifiedSince(time_t, std::function<void ()> completionHandler);
+    void deleteLocalStorageOriginsModifiedSince(std::chrono::system_clock::time_point, std::function<void ()> completionHandler);
 
 private:
     explicit StorageManager(const String& localStorageDirectory);

Modified: trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp (178525 => 178526)


--- trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp	2015-01-15 20:28:10 UTC (rev 178525)
+++ trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp	2015-01-15 21:26:53 UTC (rev 178526)
@@ -173,6 +173,14 @@
         }
     }
 
+    if (dataTypes & WebsiteDataTypeLocalStorage && m_storageManager) {
+        callbackAggregator->addPendingCallback();
+
+        m_storageManager->deleteLocalStorageOriginsModifiedSince(modifiedSince, [callbackAggregator] {
+            callbackAggregator->removePendingCallback();
+        });
+    }
+
     // There's a chance that we don't have any pending callbacks. If so, we want to dispatch the completion handler right away.
     callbackAggregator->callIfNeeded();
 }
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to