transaction-lifetime.any.js (2541B)
1 // META: title=Event order when opening a second database when one connection is open already 2 // META: global=window,worker 3 // META: script=resources/support.js 4 5 'use strict'; 6 7 async function setupDatabase(t, dbname, version) { 8 indexedDB.deleteDatabase(dbname); 9 10 const openrq = indexedDB.open(dbname, version); 11 const eventWatcher = new EventWatcher( 12 t, openrq, ['upgradeneeded', 'error', 'blocked', 'success']); 13 14 let event = await eventWatcher.wait_for('upgradeneeded'); 15 const db = event.target.result; 16 db.createObjectStore('store'); 17 18 await eventWatcher.wait_for('success'); 19 return db; 20 } 21 22 promise_test(async t => { 23 const dbname = location + '-' + t.name; 24 const version = 3; 25 const db = await setupDatabase(t, dbname, version); 26 let db2; 27 28 t.add_cleanup(() => { 29 if (db2) 30 db2.close(); 31 if (db) 32 db.close(); 33 indexedDB.deleteDatabase(dbname); 34 }); 35 36 const dbWatcher = new EventWatcher(t, db, ['versionchange', 'close']); 37 const openrq2 = indexedDB.open(dbname, version + 1); 38 let versionChangeEvent = await dbWatcher.wait_for('versionchange'); 39 const openrq2Watcher = new EventWatcher( 40 t, openrq2, ['upgradeneeded', 'success', 'error', 'blocked']); 41 42 assert_equals(versionChangeEvent.oldVersion, version, 'old version'); 43 assert_equals(versionChangeEvent.newVersion, version + 1, 'new version'); 44 db.close(); 45 46 await openrq2Watcher.wait_for('upgradeneeded'); 47 48 let successEvent = await openrq2Watcher.wait_for('success'); 49 db2 = successEvent.target.result; 50 }, 'No Blocked event'); 51 52 promise_test(async t => { 53 const dbname = location + '-' + t.name; 54 const version = 3; 55 const db = await setupDatabase(t, dbname, version); 56 let db2; 57 58 t.add_cleanup(() => { 59 if (db2) 60 db2.close(); 61 if (db) 62 db.close(); 63 indexedDB.deleteDatabase(dbname); 64 }); 65 66 const dbWatcher = new EventWatcher(t, db, ['versionchange', 'close']); 67 const openrq2 = indexedDB.open(dbname, version + 1); 68 let versionChangeEvent = await dbWatcher.wait_for('versionchange'); 69 const openrq2Watcher = new EventWatcher( 70 t, openrq2, ['blocked', 'upgradeneeded', 'error', 'success']); 71 72 assert_equals(versionChangeEvent.oldVersion, version, 'old version'); 73 assert_equals(versionChangeEvent.newVersion, version + 1, 'new version'); 74 75 let blockedEvent = await openrq2Watcher.wait_for('blocked'); 76 db.close(); 77 78 await openrq2Watcher.wait_for('upgradeneeded'); 79 80 let successEvent = await openrq2Watcher.wait_for('success'); 81 db2 = successEvent.target.result; 82 }, 'Blocked event');