diff options
Diffstat (limited to 'testing/web-platform/tests/IndexedDB/open-request-queue.html')
-rw-r--r-- | testing/web-platform/tests/IndexedDB/open-request-queue.html | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/testing/web-platform/tests/IndexedDB/open-request-queue.html b/testing/web-platform/tests/IndexedDB/open-request-queue.html new file mode 100644 index 0000000000..b4371f2a2e --- /dev/null +++ b/testing/web-platform/tests/IndexedDB/open-request-queue.html @@ -0,0 +1,63 @@ +<!doctype html> +<meta charset=utf-8> +<title>IndexedDB: open and delete requests are processed as a FIFO queue</title> +<link rel="help" href="https://w3c.github.io/IndexedDB/#request-connection-queue"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/support.js"></script> +<script> + +async_test(t => { + let db_name = 'db' + self.location.pathname + '-' + t.name; + indexedDB.deleteDatabase(db_name); + + // Open and hold connection while other requests are queued up. + let r = indexedDB.open(db_name, 1); + r.onerror = t.unreached_func('open should succeed'); + r.onsuccess = t.step_func(e => { + let db = r.result; + + let saw = expect(t, [ + 'open1 success', + 'open1 versionchange', + 'delete1 blocked', + 'delete1 success', + 'open2 success', + 'open2 versionchange', + 'delete2 blocked', + 'delete2 success' + ]); + + function open(token, version) { + let r = indexedDB.open(db_name, version); + r.onsuccess = t.step_func(e => { + saw(token + ' success'); + let db = r.result; + db.onversionchange = t.step_func(e => { + saw(token + ' versionchange'); + setTimeout(t.step_func(() => db.close()), 0); + }); + }); + r.onblocked = t.step_func(e => saw(token + ' blocked')); + r.onerror = t.unreached_func('open should succeed'); + } + + function deleteDatabase(token) { + let r = indexedDB.deleteDatabase(db_name); + r.onsuccess = t.step_func(e => saw(token + ' success')); + r.onblocked = t.step_func(e => saw(token + ' blocked')); + r.onerror = t.unreached_func('deleteDatabase should succeed'); + } + + open('open1', 2); + deleteDatabase('delete1'); + open('open2', 3); + deleteDatabase('delete2'); + + // Now unblock the queue. + db.close(); + }); + +}, 'Opens and deletes are processed in order'); + +</script> |