tor-browser

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

idb-partitioned-coverage-iframe.html (12150B)


      1 <!doctype html>
      2 <meta charset=utf-8>
      3 <script src="/resources/testharness.js"></script>
      4 <script src="support.js"></script>
      5 <!-- TODO(crbug.com/1218100): We should verify the full IDB surface area inside
      6 an iframe, but for now a single test with an assortment of verifications is
      7 sufficient to test third party storage partitioning didn't break anything. -->
      8 
      9 <!-- This block is from delete-request-queue.htm -->
     10 <script>
     11 let saw;
     12 indexeddb_test(
     13    (t, db) => {
     14        saw = expect(t, ['delete1', 'delete2']);
     15        let r = indexedDB.deleteDatabase(db.name);
     16        r.onerror = t.unreached_func('delete should succeed');
     17        r.onsuccess = t.step_func(e => saw('delete1'));
     18    },
     19    (t, db) => {
     20        let r = indexedDB.deleteDatabase(db.name);
     21        r.onerror = t.unreached_func('delete should succeed');
     22        r.onsuccess = t.step_func(e => saw('delete2'));
     23 
     24        db.close();
     25    },
     26    'Deletes are processed in order');
     27 </script>
     28 
     29 <!-- This block is from idbcursor-advance-continue-async.htm -->
     30 <script>
     31 function upgrade_func(t, db, tx) {
     32  var objStore = db.createObjectStore("test");
     33  objStore.createIndex("index", "");
     34 
     35  objStore.add("data",  1);
     36  objStore.add("data2", 2);
     37 }
     38 
     39 indexeddb_test(
     40  upgrade_func,
     41  function(t, db) {
     42    var count = 0;
     43    var rq = db.transaction("test", "readonly").objectStore("test").openCursor();
     44 
     45    rq.onsuccess = t.step_func(function(e) {
     46      if (!e.target.result) {
     47        assert_equals(count, 2, 'count');
     48        t.done();
     49        return;
     50      }
     51      var cursor = e.target.result;
     52 
     53      switch(count) {
     54        case 0:
     55          assert_equals(cursor.value, "data")
     56          assert_equals(cursor.key, 1)
     57          cursor.advance(1)
     58          assert_equals(cursor.value, "data")
     59          assert_equals(cursor.key, 1)
     60          break
     61 
     62        case 1:
     63          assert_equals(cursor.value, "data2")
     64          assert_equals(cursor.key, 2)
     65          cursor.advance(1)
     66          assert_equals(cursor.value, "data2")
     67          assert_equals(cursor.key, 2)
     68          break
     69 
     70        default:
     71          assert_unreached("Unexpected count: " + count)
     72      }
     73 
     74      count++;
     75    });
     76    rq.onerror = t.unreached_func("unexpected error")
     77  },
     78  document.title + " - advance"
     79 );
     80 
     81 indexeddb_test(
     82  upgrade_func,
     83  function(t, db) {
     84    var count = 0;
     85    var rq = db.transaction("test", "readonly").objectStore("test").index("index").openCursor();
     86 
     87    rq.onsuccess = t.step_func(function(e) {
     88      if (!e.target.result) {
     89        assert_equals(count, 2, 'count');
     90        t.done();
     91        return;
     92      }
     93      var cursor = e.target.result;
     94 
     95      switch(count) {
     96        case 0:
     97          assert_equals(cursor.value, "data")
     98          assert_equals(cursor.key,   "data")
     99          assert_equals(cursor.primaryKey, 1)
    100          cursor.continue("data2")
    101          assert_equals(cursor.value, "data")
    102          assert_equals(cursor.key,   "data")
    103          assert_equals(cursor.primaryKey, 1)
    104          break
    105 
    106        case 1:
    107          assert_equals(cursor.value, "data2")
    108          assert_equals(cursor.key,   "data2")
    109          assert_equals(cursor.primaryKey, 2)
    110          cursor.continue()
    111          assert_equals(cursor.value, "data2")
    112          assert_equals(cursor.key,   "data2")
    113          assert_equals(cursor.primaryKey, 2)
    114          break
    115 
    116        default:
    117          assert_unreached("Unexpected count: " + count)
    118      }
    119 
    120      count++;
    121    });
    122    rq.onerror = t.unreached_func("unexpected error")
    123  },
    124  document.title + " - continue"
    125 );
    126 
    127 indexeddb_test(
    128  upgrade_func,
    129  function(t, db) {
    130    var count = 0;
    131    var rq = db.transaction("test", "readonly").objectStore("test").index("index").openCursor();
    132 
    133    rq.onsuccess = t.step_func(function(e) {
    134      if (!e.target.result) {
    135        assert_equals(count, 2, 'count');
    136        t.done();
    137        return;
    138      }
    139      var cursor = e.target.result;
    140      cursor.advance(1)
    141 
    142      switch(count) {
    143        case 0:
    144          assert_equals(cursor.value, "data")
    145          assert_equals(cursor.key,   "data")
    146          assert_equals(cursor.primaryKey, 1)
    147          break
    148 
    149        case 1:
    150          assert_equals(cursor.value, "data2")
    151          assert_equals(cursor.key,   "data2")
    152          assert_equals(cursor.primaryKey, 2)
    153          break
    154 
    155        default:
    156          assert_unreached("Unexpected count: " + count)
    157      }
    158 
    159      count++;
    160    });
    161    rq.onerror = t.unreached_func("unexpected error")
    162  },
    163  document.title + " - fresh advance still async"
    164 );
    165 
    166 indexeddb_test(
    167  upgrade_func,
    168  function(t, db) {
    169    var count = 0;
    170    var rq = db.transaction("test", "readonly").objectStore("test").openCursor();
    171 
    172    rq.onsuccess = t.step_func(function(e) {
    173      if (!e.target.result) {
    174        assert_equals(count, 2, 'count');
    175        t.done();
    176        return;
    177      }
    178      var cursor = e.target.result;
    179      cursor.continue()
    180 
    181      switch(count) {
    182        case 0:
    183          assert_equals(cursor.value, "data")
    184          assert_equals(cursor.key, 1)
    185          break
    186 
    187        case 1:
    188          assert_equals(cursor.value, "data2")
    189          assert_equals(cursor.key, 2)
    190          break
    191 
    192        default:
    193          assert_unreached("Unexpected count: " + count)
    194      }
    195 
    196      count++;
    197    });
    198    rq.onerror = t.unreached_func("unexpected error")
    199  },
    200  document.title + " - fresh continue still async"
    201 );
    202 </script>
    203 <script src="nested-cloning-common.js"></script>
    204 <script src="support-get-all.js"></script>
    205 <script src="support-promises.js"></script>
    206 <!-- Run the `IDBIndex::getAll()` tests. -->
    207 <script src="/IndexedDB/idbindex_getAll.any.js"></script>
    208 
    209 <!-- This block is from idbobjectstore_openKeyCursor.htm -->
    210 <script>
    211 function store_test(func, name) {
    212  indexeddb_test(
    213    function(t, db, tx) {
    214      var store = db.createObjectStore("store");
    215      for (var i = 0; i < 10; ++i) {
    216        store.put("value: " + i, i);
    217      }
    218    },
    219    function(t, db) {
    220      var tx = db.transaction("store", "readonly");
    221      var store = tx.objectStore("store");
    222      func(t, db, tx, store);
    223    }, name);
    224 }
    225 
    226 store_test(function(t, db, tx, store) {
    227    var expected = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    228    var actual = [];
    229    var request = store.openKeyCursor();
    230    request.onsuccess = t.step_func(function() {
    231        var cursor = request.result;
    232        if (!cursor)
    233            return;
    234        assert_equals(cursor.direction, "next");
    235        assert_false("value" in cursor);
    236        assert_equals(indexedDB.cmp(cursor.key, cursor.primaryKey), 0);
    237        actual.push(cursor.key);
    238        cursor.continue();
    239    });
    240 
    241    tx.onabort = t.unreached_func("transaction aborted");
    242    tx.oncomplete = t.step_func(function() {
    243        assert_array_equals(expected, actual, "keys should match");
    244        t.done();
    245    });
    246 
    247 }, "IDBObjectStore.openKeyCursor() - forward iteration");
    248 
    249 store_test(function(t, db, tx, store) {
    250    var expected = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0];
    251    var actual = [];
    252    var request = store.openKeyCursor(null, "prev");
    253    request.onsuccess = t.step_func(function() {
    254        var cursor = request.result;
    255        if (!cursor)
    256            return;
    257        assert_equals(cursor.direction, "prev");
    258        assert_false("value" in cursor);
    259        assert_equals(indexedDB.cmp(cursor.key, cursor.primaryKey), 0);
    260        actual.push(cursor.key);
    261        cursor.continue();
    262    });
    263 
    264    tx.onabort = t.unreached_func("transaction aborted");
    265    tx.oncomplete = t.step_func(function() {
    266        assert_array_equals(expected, actual, "keys should match");
    267        t.done();
    268    });
    269 
    270 }, "IDBObjectStore.openKeyCursor() - reverse iteration");
    271 
    272 store_test(function(t, db, tx, store) {
    273    var expected = [4, 5, 6];
    274    var actual = [];
    275    var request = store.openKeyCursor(IDBKeyRange.bound(4, 6));
    276    request.onsuccess = t.step_func(function() {
    277        var cursor = request.result;
    278        if (!cursor)
    279            return;
    280        assert_equals(cursor.direction, "next");
    281        assert_false("value" in cursor);
    282        assert_equals(indexedDB.cmp(cursor.key, cursor.primaryKey), 0);
    283        actual.push(cursor.key);
    284        cursor.continue();
    285    });
    286 
    287    tx.onabort = t.unreached_func("transaction aborted");
    288    tx.oncomplete = t.step_func(function() {
    289        assert_array_equals(expected, actual, "keys should match");
    290        t.done();
    291    });
    292 
    293 }, "IDBObjectStore.openKeyCursor() - forward iteration with range");
    294 
    295 store_test(function(t, db, tx, store) {
    296    var expected = [6, 5, 4];
    297    var actual = [];
    298    var request = store.openKeyCursor(IDBKeyRange.bound(4, 6), "prev");
    299    request.onsuccess = t.step_func(function() {
    300        var cursor = request.result;
    301        if (!cursor)
    302            return;
    303        assert_equals(cursor.direction, "prev");
    304        assert_false("value" in cursor);
    305        assert_equals(indexedDB.cmp(cursor.key, cursor.primaryKey), 0);
    306        actual.push(cursor.key);
    307        cursor.continue();
    308    });
    309 
    310    tx.onabort = t.unreached_func("transaction aborted");
    311    tx.oncomplete = t.step_func(function() {
    312        assert_array_equals(expected, actual, "keys should match");
    313        t.done();
    314    });
    315 
    316 }, "IDBObjectStore.openKeyCursor() - reverse iteration with range");
    317 
    318 store_test(function(t, db, tx, store) {
    319    assert_throws_dom("DataError", function() { store.openKeyCursor(NaN); },
    320        "openKeyCursor should throw on invalid number key");
    321    assert_throws_dom("DataError", function() { store.openKeyCursor(new Date(NaN)); },
    322        "openKeyCursor should throw on invalid date key");
    323    assert_throws_dom("DataError", function() {
    324        var cycle = [];
    325        cycle.push(cycle);
    326        store.openKeyCursor(cycle);
    327    }, "openKeyCursor should throw on invalid array key");
    328    assert_throws_dom("DataError", function() { store.openKeyCursor({}); },
    329        "openKeyCursor should throw on invalid key type");
    330    setTimeout(t.step_func(function() {
    331        assert_throws_dom("TransactionInactiveError", function() { store.openKeyCursor(); },
    332            "openKeyCursor should throw if transaction is inactive");
    333        t.done();
    334    }), 0);
    335 
    336 }, "IDBObjectStore.openKeyCursor() - invalid inputs");
    337 </script>
    338 
    339 <!-- This block is from idbtransaction.htm -->
    340 <script>
    341 async_test(function(t) {
    342    var dbname = "idbtransaction-" + document.location + t.name;
    343    indexedDB.deleteDatabase(dbname);
    344    var open_rq = indexedDB.open(dbname);
    345 
    346    open_rq.onblocked = t.unreached_func('open_rq.onblocked');
    347    open_rq.onerror = t.unreached_func('open_rq.onerror');
    348 
    349    open_rq.onupgradeneeded = t.step_func(function(e) {
    350    t.add_cleanup(function() {
    351        open_rq.onerror = function(e) {
    352        e.preventDefault();
    353        };
    354        open_rq.result.close();
    355        indexedDB.deleteDatabase(open_rq.result.name);
    356    });
    357 
    358    assert_equals(e.target, open_rq, "e.target is reusing the same IDBOpenDBRequest");
    359    assert_equals(e.target.transaction, open_rq.transaction, "IDBOpenDBRequest.transaction");
    360 
    361    assert_true(e.target.transaction instanceof IDBTransaction, "transaction instanceof IDBTransaction");
    362    t.done();
    363    });
    364 
    365 }, document.title + " - request gotten by the handler");
    366 
    367 async_test(function(t) {
    368    var dbname = "idbtransaction-" + document.location + t.name;
    369    indexedDB.deleteDatabase(dbname);
    370    var open_rq = indexedDB.open(dbname);
    371 
    372    assert_equals(open_rq.transaction, null, "IDBOpenDBRequest.transaction");
    373    assert_equals(open_rq.source, null, "IDBOpenDBRequest.source");
    374    assert_equals(open_rq.readyState, "pending", "IDBOpenDBRequest.readyState");
    375 
    376    assert_true(open_rq instanceof IDBOpenDBRequest, "open_rq instanceof IDBOpenDBRequest");
    377    assert_equals(open_rq + "", "[object IDBOpenDBRequest]", "IDBOpenDBRequest (open_rq)");
    378 
    379    open_rq.onblocked = t.unreached_func('open_rq.onblocked');
    380    open_rq.onerror = t.unreached_func('open_rq.onerror');
    381 
    382    open_rq.onupgradeneeded = t.step_func(function() {
    383    t.add_cleanup(function() {
    384        open_rq.onerror = function(e) {
    385        e.preventDefault();
    386        };
    387        open_rq.result.close();
    388        indexedDB.deleteDatabase(open_rq.result.name);
    389    });
    390    t.done();
    391    });
    392 
    393 }, document.title + " - request returned by open()");
    394 </script>