tor-browser

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

storage-empty-objectstores.html (2030B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <head>
      4  <meta charset="utf-8">
      5  <title>Test for proper listing indexedDB databases with no object stores</title>
      6 </head>
      7 <body>
      8 <script type="application/javascript">
      9 "use strict";
     10 window.setup = async function () {
     11  let request = indexedDB.open("idb1", 1);
     12  const db = await new Promise((resolve, reject) => {
     13    request.onerror = () => reject(Error("error opening db connection"));
     14    request.onupgradeneeded = event => {
     15      const _db = event.target.result;
     16      const store1 = _db.createObjectStore("obj1", { keyPath: "id" });
     17      store1.createIndex("name", "name", { unique: false });
     18      store1.createIndex("email", "email", { unique: true });
     19      _db.createObjectStore("obj2", { keyPath: "id2" });
     20      store1.transaction.oncomplete = () => resolve(_db);
     21    };
     22  });
     23 
     24  await new Promise(resolve => (request.onsuccess = resolve));
     25 
     26  const transaction = db.transaction(["obj1", "obj2"], "readwrite");
     27  const store1 = transaction.objectStore("obj1");
     28  const store2 = transaction.objectStore("obj2");
     29 
     30  store1.add({id: 1, name: "foo", email: "foo@bar.com"});
     31  store1.add({id: 2, name: "foo2", email: "foo2@bar.com"});
     32  store1.add({id: 3, name: "foo2", email: "foo3@bar.com"});
     33  store2.add({id2: 1, name: "foo", email: "foo@bar.com", extra: "baz"});
     34 
     35  await new Promise(resolve => (transaction.oncomplete = resolve));
     36 
     37  db.close();
     38 
     39  request = indexedDB.open("idb2", 1);
     40  const db2 = await new Promise((resolve, reject) => {
     41    request.onerror = () => reject(Error("error opening db2 connection"));
     42    request.onupgradeneeded = event => resolve(event.target.result);
     43  });
     44 
     45  await new Promise(resolve => (request.onsuccess = resolve));
     46 
     47  db2.close();
     48  dump("added indexedDB items from main page\n");
     49 };
     50 
     51 window.clear = async function () {
     52  for (const dbName of ["idb1", "idb2"]) {
     53    await new Promise(resolve => {
     54      indexedDB.deleteDatabase(dbName).onsuccess = resolve;
     55    });
     56  }
     57  dump("removed indexedDB items from main page\n");
     58 };
     59 
     60 </script>
     61 </body>
     62 </html>