tor-browser

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

idbversionchangeevent.any.js (2817B)


      1 // META: title=IDBVersionChangeEvent
      2 // META: global=window,worker
      3 // META: script=resources/support.js
      4 
      5 // Spec: https://w3c.github.io/IndexedDB/#events
      6 
      7 'use strict';
      8 
      9 async_test(t => {
     10  let db;
     11  const dbname = location + '-' + t.name;
     12 
     13  indexedDB.deleteDatabase(dbname);
     14 
     15  const openrq = indexedDB.open(dbname, 3);
     16 
     17  openrq.onupgradeneeded = t.step_func((e) => {
     18    assert_equals(e.oldVersion, 0, 'old version (upgradeneeded)');
     19    assert_equals(e.newVersion, 3, 'new version (upgradeneeded)');
     20    assert_true(
     21        e instanceof IDBVersionChangeEvent,
     22        'upgradeneeded instanceof IDBVersionChangeEvent');
     23  });
     24 
     25  openrq.onsuccess = t.step_func((e) => {
     26    db = e.target.result;
     27 
     28    db.onversionchange = t.step_func((e) => {
     29      assert_equals(e.oldVersion, 3, 'old version (versionchange)');
     30      assert_equals(e.newVersion, null, 'new version (versionchange)');
     31      assert_true(
     32          e instanceof IDBVersionChangeEvent,
     33          'versionchange instanceof IDBVersionChangeEvent');
     34      db.close();
     35    });
     36 
     37    // Errors
     38    db.onerror = fail(t, 'db.error');
     39    db.onabort = fail(t, 'db.abort');
     40 
     41    setTimeout(t.step_func(deleteDB), 10);
     42  });
     43 
     44  // Errors
     45  openrq.onerror = fail(t, 'open.error');
     46  openrq.onblocked = fail(t, 'open.blocked');
     47 
     48  function deleteDB(e) {
     49    const deleterq = indexedDB.deleteDatabase(dbname);
     50 
     51    deleterq.onsuccess = t.step_func((e) => {
     52      assert_equals(
     53          e.result, undefined, 'result (delete.success for nonexistent db)');
     54      assert_equals(e.oldVersion, 3, 'old version (delete.success)');
     55      assert_equals(e.newVersion, null, 'new version (delete.success)');
     56      assert_true(
     57          e instanceof IDBVersionChangeEvent,
     58          'delete.success instanceof IDBVersionChangeEvent');
     59 
     60      setTimeout(deleteNonExistentDB, 10);
     61    });
     62 
     63    // Errors
     64    deleterq.onerror = fail(t, 'delete.error');
     65    deleterq.onblocked = fail(t, 'delete.blocked');
     66  }
     67 
     68  function deleteNonExistentDB(e) {
     69    const deleterq = indexedDB.deleteDatabase('db-does-not-exist');
     70 
     71    deleterq.onsuccess = t.step_func((e) => {
     72      assert_equals(
     73          e.result, undefined, 'result (delete.success for nonexistent db)');
     74      assert_equals(
     75          e.oldVersion, 0, 'old version (delete.success for nonexistent db)');
     76      assert_equals(
     77          e.newVersion, null,
     78          'new version (delete.success for nonexistent db)');
     79      assert_true(
     80          e instanceof IDBVersionChangeEvent,
     81          'delete.success instanceof IDBVersionChangeEvent');
     82 
     83      setTimeout(function() {
     84        t.done();
     85      }, 10);
     86    });
     87 
     88    // Errors
     89    deleterq.onerror = fail(t, 'delete.error');
     90    deleterq.onblocked = fail(t, 'delete.blocked');
     91  }
     92 }, 'IDBVersionChangeEvent fired in upgradeneeded, versionchange and deleteDatabase');