tor-browser

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

transaction_bubble-and-capture.any.js (1983B)


      1 // META: title=IndexedDB Transaction Event Bubbling and Capturing
      2 // META: global=window,worker
      3 // META: script=resources/support.js
      4 
      5 'use strict';
      6 
      7 async_test(t => {
      8  let events = [];
      9  let open_rq = createdb(t);
     10  open_rq.onupgradeneeded = function(e) {
     11    let db = e.target.result;
     12    let txn = e.target.transaction;
     13    let store = db.createObjectStore('store');
     14    let rq1 = store.add('', 1);
     15    let rq2 = store.add('', 1);
     16 
     17    // We will run db.error, but don't let that fail the test
     18    db.onerror = undefined;
     19 
     20    log_events('db', db, 'success');
     21    log_events('db', db, 'error');
     22 
     23    log_events('txn', txn, 'success');
     24    log_events('txn', txn, 'error');
     25 
     26    log_events('rq1', rq1, 'success');
     27    log_events('rq1', rq1, 'error');
     28 
     29    log_events('rq2', rq2, 'success');
     30    log_events('rq2', rq2, 'error');
     31 
     32    // Don't let it get to abort
     33    db.addEventListener('error', function(e) {
     34      e.preventDefault();
     35    }, false);
     36  };
     37 
     38  open_rq.onsuccess = function(e) {
     39    log('open_rq.success')(e);
     40    assert_array_equals(
     41        events,
     42        [
     43          'capture db.success',
     44          'capture txn.success',
     45          'capture rq1.success',
     46          'bubble  rq1.success',
     47 
     48          'capture db.error: ConstraintError',
     49          'capture txn.error: ConstraintError',
     50          'capture rq2.error: ConstraintError',
     51          'bubble  rq2.error: ConstraintError',
     52          'bubble  txn.error: ConstraintError',
     53          'bubble  db.error: ConstraintError',
     54 
     55          'open_rq.success',
     56        ],
     57        'events');
     58    t.done();
     59  };
     60  function log_events(type, obj, evt) {
     61    obj.addEventListener(evt, log('capture ' + type + '.' + evt), true);
     62    obj.addEventListener(evt, log('bubble  ' + type + '.' + evt), false);
     63  }
     64 
     65  function log(msg) {
     66    return function(e) {
     67      if (e && e.target && e.target.error)
     68        events.push(msg + ': ' + e.target.error.name);
     69      else
     70        events.push(msg);
     71    };
     72  }
     73 }, 'Capture and bubble');