summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/IndexedDB/open-request-queue.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/IndexedDB/open-request-queue.html')
-rw-r--r--testing/web-platform/tests/IndexedDB/open-request-queue.html63
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>