Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
- This WPT test may be referenced by the following Test IDs:
- /IndexedDB/transaction-lifetime.any.html - WPT Dashboard Interop Dashboard
- /IndexedDB/transaction-lifetime.any.serviceworker.html - WPT Dashboard Interop Dashboard
- /IndexedDB/transaction-lifetime.any.sharedworker.html - WPT Dashboard Interop Dashboard
- /IndexedDB/transaction-lifetime.any.worker.html - WPT Dashboard Interop Dashboard
// 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');