tor-browser

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

idbrequest-onupgradeneeded.any.js (4510B)


      1 // META: title=IDBRequest onupgradeneeded tests
      2 // META: global=window,worker
      3 
      4 'use strict';
      5 
      6 function upgradeneeded_test(
      7    upgrade_func, success_func, error_func, description) {
      8  async_test(function(t) {
      9    let dbName = 'db' + self.location.pathname + '-' + description;
     10    let delete_request = indexedDB.deleteDatabase(dbName);
     11    delete_request.onerror = t.unreached_func('deleteDatabase should not fail');
     12    delete_request.onsuccess = t.step_func(function() {
     13      let open_request = indexedDB.open(dbName);
     14 
     15      open_request.onupgradeneeded = t.step_func(function() {
     16        t.add_cleanup(function() {
     17          if (open_request.result) {
     18            open_request.result.close();
     19            indexedDB.deleteDatabase(dbName);
     20          }
     21        });
     22        upgrade_func(t, open_request);
     23      });
     24      open_request.onsuccess = t.step_func(function() {
     25        success_func(t, open_request);
     26      });
     27      if (error_func) {
     28        open_request.onerror = function() {
     29          error_func(t, open_request);
     30        };
     31      } else {
     32        open_request.onerror = t.unreached_func('open failed');
     33      }
     34    });
     35  }, description);
     36 }
     37 
     38 (function() {
     39 let order = [];
     40 upgradeneeded_test(
     41    function upgrade(t, request) {
     42      order.push('Upgrade');
     43      let db = request.result;
     44      let deleteRequest = indexedDB.deleteDatabase(db.name);
     45      deleteRequest.onsuccess = t.step_func(function() {
     46        assert_array_equals(order, ['Upgrade', 'Open Success']);
     47        t.done();
     48      });
     49      deleteRequest.onerror = t.unreached_func('delete failed');
     50    },
     51    function success(t, request) {
     52      let db = request.result;
     53      db.close();
     54      order.push('Open Success');
     55    },
     56    null, 'indexedDB.delete called from upgradeneeded handler');
     57 }());
     58 
     59 (function() {
     60 let order = [];
     61 upgradeneeded_test(
     62    function upgrade(t, request) {
     63      order.push('Upgrade');
     64      request.transaction.abort();
     65      order.push('Upgrade Transaction Aborted');
     66      let db = request.result;
     67      let deleteRequest = indexedDB.deleteDatabase(db.name);
     68      deleteRequest.onsuccess = t.step_func(function() {
     69        assert_array_equals(
     70            order, ['Upgrade', 'Upgrade Transaction Aborted', 'Open Error']);
     71        t.done();
     72      });
     73      deleteRequest.onerror = t.unreached_func('delete failed');
     74    },
     75    function success(t, request) {
     76      t.unreached_func('open should not succeed');
     77    },
     78    function error_func(t, request) {
     79      assert_array_equals(order, ['Upgrade', 'Upgrade Transaction Aborted']);
     80      order.push('Open Error');
     81    },
     82    'Abort transaction before deleting database in upgradeneeded handler');
     83 }());
     84 
     85 (function() {
     86 let order = [];
     87 upgradeneeded_test(
     88    function upgrade(t, request) {
     89      order.push('Upgrade');
     90      let db = request.result;
     91      let deleteRequest = indexedDB.deleteDatabase(db.name);
     92      request.transaction.abort();
     93      order.push('Upgrade Transaction Aborted');
     94      deleteRequest.onsuccess = t.step_func(function() {
     95        assert_array_equals(
     96            order, ['Upgrade', 'Upgrade Transaction Aborted', 'Open Error']);
     97        t.done();
     98      });
     99      deleteRequest.onerror = t.unreached_func('delete failed');
    100    },
    101    function success(t, request) {
    102      t.unreached_func('open should not succeed');
    103    },
    104    function error_func(t, request) {
    105      assert_array_equals(order, ['Upgrade', 'Upgrade Transaction Aborted']);
    106      order.push('Open Error');
    107    },
    108    'Abort transaction after deleting database in upgradeneeded event handler');
    109 }());
    110 
    111 (function() {
    112 let order = [];
    113 upgradeneeded_test(
    114    function upgrade(t, request) {
    115      order.push('Upgrade');
    116      let db = request.result;
    117      db.createObjectStore('store');
    118      request.transaction.oncomplete = t.step_func(function() {
    119        order.push('Upgrade transaction complete');
    120        let txn = db.transaction('store', 'readwrite');
    121        let store = txn.objectStore('store');
    122        store.put('value', 'key');
    123        txn.oncomplete = t.step_func(function() {
    124          assert_array_equals(
    125              order,
    126              ['Upgrade', 'Upgrade transaction complete', 'Open Success']);
    127          t.done();
    128        });
    129        txn.onerror = t.unreached_func('error on transaction');
    130        txn.onabort = t.unreached_func('aborting transaction');
    131      });
    132    },
    133    function success(t, request) {
    134      order.push('Open Success');
    135    },
    136    null, 'transaction oncomplete ordering relative to open request onsuccess');
    137 }());