// META: title=Event order when opening a second database when one connection is open already // META: global=window,worker // META: script=resources/support.js 'use strict'; async function setupDatabase(t, dbname, version) { indexedDB.deleteDatabase(dbname); const openrq = indexedDB.open(dbname, version); const eventWatcher = new EventWatcher( t, openrq, ['upgradeneeded', 'error', 'blocked', 'success']); let event = await eventWatcher.wait_for('upgradeneeded'); const db = event.target.result; db.createObjectStore('store'); await eventWatcher.wait_for('success'); return db; } promise_test(async t => { const dbname = location + '-' + t.name; const version = 3; const db = await setupDatabase(t, dbname, version); let db2; t.add_cleanup(() => { if (db2) db2.close(); if (db) db.close(); indexedDB.deleteDatabase(dbname); }); const dbWatcher = new EventWatcher(t, db, ['versionchange', 'close']); const openrq2 = indexedDB.open(dbname, version + 1); let versionChangeEvent = await dbWatcher.wait_for('versionchange'); const openrq2Watcher = new EventWatcher( t, openrq2, ['upgradeneeded', 'success', 'error', 'blocked']); assert_equals(versionChangeEvent.oldVersion, version, 'old version'); assert_equals(versionChangeEvent.newVersion, version + 1, 'new version'); db.close(); await openrq2Watcher.wait_for('upgradeneeded'); let successEvent = await openrq2Watcher.wait_for('success'); db2 = successEvent.target.result; }, 'No Blocked event'); promise_test(async t => { const dbname = location + '-' + t.name; const version = 3; const db = await setupDatabase(t, dbname, version); let db2; t.add_cleanup(() => { if (db2) db2.close(); if (db) db.close(); indexedDB.deleteDatabase(dbname); }); const dbWatcher = new EventWatcher(t, db, ['versionchange', 'close']); const openrq2 = indexedDB.open(dbname, version + 1); let versionChangeEvent = await dbWatcher.wait_for('versionchange'); const openrq2Watcher = new EventWatcher( t, openrq2, ['blocked', 'upgradeneeded', 'error', 'success']); assert_equals(versionChangeEvent.oldVersion, version, 'old version'); assert_equals(versionChangeEvent.newVersion, version + 1, 'new version'); let blockedEvent = await openrq2Watcher.wait_for('blocked'); db.close(); await openrq2Watcher.wait_for('upgradeneeded'); let successEvent = await openrq2Watcher.wait_for('success'); db2 = successEvent.target.result; }, 'Blocked event');