tor-browser

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

idbcursor-reused.any.js (1889B)


      1 // META: global=window,worker
      2 // META: title=IDBCursor is reused
      3 // META: script=resources/support.js
      4 
      5 // Spec: https://w3c.github.io/IndexedDB/#dom-idbcursor-continue
      6 
      7 'use strict';
      8 
      9 async_test(t => {
     10  let db;
     11  const open_rq = createdb(t);
     12 
     13  open_rq.onupgradeneeded = t.step_func(e => {
     14    db = e.target.result;
     15    const os = db.createObjectStore('test');
     16 
     17    os.add('data', 'k');
     18    os.add('data2', 'k2');
     19  });
     20 
     21  open_rq.onsuccess = t.step_func(e => {
     22    let cursor;
     23    let count = 0;
     24    const rq =
     25        db.transaction('test', 'readonly').objectStore('test').openCursor();
     26 
     27    rq.onsuccess = t.step_func(e => {
     28      switch (count) {
     29        case 0:
     30          cursor = e.target.result;
     31 
     32          assert_equals(cursor.value, 'data', 'prerequisite cursor.value');
     33          cursor.custom_cursor_value = 1;
     34          e.target.custom_request_value = 2;
     35 
     36          cursor.continue();
     37          break;
     38 
     39        case 1:
     40          assert_equals(cursor.value, 'data2', 'prerequisite cursor.value');
     41          assert_equals(cursor.custom_cursor_value, 1, 'custom cursor value');
     42          assert_equals(
     43              e.target.custom_request_value, 2, 'custom request value');
     44 
     45          cursor.advance(1);
     46          break;
     47 
     48        case 2:
     49          assert_false(!!e.target.result, 'got cursor');
     50          assert_equals(cursor.custom_cursor_value, 1, 'custom cursor value');
     51          assert_equals(
     52              e.target.custom_request_value, 2, 'custom request value');
     53          break;
     54      }
     55      count++;
     56    });
     57 
     58    rq.transaction.oncomplete = t.step_func(e => {
     59      assert_equals(count, 3, 'cursor callback runs');
     60      assert_equals(
     61          rq.custom_request_value, 2, 'variable placed on old IDBRequest');
     62      assert_equals(
     63          cursor.custom_cursor_value, 1,
     64          'custom cursor value (transaction.complete)');
     65      t.done();
     66    });
     67  });
     68 });