Title: [280176] trunk
Revision
280176
Author
[email protected]
Date
2021-07-22 09:49:58 -0700 (Thu, 22 Jul 2021)

Log Message

[macOS Debug] Layout Test imported/w3c/web-platform-tests/IndexedDB/open-request-queue.html is a flaky timeout.
https://bugs.webkit.org/show_bug.cgi?id=172044

Reviewed by Chris Dumez.

LayoutTests/imported/w3c:

* web-platform-tests/IndexedDB/open-request-queue-expected.txt:

Source/WebCore:

We used to start handling delete request when there is still open request in flight. We should start a request
after previous requests are done, to match spec (https://www.w3.org/TR/IndexedDB/#delete-a-database) and other
browsers' behavior.

Updated and rebaselined existing tests.

* Modules/indexeddb/server/UniqueIDBDatabase.cpp:
(WebCore::IDBServer::UniqueIDBDatabase::handleDatabaseOperations):
(WebCore::IDBServer::UniqueIDBDatabase::startVersionChangeTransaction):

LayoutTests:

* platform/mac-wk1/TestExpectations:
* platform/mac-wk2/TestExpectations:
* storage/indexeddb/delete-in-upgradeneeded-close-in-open-success-expected.txt:
* storage/indexeddb/delete-in-upgradeneeded-close-in-open-success-private-expected.txt:
* storage/indexeddb/delete-in-upgradeneeded-close-in-versionchange-expected.txt:
* storage/indexeddb/delete-in-upgradeneeded-close-in-versionchange-private-expected.txt:
* storage/indexeddb/deletedatabase-delayed-by-open-and-versionchange-expected.txt:
* storage/indexeddb/deletedatabase-delayed-by-open-and-versionchange-private-expected.txt:
* storage/indexeddb/deletedatabase-delayed-by-open-and-versionchange-workers-expected.txt:
* storage/indexeddb/intversion-long-queue-expected.txt:
* storage/indexeddb/intversion-long-queue-private-expected.txt:
* storage/indexeddb/modern/deletedatabase-2-private.html: Removed. This test checks if a delete request is
started when there are ongoing open requests. We are removing this behavior to match spec so we don't need to
keep the test.
* storage/indexeddb/modern/deletedatabase-2.html: Removed. Ditto.
* storage/indexeddb/modern/resources/deletedatabase-2.js: Removed. Ditto.
* storage/indexeddb/resources/delete-in-upgradeneeded-close-in-open-success.js:
(versionChangeCallback):
(deleteBlockedCallback):
* storage/indexeddb/resources/delete-in-upgradeneeded-close-in-versionchange.js:
(initiallyDeleted):
* storage/indexeddb/resources/deletedatabase-delayed-by-open-and-versionchange.js:
(onOpenSuccess):

Modified Paths

Removed Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (280175 => 280176)


--- trunk/LayoutTests/ChangeLog	2021-07-22 16:37:56 UTC (rev 280175)
+++ trunk/LayoutTests/ChangeLog	2021-07-22 16:49:58 UTC (rev 280176)
@@ -1,3 +1,34 @@
+2021-07-22  Sihui Liu  <[email protected]>
+
+        [macOS Debug] Layout Test imported/w3c/web-platform-tests/IndexedDB/open-request-queue.html is a flaky timeout.
+        https://bugs.webkit.org/show_bug.cgi?id=172044
+
+        Reviewed by Chris Dumez.
+
+        * platform/mac-wk1/TestExpectations:
+        * platform/mac-wk2/TestExpectations:
+        * storage/indexeddb/delete-in-upgradeneeded-close-in-open-success-expected.txt:
+        * storage/indexeddb/delete-in-upgradeneeded-close-in-open-success-private-expected.txt:
+        * storage/indexeddb/delete-in-upgradeneeded-close-in-versionchange-expected.txt:
+        * storage/indexeddb/delete-in-upgradeneeded-close-in-versionchange-private-expected.txt:
+        * storage/indexeddb/deletedatabase-delayed-by-open-and-versionchange-expected.txt:
+        * storage/indexeddb/deletedatabase-delayed-by-open-and-versionchange-private-expected.txt:
+        * storage/indexeddb/deletedatabase-delayed-by-open-and-versionchange-workers-expected.txt:
+        * storage/indexeddb/intversion-long-queue-expected.txt:
+        * storage/indexeddb/intversion-long-queue-private-expected.txt:
+        * storage/indexeddb/modern/deletedatabase-2-private.html: Removed. This test checks if a delete request is
+        started when there are ongoing open requests. We are removing this behavior to match spec so we don't need to
+        keep the test.
+        * storage/indexeddb/modern/deletedatabase-2.html: Removed. Ditto.
+        * storage/indexeddb/modern/resources/deletedatabase-2.js: Removed. Ditto.
+        * storage/indexeddb/resources/delete-in-upgradeneeded-close-in-open-success.js:
+        (versionChangeCallback):
+        (deleteBlockedCallback):
+        * storage/indexeddb/resources/delete-in-upgradeneeded-close-in-versionchange.js:
+        (initiallyDeleted):
+        * storage/indexeddb/resources/deletedatabase-delayed-by-open-and-versionchange.js:
+        (onOpenSuccess):
+
 2021-07-22  Alan Bujtas  <[email protected]>
 
         REGRESSION(r269745) Google Developers maps does not fully load

Modified: trunk/LayoutTests/imported/w3c/ChangeLog (280175 => 280176)


--- trunk/LayoutTests/imported/w3c/ChangeLog	2021-07-22 16:37:56 UTC (rev 280175)
+++ trunk/LayoutTests/imported/w3c/ChangeLog	2021-07-22 16:49:58 UTC (rev 280176)
@@ -1,3 +1,12 @@
+2021-07-22  Sihui Liu  <[email protected]>
+
+        [macOS Debug] Layout Test imported/w3c/web-platform-tests/IndexedDB/open-request-queue.html is a flaky timeout.
+        https://bugs.webkit.org/show_bug.cgi?id=172044
+
+        Reviewed by Chris Dumez.
+
+        * web-platform-tests/IndexedDB/open-request-queue-expected.txt:
+
 2021-07-21  Rob Buis  <[email protected]>
 
         [AspectRatio] Fix select-element-001.html

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/open-request-queue-expected.txt (280175 => 280176)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/open-request-queue-expected.txt	2021-07-22 16:37:56 UTC (rev 280175)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/open-request-queue-expected.txt	2021-07-22 16:49:58 UTC (rev 280176)
@@ -1,5 +1,3 @@
 
-Harness Error (TIMEOUT), message = null
+PASS Opens and deletes are processed in order
 
-TIMEOUT Opens and deletes are processed in order Test timed out
-

Modified: trunk/LayoutTests/platform/mac-wk1/TestExpectations (280175 => 280176)


--- trunk/LayoutTests/platform/mac-wk1/TestExpectations	2021-07-22 16:37:56 UTC (rev 280175)
+++ trunk/LayoutTests/platform/mac-wk1/TestExpectations	2021-07-22 16:49:58 UTC (rev 280176)
@@ -719,8 +719,6 @@
 
 webkit.org/b/179775 imported/w3c/web-platform-tests/xhr/firing-events-http-no-content-length.html [ Pass Failure ]
 
-webkit.org/b/172044 [ Debug ] imported/w3c/web-platform-tests/IndexedDB/open-request-queue.html [ Pass Timeout ]
-
 webkit.org/b/184742 accessibility/mac/async-increment-decrement-action.html [ Skip ]
 webkit.org/b/185897 accessibility/mac/set-value-editable-types.html [ Skip ]
 webkit.org/b/193414 accessibility/mac/relative-frame.html [ Skip ]

Modified: trunk/LayoutTests/platform/mac-wk2/TestExpectations (280175 => 280176)


--- trunk/LayoutTests/platform/mac-wk2/TestExpectations	2021-07-22 16:37:56 UTC (rev 280175)
+++ trunk/LayoutTests/platform/mac-wk2/TestExpectations	2021-07-22 16:49:58 UTC (rev 280176)
@@ -645,8 +645,6 @@
 
 webkit.org/b/172148 tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-mainframe-vertical.html [ Pass Failure ]
 
-webkit.org/b/172044 [ Debug ] imported/w3c/web-platform-tests/IndexedDB/open-request-queue.html [ Pass Timeout ]
-
 webkit.org/b/173779 [ Debug ] fast/scrolling/arrow-key-scroll-in-rtl-document.html [ Pass Failure ]
 
 webkit.org/b/173500 http/tests/loading/basic-auth-remove-credentials.html [ Pass Failure ]

Modified: trunk/LayoutTests/storage/indexeddb/delete-in-upgradeneeded-close-in-open-success-expected.txt (280175 => 280176)


--- trunk/LayoutTests/storage/indexeddb/delete-in-upgradeneeded-close-in-open-success-expected.txt	2021-07-22 16:37:56 UTC (rev 280175)
+++ trunk/LayoutTests/storage/indexeddb/delete-in-upgradeneeded-close-in-open-success-expected.txt	2021-07-22 16:49:58 UTC (rev 280176)
@@ -19,11 +19,6 @@
 deleteRequest = indexedDB.deleteDatabase(dbname)
 request2._onsuccess_ = deleteSuccessCallback
 
-versionChangeCallback():
-PASS event.oldVersion is 1
-PASS event.newVersion is null
-sawVersionChange = true
-
 openSuccess():
 PASS sawUpgradeNeeded is true
 db = event.target.result
@@ -31,8 +26,8 @@
 db.close()
 
 deleteSuccessCallback():
-PASS sawVersionChange is true
-PASS sawDeleteBlocked is true
+PASS sawVersionChange is false
+PASS sawDeleteBlocked is false
 PASS successfullyParsed is true
 
 TEST COMPLETE

Modified: trunk/LayoutTests/storage/indexeddb/delete-in-upgradeneeded-close-in-open-success-private-expected.txt (280175 => 280176)


--- trunk/LayoutTests/storage/indexeddb/delete-in-upgradeneeded-close-in-open-success-private-expected.txt	2021-07-22 16:37:56 UTC (rev 280175)
+++ trunk/LayoutTests/storage/indexeddb/delete-in-upgradeneeded-close-in-open-success-private-expected.txt	2021-07-22 16:49:58 UTC (rev 280176)
@@ -19,11 +19,6 @@
 deleteRequest = indexedDB.deleteDatabase(dbname)
 request2._onsuccess_ = deleteSuccessCallback
 
-versionChangeCallback():
-PASS event.oldVersion is 1
-PASS event.newVersion is null
-sawVersionChange = true
-
 openSuccess():
 PASS sawUpgradeNeeded is true
 db = event.target.result
@@ -31,8 +26,8 @@
 db.close()
 
 deleteSuccessCallback():
-PASS sawVersionChange is true
-PASS sawDeleteBlocked is true
+PASS sawVersionChange is false
+PASS sawDeleteBlocked is false
 PASS successfullyParsed is true
 
 TEST COMPLETE

Modified: trunk/LayoutTests/storage/indexeddb/deletedatabase-delayed-by-open-and-versionchange-expected.txt (280175 => 280176)


--- trunk/LayoutTests/storage/indexeddb/deletedatabase-delayed-by-open-and-versionchange-expected.txt	2021-07-22 16:37:56 UTC (rev 280175)
+++ trunk/LayoutTests/storage/indexeddb/deletedatabase-delayed-by-open-and-versionchange-expected.txt	2021-07-22 16:49:58 UTC (rev 280176)
@@ -15,16 +15,11 @@
 indexedDB.deleteDatabase(dbname)
 h.createObjectStore('testObjectStore').put('bar', 'foo')
 
-onVersionChange():
-PASS event.target.version is 1
-PASS event.oldVersion is 1
-PASS event.newVersion is null
-
 transactionOnComplete():
 versionChangeComplete = true
 
 onOpenSuccess():
-PASS blockedCalled is true
+PASS blockedCalled is false
 h = event.target.result
 h.close()
 

Modified: trunk/LayoutTests/storage/indexeddb/deletedatabase-delayed-by-open-and-versionchange-private-expected.txt (280175 => 280176)


--- trunk/LayoutTests/storage/indexeddb/deletedatabase-delayed-by-open-and-versionchange-private-expected.txt	2021-07-22 16:37:56 UTC (rev 280175)
+++ trunk/LayoutTests/storage/indexeddb/deletedatabase-delayed-by-open-and-versionchange-private-expected.txt	2021-07-22 16:49:58 UTC (rev 280176)
@@ -15,16 +15,11 @@
 indexedDB.deleteDatabase(dbname)
 h.createObjectStore('testObjectStore').put('bar', 'foo')
 
-onVersionChange():
-PASS event.target.version is 1
-PASS event.oldVersion is 1
-PASS event.newVersion is null
-
 transactionOnComplete():
 versionChangeComplete = true
 
 onOpenSuccess():
-PASS blockedCalled is true
+PASS blockedCalled is false
 h = event.target.result
 h.close()
 

Modified: trunk/LayoutTests/storage/indexeddb/deletedatabase-delayed-by-open-and-versionchange-workers-expected.txt (280175 => 280176)


--- trunk/LayoutTests/storage/indexeddb/deletedatabase-delayed-by-open-and-versionchange-workers-expected.txt	2021-07-22 16:37:56 UTC (rev 280175)
+++ trunk/LayoutTests/storage/indexeddb/deletedatabase-delayed-by-open-and-versionchange-workers-expected.txt	2021-07-22 16:49:58 UTC (rev 280176)
@@ -16,16 +16,11 @@
 [Worker] indexedDB.deleteDatabase(dbname)
 [Worker] h.createObjectStore('testObjectStore').put('bar', 'foo')
 [Worker]
-[Worker] onVersionChange():
-PASS [Worker] event.target.version is 1
-PASS [Worker] event.oldVersion is 1
-PASS [Worker] event.newVersion is null
-[Worker]
 [Worker] transactionOnComplete():
 [Worker] versionChangeComplete = true
 [Worker]
 [Worker] onOpenSuccess():
-PASS [Worker] blockedCalled is true
+PASS [Worker] blockedCalled is false
 [Worker] h = event.target.result
 [Worker] h.close()
 [Worker]

Modified: trunk/LayoutTests/storage/indexeddb/intversion-long-queue-expected.txt (280175 => 280176)


--- trunk/LayoutTests/storage/indexeddb/intversion-long-queue-expected.txt	2021-07-22 16:37:56 UTC (rev 280175)
+++ trunk/LayoutTests/storage/indexeddb/intversion-long-queue-expected.txt	2021-07-22 16:49:58 UTC (rev 280176)
@@ -43,10 +43,6 @@
 transaction = event.target.transaction
 transaction._oncomplete_ = connection2TransactionComplete
 
-connection2VersionChangeCallback():
-PASS event.oldVersion is 2
-PASS event.newVersion is null
-
 connection2TransactionComplete():
 PASS db.version is 2
 

Modified: trunk/LayoutTests/storage/indexeddb/intversion-long-queue-private-expected.txt (280175 => 280176)


--- trunk/LayoutTests/storage/indexeddb/intversion-long-queue-private-expected.txt	2021-07-22 16:37:56 UTC (rev 280175)
+++ trunk/LayoutTests/storage/indexeddb/intversion-long-queue-private-expected.txt	2021-07-22 16:49:58 UTC (rev 280176)
@@ -43,10 +43,6 @@
 transaction = event.target.transaction
 transaction._oncomplete_ = connection2TransactionComplete
 
-connection2VersionChangeCallback():
-PASS event.oldVersion is 2
-PASS event.newVersion is null
-
 connection2TransactionComplete():
 PASS db.version is 2
 

Deleted: trunk/LayoutTests/storage/indexeddb/modern/deletedatabase-2-private.html (280175 => 280176)


--- trunk/LayoutTests/storage/indexeddb/modern/deletedatabase-2-private.html	2021-07-22 16:37:56 UTC (rev 280175)
+++ trunk/LayoutTests/storage/indexeddb/modern/deletedatabase-2-private.html	2021-07-22 16:49:58 UTC (rev 280176)
@@ -1,11 +0,0 @@
-<!-- webkit-test-runner [ useEphemeralSession=true ] -->
-<html>
-<head>
-<script src=""
-<script src=""
-</head>
-<body>
-
-<script src=""
-</body>
-</html>

Deleted: trunk/LayoutTests/storage/indexeddb/modern/deletedatabase-2.html (280175 => 280176)


--- trunk/LayoutTests/storage/indexeddb/modern/deletedatabase-2.html	2021-07-22 16:37:56 UTC (rev 280175)
+++ trunk/LayoutTests/storage/indexeddb/modern/deletedatabase-2.html	2021-07-22 16:49:58 UTC (rev 280176)
@@ -1,10 +0,0 @@
-<html>
-<head>
-<script src=""
-<script src=""
-</head>
-<body>
-
-<script src=""
-</body>
-</html>

Deleted: trunk/LayoutTests/storage/indexeddb/modern/resources/deletedatabase-2.js (280175 => 280176)


--- trunk/LayoutTests/storage/indexeddb/modern/resources/deletedatabase-2.js	2021-07-22 16:37:56 UTC (rev 280175)
+++ trunk/LayoutTests/storage/indexeddb/modern/resources/deletedatabase-2.js	2021-07-22 16:49:58 UTC (rev 280176)
@@ -1,147 +0,0 @@
-description("This tests that if deleteDatabase is called while there is already an open connection to the database that the open connection gets the appropriate versionChange event. \
-That open connection also has an in-progress transaction at the time it gets the versionChange event.");
-
-indexedDBTest(prepareDatabase, successCallback);
-
-function done()
-{
-    finishJSTest();
-}
-
-function log(message)
-{
-    debug(message);
-}
-
-var stopSpinning = false;
-
-function successCallback()
-{
-    debug("open db success");
-}
-
-var dbname;
-var resolveTransactionPromise;
-var transactionPromise = new Promise(resolve => resolveTransactionPromise = resolve);
-
-function prepareDatabase(e)
-{
-    debug("Initial upgrade old version - " + e.oldVersion + " new version - " + e.newVersion);
-    
-    event.target._onerror_ = function(e) {
-        debug("Open request error: " + event.target.error.name);
-        resolveTransactionPromise();
-    }
-
-    var versionTransaction = event.target.transaction;
-    var database = event.target.result;
-    dbname = database.name;
-    var objectStore = database.createObjectStore("TestObjectStore");
-    objectStore.put("This is a record", 1);
-    
-    // Spin the transaction until told to stop spinning it.
-    var keepGoing = function() {
-        if (!stopSpinning)
-            objectStore.get(1)._onsuccess_ = keepGoing;
-    }
-    objectStore.get(1)._onsuccess_ = keepGoing;
-
-    database._onversionchange_ = function(e)
-    {
-        debug("First connection received versionchange event: oldVersion " + e.oldVersion + ", newVersion " + e.newVersion);
-        
-        var shutErDown = function() {
-            database.close();
-            stopSpinning = true;
-        }
-        window.setTimeout(shutErDown, 0);
-    }
-        
-    event.target.transaction._oncomplete_ = function()
-    {
-        debug("First version change complete");
-    }
-    
-    event.target.transaction._onabort_ = function()
-    {
-        debug("Version change unexpected abort");
-        done();
-    }
-    event.target.transaction._onerror_ = function()
-    {
-        debug("Version change unexpected error");
-        done();
-    }
-    
-    window.setTimeout(continueTest1, 0);
-}
-
-function continueTest1()
-{
-    debug("Requesting deleteDatabase");
-    var request = window.indexedDB.deleteDatabase(dbname);
-    request._onsuccess_ = async function(e)
-    {
-        await transactionPromise;
-        debug("Delete database success: oldVersion " + e.oldVersion + ", newVersion " + e.newVersion);
-        continueTest2();
-    }
-    request._onerror_ = function(e)
-    {
-        debug("Delete database unexpected error");
-        done();
-    }
-    request._onupgradeneeded_ = function(e)
-    {
-        debug("Delete database unexpected upgradeneeded");
-    	done();
-    }
-}
-
-function continueTest2()
-{
-    debug("Recreating database to make sure it's new and empty");
-    var request = window.indexedDB.open(dbname);
-
-    request._onupgradeneeded_ = function(e)
-    {
-        debug("Second upgrade old version - " + e.oldVersion + " new version - " + e.newVersion);
-        var versionTransaction = request.transaction;
-        
-        try {
-            var objectStore = versionTransaction.objectStore("TestObjectStore");
-        } catch(e) {
-            debug("Unable to get object store in second upgrade transaction (which is correct because it should not be there)");
-        }
-
-        versionTransaction._oncomplete_ = function(e)
-        {
-            debug("Second database upgrade success");
-            done();
-        }
-        
-        versionTransaction._onabort_ = function(e)
-        {
-            debug("Second database upgrade unexpected abort");
-            done();
-        }
-            
-        versionTransaction._onerror_ = function(e)
-        {
-            debug("Second database upgrade unexpected error");
-            done();
-        }
-    }
-
-    request._onsuccess_ = function(e)
-    {
-        debug("Second database opening unexpected success");
-        done();
-    }
-    
-    request._onerror_ = function(e)
-    {
-        debug("Second database opening unexpected error");
-        done();
-    }
-}

Modified: trunk/LayoutTests/storage/indexeddb/resources/delete-in-upgradeneeded-close-in-open-success.js (280175 => 280176)


--- trunk/LayoutTests/storage/indexeddb/resources/delete-in-upgradeneeded-close-in-open-success.js	2021-07-22 16:37:56 UTC (rev 280175)
+++ trunk/LayoutTests/storage/indexeddb/resources/delete-in-upgradeneeded-close-in-open-success.js	2021-07-22 16:49:58 UTC (rev 280176)
@@ -57,7 +57,7 @@
     preamble(evt);
     shouldBe("event.oldVersion", "1");
     shouldBeNull("event.newVersion");
-    evalAndLog("sawVersionChange = true");
+    evalAndLog("sawVersionChange = false");
 }
 
 function deleteBlockedCallback(evt)
@@ -64,14 +64,14 @@
 {
     if (!sawVersionChange)
         debug("deleteBlockedCallback was called *before* versionChangeCallback, which is wrong");
-    eval("sawDeleteBlocked = true");
+    eval("sawDeleteBlocked = false");
 }
 
 function deleteSuccessCallback(evt)
 {
     preamble(evt);
-    shouldBeTrue("sawVersionChange");
-    shouldBeTrue("sawDeleteBlocked");
+    shouldBeFalse("sawVersionChange");
+    shouldBeFalse("sawDeleteBlocked");
     finishJSTest();
 }
 

Modified: trunk/LayoutTests/storage/indexeddb/resources/delete-in-upgradeneeded-close-in-versionchange.js (280175 => 280176)


--- trunk/LayoutTests/storage/indexeddb/resources/delete-in-upgradeneeded-close-in-versionchange.js	2021-07-22 16:37:56 UTC (rev 280175)
+++ trunk/LayoutTests/storage/indexeddb/resources/delete-in-upgradeneeded-close-in-versionchange.js	2021-07-22 16:49:58 UTC (rev 280176)
@@ -23,7 +23,6 @@
     preamble(evt);
     evalAndLog("request = indexedDB.open(dbname, 1)");
     request._onupgradeneeded_ = upgradeNeededCallback;
-    request._onsuccess_ = unexpectedSuccessCallback;
 }
 
 function upgradeNeededCallback(evt)

Modified: trunk/LayoutTests/storage/indexeddb/resources/deletedatabase-delayed-by-open-and-versionchange.js (280175 => 280176)


--- trunk/LayoutTests/storage/indexeddb/resources/deletedatabase-delayed-by-open-and-versionchange.js	2021-07-22 16:37:56 UTC (rev 280175)
+++ trunk/LayoutTests/storage/indexeddb/resources/deletedatabase-delayed-by-open-and-versionchange.js	2021-07-22 16:49:58 UTC (rev 280176)
@@ -45,7 +45,7 @@
 function onOpenSuccess(evt)
 {
     preamble(evt);
-    shouldBeTrue("blockedCalled");
+    shouldBeFalse("blockedCalled");
     evalAndLog("h = event.target.result");
     evalAndLog("h.close()");
 }
\ No newline at end of file

Modified: trunk/Source/WebCore/ChangeLog (280175 => 280176)


--- trunk/Source/WebCore/ChangeLog	2021-07-22 16:37:56 UTC (rev 280175)
+++ trunk/Source/WebCore/ChangeLog	2021-07-22 16:49:58 UTC (rev 280176)
@@ -1,3 +1,20 @@
+2021-07-22  Sihui Liu  <[email protected]>
+
+        [macOS Debug] Layout Test imported/w3c/web-platform-tests/IndexedDB/open-request-queue.html is a flaky timeout.
+        https://bugs.webkit.org/show_bug.cgi?id=172044
+
+        Reviewed by Chris Dumez.
+
+        We used to start handling delete request when there is still open request in flight. We should start a request
+        after previous requests are done, to match spec (https://www.w3.org/TR/IndexedDB/#delete-a-database) and other 
+        browsers' behavior.
+
+        Updated and rebaselined existing tests.
+
+        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
+        (WebCore::IDBServer::UniqueIDBDatabase::handleDatabaseOperations):
+        (WebCore::IDBServer::UniqueIDBDatabase::startVersionChangeTransaction):
+
 2021-07-22  Alan Bujtas  <[email protected]>
 
         REGRESSION(r269745) Google Developers maps does not fully load

Modified: trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp (280175 => 280176)


--- trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp	2021-07-22 16:37:56 UTC (rev 280175)
+++ trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp	2021-07-22 16:49:58 UTC (rev 280176)
@@ -337,22 +337,18 @@
     ASSERT(!isMainThread());
     LOG(IndexedDB, "UniqueIDBDatabase::handleDatabaseOperations - There are %u pending", m_pendingOpenDBRequests.size());
 
-    if (m_versionChangeDatabaseConnection || m_versionChangeTransaction) {
-        // We can't start any new open-database operations right now, but we might be able to start handling a delete operation.
-        if (!m_currentOpenDBRequest)
-            m_currentOpenDBRequest = takeNextRunnableRequest(RequestType::Delete);
-    } else if (!m_currentOpenDBRequest || m_currentOpenDBRequest->connection().isClosed())
+    if (!m_currentOpenDBRequest && (m_versionChangeDatabaseConnection || m_versionChangeTransaction))
+        return;
+
+    if (!m_currentOpenDBRequest || m_currentOpenDBRequest->connection().isClosed())
         m_currentOpenDBRequest = takeNextRunnableRequest();
 
     while (m_currentOpenDBRequest) {
         handleCurrentOperation();
-        if (!m_currentOpenDBRequest) {
-            if (m_versionChangeTransaction)
-                m_currentOpenDBRequest = takeNextRunnableRequest(RequestType::Delete);
-            else
-                m_currentOpenDBRequest = takeNextRunnableRequest();
-        } else // Request need multiple attempts to handle.
+        if (m_versionChangeTransaction || m_currentOpenDBRequest)
             break;
+
+        m_currentOpenDBRequest = takeNextRunnableRequest();
     }
     LOG(IndexedDB, "UniqueIDBDatabase::handleDatabaseOperations - There are %u pending after this round of handling", m_pendingOpenDBRequests.size());
 }
@@ -411,7 +407,7 @@
     m_inProgressTransactions.set(versionChangeTransactionInfo.identifier(), m_versionChangeTransaction);
     
     auto error = m_backingStore->beginTransaction(versionChangeTransactionInfo);
-    auto operation = WTFMove(m_currentOpenDBRequest);
+    auto operation = std::exchange(m_currentOpenDBRequest, nullptr);
     IDBResultData result;
     if (error.isNull()) {
         addOpenDatabaseConnection(*m_versionChangeDatabaseConnection);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to