WebKit Bugzilla
Attachment 340461 Details for
Bug 185671
: StorageManager::deleteLocalStorageOriginsModifiedSince: database files get deleted before database connections close
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-185671-20180515184145.patch (text/plain), 5.91 KB, created by
Sihui Liu
on 2018-05-15 18:41:46 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Sihui Liu
Created:
2018-05-15 18:41:46 PDT
Size:
5.91 KB
patch
obsolete
>Subversion Revision: 231825 >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index 3f0e7c614b10764cd6b0c082e5521c89271837c9..ccf09d87c4d27fddcaac2e3e01e2c2def538c9ef 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,21 @@ >+2018-05-15 Sihui Liu <sihui_liu@apple.com> >+ >+ StorageManager::deleteLocalStorageOriginsModifiedSince: database files get deleted before database connections close >+ https://bugs.webkit.org/show_bug.cgi?id=185671 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ 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 <dino@apple.com> > > Launch System Preview as the download starts, rather than waiting for a response >diff --git a/Source/WebKit/UIProcess/WebStorage/LocalStorageDatabaseTracker.cpp b/Source/WebKit/UIProcess/WebStorage/LocalStorageDatabaseTracker.cpp >index 821102b7be1f82889f48b4d0eb3fbcde994aaddf..ca56d057dec40625c07258e6830e30bb5f60bc42 100644 >--- a/Source/WebKit/UIProcess/WebStorage/LocalStorageDatabaseTracker.cpp >+++ b/Source/WebKit/UIProcess/WebStorage/LocalStorageDatabaseTracker.cpp >@@ -142,33 +142,31 @@ static std::optional<time_t> fileModificationTime(const String& filePath) > 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 >diff --git a/Source/WebKit/UIProcess/WebStorage/LocalStorageDatabaseTracker.h b/Source/WebKit/UIProcess/WebStorage/LocalStorageDatabaseTracker.h >index 5679a83d7936961a923240252e13c5617bc5c244..63de96f69c2eb4054e12a61409d3572ba8aad565 100644 >--- a/Source/WebKit/UIProcess/WebStorage/LocalStorageDatabaseTracker.h >+++ b/Source/WebKit/UIProcess/WebStorage/LocalStorageDatabaseTracker.h >@@ -55,8 +55,8 @@ public: > 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; > >diff --git a/Source/WebKit/UIProcess/WebStorage/StorageManager.cpp b/Source/WebKit/UIProcess/WebStorage/StorageManager.cpp >index 7f702e18eb3a67dbe476e693a0f420d13b4cf769..9583175e394f339535bc642220374a7631f0e719 100644 >--- a/Source/WebKit/UIProcess/WebStorage/StorageManager.cpp >+++ b/Source/WebKit/UIProcess/WebStorage/StorageManager.cpp >@@ -618,16 +618,18 @@ void StorageManager::deleteLocalStorageEntriesForOrigin(const SecurityOriginData > 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)); > }); > }
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 185671
: 340461