Diff
Modified: trunk/Source/WebKit2/ChangeLog (176793 => 176794)
--- trunk/Source/WebKit2/ChangeLog 2014-12-04 16:35:23 UTC (rev 176793)
+++ trunk/Source/WebKit2/ChangeLog 2014-12-04 16:35:29 UTC (rev 176794)
@@ -1,3 +1,26 @@
+2014-12-03 Anders Carlsson <[email protected]>
+
+ Add a way to delete local storage origins modified after a given date
+ https://bugs.webkit.org/show_bug.cgi?id=139249
+
+ Reviewed by Tim Horton.
+
+ Also change LocalStorageDatabaseTracker to hold on to WTF::Optional time_t values
+ instead of treating missing values as zero.
+
+ * UIProcess/LocalStorageDetails.h:
+ * UIProcess/Storage/LocalStorageDatabaseTracker.cpp:
+ (WebKit::fileCreationTime):
+ (WebKit::fileModificationTime):
+ (WebKit::LocalStorageDatabaseTracker::deleteDatabasesModifiedSince):
+ (WebKit::LocalStorageDatabaseTracker::details):
+ * UIProcess/Storage/LocalStorageDatabaseTracker.h:
+ * UIProcess/Storage/StorageManager.cpp:
+ (WebKit::StorageManager::deleteLocalStorageOriginsModifiedSince):
+ * UIProcess/Storage/StorageManager.h:
+ * UIProcess/WebKeyValueStorageManager.cpp:
+ (WebKit::didGetStorageDetailsByOrigin):
+
2014-12-04 Peter Molnar <[email protected]>
[EFL][WK2] Add ewk API to allow accepting a specific TLS certificate for a specific host
Modified: trunk/Source/WebKit2/UIProcess/LocalStorageDetails.h (176793 => 176794)
--- trunk/Source/WebKit2/UIProcess/LocalStorageDetails.h 2014-12-04 16:35:23 UTC (rev 176793)
+++ trunk/Source/WebKit2/UIProcess/LocalStorageDetails.h 2014-12-04 16:35:29 UTC (rev 176794)
@@ -26,14 +26,15 @@
#ifndef LocalStorageDetails_h
#define LocalStorageDetails_h
+#include <wtf/Optional.h>
#include <wtf/text/WTFString.h>
namespace WebKit {
struct LocalStorageDetails {
String originIdentifier;
- double creationTime;
- double modificationTime;
+ Optional<time_t> creationTime;
+ Optional<time_t> modificationTime;
};
} // namespace WebKit
Modified: trunk/Source/WebKit2/UIProcess/Storage/LocalStorageDatabaseTracker.cpp (176793 => 176794)
--- trunk/Source/WebKit2/UIProcess/Storage/LocalStorageDatabaseTracker.cpp 2014-12-04 16:35:23 UTC (rev 176793)
+++ trunk/Source/WebKit2/UIProcess/Storage/LocalStorageDatabaseTracker.cpp 2014-12-04 16:35:29 UTC (rev 176794)
@@ -125,6 +125,39 @@
deleteEmptyDirectory(m_localStorageDirectory);
}
+static Optional<time_t> fileCreationTime(const String& filePath)
+{
+ time_t time;
+ return getFileCreationTime(filePath, time) ? time : Nullopt;
+}
+
+static Optional<time_t> fileModificationTime(const String& filePath)
+{
+ time_t time;
+ return getFileModificationTime(filePath, time) ? time : Nullopt;
+}
+
+Vector<RefPtr<SecurityOrigin>> LocalStorageDatabaseTracker::deleteDatabasesModifiedSince(time_t time)
+{
+ Vector<RefPtr<SecurityOrigin>> deletedDatabaseOrigins;
+
+ for (const String& origin : m_origins) {
+ String filePath = pathForDatabaseWithOriginIdentifier(origin);
+
+ auto modificationTime = fileModificationTime(filePath);
+ if (!modificationTime)
+ continue;
+
+ if (modificationTime.value() >= time) {
+ removeDatabaseWithOriginIdentifier(origin);
+
+ deletedDatabaseOrigins.append(SecurityOrigin::createFromDatabaseIdentifier(origin));
+ }
+ }
+
+ return deletedDatabaseOrigins;
+}
+
Vector<RefPtr<WebCore::SecurityOrigin>> LocalStorageDatabaseTracker::origins() const
{
Vector<RefPtr<SecurityOrigin>> origins;
@@ -143,12 +176,11 @@
for (const String& origin : m_origins) {
String filePath = pathForDatabaseWithOriginIdentifier(origin);
- time_t time;
LocalStorageDetails details;
details.originIdentifier = origin.isolatedCopy();
- details.creationTime = getFileCreationTime(filePath, time) ? time : 0;
- details.modificationTime = getFileModificationTime(filePath, time) ? time : 0;
+ details.creationTime = fileCreationTime(filePath);
+ details.modificationTime = fileModificationTime(filePath);
result.uncheckedAppend(details);
}
Modified: trunk/Source/WebKit2/UIProcess/Storage/LocalStorageDatabaseTracker.h (176793 => 176794)
--- trunk/Source/WebKit2/UIProcess/Storage/LocalStorageDatabaseTracker.h 2014-12-04 16:35:23 UTC (rev 176793)
+++ trunk/Source/WebKit2/UIProcess/Storage/LocalStorageDatabaseTracker.h 2014-12-04 16:35:29 UTC (rev 176794)
@@ -55,6 +55,9 @@
void deleteDatabaseWithOrigin(WebCore::SecurityOrigin*);
void deleteAllDatabases();
+ // Returns a vector of the origins whose databases have been deleted.
+ Vector<RefPtr<WebCore::SecurityOrigin>> deleteDatabasesModifiedSince(time_t);
+
Vector<RefPtr<WebCore::SecurityOrigin>> origins() const;
Vector<LocalStorageDetails> details();
Modified: trunk/Source/WebKit2/UIProcess/Storage/StorageManager.cpp (176793 => 176794)
--- trunk/Source/WebKit2/UIProcess/Storage/StorageManager.cpp 2014-12-04 16:35:23 UTC (rev 176793)
+++ trunk/Source/WebKit2/UIProcess/Storage/StorageManager.cpp 2014-12-04 16:35:29 UTC (rev 176794)
@@ -438,6 +438,22 @@
m_queue->dispatch(bind(&StorageManager::deleteAllEntriesInternal, this));
}
+void StorageManager::deleteLocalStorageOriginsModifiedSince(time_t time, std::function<void ()> completionHandler)
+{
+ RefPtr<StorageManager> storageManager(this);
+
+ m_queue->dispatch([storageManager, time, completionHandler] {
+ auto deletedOrigins = storageManager->m_localStorageDatabaseTracker->deleteDatabasesModifiedSince(time);
+
+ for (const auto& origin : deletedOrigins) {
+ for (auto& localStorageNamespace : storageManager->m_localStorageNamespaces.values())
+ localStorageNamespace->clearStorageAreasMatchingOrigin(origin.get());
+ }
+
+ RunLoop::main().dispatch(completionHandler);
+ });
+}
+
void StorageManager::createLocalStorageMap(IPC::Connection* connection, uint64_t storageMapID, uint64_t storageNamespaceID, const SecurityOriginData& securityOriginData)
{
std::pair<RefPtr<IPC::Connection>, uint64_t> connectionAndStorageMapIDPair(connection, storageMapID);
Modified: trunk/Source/WebKit2/UIProcess/Storage/StorageManager.h (176793 => 176794)
--- trunk/Source/WebKit2/UIProcess/Storage/StorageManager.h 2014-12-04 16:35:23 UTC (rev 176793)
+++ trunk/Source/WebKit2/UIProcess/Storage/StorageManager.h 2014-12-04 16:35:29 UTC (rev 176794)
@@ -27,6 +27,7 @@
#define StorageManager_h
#include "Connection.h"
+#include <chrono>
#include <wtf/Forward.h>
#include <wtf/PassRefPtr.h>
#include <wtf/ThreadSafeRefCounted.h>
@@ -66,6 +67,8 @@
void deleteEntriesForOrigin(const WebCore::SecurityOrigin&);
void deleteAllEntries();
+ void deleteLocalStorageOriginsModifiedSince(time_t, std::function<void ()> completionHandler);
+
private:
explicit StorageManager(const String& localStorageDirectory);
Modified: trunk/Source/WebKit2/UIProcess/WebKeyValueStorageManager.cpp (176793 => 176794)
--- trunk/Source/WebKit2/UIProcess/WebKeyValueStorageManager.cpp 2014-12-04 16:35:23 UTC (rev 176793)
+++ trunk/Source/WebKit2/UIProcess/WebKeyValueStorageManager.cpp 2014-12-04 16:35:29 UTC (rev 176794)
@@ -118,9 +118,9 @@
detailsMap.set(WebKeyValueStorageManager::originKey(), origin);
if (originDetails.creationTime)
- detailsMap.set(WebKeyValueStorageManager::creationTimeKey(), API::Double::create(originDetails.creationTime));
+ detailsMap.set(WebKeyValueStorageManager::creationTimeKey(), API::Double::create(originDetails.creationTime.valueOr(0)));
if (originDetails.modificationTime)
- detailsMap.set(WebKeyValueStorageManager::modificationTimeKey(), API::Double::create(originDetails.modificationTime));
+ detailsMap.set(WebKeyValueStorageManager::modificationTimeKey(), API::Double::create(originDetails.modificationTime.valueOr(0)));
result.uncheckedAppend(ImmutableDictionary::create(WTF::move(detailsMap)));
}