<!DOCTYPE html>
<meta charset=utf-8>
<title>Upgrade transaction deactivation timing</title>
<link rel="help" href="http://localhost:4201/#upgrade-transaction-steps">
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src=support.js></script>
<script>

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');

</script>
