Title: [176794] trunk/Source/WebKit2
Revision
176794
Author
[email protected]
Date
2014-12-04 08:35:29 -0800 (Thu, 04 Dec 2014)

Log Message

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):

Modified Paths

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)));
     }
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to