tor-browser

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

fire-success-event-exception.any.js (2383B)


      1 // META: global=window,worker
      2 // META: title=Fire success event - Exception thrown
      3 // META: script=resources/support.js
      4 
      5 // Spec: "https://w3c.github.io/IndexedDB/#fire-success-event"
      6 
      7 'use strict';
      8 
      9 setup({allow_uncaught_exception: true});
     10 
     11 function fire_success_event_test(func, description) {
     12  indexeddb_test(
     13      (t, db) => {
     14        db.createObjectStore('s');
     15      },
     16      (t, db) => {
     17        const tx = db.transaction('s', 'readonly');
     18        tx.oncomplete = t.unreached_func('transaction should abort');
     19        const store = tx.objectStore('s');
     20        const request = store.get(0);
     21        func(t, db, tx, request);
     22        tx.addEventListener('abort', t.step_func_done(() => {
     23          assert_equals(tx.error.name, 'AbortError');
     24        }));
     25      },
     26      description);
     27 }
     28 
     29 fire_success_event_test((t, db, tx, request) => {
     30  request.onsuccess = () => {
     31    throw Error();
     32  };
     33 }, 'Exception in success event handler on request');
     34 
     35 fire_success_event_test((t, db, tx, request) => {
     36  request.addEventListener('success', () => {
     37    throw Error();
     38  });
     39 }, 'Exception in success event listener on request');
     40 
     41 fire_success_event_test((t, db, tx, request) => {
     42  request.addEventListener('success', {
     43    get handleEvent() {
     44      throw new Error();
     45    },
     46  });
     47 }, 'Exception in success event listener ("handleEvent" lookup) on request');
     48 
     49 fire_success_event_test((t, db, tx, request) => {
     50  request.addEventListener('success', {
     51    handleEvent: null,
     52  });
     53 }, 'Exception in success event listener (non-callable "handleEvent") on request');
     54 
     55 fire_success_event_test((t, db, tx, request) => {
     56  request.addEventListener(
     57      'success',
     58      () => {
     59          // no-op
     60      });
     61  request.addEventListener('success', () => {
     62    throw Error();
     63  });
     64 }, 'Exception in second success event listener on request');
     65 
     66 fire_success_event_test((t, db, tx, request) => {
     67  let second_listener_called = false;
     68  request.addEventListener('success', () => {
     69    throw Error();
     70  });
     71  request.addEventListener('success', t.step_func(() => {
     72    second_listener_called = true;
     73    assert_true(
     74        is_transaction_active(tx, 's'),
     75        'Transaction should be active until dispatch completes');
     76  }));
     77  tx.addEventListener('abort', t.step_func(() => {
     78    assert_true(second_listener_called);
     79  }));
     80 }, 'Exception in first success event listener, tx active in second');