tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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