tor-browser

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

fire-upgradeneeded-event-exception.any.js (2462B)


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