tor-browser

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

transaction-requestqueue.any.js (2515B)


      1 // META: title=IndexedDB Transaction Request Queue Handling
      2 // META: global=window,worker
      3 // META: script=resources/support.js
      4 
      5 'use strict';
      6 
      7 async_test(t => {
      8  let db;
      9  let keys = {txn: [], txn2: []};
     10  let open_rq = createdb(t);
     11 
     12  open_rq.onupgradeneeded = function(e) {
     13    let i;
     14    let os;
     15    db = e.target.result;
     16 
     17    for (i = 1; i < 6; i++) {
     18      os = db.createObjectStore('os' + i, {autoIncrement: true, keyPath: 'k'});
     19      os.add({os: 'os' + i});
     20      os.put({os: 'os' + i, k: i});
     21      os.add({os: 'os' + i});
     22    }
     23  };
     24 
     25  open_rq.onsuccess = function(e) {
     26    let txn = db.transaction(['os2', 'os1', 'os3', 'os5'])
     27    txn.objectStore('os1').openCursor().onsuccess = reg('txn')
     28    txn.objectStore('os3').openCursor().onsuccess = reg('txn')
     29    txn.objectStore('os1').get(2).onsuccess = reg('txn')
     30    txn.objectStore('os2').get(3).onsuccess = reg('txn')
     31 
     32    let txn2 = db.transaction(['os4', 'os3', 'os1', 'os5'])
     33    let os4 = txn2.objectStore('os4')
     34 
     35    for (let i = 0; i < 3; i++) {
     36      os4.openCursor().onsuccess = reg('txn2')
     37      os4.get(5).onsuccess = reg('txn2')
     38      os4.get(4).onsuccess = reg('txn2')
     39      txn.objectStore('os2').get(1).onsuccess = reg('txn')
     40      txn2.objectStore('os3').get(1).onsuccess = reg('txn2')
     41    }
     42 
     43    txn2.objectStore('os1').get(2).onsuccess = reg('txn2')
     44    txn.objectStore('os1').openCursor(null, 'prev').onsuccess = reg('txn')
     45    os4.openCursor(null, 'prev').onsuccess = reg('txn2')
     46 
     47    txn.oncomplete = t.step_func(finish);
     48    txn2.oncomplete = t.step_func(finish);
     49  };
     50 
     51 
     52  function reg(n) {
     53    return t.step_func(function(e) {
     54      let v = e.target.result;
     55      if (v.value)
     56        v = v.value;
     57      keys[n].push(v.os + ': ' + v.k);
     58    });
     59  }
     60 
     61  let finish_to_go = 2;
     62  function finish() {
     63    if (--finish_to_go)
     64      return;
     65 
     66    assert_array_equals(
     67        keys['txn'],
     68        [
     69          'os1: 1',
     70          'os3: 1',
     71          'os1: 2',
     72          'os2: 3',
     73          'os2: 1',
     74          'os2: 1',
     75          'os2: 1',
     76          'os1: 2',
     77        ],
     78        'transaction keys');
     79 
     80    assert_array_equals(
     81        keys['txn2'],
     82        [
     83          'os4: 1',
     84          'os4: 5',
     85          'os4: 4',
     86          'os3: 1',
     87          'os4: 1',
     88          'os4: 5',
     89          'os4: 4',
     90          'os3: 1',
     91          'os4: 1',
     92          'os4: 5',
     93          'os4: 4',
     94          'os3: 1',
     95          'os1: 2',
     96          'os4: 5',
     97        ],
     98        'transaction 2 keys');
     99 
    100    t.done();
    101  }
    102 }, 'Transactions have a request queue');