tor-browser

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

open-request-queue.any.js (1758B)


      1 // META: title=IndexedDB: open and delete request queues
      2 // META: global=window,worker
      3 // META: script=resources/support.js
      4 
      5 // Spec: https://w3c.github.io/IndexedDB/#connection-queues
      6 
      7 'use strict';
      8 
      9 async_test(t => {
     10  const db_name = 'db' + self.location.pathname + '-' + t.name;
     11  indexedDB.deleteDatabase(db_name);
     12 
     13  // Open and hold connection while other requests are queued up.
     14  const r = indexedDB.open(db_name, 1);
     15  r.onerror = t.unreached_func('open should succeed');
     16  r.onsuccess = t.step_func(e => {
     17    const db = r.result;
     18 
     19    const saw = expect(t, [
     20      'open1 success', 'open1 versionchange', 'delete1 blocked',
     21      'delete1 success', 'open2 success', 'open2 versionchange',
     22      'delete2 blocked', 'delete2 success'
     23    ]);
     24 
     25    function open(token, version) {
     26      const r = indexedDB.open(db_name, version);
     27      r.onsuccess = t.step_func(e => {
     28        saw(token + ' success');
     29        const db = r.result;
     30        db.onversionchange = t.step_func(e => {
     31          saw(token + ' versionchange');
     32          setTimeout(t.step_func(() => db.close()), 0);
     33        });
     34      });
     35      r.onblocked = t.step_func(e => saw(token + ' blocked'));
     36      r.onerror = t.unreached_func('open should succeed');
     37    }
     38 
     39    function deleteDatabase(token) {
     40      const r = indexedDB.deleteDatabase(db_name);
     41      r.onsuccess = t.step_func(e => saw(token + ' success'));
     42      r.onblocked = t.step_func(e => saw(token + ' blocked'));
     43      r.onerror = t.unreached_func('deleteDatabase should succeed');
     44    }
     45 
     46    open('open1', 2);
     47    deleteDatabase('delete1');
     48    open('open2', 3);
     49    deleteDatabase('delete2');
     50 
     51    // Now unblock the queue.
     52    db.close();
     53  });
     54 }, 'IndexedDB: open and delete requests are processed as a FIFO queue');