tor-browser

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

indexedb-utils.js (1833B)


      1 const STORAGE_NAME = 'prerender_test';
      2 const INITIATOR_KEY = 'initiator';
      3 const INITIATOR_VALUE = INITIATOR_KEY + '_set';
      4 const PRERENDER_KEY = 'prerender';
      5 const PRERENDER_VALUE = PRERENDER_KEY + '_set';
      6 
      7 async function openIndexedDatabase(t) {
      8  return new Promise(resolve => {
      9    const request = window.indexedDB.open(STORAGE_NAME);
     10    if (t)
     11      t.add_cleanup(() => new Promise(resolve => {
     12        window.indexedDB.deleteDatabase(STORAGE_NAME);
     13        resolve();
     14      }));
     15    request.onupgradeneeded = e => {
     16      const db = e.target.result;
     17      const objectStore =
     18          db.createObjectStore(STORAGE_NAME, {autoIncrement: true});
     19      objectStore.createIndex('key', 'key', {unique: true});
     20    };
     21    request.onerror = e => {
     22      resolve(null);
     23    };
     24    request.onsuccess = e => {
     25      resolve(e.target.result);
     26    };
     27  });
     28 }
     29 
     30 async function addData(db, key, value) {
     31  return new Promise((resolve, reject) => {
     32    const transaction = db.transaction(STORAGE_NAME, 'readwrite');
     33    const request =
     34        transaction.objectStore(STORAGE_NAME).add({'key': key, 'value': value});
     35    // Use `transaction.oncomplete` rather than `request.onsuccess` to ensure
     36    // that IndexedDB has flushed to disk.
     37    transaction.oncomplete = e => {
     38      resolve(true);
     39    };
     40    transaction.onerror = e => {
     41      reject(e.target.error);
     42    };
     43  });
     44 }
     45 
     46 async function readData(db, key) {
     47  return new Promise((resolve, reject) => {
     48    const transaction = db.transaction(STORAGE_NAME);
     49    const request = transaction.objectStore(STORAGE_NAME).index('key').get(key);
     50    request.onsuccess = e => {
     51      if (e.target.result) {
     52        resolve(e.target.result.value);
     53      } else {
     54        reject(new Error('Empty result.'));
     55      }
     56    };
     57    request.onerror = e => {
     58      reject(e.target.error);
     59    };
     60  });
     61 }