tor-browser

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

storage-secured-iframe.html (2560B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <!--
      4 Iframe for testing multiple host detetion in storage actor
      5 -->
      6 <head>
      7  <meta charset="utf-8">
      8 </head>
      9 <body>
     10 <script type="application/javascript">
     11 "use strict";
     12 document.cookie = "sc1=foobar;";
     13 localStorage.setItem("iframe-s-ls1", "foobar");
     14 sessionStorage.setItem("iframe-s-ss1", "foobar-2");
     15 
     16 const idbGenerator = async function () {
     17  let request = indexedDB.open("idb-s1", 1);
     18  request.onerror = function() {
     19    throw new Error("error opening db connection");
     20  };
     21  const db = await new Promise(done => {
     22    request.onupgradeneeded = event => {
     23      const dbResult = event.target.result;
     24      const store1 = dbResult.createObjectStore("obj-s1", { keyPath: "id" });
     25      store1.transaction.oncomplete = () => {
     26        done(dbResult);
     27      };
     28    };
     29  });
     30  await new Promise(done => {
     31    request.onsuccess = done;
     32  });
     33 
     34  let transaction = db.transaction(["obj-s1"], "readwrite");
     35  const store1 = transaction.objectStore("obj-s1");
     36  store1.add({id: 6, name: "foo", email: "foo@bar.com"});
     37  store1.add({id: 7, name: "foo2", email: "foo2@bar.com"});
     38  await new Promise(success => {
     39    transaction.oncomplete = success;
     40  });
     41 
     42  db.close();
     43 
     44  request = indexedDB.open("idb-s2", 1);
     45  const db2 = await new Promise(done => {
     46    request.onupgradeneeded = event => {
     47      const db2Result = event.target.result;
     48      const store3 =
     49        db2Result.createObjectStore("obj-s2", { keyPath: "id3", autoIncrement: true });
     50      store3.createIndex("name2", "name2", { unique: true });
     51      store3.transaction.oncomplete = () => {
     52        done(db2Result);
     53      };
     54    };
     55  });
     56  await new Promise(done => {
     57    request.onsuccess = done;
     58  });
     59 
     60  transaction = db2.transaction(["obj-s2"], "readwrite");
     61  const store3 = transaction.objectStore("obj-s2");
     62  store3.add({id3: 16, name2: "foo", email: "foo@bar.com"});
     63  await new Promise(success => {
     64    transaction.oncomplete = success;
     65  });
     66 
     67  db2.close();
     68  dump("added cookies and stuff from secured iframe\n");
     69 }
     70 
     71 function deleteDB(dbName) {
     72  return new Promise(resolve => {
     73    dump("removing database " + dbName + " from " + document.location + "\n");
     74    indexedDB.deleteDatabase(dbName).onsuccess = resolve;
     75  });
     76 }
     77 
     78 window.setup = async function () {
     79  await idbGenerator();
     80 };
     81 
     82 window.clear = async function () {
     83  document.cookie = "sc1=; expires=Thu, 01 Jan 1970 00:00:00 GMT";
     84 
     85  localStorage.clear();
     86 
     87  await deleteDB("idb-s1");
     88  await deleteDB("idb-s2");
     89 
     90  console.log("removed cookies and stuff from secured iframe");
     91 }
     92 </script>
     93 </body>
     94 </html>