Title: [231837] trunk/Source/WebKit
Revision
231837
Author
[email protected]
Date
2018-05-15 21:43:15 -0700 (Tue, 15 May 2018)

Log Message

StorageManager::deleteLocalStorageOriginsModifiedSince: database files get deleted before database connections close
https://bugs.webkit.org/show_bug.cgi?id=185671

Patch by Sihui Liu <[email protected]> on 2018-05-15
Reviewed by Geoffrey Garen.

We should delete database files before closing databases.

* UIProcess/WebStorage/LocalStorageDatabase.cpp:
(WebKit::LocalStorageDatabase::updateDatabaseWithChangedItems):
* UIProcess/WebStorage/LocalStorageDatabaseTracker.cpp:
(WebKit::LocalStorageDatabaseTracker::databasesModifiedSince):
(WebKit::LocalStorageDatabaseTracker::deleteDatabasesModifiedSince): Deleted.
* UIProcess/WebStorage/LocalStorageDatabaseTracker.h:
* UIProcess/WebStorage/StorageManager.cpp:
(WebKit::StorageManager::deleteLocalStorageOriginsModifiedSince):

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (231836 => 231837)


--- trunk/Source/WebKit/ChangeLog	2018-05-16 03:48:38 UTC (rev 231836)
+++ trunk/Source/WebKit/ChangeLog	2018-05-16 04:43:15 UTC (rev 231837)
@@ -1,3 +1,21 @@
+2018-05-15  Sihui Liu  <[email protected]>
+
+        StorageManager::deleteLocalStorageOriginsModifiedSince: database files get deleted before database connections close
+        https://bugs.webkit.org/show_bug.cgi?id=185671
+
+        Reviewed by Geoffrey Garen.
+
+        We should delete database files before closing databases.
+
+        * UIProcess/WebStorage/LocalStorageDatabase.cpp:
+        (WebKit::LocalStorageDatabase::updateDatabaseWithChangedItems):
+        * UIProcess/WebStorage/LocalStorageDatabaseTracker.cpp:
+        (WebKit::LocalStorageDatabaseTracker::databasesModifiedSince):
+        (WebKit::LocalStorageDatabaseTracker::deleteDatabasesModifiedSince): Deleted.
+        * UIProcess/WebStorage/LocalStorageDatabaseTracker.h:
+        * UIProcess/WebStorage/StorageManager.cpp:
+        (WebKit::StorageManager::deleteLocalStorageOriginsModifiedSince):
+
 2018-05-15  Dean Jackson  <[email protected]>
 
         Launch System Preview as the download starts, rather than waiting for a response

Modified: trunk/Source/WebKit/UIProcess/WebStorage/LocalStorageDatabaseTracker.cpp (231836 => 231837)


--- trunk/Source/WebKit/UIProcess/WebStorage/LocalStorageDatabaseTracker.cpp	2018-05-16 03:48:38 UTC (rev 231836)
+++ trunk/Source/WebKit/UIProcess/WebStorage/LocalStorageDatabaseTracker.cpp	2018-05-16 04:43:15 UTC (rev 231837)
@@ -142,33 +142,31 @@
     return time;
 }
 
-Vector<SecurityOriginData> LocalStorageDatabaseTracker::deleteDatabasesModifiedSince(WallTime time)
+Vector<SecurityOriginData> LocalStorageDatabaseTracker::databasesModifiedSince(WallTime time)
 {
     ASSERT(!RunLoop::isMain());
     importOriginIdentifiers();
-    Vector<String> originIdentifiersToDelete;
-
+    Vector<String> originIdentifiersModified;
+    
     for (const String& origin : m_origins) {
         String filePath = pathForDatabaseWithOriginIdentifier(origin);
-
+        
         auto modificationTime = FileSystem::getFileModificationTime(filePath);
         if (!modificationTime || modificationTime.value() >= time)
-            originIdentifiersToDelete.append(origin);
+            originIdentifiersModified.append(origin);
     }
-
-    Vector<SecurityOriginData> deletedDatabaseOrigins;
-    deletedDatabaseOrigins.reserveInitialCapacity(originIdentifiersToDelete.size());
-
-    for (const auto& originIdentifier : originIdentifiersToDelete) {
-        removeDatabaseWithOriginIdentifier(originIdentifier);
-
+    
+    Vector<SecurityOriginData> databaseOriginsModified;
+    databaseOriginsModified.reserveInitialCapacity(originIdentifiersModified.size());
+    
+    for (const auto& originIdentifier : originIdentifiersModified) {
         if (auto origin = SecurityOriginData::fromDatabaseIdentifier(originIdentifier))
-            deletedDatabaseOrigins.uncheckedAppend(*origin);
+            databaseOriginsModified.uncheckedAppend(*origin);
         else
             ASSERT_NOT_REACHED();
     }
-
-    return deletedDatabaseOrigins;
+    
+    return databaseOriginsModified;
 }
 
 Vector<SecurityOriginData> LocalStorageDatabaseTracker::origins() const

Modified: trunk/Source/WebKit/UIProcess/WebStorage/LocalStorageDatabaseTracker.h (231836 => 231837)


--- trunk/Source/WebKit/UIProcess/WebStorage/LocalStorageDatabaseTracker.h	2018-05-16 03:48:38 UTC (rev 231836)
+++ trunk/Source/WebKit/UIProcess/WebStorage/LocalStorageDatabaseTracker.h	2018-05-16 04:43:15 UTC (rev 231837)
@@ -55,8 +55,8 @@
     void deleteDatabaseWithOrigin(const WebCore::SecurityOriginData&);
     void deleteAllDatabases();
 
-    // Returns a vector of the origins whose databases have been deleted.
-    Vector<WebCore::SecurityOriginData> deleteDatabasesModifiedSince(WallTime);
+    // Returns a vector of the origins whose databases should be deleted.
+    Vector<WebCore::SecurityOriginData> databasesModifiedSince(WallTime);
 
     Vector<WebCore::SecurityOriginData> origins() const;
 

Modified: trunk/Source/WebKit/UIProcess/WebStorage/StorageManager.cpp (231836 => 231837)


--- trunk/Source/WebKit/UIProcess/WebStorage/StorageManager.cpp	2018-05-16 03:48:38 UTC (rev 231836)
+++ trunk/Source/WebKit/UIProcess/WebStorage/StorageManager.cpp	2018-05-16 04:43:15 UTC (rev 231837)
@@ -618,16 +618,18 @@
 void StorageManager::deleteLocalStorageOriginsModifiedSince(WallTime time, Function<void()>&& completionHandler)
 {
     m_queue->dispatch([this, protectedThis = makeRef(*this), time, completionHandler = WTFMove(completionHandler)]() mutable {
-        auto deletedOrigins = m_localStorageDatabaseTracker->deleteDatabasesModifiedSince(time);
+        auto originsToDelete = m_localStorageDatabaseTracker->databasesModifiedSince(time);
+        
+        for (auto& transientLocalStorageNamespace : m_transientLocalStorageNamespaces.values())
+            transientLocalStorageNamespace->clearAllStorageAreas();
 
-        for (const auto& origin : deletedOrigins) {
+        for (const auto& origin : originsToDelete) {
             for (auto& localStorageNamespace : m_localStorageNamespaces.values())
                 localStorageNamespace->clearStorageAreasMatchingOrigin(origin);
+            
+            m_localStorageDatabaseTracker->deleteDatabaseWithOrigin(origin);
         }
 
-        for (auto& transientLocalStorageNamespace : m_transientLocalStorageNamespaces.values())
-            transientLocalStorageNamespace->clearAllStorageAreas();
-
         RunLoop::main().dispatch(WTFMove(completionHandler));
     });
 }
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to