| // META: title=Upgrade transaction deactivation timing |
| // META: global=window,worker |
| // META: script=resources/support.js |
| // META: script=resources/support-promises.js |
| |
| // Spec: "https://w3c.github.io/IndexedDB/#upgrade-transaction-steps" |
| |
| 'use strict'; |
| |
| indexeddb_test( |
| (t, db, tx) => { |
| db.createObjectStore('store'); |
| assert_true(is_transaction_active(tx, 'store'), |
| 'Transaction should be active in upgradeneeded callback'); |
| }, |
| (t, db) => { t.done(); }, |
| 'Upgrade transactions are active in upgradeneeded callback'); |
| |
| indexeddb_test( |
| (t, db, tx) => { |
| db.createObjectStore('store'); |
| assert_true(is_transaction_active(tx, 'store'), |
| 'Transaction should be active in upgradeneeded callback'); |
| |
| Promise.resolve().then(t.step_func(() => { |
| assert_true(is_transaction_active(tx, 'store'), |
| 'Transaction should be active in microtask checkpoint'); |
| })); |
| }, |
| (t, db) => { t.done(); }, |
| 'Upgrade transactions are active in upgradeneeded callback and microtasks'); |
| |
| |
| indexeddb_test( |
| (t, db, tx) => { |
| db.createObjectStore('store'); |
| const release_tx = keep_alive(tx, 'store'); |
| |
| setTimeout(t.step_func(() => { |
| assert_false(is_transaction_active(tx, 'store'), |
| 'Transaction should be inactive in next task'); |
| release_tx(); |
| }), 0); |
| }, |
| (t, db) => { t.done(); }, |
| 'Upgrade transactions are deactivated before next task'); |