tor-browser

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

request_bubble-and-capture.any.js (1974B)


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