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();
}