Title: [211035] trunk/Source/WebCore
- Revision
- 211035
- Author
- [email protected]
- Date
- 2017-01-22 23:28:48 -0800 (Sun, 22 Jan 2017)
Log Message
Database file not removed for origins after deleting all databases
https://bugs.webkit.org/show_bug.cgi?id=167281
Reviewed by Darin Adler.
When DatabaseTracker::deleteDatabasesModifiedSince() is called with a min time, all databases for every origin
are deleted. For each origin if all databases are removed DatabaseTracker::deleteOrigin() is called to remove
also the origin database file. However, DatabaseTracker::deleteOrigin() returns early if the origin doesn't have
databases and in this particular case it never has databases, because we have just removed them.
This will be covered by GTK+ unit tests.
* Modules/webdatabase/DatabaseTracker.cpp:
(WebCore::DatabaseTracker::deleteDatabasesModifiedSince): Instead of removing the databases while iterating
them, add the ones to be removed to a vector. If after the iteration all databases should be removed call
DatabaseTracker::deleteOrigin() to ensure both the databases and the database file are removed for the origin,
otherwhise call DatabaseTracker::deleteDatabase() for every database to delete.
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (211034 => 211035)
--- trunk/Source/WebCore/ChangeLog 2017-01-23 07:25:41 UTC (rev 211034)
+++ trunk/Source/WebCore/ChangeLog 2017-01-23 07:28:48 UTC (rev 211035)
@@ -1,3 +1,23 @@
+2017-01-22 Carlos Garcia Campos <[email protected]>
+
+ Database file not removed for origins after deleting all databases
+ https://bugs.webkit.org/show_bug.cgi?id=167281
+
+ Reviewed by Darin Adler.
+
+ When DatabaseTracker::deleteDatabasesModifiedSince() is called with a min time, all databases for every origin
+ are deleted. For each origin if all databases are removed DatabaseTracker::deleteOrigin() is called to remove
+ also the origin database file. However, DatabaseTracker::deleteOrigin() returns early if the origin doesn't have
+ databases and in this particular case it never has databases, because we have just removed them.
+
+ This will be covered by GTK+ unit tests.
+
+ * Modules/webdatabase/DatabaseTracker.cpp:
+ (WebCore::DatabaseTracker::deleteDatabasesModifiedSince): Instead of removing the databases while iterating
+ them, add the ones to be removed to a vector. If after the iteration all databases should be removed call
+ DatabaseTracker::deleteOrigin() to ensure both the databases and the database file are removed for the origin,
+ otherwhise call DatabaseTracker::deleteDatabase() for every database to delete.
+
2017-01-22 Michael Catanzaro <[email protected]>
[GTK] Update Safari version in user agent
Modified: trunk/Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp (211034 => 211035)
--- trunk/Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp 2017-01-23 07:25:41 UTC (rev 211034)
+++ trunk/Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp 2017-01-23 07:28:48 UTC (rev 211035)
@@ -776,25 +776,28 @@
void DatabaseTracker::deleteDatabasesModifiedSince(std::chrono::system_clock::time_point time)
{
for (auto& origin : origins()) {
- bool deletedAll = true;
- for (auto& databaseName : databaseNames(origin)) {
+ Vector<String> databaseNames = this->databaseNames(origin);
+ Vector<String> databaseNamesToDelete;
+ databaseNamesToDelete.reserveInitialCapacity(databaseNames.size());
+ for (const auto& databaseName : databaseNames) {
auto fullPath = fullPathForDatabase(origin, databaseName, false);
time_t modificationTime;
- if (!getFileModificationTime(fullPath, modificationTime)) {
- deletedAll = false;
+ if (!getFileModificationTime(fullPath, modificationTime))
continue;
- }
- if (modificationTime < std::chrono::system_clock::to_time_t(time)) {
- deletedAll = false;
+ if (modificationTime < std::chrono::system_clock::to_time_t(time))
continue;
- }
- deleteDatabase(origin, databaseName);
+ databaseNamesToDelete.uncheckedAppend(databaseName);
}
- if (deletedAll)
+
+ if (databaseNames.size() == databaseNamesToDelete.size())
deleteOrigin(origin);
+ else {
+ for (const auto& databaseName : databaseNamesToDelete)
+ deleteDatabase(origin, databaseName);
+ }
}
}
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes