1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
|
<!DOCTYPE HTML>
<html>
<!--
Storage inspector front end - tests
-->
<head>
<meta charset="utf-8">
<title>Storage inspector test for listing hosts and storages</title>
</head>
<body>
<iframe src="http://sectest1.example.org/browser/devtools/client/storage/test/storage-unsecured-iframe.html"></iframe>
<iframe src="https://sectest1.example.org:443/browser/devtools/client/storage/test/storage-secured-iframe.html"></iframe>
<script type="application/javascript">
"use strict";
const partialHostname = location.hostname.match(/^[^.]+(\..*)$/)[1];
const cookieExpiresTime1 = 2000000000000;
const cookieExpiresTime2 = 2000000001000;
// Setting up some cookies to eat.
document.cookie = "c1=foobar; expires=" +
new Date(cookieExpiresTime1).toGMTString() + "; path=/browser";
document.cookie = "cs2=sessionCookie; path=/; domain=" + partialHostname;
document.cookie = "c3=foobar-2; expires=" +
new Date(cookieExpiresTime1).toGMTString() + "; path=/";
document.cookie = "c4=foobar-3; expires=" +
new Date(cookieExpiresTime2).toGMTString() + "; path=/; domain=" +
partialHostname;
// ... and some local storage items ..
localStorage.setItem("ls1", "foobar");
localStorage.setItem("ls2", "foobar-2");
// Because localStorage contains key() on the prototype and it can't be iterated
// using object.keys() we check the the value "key" exists.
// See bug 1451991 for details.
localStorage.setItem("key", "value1");
// ... and finally some session storage items too
sessionStorage.setItem("ss1", "foobar-3");
// Because sessionStorage contains key() on the prototype and it can't be
// iterated using object.keys() we check the the value "key" exists.
// See bug 1451991 for details.
sessionStorage.setItem("key", "value2");
dump("added cookies and storage from main page\n");
const idbGenerator = async function () {
let request = indexedDB.open("idb1", 1);
request.onerror = function() {
throw new Error("error opening db connection");
};
const db = await new Promise(done => {
request.onupgradeneeded = event => {
const _db = event.target.result;
const store1 = _db.createObjectStore("obj1", { keyPath: "id" });
store1.createIndex("name", "name", { unique: false });
store1.createIndex("email", "email", { unique: true });
_db.createObjectStore("obj2", { keyPath: "id2" }); // eslint-disable-line no-unused-vars
store1.transaction.oncomplete = () => {
done(_db);
};
};
});
// Prevents AbortError
await new Promise(done => {
request.onsuccess = done;
});
const transaction = db.transaction(["obj1", "obj2"], "readwrite");
const store1 = transaction.objectStore("obj1");
const store2 = transaction.objectStore("obj2");
store1.add({id: 1, name: "foo", email: "foo@bar.com"});
store1.add({id: 2, name: "foo2", email: "foo2@bar.com"});
store1.add({id: 3, name: "foo2", email: "foo3@bar.com"});
store2.add({
id2: 1,
name: "foo",
email: "foo@bar.com",
extra: "baz"
});
// Prevents AbortError during close()
await new Promise(success => {
transaction.oncomplete = success;
});
db.close();
request = indexedDB.open("idb2", 1);
const db2 = await new Promise(done => {
request.onupgradeneeded = event => {
const _db2 = event.target.result;
const store3 = _db2.createObjectStore("obj3", { keyPath: "id3" });
store3.createIndex("name2", "name2", { unique: true });
store3.transaction.oncomplete = () => {
done(_db2);
}
};
});
// Prevents AbortError during close()
await new Promise(done => {
request.onsuccess = done;
});
db2.close();
dump("added indexedDB from main page\n");
};
function deleteDB(dbName) {
return new Promise(resolve => {
dump("removing database " + dbName + " from " + document.location + "\n");
indexedDB.deleteDatabase(dbName).onsuccess = resolve;
});
}
async function fetchPut(cache, url) {
const response = await fetch(url);
await cache.put(url, response);
}
const cacheGenerator = async function () {
const cache = await caches.open("plop");
await fetchPut(cache, "404_cached_file.js");
await fetchPut(cache, "browser_storage_basic.js");
};
window.setup = async function () {
await idbGenerator();
if (window.caches) {
await cacheGenerator();
}
};
window.clear = async function () {
await deleteDB("idb1");
await deleteDB("idb2");
if (window.caches) {
await caches.delete("plop");
}
dump("removed indexedDB and cache data from " + document.location + "\n");
};
</script>
</body>
</html>
|