upgrade-transaction-deactivation-timing.any.js (1516B)
1 // META: title=Upgrade transaction deactivation timing 2 // META: global=window,worker 3 // META: script=resources/support.js 4 // META: script=resources/support-promises.js 5 6 // Spec: "https://w3c.github.io/IndexedDB/#upgrade-transaction-steps" 7 8 'use strict'; 9 10 indexeddb_test( 11 (t, db, tx) => { 12 db.createObjectStore('store'); 13 assert_true(is_transaction_active(tx, 'store'), 14 'Transaction should be active in upgradeneeded callback'); 15 }, 16 (t, db) => { t.done(); }, 17 'Upgrade transactions are active in upgradeneeded callback'); 18 19 indexeddb_test( 20 (t, db, tx) => { 21 db.createObjectStore('store'); 22 assert_true(is_transaction_active(tx, 'store'), 23 'Transaction should be active in upgradeneeded callback'); 24 25 Promise.resolve().then(t.step_func(() => { 26 assert_true(is_transaction_active(tx, 'store'), 27 'Transaction should be active in microtask checkpoint'); 28 })); 29 }, 30 (t, db) => { t.done(); }, 31 'Upgrade transactions are active in upgradeneeded callback and microtasks'); 32 33 34 indexeddb_test( 35 (t, db, tx) => { 36 db.createObjectStore('store'); 37 const release_tx = keep_alive(tx, 'store'); 38 39 setTimeout(t.step_func(() => { 40 assert_false(is_transaction_active(tx, 'store'), 41 'Transaction should be inactive in next task'); 42 release_tx(); 43 }), 0); 44 }, 45 (t, db) => { t.done(); }, 46 'Upgrade transactions are deactivated before next task');