tor-browser

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

transaction-create_in_versionchange.any.js (2283B)


      1 // META: title=IndexedDB Transaction Creation During Version Change
      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 events = [];
     10  let open_rq = createdb(t);
     11 
     12  open_rq.onupgradeneeded = function(e) {
     13    db = e.target.result
     14 
     15    db.createObjectStore('store')
     16        .add('versionchange1', 1)
     17        .addEventListener('success', log('versionchange_add.success'))
     18 
     19    assert_throws_dom('InvalidStateError', function() {
     20      db.transaction('store', 'readonly')
     21    })
     22 
     23    e.target.transaction.objectStore('store').count(2).addEventListener(
     24        'success', log('versionchange_count.success'))
     25 
     26    assert_throws_dom('InvalidStateError', function() {
     27      db.transaction('store', 'readwrite')
     28    })
     29 
     30    open_rq.transaction.objectStore('store')
     31        .add('versionchange2', 2)
     32        .addEventListener('success', log('versionchange_add2.success'))
     33 
     34    open_rq.transaction.oncomplete = function(e) {
     35      log('versionchange_txn.complete')(e)
     36 
     37      db.transaction('store', 'readonly')
     38          .objectStore('store')
     39          .count()
     40          .addEventListener('success', log('complete_count.success'))
     41    }
     42  };
     43 
     44  open_rq.onsuccess = function(e) {
     45    log('open_rq.success')(e)
     46 
     47    let txn = db.transaction('store', 'readwrite')
     48    txn.objectStore('store').put('woo', 1).addEventListener(
     49        'success', log('complete2_get.success'))
     50 
     51    txn.oncomplete = t.step_func(function(e) {
     52      assert_array_equals(
     53          events,
     54          [
     55            'versionchange_add.success: 1',
     56            'versionchange_count.success: 0',
     57            'versionchange_add2.success: 2',
     58            'versionchange_txn.complete',
     59            'open_rq.success: [object IDBDatabase]',
     60            'complete_count.success: 2',
     61            'complete2_get.success: 1',
     62          ],
     63          'events')
     64      t.done()
     65    })
     66  };
     67 
     68 
     69  function log(msg) {
     70    return function(e) {
     71      if (e && e.target && e.target.error)
     72        events.push(msg + ': ' + e.target.error.name)
     73        else if (e && e.target && e.target.result !== undefined)
     74        events.push(msg + ': ' + e.target.result)
     75        else events.push(msg)
     76    };
     77  }
     78 }, 'Attempt to create new transactions inside a versionchange transaction');