WebKit Bugzilla
Attachment 357526 Details for
Bug 192796
: Clean up IndexedDB files between tests
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-192796-20181217203752.patch (text/plain), 11.15 KB, created by
Sihui Liu
on 2018-12-17 20:37:53 PST
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Sihui Liu
Created:
2018-12-17 20:37:53 PST
Size:
11.15 KB
patch
obsolete
>Subversion Revision: 239259 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 05949be24b6755555509935ddeb5f9f31f963327..728b84bda5222e89a0909df876209946cc64f29c 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,23 @@ >+2018-12-17 Sihui Liu <sihui_liu@apple.com> >+ >+ Clean up IndexedDB files between tests >+ https://bugs.webkit.org/show_bug.cgi?id=192796 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ We should clean up the IndexedDB files between tests to make sure each test is independent of others. >+ >+ Covered by existing tests. >+ >+ * Modules/indexeddb/server/IDBServer.cpp: >+ (WebCore::IDBServer::IDBServer::closeAndDeleteDatabasesModifiedSince): >+ * Modules/indexeddb/server/UniqueIDBDatabase.cpp: >+ (WebCore::IDBServer::UniqueIDBDatabase::shutdownForClose): >+ (WebCore::IDBServer::UniqueIDBDatabase::didDeleteBackingStore): >+ (WebCore::IDBServer::UniqueIDBDatabase::handleDatabaseOperations): >+ (WebCore::IDBServer::UniqueIDBDatabase::performPrefetchCursor): >+ (WebCore::IDBServer::UniqueIDBDatabase::immediateCloseForUserDelete): >+ > 2018-12-15 Yusuke Suzuki <yusukesuzuki@slowstart.org> > > Null pointer dereference in JSC::WriteBarrierBase() >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index e5fef692dd200aa413eccb7ad82982879de178c4..8c1bb6c9c4f87400e1626fe90fe5ed71b3f368f5 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,14 @@ >+2018-12-17 Sihui Liu <sihui_liu@apple.com> >+ >+ Clean up IndexedDB files between tests >+ https://bugs.webkit.org/show_bug.cgi?id=192796 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * UIProcess/API/C/WKWebsiteDataStoreRef.cpp: >+ (WKWebsiteDataStoreRemoveAllIndexedDatabasesSync): >+ * UIProcess/API/C/WKWebsiteDataStoreRef.h: >+ > 2018-12-15 Chris Fleizach <cfleizach@apple.com> > > [meta][WebKit] Remove using namespace WebCore and WebKit in the global scope for unified source builds >diff --git a/Source/WebCore/Modules/indexeddb/server/IDBServer.cpp b/Source/WebCore/Modules/indexeddb/server/IDBServer.cpp >index cb17ba1d579b6d2599ff4c5bcefdfe2faef4bea0..122c99c99a11fab94f182a4a6df63f3b6554f380 100644 >--- a/Source/WebCore/Modules/indexeddb/server/IDBServer.cpp >+++ b/Source/WebCore/Modules/indexeddb/server/IDBServer.cpp >@@ -509,8 +509,8 @@ void IDBServer::closeAndDeleteDatabasesModifiedSince(WallTime modificationTime, > } > > HashSet<UniqueIDBDatabase*> openDatabases; >- for (auto* connection : m_databaseConnections.values()) >- openDatabases.add(connection->database()); >+ for (auto& db : m_uniqueIDBDatabaseMap.values()) >+ openDatabases.add(db.get()); > > for (auto& database : openDatabases) > database->immediateCloseForUserDelete(); >diff --git a/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp b/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp >index fc07ef1451b97e075cd3a56f620093a349c0cbc9..0d0ea51009b941efe5ce90efe77e5235593af2f9 100644 >--- a/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp >+++ b/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp >@@ -294,7 +294,10 @@ void UniqueIDBDatabase::shutdownForClose() > m_backingStoreSupportsSimultaneousTransactions = false; > m_backingStoreIsEphemeral = false; > >- ASSERT(m_databaseQueue.isEmpty()); >+ if (!m_databaseQueue.isEmpty()) { >+ postDatabaseTask(createCrossThreadTask(*this, &UniqueIDBDatabase::shutdownForClose)); >+ return; >+ } > m_databaseQueue.kill(); > > postDatabaseTaskReply(createCrossThreadTask(*this, &UniqueIDBDatabase::didShutdownForClose)); >@@ -336,14 +339,18 @@ void UniqueIDBDatabase::didDeleteBackingStore(uint64_t deletedVersion) > } > > m_deleteBackingStoreInProgress = false; >- invokeOperationAndTransactionTimer(); >+ >+ if (!m_hardClosedForUserDelete) >+ invokeOperationAndTransactionTimer(); > } > > void UniqueIDBDatabase::handleDatabaseOperations() > { > ASSERT(isMainThread()); > LOG(IndexedDB, "(main) UniqueIDBDatabase::handleDatabaseOperations - There are %u pending", m_pendingOpenDBRequests.size()); >- ASSERT(!m_hardClosedForUserDelete); >+ >+ if (m_hardClosedForUserDelete) >+ return; > > if (m_deleteBackingStoreInProgress) > return; >@@ -1278,6 +1285,9 @@ void UniqueIDBDatabase::performPrefetchCursor(const IDBResourceIdentifier& trans > ASSERT(m_cursorPrefetches.contains(cursorIdentifier)); > LOG(IndexedDB, "(db) UniqueIDBDatabase::performPrefetchCursor"); > >+ if (m_owningPointerForClose) >+ return; >+ > if (m_backingStore->prefetchCursor(transactionIdentifier, cursorIdentifier)) > postDatabaseTask(createCrossThreadTask(*this, &UniqueIDBDatabase::performPrefetchCursor, transactionIdentifier, cursorIdentifier)); > else >@@ -1818,8 +1828,6 @@ void UniqueIDBDatabase::immediateCloseForUserDelete() > for (auto& transaction : m_pendingTransactions) > transaction->databaseConnection().deleteTransaction(*transaction); > m_pendingTransactions.clear(); >- m_objectStoreTransactionCounts.clear(); >- m_objectStoreWriteTransactions.clear(); > > // Error out all pending callbacks > IDBError error = IDBError::userDeleteError(); >diff --git a/Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreRef.cpp b/Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreRef.cpp >index a3e3468256bb67008295fc13f072df379b70012c..f0c11daef4306e66dd90c24979361953623bb29d 100644 >--- a/Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreRef.cpp >+++ b/Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreRef.cpp >@@ -517,6 +517,14 @@ void WKWebsiteDataStoreRemoveAllIndexedDatabases(WKWebsiteDataStoreRef dataStore > WebKit::toImpl(dataStoreRef)->websiteDataStore().removeData(dataTypes, -WallTime::infinity(), [] { }); > } > >+void WKWebsiteDataStoreRemoveAllIndexedDatabasesSync(WKWebsiteDataStoreRef dataStoreRef, void* context, WKWebsiteDataStoreRemoveAllIndexedDatabasesCallback callback) >+{ >+ OptionSet<WebKit::WebsiteDataType> dataTypes = WebKit::WebsiteDataType::IndexedDBDatabases; >+ WebKit::toImpl(dataStoreRef)->websiteDataStore().removeData(dataTypes, -WallTime::infinity(), [context, callback] { >+ callback(context); >+ }); >+} >+ > void WKWebsiteDataStoreRemoveAllServiceWorkerRegistrations(WKWebsiteDataStoreRef dataStoreRef, void* context, WKWebsiteDataStoreRemoveAllServiceWorkerRegistrationsCallback callback) > { > #if ENABLE(SERVICE_WORKER) >diff --git a/Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreRef.h b/Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreRef.h >index 01b98e19328b140ed7220d3c58aef3dcb7ed9e68..322077fc1692be76461dd5d1ece4fc3228272430 100644 >--- a/Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreRef.h >+++ b/Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreRef.h >@@ -105,6 +105,9 @@ WK_EXPORT void WKWebsiteDataStoreRemoveAllServiceWorkerRegistrations(WKWebsiteDa > > WK_EXPORT void WKWebsiteDataStoreRemoveAllIndexedDatabases(WKWebsiteDataStoreRef dataStoreRef); > >+typedef void (*WKWebsiteDataStoreRemoveAllIndexedDatabasesCallback)(void* functionContext); >+WK_EXPORT void WKWebsiteDataStoreRemoveAllIndexedDatabasesSync(WKWebsiteDataStoreRef dataStoreRef, void* context, WKWebsiteDataStoreRemoveAllIndexedDatabasesCallback callback); >+ > typedef void (*WKWebsiteDataStoreGetFetchCacheOriginsFunction)(WKArrayRef, void*); > WK_EXPORT void WKWebsiteDataStoreGetFetchCacheOrigins(WKWebsiteDataStoreRef dataStoreRef, void* context, WKWebsiteDataStoreGetFetchCacheOriginsFunction function); > >diff --git a/Tools/ChangeLog b/Tools/ChangeLog >index e5b9339a7691ec3e4cbf2f957ec19ff5a0cbcec1..a4f34c0306e7b93dded2ff5fed18c4f14a7bce8a 100644 >--- a/Tools/ChangeLog >+++ b/Tools/ChangeLog >@@ -1,3 +1,19 @@ >+2018-12-17 Sihui Liu <sihui_liu@apple.com> >+ >+ Clean up IndexedDB files between tests >+ https://bugs.webkit.org/show_bug.cgi?id=192796 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * DumpRenderTree/mac/DumpRenderTree.mm: >+ (runTest): >+ * WebKitTestRunner/TestController.cpp: >+ (WTR::TestController::resetStateToConsistentValues): >+ (WTR::RemoveAllIndexedDatabasesCallbackContext::RemoveAllIndexedDatabasesCallbackContext): >+ (WTR::RemoveAllIndexedDatabasesCallback): >+ (WTR::TestController::ClearIndexedDatabases): >+ * WebKitTestRunner/TestController.h: >+ > 2018-12-16 Adrian Perez de Castro <aperez@igalia.com> > > Unreviewed build fix after r239253 >diff --git a/Tools/DumpRenderTree/mac/DumpRenderTree.mm b/Tools/DumpRenderTree/mac/DumpRenderTree.mm >index 5de612c59f367c4d094c8fb3178286ed3bdcbff0..3cb77ff6909e86abfd02e78f5517ef683945e205 100644 >--- a/Tools/DumpRenderTree/mac/DumpRenderTree.mm >+++ b/Tools/DumpRenderTree/mac/DumpRenderTree.mm >@@ -2012,6 +2012,8 @@ static void runTest(const string& inputLine) > sizeWebViewForCurrentTest(); > gTestRunner->setIconDatabaseEnabled(false); > gTestRunner->clearAllApplicationCaches(); >+ gTestRunner->clearAllDatabases(); >+ gTestRunner->setIDBPerOriginQuota(50 * MB); > > if (disallowedURLs) > CFSetRemoveAllValues(disallowedURLs); >diff --git a/Tools/WebKitTestRunner/TestController.cpp b/Tools/WebKitTestRunner/TestController.cpp >index a97ac9eeed5568befc42d2cb2193279ea302abec..053a082f62511108b4193a49aee66475eec85d9b 100644 >--- a/Tools/WebKitTestRunner/TestController.cpp >+++ b/Tools/WebKitTestRunner/TestController.cpp >@@ -867,6 +867,9 @@ bool TestController::resetStateToConsistentValues(const TestOptions& options, Re > > WKContextClearCachedCredentials(TestController::singleton().context()); > >+ ClearIndexedDatabases(); >+ setIDBPerOriginQuota(50 * MB); >+ > clearServiceWorkerRegistrations(); > clearDOMCaches(); > >@@ -2756,6 +2759,28 @@ void TestController::setIDBPerOriginQuota(uint64_t quota) > WKContextSetIDBPerOriginQuota(platformContext(), quota); > } > >+struct RemoveAllIndexedDatabasesCallbackContext { >+ explicit RemoveAllIndexedDatabasesCallbackContext(TestController& controller) >+ : testController(controller) >+ { >+ } >+ TestController& testController; >+ bool done { false }; >+}; >+static void RemoveAllIndexedDatabasesCallback(void* userData) >+{ >+ auto* context = static_cast<RemoveAllIndexedDatabasesCallbackContext*>(userData); >+ context->done = true; >+ context->testController.notifyDone(); >+} >+void TestController::ClearIndexedDatabases() >+{ >+ auto websiteDataStore = WKContextGetWebsiteDataStore(platformContext()); >+ RemoveAllIndexedDatabasesCallbackContext context(*this); >+ WKWebsiteDataStoreRemoveAllIndexedDatabasesSync(websiteDataStore, &context, RemoveAllIndexedDatabasesCallback); >+ runUntil(context.done, noTimeout); >+} >+ > struct FetchCacheOriginsCallbackContext { > FetchCacheOriginsCallbackContext(TestController& controller, WKStringRef origin) > : testController(controller) >diff --git a/Tools/WebKitTestRunner/TestController.h b/Tools/WebKitTestRunner/TestController.h >index 13a39c6905f0d87ba87b9db57f8dad5c17ac71bc..acb4b98876d2d5afb5845f031b8ae816c49530d2 100644 >--- a/Tools/WebKitTestRunner/TestController.h >+++ b/Tools/WebKitTestRunner/TestController.h >@@ -242,6 +242,8 @@ public: > > void removeAllSessionCredentials(); > >+ void ClearIndexedDatabases(); >+ > void clearServiceWorkerRegistrations(); > > void clearDOMCache(WKStringRef origin);
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 192796
:
357526
|
357586
|
357620
|
359785
|
359820
|
359821